C語言習(xí)題(詳細(xì)解答)_第1頁
C語言習(xí)題(詳細(xì)解答)_第2頁
C語言習(xí)題(詳細(xì)解答)_第3頁
C語言習(xí)題(詳細(xì)解答)_第4頁
C語言習(xí)題(詳細(xì)解答)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、程序設(shè)計基礎(chǔ)(C語言版)習(xí)題第01章 緒論一選擇題1.以下敘述中正確的是_。A)程序設(shè)計的任務(wù)就是編寫程序代碼并上機調(diào)試B)程序設(shè)計的任務(wù)就是確定所用數(shù)據(jù)結(jié)構(gòu)C)程序設(shè)計的任務(wù)就是確定所用算法D)以上三種說法都不完整 【解析】 程序設(shè)計通常分為問題建模、算法設(shè)計、編寫代碼和編譯調(diào)試四個階段。所以選項A)、B)、C)說法都不完整。2.以下關(guān)于簡單程序設(shè)計的步驟和順序的說法中正確的是。A)確定算法后,整理并寫出文檔,最后進行編碼和上機調(diào)試B)首先確定數(shù)據(jù)結(jié)構(gòu),然后確定算法,再編碼,并上機調(diào)試,最后整理文檔C)先編碼和上機調(diào)試,在編碼過程中確定算法和數(shù)據(jù)結(jié)構(gòu),最后整理文檔D)先寫好文檔,再根據(jù)文檔進

2、行編碼和上機調(diào)試,最后確定算法和數(shù)據(jù)結(jié)構(gòu) 【解析】設(shè)計一個能解決實際問題的計算機程序需要經(jīng)過以下幾個過程: 建立模型。 算法設(shè)計:給出解決問題的步驟,即算法。 算法表達:選擇一種表達算法的工具,對算法進行清晰的表達。 編寫程序:選擇一種程序設(shè)計語言,把以上算法程序化,這稱為編寫程序。 程序調(diào)試:對編寫好的程序進行調(diào)試,修改程序中的錯誤。 程序文檔編寫與程序維護。綜上所述,B)選項是符合上述描述的,其他選項不恰當(dāng)。3,敘述中正確的是_。A)C程序的基本組成單位是語句B)C程序中的每一行只能寫一條語句C)簡單C語句必須以分號結(jié)束D)C語句必須在一行內(nèi)寫完 【解析】函數(shù)是C程序的基本組成單位;C語言

3、書寫風(fēng)格很自由,不但一行可以寫多個語句,還可以將一個語句寫在多行中。故本題答案為C)。4.以下敘述中正確的是。A)C程序中的注釋只能出現(xiàn)在程序的開始位置和語句的后面B)C程序書寫格式嚴(yán)格,要求一行內(nèi)只能寫一個語句C)C程序書寫格式自由,一個語句可以寫在多行上D)用C語言編寫的程序只能放在一個程序文件中 【解析】在C語言中,注釋可以加在程序中的任何位置,選項A)錯誤。C程序可以分模塊寫在不同的文件中,編譯時再將其組合在一起,選項D)錯誤。C程序的書寫風(fēng)格很自由,不但一行可以寫多個語句,還可以將一個語句寫在多行中。所以正確答案為選項C)。5.以下關(guān)于C語言的敘述中正確的是。A)C語言中的注釋不可以

4、夾在變量名或關(guān)鍵字的中間B)C語言中的變量可以在使用之前的任何位置進行定義C)在C語言算術(shù)表達式的書寫中,運算符兩側(cè)的運算數(shù)類型必須一致D)C語言的數(shù)值常量中夾帶空格不影響常量值的正確表示 【解析】C語言中注釋可以放在任何位置,但不能夾在變量名或關(guān)鍵字中間,選項A正確;C語言中的變量要在使用之前定義,C標(biāo)準(zhǔn)規(guī)定定義位置在相關(guān)程序塊的首部,選項B錯誤;C語言中兩側(cè)數(shù)據(jù)類型可以不一致,系統(tǒng)可進行強制類型轉(zhuǎn)換,選項C錯誤;C語言數(shù)值常量中不允許存在空格,選項D錯誤。6.以下關(guān)于C語言數(shù)據(jù)類型使用的敘述中錯誤的是。A)若要準(zhǔn)確無誤差地表示自然數(shù),應(yīng)使用整數(shù)類型B)若要保存帶有多位小數(shù)的數(shù)據(jù),應(yīng)使用雙精

5、度類型C)若要處理如"人員信息"等含有不同類型的相關(guān)數(shù)據(jù),應(yīng)自定義結(jié)構(gòu)體類型D)若只處理"真"和"假"兩種邏輯值,應(yīng)使用邏輯類型 【解析】C語言中沒有邏輯類型,若只處理"真"或"假"兩種邏輯值,可以使用整型數(shù)"1"或"0"表示,故選D。第02章 基本數(shù)據(jù)類型一選擇題1.有以下定義:int a;long b;double x,y;則以下選項中正確的表達式是。A)a%(int)(xy) B)ax!y; C)(a*y)%b D)yxyx 【解析】A)選項中如果x

6、與y的值相等那么取余時就會有除數(shù)為0的情況。C)選項中取余的兩個數(shù)據(jù)都應(yīng)為整數(shù),不能有一方為實型變量,而a*y的結(jié)果為double型。D)選項表達式本身就錯誤,不能給表達式賦值。所以,本題答案為B)。2.有以下程序#include<stdio .h>main()int s,t,A10;double B6; ssizeof(A); tsizeof(B); printf("%d,%dn",s,t);在VC6平臺上編譯運行,程序運行后的輸出結(jié)果是A)2,4 B)4,4 C)4,8 D)10,6 【解析】sizeof的作用就是返回一個對象或者類型所占的內(nèi)存字節(jié)數(shù)。在VC

7、6中整型占4個字節(jié),雙精度實型占8個字節(jié),所以選C)。3.若有定義:double a=22;int i=0,k=18;,則不符合C語言規(guī)定的賦值語句是。A)a=a+,i+; B)i=(a+k)<=(i+k);C)i=a%11; D)i=!a; 【解析】C語言中取余運算符兩側(cè)的操作數(shù)只能是整型(若為char型,則會自動轉(zhuǎn)換成整型)。4.有以下程序:#include <stdio.h>main()inta1,b0; printf("%d,",bab); printf("%dn",a2*b);程序運行后的輸出結(jié)果是_。A)0,0 B)1,0

8、C)3,2 D)1,2 【解析】 執(zhí)行第一個printf語句時,bab1,所以輸出1,執(zhí)行第二個printf語句時,a2*b=2,所以輸出結(jié)果為2。5.若有定義語句:int a=3,b=2,c=1;,以下選項中錯誤的賦值表達式是。A)a=(b=4)=3;B)a=b=c+1;C)a=(b=4)+c;D)a=1+(b=c=4); 【解析】在A)選項中,賦值語句b=4先把4賦值給整型變量b,之后執(zhí)行(b=4)=3是把常量3賦值給常量4,但是由于C語言規(guī)定賦值運算符的左側(cè)只能是變量,不能是常量或者表達式,因此A)選項錯誤。6.有以下定義:int a;long b;double x,y;則以下選項中正確

9、的表達式是。A)a%(int)(xy) B)ax!y; C)(a*y)%b D)yxyx 【解析】A)選項中如果x與y的值相等那么取余時就會有除數(shù)為0的情況。C)選項中取余的兩個數(shù)據(jù)都應(yīng)為整數(shù),不能有一方為實型變量,而a*y的結(jié)果為double型。D)選項表達式本身就錯誤,不能給表達式賦值。所以,本題答案為B)。7.若有定義語句:intx10;,則表達式xxx的值為_。A)20 B)10 C)0 D)10 【解析】 xxx可化為:xx(xx),由于x初始值為10,所以計算后,x102010,因此選B)。二填空題1.以下程序的功能是:將值為三位正整數(shù)的變量x中的數(shù)值按照個位、十位、百位的順序拆分

10、并輸出。請?zhí)羁铡?include<stdio.h>main()int x=256; printf("%d-%d-%dn",_,x/10%10,x/100); 參考答案:x%10【解析】x=256,x%10=6。2.以下程序運行后的輸出結(jié)果是 。#include<stdio.h>main() int a;a=(int)(double)(3/2)+0.5+(int)1.99*2);printf("%dn",a); 參考答案:3【解析】本題中3/2=1,(double)(3/2)=1,(int)1.99*2=1*2=2,因此(int)(

11、1+0.5+2)=(int)3.5=3。3.若有定義語句:int a5;,則表達式:a的值是_。 參考答案:5【解析】 a的含義是在使用a值以后,使a值加1,所以a的值為5。4.若有語句double x17;int y;,當(dāng)執(zhí)行y(int)(x/5)%2;之后y的值為_。 參考答案:1【解析】 y(int)(x/5)%2(int)(3.4)%23%21。5.設(shè)變量a和b已正確定義并賦初值。請寫出與aab等價的賦值表達式 _。 參考答案:a=-b【解析】aab等價于aa(ab),等價于ab。第03章 順序結(jié)構(gòu)一.選擇題1.有以下程序#include<stdio.h>main()cha

12、r a,b,c,d; scanf("%c%c",&a,&b); c=getchar();d=getchar(); printf("%c%c%c%cn",a,b,c,d);當(dāng)執(zhí)行程序時,按下列方式輸入數(shù)據(jù)(從第1列開始,<CR>代表回車,注意,回車也是一個字符)12<CR>34<CR>則輸出結(jié)果是A)1234 B)12 C)12 D)12 3 34 【解析】程序根據(jù)用戶輸入分別給字符型變量a、b、c、d賦值為'1'、'2'、'<CR>'、'

13、;3',因此輸出到屏幕得到選項C中的格式。2.有以下程序段:charch;intk;cha;k12;printf("%c,%d,",ch,ch,k);printf("k%dn",k);已知字符a的ASCII碼值為97,則執(zhí)行上述程序段后輸出結(jié)果是A)因變量類型與格式描述符的類型不匹配輸出無定值B)輸出項與格式描述符個數(shù)不符,輸出為零或不定值C)a,97,12k12D)a,97,k12 【解析】輸出格式控制符%c表示將變量以字符的形式輸出;輸出格式控制符%d表示將變量以帶符號的十進制整型數(shù)輸出。所以第一個輸出語句輸出的結(jié)果為a,97,第二個輸出語句

14、輸出的結(jié)果為k12,所以選項D)為正確答案。3.有以下程序#include<stdio.h>main() char a30,b30;scanf("%s",a);gets(b);printf("%sn%sn",a,b);程序運行時若輸入:how are you? I am fine <回車>則輸出結(jié)果是A)how are you? I am fine B)how are you? I am fineC)how are you? I am fine D)how are you? 解析】scanf函數(shù)會把空格字符作為輸入的字符串之間的分

15、隔符,因此字符串a(chǎn)為"how"。gets()函數(shù)讀取字符串時,直至接受到換行符或EOF時才停止,并將讀取的結(jié)果存放在指針?biāo)赶虻淖址麛?shù)組中,因此其余輸入的內(nèi)容賦值給b。二填空題1.以下程序運行后的輸出結(jié)果是。#include<stdio.h>main()int a200,b010; printf("%d%dn",a,b); 參考答案:2008【解析】整型變量a的值為200,b的值"010"是用八進制表示的"10"即十進制的"8",最后輸出格式均為%d,即十進制格式,所以輸出為&quo

16、t;2008"。2.有以下程序(說明:字符0的ASCIl碼值為48)#include<stdio.h>main() char c1,c2;scanf("%d",&c1);c2=c1+9;printf("%c%cn",c1,c2);若程序運行時從鍵盤輸入48<回車>,則輸出結(jié)果為 。 參考答案:09【解析】本題中通過ASCII碼對字符變量賦值,由于字符0的ASCII碼是48,因此字符變量c1為0,c2的ASCII碼比c1大9,因此c2為9。第04章 選擇結(jié)構(gòu)一選擇題1.若變量已正確定義,在if(W)printf(&

17、quot;%dn",k);中,以下不可替代W的是。A)a<>bc B)chgetchar() C) abc D)a 【解析】在C語言中,表示不等于不能用"<>",而只能使用"!="。其他選項均滿足題目的要求。2.當(dāng)變量c的值不為2、4、6時,值也為"真"的表達式是。A)(c2)|(c4)|(c6)B)(c>2&& c<6)|(c!3)|(c!5)C)(c>2&&c<6)&&!(c%2)D)(c>2&& c&l

18、t;6)&&(c%2!1) 【解析】滿足表達式(c>2&& c<6)的整型變量c的值是2,3,4,5,6。當(dāng)變量c的值不為2,4,6時,其值只能為3或5,所以表達式c!3和c!5中至少有一個為真,即不論c為何值,選項B)中表達式的值都為"真"。正確答案為B)。3.已知字母A的ASCII碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母的表達式是。A)kk>A&& kk<ZB)!(kk>A|kk<Z)C)(kk32)>a&&(kk32)<ZD

19、)isalpha(kk)&&(kk<91) 【解析】C語言的字符以其ASCII碼的形式存在,所以要確定某個字符是大寫字母,只要確定它的ASCII碼在'A'和'Z'之間就可以了,選項A)和C)符合此要求。在選項D)中,函數(shù)isalpha用來確定一個字符是否為字母,大寫字母的ASCII碼值的范圍為65到90,所以如果一個字母的ASCII碼小于91,那么就能確定它是大寫字母。本題答案選B)。4.有以下程序: #include < stdio.h> main() int al,b2,c3,d0; if(al && b2)

20、 if(b!2|c!3) printf("%d,%d,%dn",a,b,c); else printf("%d,%d,%dn",a,b,c); else printf("%d,%d,%dn",a,b,c); 程序運行后的輸出結(jié)果是_。A)1,2,3B)1,3,2C)l,3,3D)3,2,1 【解析】 程序首先執(zhí)行第一個判斷語句,a1成立;b2,先判斷b是否為2,再進行b加1操作,執(zhí)行后b的值為3。繼續(xù)執(zhí)行第二個判斷語句,注意程序此時進行邏輯或運算,b!2的值為真,因此條件表達式b!2|c!3的值為真,程序便不再執(zhí)行第二個邏輯語句c!3

21、,而直接進行輸出操作。因此,本題正確答案為C)。5.執(zhí)行以下程序段后,w的值為_。intw'A',x14,y15;w(xy)&&(w<'a');A)1 B)NULLC)1 D)0 【解析】根據(jù)題目所給條件可知,x|y為1,w<'a'為1,1&&1結(jié)果為1。因此正確答案為C)。6.若變量已正確定義,有以下程序段:inta3,b5,c7; if(a>b) ab;ca; if(c!a) cb; printf("%d,%d,%dn",a,b,c);其輸出結(jié)果是A)程序段有語法錯B)3,

22、5,3C)3,5,5D)3,5,7 【解析】兩個if語句的判斷條件都不滿足,程序只執(zhí)行了ca這條語句,所以變量c的值等于3,變量b的值沒能變化,程序輸出的結(jié)果為3,5,3。所以正確答案為選項B)。7.有以下程序段:int a,b,c;a10;b50;c30;if(a>b)ab,bc;ca;printf("a%d b%d c%dn",a,b,c);程序的輸出結(jié)果是_。A)a10 b50 c10 B)a10 b50 c30C)a10 b30 c10 D)a50 b30 c50 【解析】該題考查if條件語句,當(dāng)條件為真時,將b值賦給a,c值賦給b;當(dāng)條件為假時,將a值賦給c

23、。該題中if條件為假,所以將a的值賦給c,故a10 b50 c10。8.有以下程序:#include<stdio.h>main()intx1,y2,z3;if(x>y)if(y<z)printf("%d",z);elseprintf("%d",y);printf("%dn",x);程序的運行結(jié)果是_。A)331 B)41C)2 D)1 【解析】該題目考查if條件語句。else語句和最近的一個if語句配對。由于x>y為假,所以直接執(zhí)行最后一行代碼。9.有以下程序:#include<stdio.h>

24、;main()intx1,y0,a0,b0; switch(x) case 1: switch(y) case 0: a; break; case 1: b; break; case 2:a; b; break; case 3:a; b; printf("a%d,b%dn",a,b);程序的運行結(jié)果是A)a1,b0B)a2,b2C)a1,b1D)a2,b1 【解析】本題考查了 switch結(jié)構(gòu)的內(nèi)容。在C語言中,程序執(zhí)行完一個case標(biāo)號的內(nèi)容后,如果沒有break語句,控制結(jié)構(gòu)會轉(zhuǎn)移到下一個case繼續(xù)執(zhí)行,因為case 常量表達式只是起語句標(biāo)號作用,并不是在該處進行條件

25、判斷。本題程序在執(zhí)行完內(nèi)部switch結(jié)構(gòu)后,繼續(xù)執(zhí)行了外部switch結(jié)構(gòu)的 case 2分支。最后a和b的值分別為2和1。二填空題1.在C語言中,當(dāng)表達式值為0時表示邏輯值"假",當(dāng)表達式值為 時表示邏輯值"真"。 參考答案:非0【解析】本題一定要明確一個概念,即:所有非0的數(shù)(并不只是"1"),在c語言中都表示邏輯值為"真"。2.設(shè)x為int型變量,請寫出一個關(guān)系表達式_ ,用以判斷x同時為3和7的倍數(shù)時,關(guān)系表達式的值為真。 參考答案:(x%3=0)&&(x%7=0)【解析】x%3=0能保證

26、x是3的倍數(shù),x%7=0能保證x是7的倍數(shù),(x%3=0)&&(x%7=0)能保證x是3的倍數(shù)并且x是7的倍數(shù)。3.有以下程序#include<stdio.h>main() int a=1,b=2,c=3,d=0; if(a=1) if(b!=2) if(c=3)d=1; else d=2; else if(c!=3)d=3; else d=4; else d=5; printf("%dn",d);程序運行后的輸出結(jié)果是_ 。 參考答案:4【解析】a=1為真,b!=2為假,c!=3為假,所以d=4。4.有以下程序#include<stdio

27、.h>main() int x;scanf("%d",&x);if(x>15)printf("%d",x-5);if(x>10)printf("%d",x);if(x>5)printf("%dn",x+5);若程序運行時從鍵盤輸入12<回車>,則輸出結(jié)果為 。 參考答案:1217【解析】本題中輸入12時,第一條if的條件x>15不滿足因此不執(zhí)行,第二條if的條件x>10滿足因此輸出12,第三條if的條件x>5滿足因此輸出17。5.以下程序運行后的輸出結(jié)果

28、是 。#include<stdio.h>main() int x=10,y=20,t=0;if(x=y)t=x;x=y;y=t;printf("%d%dn",x,y); 參考答案:20 0【解析】本題中if選擇的條件x=y不滿足,因此直接執(zhí)行后面的x=y和y=t,則x的值為20,y的值為0。第05章 循環(huán)結(jié)構(gòu)一選擇題1.以下不構(gòu)成無限循環(huán)的語句或語句組是A)n=0; do+n;while(n<=0);B)n=0; while(1)n+;C)n=10; while(n);n-;D)for(n=0,i=1;i+) n+=i; 【解析】項A)中變量n的值,先自加

29、1,再進行循環(huán)條件判斷,此時循環(huán)條件n<0不成立,跳出循環(huán)。所以正確答案為A)。2.有以下程序#include<stdio.h>main() int y10; while(y); printf("y%dn",y);程序執(zhí)行后的輸出結(jié)果是A)y0 B)y1C)yl D)while構(gòu)成無限循環(huán) 【解析】當(dāng)y減為1時判斷while(y-),此時滿足條件,但是y變成0。下次循環(huán)判斷while(y-)時,因為y為0不滿足條件跳出循環(huán),但是此時也要執(zhí)行y-,所以y變成了-1。 打印輸出時輸出-1。3.有以下程序:#include<stdio.h>main(

30、)inti5;doif(i%31)if(i%52)printf("*%d",i);break; i;while(i!0);printf("n");程序的運行結(jié)果是_。A)*7 B)*3*5C)*5D)*2*6 【解析】整個程序中只有對i增加的語句而沒有對i減少的語句,所以2、3都不可能出現(xiàn),選項B)和D)錯誤。而i5時第一個if語句的表達式為假,所以選項C)也錯誤。4.以下程序段中的變量已正確定義: for(i0;i<4;i,i) for(kl;k<3;k);printf("*");程序段的輸出結(jié)果是_。A)* B)* C

31、)* D)* 【解析】 本題考察for循環(huán)語句,注意第二個for語句的后面有一個分號,即printf函數(shù)不屬于循環(huán)體,無論循環(huán)執(zhí)行多少次,printf("*")語句只執(zhí)行一次。因此,本題正確答案為D)。5.有以下程序#include<stdio.h>main() int a=1,b=2; for(;a<8;a+)b+=a;a+=2; printf("%d,%dn",a,b);程序運行后的輸出結(jié)果是A)9,18 B)8,11 C)7,11 D)10,14 【解析】初始值a=1,b=2,第一次循環(huán):b=b+a=2+1=3,a=a+2=1+2

32、=3,a=a+1=3+1=4;第二次循環(huán):b=b+a=3+4=7,a=a+2=4+2=6,a=a+1=6+1=7;第三次循環(huán):b=b+a=7+7=14,a=a+2=7+2=9,a=a+1=9+1=10,故本題答案選D。6.有以下程序:#include<stdio.h>main()inti,j; for(i3;i>1;i) for(j1;j<2;j)printf("%d",ij); printf("n"); 程序的運行結(jié)果是_。A)2 3 4 B)4 3 2 3 4 5 5 4 3C)2 3 D)4 5 3 4 3 4 4 5 2

33、3 【解析】該題目主要考查for嵌套循環(huán),要注意循環(huán)變量i和j的取值范圍。輸出結(jié)果為變量i和j的和。8.設(shè)變量已正確定義,以下不能統(tǒng)計出一行中輸入字符個數(shù)(不包含回車符)的程序段是_。A)n0;while(chgetchar()!'n')n;B)n0;while(getchar()!'n')n;C)for(n0;getchar()!'n';n); D)n0;for(chgetchar();ch!'n';n); 【解析】 A)項每進行一次循環(huán)判斷一個字符是否為回車,如果不是就進行下一次判斷,因此可以統(tǒng)計出輸入字符個數(shù);B)項與A)項

34、的判斷相似,僅為是否將讀入的數(shù)據(jù)賦值給一個變量,因此并不影響判斷結(jié)果;C)想用for循環(huán)來判斷,與B)項的判斷完全相同,可以統(tǒng)計出輸入字符個數(shù);D)項中chgetchar()是給變量ch賦初值,如果輸入回車,則程序只循環(huán)一次,如果輸入一個非回車的字符,則程序進入死循環(huán)。因此,本題正確答案為D)。9.有以下程序#include<stdio.h>main() int i,j,m=1; for(i=1;i<3;i+) for(j=3;j>0;j-) if(i*j>3)break; m*=i*j; printf("m=%dn",m);程序運行后的輸出結(jié)

35、果是A)m=6 B)m=2 C)m=4 D)m=5 【解析】第一次循環(huán)i=1,j=3和j=2時都能執(zhí)行m*=i*j,此時得到m的值為6;然后進行第二次循環(huán)i=2,j=3時會執(zhí)行break語句,內(nèi)部循環(huán)直接結(jié)束,此時i再加1,也會導(dǎo)致退出外部循環(huán),所以最終結(jié)果m的值為6。10.有以下程序#include<stdio.h>main() int s;scanf("%d",&s);while(s>0) switch(s) case 1:printf("%d",s+5);case 2:printf("%d",s+4);

36、break;case 3:printf("%d",s+3);default:printf("%d",s+1);break;scanf("%d",&s);運行時,若輸入123450<回車>,則輸出結(jié)果是 A)6566456B)66656C)66666D)6666656 【解析】switch語句執(zhí)行完一個case后面的語句后,流程控制轉(zhuǎn)移到下一個case語句繼續(xù)執(zhí)行,遇到break會跳出本次循環(huán)。本題中輸入1時會輸出65,輸入2時會輸出6,輸入3時會輸出64,輸入4時會輸出5,輸入5時會輸出6,在輸入0時不滿足循環(huán)條件

37、,程序執(zhí)行結(jié)束。11.有以下程序段int i,n;for(i=0;i<8;i+) n=rand()%5;switch(n) case 1:case 3:printf("%dn",n);break;case 2:case 4:printf("%dn",n);continue;case 0: exit(0);printf("%dn",n);以下關(guān)于程序段執(zhí)行情況的敘述,正確的是A)for循環(huán)語句固定執(zhí)行8次B)當(dāng)產(chǎn)生的隨機數(shù)n為4時結(jié)束循環(huán)操作C)當(dāng)產(chǎn)生的隨機數(shù)n為1和2時不做任何操作D)當(dāng)產(chǎn)生的隨機數(shù)n為0時結(jié)束程序運行 【解析】

38、當(dāng)產(chǎn)生的隨機數(shù)n為1或2時,由于沒有遇到break,因此程序?qū)⒎謩e順序執(zhí)行case 3與case 4;當(dāng)n為3時,程序輸出n的值后跳出switch語句;當(dāng)n為4時,程序輸出n的值后將繼續(xù)執(zhí)行下一次循環(huán);當(dāng)n為0時,程序執(zhí)行exit函數(shù)結(jié)束運行。二填空題1.有以下程序#include<stdio.h>main() int m,n; scanf("%d%d",&m,&n); while(m!=n) while(m>n)m=m-n; while(m<n)n=n-m; printf("%dn",m);程序運行后,當(dāng)輸入14

39、<空格>7<回車>時,輸出結(jié)果是_。 參考答案:7【解析】執(zhí)行while(m<n)的循環(huán),得到m=14,n=7,然后執(zhí)行while(m>n)的循環(huán),得到m=7,n=7。此時所有循環(huán)結(jié)束,m=7。2.以下程序運行后的輸出結(jié)果是_。#include <stdio.h>main()int a1,b7; do bb/2; ab; while(b>1); printf("%dn",a); 參考答案:5【解析】 第一次循環(huán)執(zhí)行后,b3,a4,滿足條件b>1,循環(huán)繼續(xù);第二次循環(huán)執(zhí)行后,b1,a5,不滿足條件b>1,結(jié)束循

40、環(huán)。所以輸出的a值為5。3.有以下程序:#include<stdio.h>main()int f,fl,f2,i; f10;f21; printf("%d%d",f1,f2); for(i3;i<5;i) ff1f2;printf("%d",f); f1f2;f2f; printf("n");程序運行后的輸出結(jié)果是_。 參考答案:0 1 123【解析】 第一個printf語句輸出結(jié)果為0 1。循環(huán)體總共循環(huán)三次,第一次循環(huán)結(jié)果為,f1,f11,f21;第二次循環(huán)結(jié)果為f2,f11,f22;第三次循環(huán)結(jié)果為f3,f12

41、,f23。4.若有定義:intk;,以下程序段的輸出結(jié)果是_。for(k2;k<6;k,k)printf("#%d",k); 參考答案:#2#4【解析】在for循環(huán)語句中,自變量k的自增表達式為k,k。這是一個逗號表達式,所以輸出結(jié)果為#2#4。5.以下程序運行后的輸出結(jié)果是_。 #include <stdio.h> main() int k1,s0; do if(k%2)!0)continue; sk; k; while(k>10); printf("s%dn",s); 參考答案:s=0【解析】continue語句用于跳出本次循

42、環(huán),直接進行下一次循環(huán)。進行if判斷時k的值為1不能夠被2整除,因此執(zhí)行continue退出本次循環(huán),不對s進行任何操作,直接進行循環(huán)條件判斷,此時k的值為1不滿足循環(huán)條件,退出while循環(huán),輸出s的值為0。第06章 數(shù)組一選擇題1.下列選項中,能正確定義數(shù)組的語句是A)int num0.2008; B)int num;C)int N=2008; D)#define N 2008 int numN; int numN; 【解析】選項A不符合C語言的語法要求;選項B中沒有指定數(shù)組的大??;選項C中數(shù)組大小不能用變量來指定。2.下列定義數(shù)組的語句中,正確的是。A)int N10; B)#defin

43、e N 10 C)int x0.10; D)int x; int xN; int xN; 【解析】A)中的N是一個變量,不可以用變量來定義數(shù)組,所以選項A)錯誤。C)中把所有的下標(biāo)均列出不正確,此處只需指明數(shù)組長度即可。D)中在定義時沒有指明數(shù)組長度不正確,如果不指明長度就應(yīng)在定義時對數(shù)組元素進行賦值,而此選項沒有,所以錯誤。故本題答案為B)。3.若要定義一個具有5個元素的整型數(shù)組,以下錯誤的定義語句是A)int a50; B)int b0,0,0,0,0;C)int c23; D)int i5,di; 【解析】在進行數(shù)組的定義時,不能使用變量對數(shù)組的長度進行定義。其他選項均符合數(shù)組定義標(biāo)準(zhǔn)。

44、4.以下錯誤的定義語句是。A)intx30,1,1,2,3;B)intx431,2,3,1,2,3,1,2,3,1,2,3;C)intx41,2,3,1,2,3,1,2,3,1,2,3;D)intx31,2,3,4; 【解析】本題考查的是二維數(shù)組的定義和初始化方法。C語言中,在定義并初始化二維數(shù)組時,可以省略數(shù)組的第一維的長度,但是不能省略第二維的長度。故選項C)錯誤。5.若有定義:inta23;,以下選項中對a數(shù)組元素正確引用的是。A)a2!1 B)a23C)a03 D)a1>2!1 【解析】C語言中數(shù)組下標(biāo)是從0開始的,所以二維數(shù)組a23的第一維下標(biāo)取值為0、1;第二維的下標(biāo)取值為0

45、、1、2,因而選項A)、B)、C)都是錯誤的,選項D)表示的是數(shù)組元素a00。所以正確答案為D)。6.有以下程序:#include <stdio.h>#include <string.h>main()char a10"abcd"; printf("%d,%dn",strlen(a),sizeof(a);程序運行后的輸出結(jié)果是_。A)7,4 B)4,10 C)8,8 D)10,10 【解析】 strlen()用來返回字符串的長度,而sizeof()返回的是一個對象或者類型所占的內(nèi)存字節(jié)數(shù),即數(shù)組所占的內(nèi)存。二填空題1.以下程序運行后

46、的輸出結(jié)果是 。#include <stdio.h>main() int i,n5=0;for(i=1;i<=4;i+) ni=ni-1*2+1;printf("%d",ni);printf("n"); 參考答案:13715【解析】本題中已知n0為0,根據(jù)循環(huán)的執(zhí)行可以得到n1為1,n2為3,n3為7,n4為15,因此輸出結(jié)果是13715。2.有以下程序#include<stdio.h>main()int i,n0,0,0,0,0; for(il;i<4;i) nini1*31;printf("%d &quo

47、t;,ni);程序運行后的輸出結(jié)果是。 參考答案:1 4 13 40【解析】第一次循環(huán)結(jié)果為:n1=0*3+1,即n1的值為1,打印輸出1 ;第二次循環(huán)結(jié)果為:n2=1*3+1,即n2的值為4,打印輸出4 ;第三次循環(huán)結(jié)果為:n3=4*3+1,即n3的值為13,打印輸出13 ;第四次循環(huán)結(jié)果為:n4=13*3+1,即n4的值為40,打印輸出40。3.有以下程序#include<stdio.h>main() int a33=1,2,3,4,5,6,7,8,9; int b3=0,i; for(i=0;i<3;i+) bi=ai2+a2i; for(i=0;i<3;i+)

48、printf("%d",bi); printf("n");程序運行后的輸出結(jié)果是_。 參考答案:101418【解析】當(dāng)i=0時,b0=a02+a20=3+7=10;當(dāng)i=1時,b1=a12+a21=6+8=14;當(dāng)i=2時,b2=a22+a22=9+9=18,則打印結(jié)果為101418。4.有以下程序#include<stdio.h>main()int n2,i,j; for(i0;i<2;i)ni0; for(i0;i<2;i) for(j0;j<2;j)njni1; printf("%dn",n1);

49、結(jié)果為:_參考答案:3【解析】通過第一次 for(i=0;i<2;i+) ni=0;的循環(huán)語句可知,已經(jīng)將數(shù)組n 中的兩個元素都賦初值為0。接下來的循環(huán)中,第一次循環(huán),外循環(huán) i=0 的前提下:內(nèi)循環(huán)j=0時,運行完n0=n0+1后n0為1;j=1時,運行完n1=n0+1后,n1為2。第二次循環(huán),外循環(huán)i=1的前提下,內(nèi)循環(huán)j=0時,運行完n0=n1+1后n0為3;j=1時,運行完n1=n1+1后,n1為3。5.以下fun函數(shù)的功能是在N行M列的整型二維數(shù)組中,選出一個最大值作為函數(shù)值返回,請?zhí)羁铡?設(shè)M,N已定義)int fun(int aNM)int i,j,row0,col0; f

50、or(i0; i<N;i) for(j0;j<M; j)if(aij>arowco1)rowi;colj; return(_ );參考答案:arowcol【解析】通過程序可以看出,外循環(huán)是行,內(nèi)循環(huán)是列。先在行不變的情況下找一行內(nèi)最大的數(shù)據(jù)進行記錄。通過語句 if(aij>arowcol) row=i; col=j;可知,如果變量aij大于arowcol,將i賦給了row,將j賦給了col,所以arowcol是記錄當(dāng)前最大值的變量。6.有以下程序#include<stdio.h>main() int i,j,a3=1,2,3,4,5,6,7,8,9; for

51、(i=0;i<3;i+) for(j=i;j<3;j+)printf("%d",aij); printf("n");程序運行后的輸出結(jié)果是_。參考答案:123569【解析】當(dāng)i=0時,j=0、1、2時滿足條件,則打印a00、a01、a02;當(dāng)i=1時,j=1、2時滿足條件,則打印a11、a12;當(dāng)i=2時,j=2時滿足條件,則打印a22,所以打印結(jié)果為123569。7.有以下程序:#include <stdio.h>main()char a20"How are you?",b20; scanf("%s

52、",b);printf("%s %sn",a,b);程序運行時從鍵盤輸入:How are you?<回車>則輸出結(jié)果為_。參考答案:How are you? How【解析】用%s格式輸入字符串時,空格和回車都作為輸入數(shù)據(jù)的分隔符,不能被讀入,因此數(shù)組b的輸出結(jié)果為How。第07章 指針一選擇題1.有以下程序:#include <stdio.h>main()int m1,n2,*p&m,*q&n,*r; rp;pq;qr; printf("%d,%d,%d,%dn",m,n,*p,*q);程序運行后的輸出結(jié)

53、果是_。A)1,2,1,2 B)1,2,2,1 C)2,1,2,1 D)2,1,1,2 【解析】 m和n的值不變,輸出結(jié)果為1,2。指針*p和*q交換了指向的位置,即*p&n,*q&m,輸出結(jié)果分別為2,1。2.以下程序段完全正確的是A)int*p; scanf("%d",&p); B)int*p; scanf("%d",p);C)int k,*p&k; scanf("%d",p); D)int k,*p; *p&k; scanf("%d",p); 【解析】A)選項輸入的是指

54、針型變量p的地址,變量一定義就已分配好了地址不能再指定了,所以A錯誤。B)選項沒有指定指針p應(yīng)該指向的變量,沒給變量賦初值。D)選項中,p是地址,*p是地址內(nèi)存放的數(shù)據(jù),它把整型變量k的地址賦給了*p,所以錯誤。3.以下定義語句中正確的是。 A)intab0; B)charA651,bb; C)float a1,*b&a,*c&b; D)doublea0.0;b1.1; 【解析】本題考查變量的定義方法。如果要一次進行多個變量的定義,則在它們之間要用逗號隔開。因此選項A)和D)錯誤;在選項C)中,變量c是一個浮點型指針,它只能指向一個浮點型數(shù)據(jù),不能指向指針變量b;所以正確答案為B)。4.若有定義語句:double x,y,*px,*py;執(zhí)行了px&x;py&y;之后,正確的輸入語句是_。A)scanf("%f%f",x,y);B)scanf("%f%f"&x,&y);C)scanf("%lf%le",px,py);D)scanf("%lf%lf",x,y); 【解析】 本題考查scanf函數(shù),其格式為:sc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論