07年4月等級考試二級C語言練習(xí)一[2]

字號:

(18)以下程序段的輸出結(jié)果是
     int a=1234;
     printf("%2d\n",a);
     A)12
     B)34
     C)1234
     D)提示出錯、無結(jié)果
     【答案】C
     【解析】 printf()函數(shù)的輸出格式,當(dāng)整數(shù)的值超過格式要求輸出范圍時,原樣輸出。本題中要求輸出兩個有效數(shù)字,而實(shí)際上a有4個有效數(shù)字,故原樣輸出,輸出1234。
     (19)以下選項(xiàng)中不屬于C語言的類型的是
     A)signed short int
     B)unsigned long int
     C)unsigned int
     D)long short
     【答案】D
     【解析】在選項(xiàng)中很明顯選項(xiàng)A為無符號短整型,選項(xiàng)B為無符號長整型,選項(xiàng)C為無符號整型,而選項(xiàng)D的類型在C語言中不存在。
     (20)若有說明語句:int a,b,c,*d=&c;則能正確從鍵盤讀入三個整數(shù)分別賦給變量a、b、c的語句是
     A)scanf("%d%d%d",&a,&b,d);
     B)scanf("%d%d%d",&a,&b,&d);
     C)scanf("%d%d%d",a,b,d);
     D)scanf("%d%d%d",a,b,*d);
     【答案】A
     【解析】scanf()函數(shù)有兩個參數(shù),第一個參數(shù)是輸入格式字符串,第二個參數(shù)是輸入變量地址列表。輸入格式字符串主要由“%”符號和格式字符組成。地址列表是由多個地址組成的。選項(xiàng)B中d已經(jīng)為地址,不應(yīng)在加上求地址符號“&”;選項(xiàng)C中,a和b都為變量不是地址,應(yīng)該在a和b之前加上求地址符號“&”;選項(xiàng)D中指針d所指向的存儲空間的位置為變量c的值,不為地址。
     (21)在16位C編譯系統(tǒng)上,若定義long a;,則能給a賦40000的正確語句是
     A)a=20000+20000;
     B)a=4000*10;
     C)a=30000+10000;
     D)a=4000L*10L;
     【答案】D
     【解析】由于20000+20000、4000*10及30000+10000都是整型表達(dá)式,故運(yùn)算的結(jié)果仍然是整型,表達(dá)式運(yùn)算的結(jié)果超出了整型數(shù)據(jù)的范圍,不正確。而D是長整型運(yùn)算,不會超出長整型的范圍。
     (22)以下敘述正確的是
     A)可以把define和if定義為用戶標(biāo)識符
     B)可以把define定義為用戶標(biāo)識符,但不能把if定義為用戶標(biāo)識符
     C)可以把if定義為用戶標(biāo)識符,但不能把define定義為用戶標(biāo)識符
     D)define和if都不能定義為用戶標(biāo)識符
     【答案】B
     【解析】C語言中的保留字,而define不是保留字。用戶標(biāo)識符不允許使用保留字。
    (23)若定義:int a=511,*b=&a;則printf("%d\n",*b);的輸出結(jié)果為
     A)無確定值
     B)a的地址
     C)512
     D)511
     【答案】D
     【解析】本題中先定義了一個int型的變量a并賦初值為511,接著定義了一個指向a的指針變量b,在printf()函數(shù)的輸出格式中,是輸出*b,即輸出指針?biāo)赶蜃兞縜的值為511,因此輸出511。
     (24)以下程序的輸出結(jié)果是
     main()
     { int a=5,b=4,c=6,d;
     printf(("%d\n",d=a>b?)(a>c? a:c):(b));
     }
     A)5
     B)4
     C)6
     D)不確定
     【答案】C
     【解析】在C語言中問號表達(dá)式(如:a>c?a:c;)的計算規(guī)則為:如果a>c為真,那么表達(dá)式的值為a的值;否則表達(dá)式的值為c的值。本題中的printf()函數(shù)中的輸出表達(dá)式,首先計算括號內(nèi)的條件表達(dá)式,它的值為6(a>c?a:c中a>c即5>6為假故該表達(dá)式的值為c的值即為6),然后再計算外面表達(dá)式(等價于a>b?6:b)的值,同理可得該表達(dá)式的值為6,將值6賦值給d,因此最后輸出該表達(dá)式的值為6。
     (25)以下程序中,while循環(huán)的循環(huán)次數(shù)是
     main()
     { int i=0;
     while (i<10)
     { if(i<1)continue;
     if(i==5) break;
     i++;
     }
     …
     }
     A)1
     B)10
     C)6
     D)死循環(huán),不能確定次數(shù)
     【答案】D
     【解析】break語句只能在循環(huán)體和switch語句體內(nèi)使用,當(dāng)break出現(xiàn)在switch語句體內(nèi)時,其作用只是跳出該switch語句體。當(dāng)break出現(xiàn)在循環(huán)體中,但不在switch語句體內(nèi)時,則在執(zhí)行break后,跳出本層循環(huán)體。而continue語句的作用是結(jié)束本次循環(huán),即跳過本次循環(huán)中余下尚未執(zhí)行的語句,接著再一次進(jìn)行循環(huán)的條件判定。本程序中,變量i的初始值為0,判斷while后面括號內(nèi)表達(dá)式的值為真,執(zhí)行循環(huán)體內(nèi)的if語句,判斷if后面括號內(nèi)表達(dá)式的值為真,執(zhí)行“continue;”語句。因continue的作用是結(jié)束本次循環(huán),即跳過本次循環(huán)體中余下尚未執(zhí)行的語句,接著再一次進(jìn)行循環(huán)的條件判斷,所以i的值未發(fā)生變化,循環(huán)條件仍然為真,if語句也仍然成立,因此循環(huán)將無止境地進(jìn)行下去。
     (26)以下程序的輸出結(jié)果是
     main()
     { int a=0,i;
     for(i=1;i<5;i++)
     { switch(i)
     { case 0:
     case 3:a+=2;
     case 1:
     case 2:a+=3;
     default:a+=5;
     }
     }
     printf("%d\n",a);
     }
     A)31
     B)13
     C)10
     D)20
     【答案】A
     【解析】switch語句的執(zhí)行過程是:在switch后面的表達(dá)式的值和case后面常量表達(dá)式的值吻合時,就執(zhí)行該case分支的語句。如果在該語句的后面沒有break語句,則按順序繼續(xù)執(zhí)行下一個case分支,直到遇到break語句或switch多分支語句結(jié)束,在switch語句中,break語句的作用是使流程跳出switch結(jié)構(gòu),終止switch語句的執(zhí)行。在本題中,因?yàn)槊總€case語句后面都沒有break語句,所以,第一輪循環(huán)(i==1)執(zhí)行過后a的值為8,第2輪(i==2)執(zhí)行過后a的值為16,第3輪(i==3)執(zhí)行過后a的值為26,第4輪(i==4)執(zhí)行過后a的值為31,然后執(zhí)行“i++”語句,這時循環(huán)條件為假,循環(huán)結(jié)束。
     (27)以下程序的輸出結(jié)果是
     main()
     { int a=4,b=5,c=0,d;
     d=!a&&!b‖!c;
     printf("%d\n",d);
     }
     A)1
     B)0
     C)非0的數(shù)
     D)-1
     【答案】A
     【解析】由于單目運(yùn)算符優(yōu)先級高于“&&”和“||”運(yùn)算,所以先計算!a、!b和!c分別為“假”、“假”、“真”,然后是&&運(yùn)算和“||”運(yùn)算,原表達(dá)式就等價于“假”&&“假” ||“真”,又由于“&&”的優(yōu)先級高于“||”運(yùn)算符,所以先計算“假”&&“假”,還是為假,最后是“假”||“真”為真。因此最后d被賦值為1,故最后輸出為1。
     (28)以下程序的輸出結(jié)果是
     #include <stdio.h>
     main()
     { int i=0,a=0;
     while (i<20)
     { for(;;)
     { if((i%10)==0) break;
     else i--;
     }
     i+=11;a+=i;
     }
     printf("%d\n",a);
     }
     A)21
     B)32
     C)33
     D)11
     【答案】B
     【解析】break語句只能在循環(huán)體和switch語句體內(nèi)使用。本題程序?yàn)樵趙hile循環(huán)中嵌套for循環(huán)。先看內(nèi)層for循環(huán),該循環(huán)的3個表達(dá)式全部省略,循環(huán)條件始終為真,但循環(huán)體內(nèi)的break語句為終止循環(huán)的條件。首先,由初始條件判斷外層循環(huán)while括號內(nèi)表達(dá)式的值,該值為真,執(zhí)行本次while循環(huán),即執(zhí)行循環(huán)體內(nèi)的if語句,判斷該表達(dá)式后面括號里表達(dá)式的值為真,執(zhí)行break語句,跳出內(nèi)層循環(huán),執(zhí)行下面的語句,此時i和a的值均變?yōu)?1;回到外層循環(huán),判斷表達(dá)式“i<20”仍為真,執(zhí)行內(nèi)層循環(huán)語句,此時if條件不滿足,執(zhí)行else語句,i的值為10,繼續(xù)內(nèi)層循環(huán),if語句條件滿足,執(zhí)行break語句,跳出內(nèi)層循環(huán),執(zhí)行下面的語句后,i和a的值分別是21和32。再判斷外層循環(huán)的條件為假,結(jié)束循環(huán)。
     (29)以下程序的輸出結(jié)果是
     char cchar(char ch)
     {
     if(ch>='A' &&ch<='Z')ch=ch-'A'+'a';
     return ch;
     }
     main()
     { char s[]="ABC+abc=defDEF",*p=s;
     while(*p)
     { *p=cchar(*p);
     p++;
     }
     printf("%s\n",s);
     }
     A)abd+ABC=DEFdef
     B)abc+abc=defdef
     C)abcABCDEFdef
     D)abcabcdefdef
     【答案】B
     【解析】本題首先定義了一個函數(shù)cchar(),有一個字符型參數(shù)ch。在函數(shù)中首先判斷該字符是否為大寫字母,如果是則把它轉(zhuǎn)換成小寫字符再賦值給ch,把ch作為函數(shù)值返回。在主函數(shù)中定義了一個字符數(shù)組s并初始化,然后定義了一個指針變量并使它指向數(shù)組s。接著通過一個while循環(huán)利用指針變量p,依次取出字符數(shù)組的字符(直到遇到字符串結(jié)束標(biāo)志'\0'),并調(diào)用cchar()函數(shù),把大寫字母轉(zhuǎn)換成小寫字母,其他字符不變。最后輸出字符數(shù)組為s中的內(nèi)容,結(jié)果為“abc+abc=defdef”。 (30)以下程序的輸出結(jié)果是
     int f()
     { static int i=0;
     int s=1;
     s+=i;i++;
     return s;
     }
     main()
     { int i,a=0;
     for(i=0;i<5;i++)a+=f();
     printf("%d\n",a);
     }
     A)20
     B)24
     C)25
     D)15
     【答案】D
     【解析】在C語言中聲明為static型的變量,在整個程序運(yùn)行期間,靜態(tài)局部變量在內(nèi)存的靜態(tài)存儲區(qū)中占據(jù)永久性的存儲單元。即使退出函數(shù)后,下次再進(jìn)入該函數(shù)時,靜態(tài)局部變量仍使用原來的存儲單元。由于并不釋放這些存儲單元,因此這些存儲單元中的值得以保留;因而可以繼續(xù)使用存儲單元中原來的值。本題中函數(shù)f()中定義了一個static型變量i,故每調(diào)用一次函數(shù)f(),i的值加1,返回s的值等于i,在主函數(shù)中用了一個for循環(huán),該循環(huán)執(zhí)行了5次,每次都調(diào)用f()函數(shù),將其返回值累加到變量a中,故最后a的值為1+2+3+4+5=15。
     (31)以下程序段的輸出結(jié)果是
     char s[]="\\141\141abc\t";
     printf("%d\n",strlen(s));
     A)9
     B)12
     C)13
     D)14
     【答案】A
     【解析】字符數(shù)組中可以存放字符串,但字符數(shù)組的長度并不是字符串的長度,字符串的長度是指字符數(shù)組中存放的有效字符個數(shù),即'\0',之前的字符數(shù)。字符數(shù)組s中依次存放的字符是:'\\'、'1'、'4'、'1'、'\141'、'a'、'b'、'c'和'\t',和最后一個字符串結(jié)束標(biāo)記'\0',故字符串的長度是9。
     (32)若有以下程序
     #include <stdio.h>
     void f(int n);
     main()
     { void f(int n);
     f(5);
     }
     void f(int n)
     { printf("%d\n",n);}
     則以下敘述中不正確的是
     A)若只在主函數(shù)中對函數(shù)f進(jìn)行說明,則只能在主函數(shù)中正確調(diào)用函數(shù)f
     B)若在主函數(shù)前對函數(shù)f進(jìn)行說明,則在主函數(shù)和其后的其他函數(shù)中都可以 正確調(diào)用函數(shù)f
     C)對于以上程序,編譯時系統(tǒng)會提示出錯信息;提示對f函數(shù)重復(fù)說明
     D)函數(shù)f無返回值,所以可用void將其類型定義為無值型
     【答案】C
     【解析】若一個函數(shù)定義在主調(diào)函數(shù)之后,其返回值不是int或char型,則必須對之進(jìn)行函數(shù)說明??稍诤瘮?shù)外說明也可以在函數(shù)內(nèi)說明,在函數(shù)外說明,在其后的所有函數(shù)均可調(diào)用該函數(shù),若在函數(shù)內(nèi)說明,則只能在本函數(shù)內(nèi)調(diào)用該函數(shù)。函數(shù)只能定義一次,但函數(shù)說明可以出現(xiàn)多次。
     (33)以下程序調(diào)用findmax函數(shù)返回數(shù)組中的值
     findmax(int * a,int n)
     { int * p,* s;
     for (p=a,s=a;p-a<n;p++)
     if( ) s=p;
     return(*s);
     }
     main()
     { int x[5]={12,21,13,6,18};
     printf("%d\n",findmax(x,5));
     }
     在下劃線處應(yīng)填入的是
     A)p>s
     B)*p>*s
     C)a[p]>a[s]
     D)p-a>p-s
     【答案】B
     【解析】在main()函數(shù)中定義了一個具有5個元素的x數(shù)組并賦初值,然后調(diào)用findmax()函數(shù)求數(shù)組中元素的值。調(diào)用時把數(shù)組元素x的首地址,傳給了形參指針變量a,把5傳給形參n。在函數(shù)findmax()中定義了兩種指針變量p和s,其中s用來記錄元素的地址,p作為循環(huán)控制變量,表示每個元素的地址。求值的算法是先將第5個元素(用s記下它的地址)做為值,然后用值(*s)與后面的每個元素比較(*p),若后面的元素大,則用s記下它的地址,所以下劃線應(yīng)填“*s<*p”或“*p>*s”。
     (34)以下程序的輸出結(jié)果是
     main()
     { char ch[3][5]={"AAAA","BBB","CC"};
     printf("\"%s"\n",ch[1]);
     }
     A)"AAAA"
     B)"BBB"
     C)"BBBCC"
     D)"CC"
     【答案】B
     【解析】二維字符數(shù)組可以看成由若干個一維字符數(shù)組組成,每行是一個一維字符數(shù)組。本題首先定義了一個數(shù)組ch[3][5],并給它們按行賦初值,即相當(dāng)于給ch[0]賦值“AAAA”,給ch[1]賦值“BBB”,給ch[2]賦值“BBB”,最后輸出轉(zhuǎn)義字符“'\'”、ch[1]和轉(zhuǎn)義字符“\”,因此輸出為“BBB”。