大一上學期C語言期末復習總結和模擬試題帶答案.doc
《大一上學期C語言期末復習總結和模擬試題帶答案.doc》由會員分享,可在線閱讀,更多相關《大一上學期C語言期末復習總結和模擬試題帶答案.doc(15頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、易錯點 C語言中易犯的錯誤對初學C語言的人來說,經(jīng)常會出一些連自己都不知道錯在哪里的錯誤.看著有錯的程序,不知該如何改起,一些C編程時常犯的錯誤,寫給各位學員以供參考. *1.書寫標識符時,忽略了大小寫字母的區(qū)別. main() int a=5; printf(%d,A); 編譯程序把a和A認為是兩個不同的變量名,而顯示出錯信息. C認為大寫字母和小寫字母是兩個不同的字符.習慣上,符號常量 名用大寫,變量名用小寫表示,以增加可讀性. *2.忽略了變量的類型,進行了不合法的運算. main() float a,b; printf(%d,a%b); %是求余運算,得到a/b的整余數(shù).整型變量a和b
2、可以進行求余 運算,而實型變量則不允許進行求余運算. *3.將字符常量與字符串常量混淆. char c; c=a; 在這里就混淆了字符常量與字符串常量,字符常量是由一對單 引號括起來的單個字符,字符串常量是一對雙引號括起來的字符序 列.C規(guī)定以作字符串結束標志,它是由系統(tǒng)自動加上的,所 以字符串a(chǎn)實際上包含兩個字符:a和,而把它賦給一 個字符變量是不行的. * 4.忽略了=與=的區(qū)別. 在許多高級語言中,用=符號作為關系運算符等于. 如在BASIC程序中可以寫 if (a=3) then 但C語言中,=是賦值運算符,=是關系運算符.如: if (a=3) a=b; 前者是進行比較,a是否和3相
3、等,后者表示如果a和3相等,把 b值賦給a.由于習慣問題,初學者往往會犯這樣的錯誤. * 5.忘記加分號. 分號是C語句中不可缺少的一部分,語句末尾必須有分號. a=1 b=2 編譯時,編譯程序在a=1后面沒發(fā)現(xiàn)分號,就把下一行b =2也作為上一行語句的一部分,這就會出現(xiàn)語法錯誤.改錯時, 有時在被指出有錯的一行中未發(fā)現(xiàn)錯誤,就需要看一下上一行是否 漏掉了分號. z=x+y; t=z/100; printf(%f,t); 對于復合語句來說,最后一個語句中最后的分號不能忽略不寫 * 6.多加分號. 對于一個復合語句,如: z=x+y; t=z/100; printf(%f,t); ; 復合語句的
4、花括號后不應再加分號,否則將會畫蛇添足. 又如: if (a%3=0); I+; 本是如果3整除a,則I加1.但由于if (a%3=0)后多加了分號 ,則if語句到此結束,程序將執(zhí)行I+語句,不論3是否整除a,I都 將自動加1. 再如: for (I=0;I5;I+); scanf(%d,&x); printf(%d,x); 本意是先后輸入5個數(shù),每輸入一個數(shù)后再將它輸出.由于for ()后多加了一個分號,使循環(huán)體變?yōu)榭照Z句,此時只能輸入一個數(shù) 并輸出它. *7.輸入變量時忘記加地址運算符&. int a,b; scanf(%d%d,a,b); 這是不合法的.Scanf函數(shù)的作用是:按照a,b
5、在內存的地址將a, b的值存進去.&a指a在內存中的地址. * 8.輸入數(shù)據(jù)的方式與要求不符. scanf(%d%d,&a,&b); 輸入時,不能用逗號作兩個數(shù)據(jù)間的分隔符,如下面輸入不合法: 3,4 輸入數(shù)據(jù)時,在兩個數(shù)據(jù)之間以一個或多個空格間隔,也可用回車 鍵,跳格鍵tab. scanf(%d,%d,&a,&b); C規(guī)定:如果在格式控制字符串中除了格式說明以外還有其它 字符,則在輸入數(shù)據(jù)時應輸入與這些字符相同的字符.下面輸入是 合法的: 3,4 此時不用逗號而用空格或其它字符是不對的. 3 4 3:4 又如: scanf(a=%d,b=%d,&a,&b); 輸入應如以下形式: a=3,b
6、=4 *9.輸入字符的格式與要求不一致. 在用%c格式輸入字符時,空格字符和轉義字符都作為 有效字符輸入. scanf(%c%c%c,&c1,&c2,&c3); 如輸入a b c 字符a送給c1,字符 送給c2,字符b送給c3,因為%c 只要求讀入一個字符,后面不需要用空格作為兩個字符的間隔. *10.輸入輸出的數(shù)據(jù)類型與所用格式說明符不一致. 例如,a已定義為整型,b定義為實型 a=3;b=4.5; printf(%f%dn,a,b); 編譯時不給出出錯信息,但運行結果將與原意不符.這種錯誤尤其 需要注意. *11.輸入數(shù)據(jù)時,企圖規(guī)定精度. scanf(%7.2f,&a); 這樣做是不合法
7、的,輸入數(shù)據(jù)時不能規(guī)定精度. *12.switch語句中漏寫break語句. 例如:根據(jù)考試成績的等級打印出百分制數(shù)段. switch(grade) case A:printf(85100n); case B:printf(7084n); case C:printf(6069n); case D:printf(60n); default:printf(errorn); 由于漏寫了break語句,case只起標號的作用,而不起判斷作用. 因此,當grade值為A時,printf函數(shù)在執(zhí)行完第一個語句后接著執(zhí) 行第二,三,四,五個printf函數(shù)語句.正確寫法應在每個分支后 再加上break;.例
8、如 case C:printf(6069n);break; *13.忽視了while和do-while語句在細節(jié)上的區(qū)別. (1)main() int a=0,I; scanf(%d,&I); while(I=10) a=a+I; I+; printf(%d,a); (2)main() int a=0,I; scanf(%d,&I); do a=a+I; I+; while(I10時,二者結果就不同了.因為while循環(huán)是先判斷后執(zhí)行 ,而do-while循環(huán)是先執(zhí)行后判斷.對于大于10的數(shù)while循環(huán)一 次也不執(zhí)行循環(huán)體,而do-while語句則要執(zhí)行一次循環(huán)體. *14.定義數(shù)組時誤用變
9、量. int n; scanf(%d,&n); int an; 數(shù)組名后用方括號括起來的是常量表達式,可以包括常量和符號常 量.即C不允許對數(shù)組的大小作動態(tài)定義. *15.在定義數(shù)組時,將定義的元素個數(shù)誤認為是可使的最大下 標值. main() static int a10=1,2,3,4,5,6,7,8,9,10; printf(%d,a10); C語言規(guī)定:定義時用a10,表示a數(shù)組有10個元素.其下標值由0 開始,所以數(shù)組元素a10是不存在的. * 16.初始化數(shù)組時,未使用靜態(tài)存儲. int a3=0,1,2; 這樣初始化數(shù)組是不對的.C語言規(guī)定只有靜態(tài)存儲(static)數(shù)組 和外部
10、存儲 (exterm)數(shù)組才能初始化.應改為: static int a3=0,1,2; * 17.在不應加地址運算符&的位置加了地址運算符. scanf(%s,&str); C語言編譯系統(tǒng)對數(shù)組名的處理是:數(shù)組名代表該數(shù)組的起始地址 ,且scanf函數(shù)中的輸入項是字符數(shù)組名,不必要再加地址符&.應 改為:scanf(%s,str); * 18.同時定義了形參和函數(shù)中的局部變量. int max(x,y) int x,y,z; z=xy?x:y; return(z); 形參應該在函數(shù)體外定義,而局部變量應該在函數(shù)體內定義.應改 為: int max(x,y) int x,y; int z; z
11、=xy?x:y; return(z); 試題一一、單項選擇題(共30分,每題1分)C1. 下列不正確的轉義字符是A. B. C.074 D.02. 不是C語言提供的合法關鍵字是A.switch B.cher C.case D.default3.正確的標識符是( )A.?a B.a=2 C.a.3 D.a_34.下列字符中屬于鍵盤符號的是A. B.n C.t D.b.下列數(shù)據(jù)中屬于“字符串常量”的A.ABC B.“ABC” C.ABC D.A6.char型常量在內存中存放的是A.ASCII碼 B.BCD碼 C.內碼值 D.十進制代碼值7.設a為5,執(zhí)行下列語句后,b的值不為2的是( )A.b=a
12、/2 B.b=6-(a) C.b=a%2 D.b=a3?2:28.在以下一組運算符中,優(yōu)先級最高的運算符是( )A.= B.= C.% D.&9.設整型變量i的值為3,則計算表達式ii后表達式的值是()A.0 B.1 C. 2 D.表達式出錯10.設整型變量a,b,c均為2,表達式a+b+c+的結果是( )A.6 B.9 C.8 D.表達式出錯11.若已定義x和y為double類型,則表達式x=1,y=x+3/2的值是( )A.1 B.2 C.2.0 D.2.512.設a=1,b=2,c=3,d=4,則表達式:ab?a:cd?a:d的結果是( )A.4 B.3 C.2 D.113.設a為整型變
13、量,不能正確表達數(shù)學關系:10a15的C語言表達式是()A.10a10&a15 D.!(a=15)14.若有以下定義:char a、 int b 、 float c 、 double d,則表達式a*b+d-c值的類型為()A.float B.int C.char D.double15.表達式“10!=9”的值是( )A.true B.非零值 C.0 D.116.循環(huán)語句 for (x=0,y=0; (y!=123)| (x4);x+);的循環(huán)執(zhí)行( )A.無限次 B.不確定次 C.4次 D.3次17.在C語言中,下列說法中正確的是( )A. 不能使用“do while”的循環(huán)B.“do wh
14、ile”的循環(huán)必須使用break語句退出循環(huán)C.“do while”的循環(huán)中,當條件為非0時將結束循環(huán)D.“do while”的循環(huán)中,當條件為0時將結束循環(huán)。18.設a,b為字符型變量,執(zhí)行scanf(“a=%c,b=%c”,&a,&b)后使a為A,b為B,從鍵盤上的正確輸入是( )A.A B B.A,B C.A=A,B=B D.a=A,b=B19.設i,j,k均為int型變量,執(zhí)行完下面的for循環(huán)后,k的值為( )for (i=0,j=10;i=j;i+,j)k=i+j;A.10 B.9 C.8 D.720.設有定義:char s12=“string”;則printf (“%dn”,st
15、rlen(s);的輸出是( )A.6 B.7 C.11 D.1221.合法的數(shù)組定義是()A.int a=“string”; B.int a5=0,1,2,3,4,5;C.char a=“string”; D.char a=0,1,2,3,4,522.函數(shù)調用strcat(strcpy(str1,str2),str3)的功能是()A. 將字符串str2復制到字符串str1中后再將字符串str3連接到字符串str1之后B. 將字符串str1復制到字符串str2中后再連接到字符串str3之后C. 將字符串str1復制到字符串str2中后再復制到字符串str3之后D. 將字符串str2連接到字符串s
16、tr1中后再將字符串str1復制到字符串str3中23.設有如下定義,則正確的敘述為( )char x=“abcdefg”;char y=a,b,c,d,e,f,g;A.數(shù)組x和數(shù)組y等價 B.數(shù)組x和數(shù)組y的長度相同C.數(shù)組x的長度大于數(shù)組y的長度 D.數(shù)組x的長度小于數(shù)組y的長度24.設有單精度變量f,其值為13.8.執(zhí)行語句“n=(int)f)%3;”后,n的值是()A.4 B.1 C.4.333333 D.4.625.執(zhí)行語句“f=(3.0,4.0,5.0),(2.0,1.0,0.0);”后,單精度變量f的值是( )A.3.0 B.5.0 C.2.0 D.0.026.設a、b均為整型變
17、量,下列表達式中不是賦值表達式的是( )A.a=3,4,5 B.a=3*2 C.a=a&b D.a=b=427.表達式“1?(0?3:2): (10?1:0)”的值為( )A.3 B.2 C.1 D.028.sizeof(double)的結果值是( )A.8 B.4 C.2 D.出錯29.指出下面正確的輸入語句是( )A.scanf (“a=b=%d”,&a,&b); B.scanf(“a=%d,b=%f”,&m,&f);C.scanf(“%3c”,c); D.scanf(“%5.2f,&f);30.若有以下定義和語句,且0=i5,則( )是對數(shù)組元素地址的正確表示int a=1,2,3,4,
18、5,*p,i;p=a;A.&(a+i) B.&p C.a+ D.&pi二、填空(20分,每空1分)1.在內存中存儲“A”要占用(2 )個字節(jié),存儲A要占用(1 )字節(jié)。2.符號常量的定義方法是(#define符號常量 常量 )。3.能表述“20 x30或x20 & x30) | x-100 )。4.結構化程序設計方法規(guī)定程序或程序段的結構有三種:順序結構、(分支結構 )和(循環(huán)結構 )。5.C語言共提供了三種用于實現(xiàn)循環(huán)結構的流程控制語句,它們是(while )、(do-while )和(for )。6.若在程序中用到“putchar”,應在程序開頭寫上包含命令(.#include “stdi
19、o.h” ),若在程序中用到“strlen()”函數(shù)時,應在程序開頭寫上包含命令(# include “string.h” )。7.設有定義語句“static int a34=1,2,3”,則a11值為( ),a21的值為( )。8.“*”稱為(指針運算符 )運算符,“&”稱為(地址運算符 )運算符。9.賦值表達式和賦值語句的區(qū)別在于有無(分號 )號。10.用把一些語句括起來稱為(.復合語句 )語句11.設a=12、b=24、c=36,對于“scanf (”a=%d,b=%d,c=%d“,&a,&b,&c);”,輸入形式應為(a=12,b=24,c=36 )12.表達式“sqrt(s*(s-a
20、)*(s-b)*(s-c);”對應的數(shù)學式子為( )13.C語言編繹系統(tǒng)在判斷一個量是否為“真”時,以0代表“假”,以(非0 )代表“真”三、讀程序(30分)1. main() int a=10,b=4,c=3;if (ab) a=b;if (a0;y)if (y%3= = 0) printf (“%d”,y);continue;3. main() int x,y;for (y=1,x=1;y=10) break;if (x%2= =1) x+=5;continue;x-=3; printf (“%d”,y)4. main() static int a3=9,7,5,3,1,2,4,6,8;i
21、nt i,j,s1=0,s2=0; i,j,s1=0,s2=0;for (i=0;i3;i+)for (j=0;j3;j+) if (i= =j )s1=s1+aij;if (i+j= =2) s2=s2+aij;printf (“%dn%dn”,s1,s2);5. main()static char a=*,*,*,*,*;int i,j,k;for (i=0;i5;i+)printf (“n”);for (j=0;ji;j+) printf (“%c”, );for (k=0;k5;k+) printf (“%c”,ak); 6. int fac(int n)static int f=1;
22、f=f*n; return(f);main()int i;for (i=1;i20 & x30) | x-1004.分支結構,循環(huán)結果5.while do for6.#include “stdio.h” # include “string.h”7.a11=0 , a21=08.* 指針運算符, &地址運算符9.分號;10.復合語句11.a=12,b=24,c=3613.非0三、讀程序(30分)1.結果:10,4,32.結果:8 5 23.64.18 105.*6.5!=120四、編寫程序(20分1.Main()int x,y;scanf (“%d”,&x);if (x=1) y=x; (x1&
23、x10) y=2*x-1;else y=3*x-11;printf (“x=%d,y=%dn”,x,y);bsp; 2.Main()float E;int n;s=0;E=1;試題二一、單項選擇題(每小題2分,共50分)1、一個C程序的執(zhí)行是從_A_。 A、本程序的main函數(shù)開始,到main函數(shù)結束 B、本程序的main函數(shù)開始,到本程序文件的最后一個函數(shù)結束 C、本程序文件的第一個函數(shù)開始,到本程序文件的最后一個函數(shù)結束 D、本程序文件的第一個函數(shù)開始,到本程序main函數(shù)結束2、C語言程序的基本單位是_C_。A、程序行 B、語句C、函數(shù) D、字符3、請選出可用作C語言用戶標識符的一組標識
24、符_B_。 A、void B、a3_b3 C、For D、2a define _123 -abc DO WORD IF ase sizeof4、假定x和y為double型,則表達式(x=2,y=x+5/2)的值是_C_ 。 A、4.500000 B、4 C、4.000000 D、2.0000005、下列可以正確表示字符型常量的是_D_。 A、297 B、a C、n D、t6、在C語言中,要求運算數(shù)必須是整型的運算符是_D_。 A、/ B、+ C、*= D、%7、C語言中,復合語句的構成是將一系列語句置于_C_。 A、begin與end之間 B、方框號“ ”之間 C、花括號“ ”之間 D、圓括號
25、“( )”之間8、有如下程序段,對應正確的數(shù)據(jù)輸入是_A_。float x,y;scanf(”%f%f”, &x,&y);printf(”a=%f,b=%f”, x,y);A、2.04 B、2.04,5.67 5.67C、A=2.04,B=5.67 D、2.045.679、以下程序段的輸出結果是_D_。 int a=5678; printf(”%2dn”, a); A、提示出錯、無結果 B、56 C、78 D、567810、已知:char ch=A;則下列表達式的值是_B_。 ch = (ch=A&ch=Z) ? (ch+32) : ch; A、A B、a C、Z D、z11、下列描述,正確的
26、是_B_ 。A、表達式3.91%5是合法的B、用b=89作為while循環(huán)的條件是合法的C、逗號表達式是沒有值和類型的D、字符型變量和int型變量的操作完全不同12、閱讀以下程序: main() int x; scanf(%d,&x); if(x-5) printf(%d,x); else printf(%d,x+); 程序運行后,如果從鍵盤上輸人5,則輸出結果是_B_ 。 A、3 B、 4 C、 5 D、 613、下列程序的運行結果是_C_。#include ”stdio.h”main() int k; k=3; switch(k) case 1: printf(”%dn”, k+); ca
27、se 2: printf(”%dn”, k+); case 3: printf(”%dn”, k+); case 4: printf(”%dn”, k+); break; default: printf(”Full!n”); A、3 B、4 C、3 D、4 4 414、設a、b、c、d、m、n均為int型變量,且a=5、b=6、c=7、d=8、 m=2、n=1,則邏輯表達式(m=ab)&(n=cd) 的值為_A_。 A、0 B、 1 C、2 D、 315、設x、y和temp均為long int型變量,則以下語句:temp=x; x=y; y=temp; 的功能是_D_。A、把x和y按從大到小排
28、列 B、把x和y按從小到大排列 C、無確定結果D、交換變量x和變量y的值 16、以下程序的輸出結果是 _A_ 。main() int a, b; for(a=1, b=1; a=10) break; if (b%3=1) b+=3; continue; printf(%dn,a); A、4 B、6 C、5 D、10117、執(zhí)行以下程序后輸出的結果是_D_。main() int y=10; do y-; while(-y); printf(%dn,y-); A、-1 B、1 C、8 D、018、執(zhí)行以下程序后輸出的結果是_B_。main() int i, j, w=0; for(i=4; i;
29、i-) for(j=1;j=2;j+) w=w+i*j; w=i*j; printf(%dn,w); A、4 B、0 C、1 D、3019、以下程序運行后,輸出結果是_C_。 main() int n5=3,3,3,i,k=2;for(i=0;ik;i+) ni=ni+1;printf(%dn,nk);A、4 B、9 C、3 D、不確定的值20、以下程序的輸出結果是 _A_ 。 f ( int a) int b=0; static int c = 3; b+; c+; return(a+b+c); main() int a = 2, i; for(i=0;i=0;i-) ai=10-i; pr
30、intf(%d %d %d,a1,a6,a9); A、1 6 9 B、9 4 1 C、9 6 1 D、3 5 723、若定義:float x=3.14159,*p=&x; 則printf(%fn,*p+);的輸出結果為_C_ 。 A、無確定值 B、x的地址 C、3.14159 D、4.1415924、以下程序的輸出結果是_B_ main()char b=Language; char *p=b; printf(%c ,*(b+2); p=p+7; printf(%cn,*p+);A、2 7 B、n e C、a g D、n u25、下列程序的輸出結果是_A_。#include stdio.hmai
31、n() int a=1,2,3,4,5,6,7,8,9,0, i, s, *p; p=a;s=0; for(i=0;i=9;i+) s+=*p+; printf(%dn, s);A、45 B、44 C、0 D、9二、判斷題(每小題1分,共10分)語句int *point;中的point是指針變量名。( T )主函數(shù)和其它函數(shù)之間可以相互調用。( F )puts( )和gets( )函數(shù)只能輸入或輸出一個字符。( F ). 可以對字符型數(shù)組元素進行整體輸入、輸出。( T )do-while語句構成的循環(huán)不能用其他語句構成的循環(huán)來代替。( F )在一個函數(shù)內的復合語句中定義的變量可以在本函數(shù)范圍內
32、有效。(F )函數(shù)必須有返回值,否則不能使用函數(shù)。( F )for(;);語句相當于while(1);語句。( T )C程序的執(zhí)行總是從第一個定義的函數(shù)開始。( F ) 10C語言中的關鍵字專門用作語言的特定成分,而不能作為一般標識符使用。( T )三、程序填空題(每空2分,共10分)1、下面程序完成判斷某一個數(shù)m是否為素數(shù),如果是則輸出m is a prime!,否則就輸出m is not a prime!,請選擇填空。 main() int i, m; scanf(m=%d, &m); for(i=2; im; i+) if(m%i=0) printf(%d is not a prime!
33、n, m); (1) else (2) if(i=m) printf(%d is a prime!n, m); (1)、 A、break B、continue C、break; D、continue; (2)、 A、break B、break;C、continue D、continue;2、以下程序的功能是:求出用數(shù)字0至9組成沒有重復數(shù)字且是13倍數(shù)的三位數(shù)的個數(shù),請選擇填空。 #includevoid main() int i, j, k, w, count = 0; for( (3) ; i=9; i+) for(j=0;j=9; j+) for(k=0; k=9;k+) if( (4)
34、 ) w = i*100+j*10+k;if( (5) )count+; printf(n count=%dn, count); (3)、 A、i=0 B、i=1 C、i=9 D、i=-1(4)、 A、i!=j B、i!=j |j!=k C、i!=j& j!=k D、i!=j& j!=k & k!=i(5)、 A、w%13=0 B、w/13=0 C、w%13=0 D、w/13=0四、編程題(第1小題12分,第2小題18分,共30分)1、從鍵盤輸入一個4位數(shù)的正整數(shù)n,將該數(shù)反序輸出。例如,若輸入的是 1357,則輸出的是7531。要求:1)利用VC+編譯系統(tǒng)進行調試、運行 2)對輸入的正整數(shù)n
35、的合法性進行檢查3)將源程序以“編程題1.c”為文件名保存在網(wǎng)絡盤(K:盤)的考生文件夾上,用其它文件名保存或保存在其他地方均不能得分2、已知一組字符串a(chǎn)27=jjyyzzabcdefgJJYYZZABCDEFG; 請編一程序,將其 中的小寫字母換成其前一個字母,即z換成y,y換成x,.,b換成a,若是a則換成z。然后對數(shù)組a27從小到大排序,并輸出排序后的字符串。 要求:1)利用VC+編譯系統(tǒng)進行調試、運行2)先輸出原字符串(即未做任何改變的字符串),最后輸出排序后 的字符串3)將源程序以“編程題2.c”為文件名保存在網(wǎng)絡盤(K:盤)的考生文件夾上,用其它文件名保存或保存在其他地方均不能得分
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。