欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      C語(yǔ)言習(xí)題(詳細(xì)解答)

      時(shí)間:2019-05-12 20:13:48下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《C語(yǔ)言習(xí)題(詳細(xì)解答)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《C語(yǔ)言習(xí)題(詳細(xì)解答)》。

      第一篇:C語(yǔ)言習(xí)題(詳細(xì)解答)

      程序設(shè)計(jì)基礎(chǔ)(C語(yǔ)言版)習(xí)題

      第01章 一.選擇題

      1.以下敘述中正確的是________。

      A)程序設(shè)計(jì)的任務(wù)就是編寫(xiě)程序代碼并上機(jī)調(diào)試 B)程序設(shè)計(jì)的任務(wù)就是確定所用數(shù)據(jù)結(jié)構(gòu) C)程序設(shè)計(jì)的任務(wù)就是確定所用算法 D)以上三種說(shuō)法都不完整

      【解析】 程序設(shè)計(jì)通常分為問(wèn)題建模、算法設(shè)計(jì)、編寫(xiě)代碼和編譯調(diào)試四個(gè)階段。所以選項(xiàng)A)、B)、C)說(shuō)法都不完整。2.以下關(guān)于簡(jiǎn)單程序設(shè)計(jì)的步驟和順序的說(shuō)法中正確的是。A)確定算法后,整理并寫(xiě)出文檔,最后進(jìn)行編碼和上機(jī)調(diào)試

      B)首先確定數(shù)據(jù)結(jié)構(gòu),然后確定算法,再編碼,并上機(jī)調(diào)試,最后整理文檔 C)先編碼和上機(jī)調(diào)試,在編碼過(guò)程中確定算法和數(shù)據(jù)結(jié)構(gòu),最后整理文檔 D)先寫(xiě)好文檔,再根據(jù)文檔進(jìn)行編碼和上機(jī)調(diào)試,最后確定算法和數(shù)據(jù)結(jié)構(gòu)

      【解析】設(shè)計(jì)一個(gè)能解決實(shí)際問(wèn)題的計(jì)算機(jī)程序需要經(jīng)過(guò)以下幾個(gè)過(guò)程:① 建立模型。② 算法設(shè)計(jì):給出解決問(wèn)題的步驟,即算法。③ 算法表達(dá):選擇一種表達(dá)算法的工具,對(duì)算法進(jìn)行清晰的表達(dá)。④ 編寫(xiě)程序:選擇一種程序設(shè)計(jì)語(yǔ)言,把以上算法程序化,這稱為編寫(xiě)程序。⑤ 程序調(diào)試:對(duì)編寫(xiě)好的程序進(jìn)行調(diào)試,修改程序中的錯(cuò)誤。⑥ 程序文檔編寫(xiě)與程序維護(hù)。綜上所述,B)選項(xiàng)是符合上述描述的,其他選項(xiàng)不恰當(dāng)。3,敘述中正確的是________。A)C程序的基本組成單位是語(yǔ)句 B)C程序中的每一行只能寫(xiě)一條語(yǔ)句 C)簡(jiǎn)單C語(yǔ)句必須以分號(hào)結(jié)束 D)C語(yǔ)句必須在一行內(nèi)寫(xiě)完

      【解析】函數(shù)是C程序的基本組成單位;C語(yǔ)言書(shū)寫(xiě)風(fēng)格很自由,不但一行可以寫(xiě)多個(gè)語(yǔ)句,還可以將一個(gè)語(yǔ)句寫(xiě)在多行中。故本題答案為C)。4.以下敘述中正確的是。

      A)C程序中的注釋只能出現(xiàn)在程序的開(kāi)始位置和語(yǔ)句的后面 B)C程序書(shū)寫(xiě)格式嚴(yán)格,要求一行內(nèi)只能寫(xiě)一個(gè)語(yǔ)句 C)C程序書(shū)寫(xiě)格式自由,一個(gè)語(yǔ)句可以寫(xiě)在多行上 D)用C語(yǔ)言編寫(xiě)的程序只能放在一個(gè)程序文件中

      【解析】在C語(yǔ)言中,注釋可以加在程序中的任何位置,選項(xiàng)A)錯(cuò)誤。C程序可以分模塊寫(xiě)在不同的文件中,編譯時(shí)再將其組合在一起,選項(xiàng)D)錯(cuò)誤。C程序的書(shū)寫(xiě)風(fēng)格很自由,不但一行可以寫(xiě)多個(gè)語(yǔ)句,還可以將一個(gè)語(yǔ)句寫(xiě)在多行中。所以正確答案為選項(xiàng)C)。

      5.以下關(guān)于C語(yǔ)言的敘述中正確的是。

      A)C語(yǔ)言中的注釋不可以?shī)A在變量名或關(guān)鍵字的中間 B)C語(yǔ)言中的變量可以在使用之前的任何位置進(jìn)行定義

      C)在C語(yǔ)言算術(shù)表達(dá)式的書(shū)寫(xiě)中,運(yùn)算符兩側(cè)的運(yùn)算數(shù)類型必須一致 D)C語(yǔ)言的數(shù)值常量中夾帶空格不影響常量值的正確表示

      【解析】C語(yǔ)言中注釋可以放在任何位置,但不能夾在變量名或關(guān)鍵字中間,選項(xiàng)A正確;C語(yǔ)言中的變量要在使用之前定義,C標(biāo)準(zhǔn)規(guī)定定義位置在相關(guān)程序塊的首部,選項(xiàng)B錯(cuò)誤;C語(yǔ)言中兩側(cè)數(shù)據(jù)類型可以不一致,系統(tǒng)可進(jìn)行強(qiáng)制類型轉(zhuǎn)換,選項(xiàng)C錯(cuò)誤;C語(yǔ)言數(shù)值常量中不允許存在空格,選項(xiàng)D錯(cuò)誤。6.以下關(guān)于C語(yǔ)言數(shù)據(jù)類型使用的敘述中錯(cuò)誤的是。A)若要準(zhǔn)確無(wú)誤差地表示自然數(shù),應(yīng)使用整數(shù)類型 緒論

      B)若要保存帶有多位小數(shù)的數(shù)據(jù),應(yīng)使用雙精度類型

      C)若要處理如“人員信息”等含有不同類型的相關(guān)數(shù)據(jù),應(yīng)自定義結(jié)構(gòu)體類型 D)若只處理“真”和“假”兩種邏輯值,應(yīng)使用邏輯類型

      【解析】C語(yǔ)言中沒(méi)有邏輯類型,若只處理“真”或“假”兩種邏輯值,可以使用整型數(shù)“1”或“0”表示,故選D。第02章 一.選擇題

      1.有以下定義:int a;long b;double x,y;則以下選項(xiàng)中正確的表達(dá)式是。A)a%(int)(x-y)

      B)a=x?。統(tǒng);

      C)(a*y)%b

      D)y=x+y=x

      【解析】A)選項(xiàng)中如果x與y的值相等那么取余時(shí)就會(huì)有除數(shù)為0的情況。C)選項(xiàng)中取余的兩個(gè)數(shù)據(jù)都應(yīng)為整數(shù),不能有一方為實(shí)型變量,而a*y的結(jié)果為double型。D)選項(xiàng)表達(dá)式本身就錯(cuò)誤,不能給表達(dá)式賦值。所以,本題答案為B)。2.有以下程序

      #include main(){ int s,t,A=10;double B=6;

      s=sizeof(A); t=sizeof(B);

      printf(“%d,%dn”,s,t); } 在VC6平臺(tái)上編譯運(yùn)行,程序運(yùn)行后的輸出結(jié)果是 A)2,4

      B)4,4

      C)4,8

      D)10,6

      【解析】sizeof的作用就是返回一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù)。在VC6中整型占4個(gè)字節(jié),雙精度實(shí)型占8個(gè)字節(jié),所以選C)。

      3.若有定義:double a=22;int i=0,k=18;,則不符合C語(yǔ)言規(guī)定的賦值語(yǔ)句是。A)a=a++,i++;

      B)i=(a+k)<=(i+k);C)i=a%11;

      D)i=!a;

      【解析】C語(yǔ)言中取余運(yùn)算符兩側(cè)的操作數(shù)只能是整型(若為char型,則會(huì)自動(dòng)轉(zhuǎn)換成整型)。4.有以下程序:

      #include main(){ int a=1,b=0;

      printf(“%d,”,b=a+b);

      printf(“%dn”,a=2*b);} 程序運(yùn)行后的輸出結(jié)果是________。A)0,0

      B)1,0

      C)3,2

      D)1,2

      【解析】 執(zhí)行第一個(gè)printf語(yǔ)句時(shí),b=a+b=1,所以輸出1,執(zhí)行第二個(gè)printf語(yǔ)句時(shí),a=2*b=2,所以輸出結(jié)果為2。5.若有定義語(yǔ)句:int a=3,b=2,c=1;,以下選項(xiàng)中錯(cuò)誤的賦值表達(dá)式是。A)a=(b=4)=3; B)a=b=c+1;

      C)a=(b=4)+c;

      D)a=1+(b=c=4); 基本數(shù)據(jù)類型

      【解析】在A)選項(xiàng)中,賦值語(yǔ)句b=4先把4賦值給整型變量b,之后執(zhí)行(b=4)=3是把常量3賦值給常量4,但是由于C語(yǔ)言規(guī)定賦值運(yùn)算符的左側(cè)只能是變量,不能是常量或者表達(dá)式,因此A)選項(xiàng)錯(cuò)誤。6.有以下定義:int a;long b;double x,y;則以下選項(xiàng)中正確的表達(dá)式是。A)a%(int)(x-y)

      B)a=x!=y(tǒng);

      C)(a*y)%b

      D)y=x+y=x

      【解析】A)選項(xiàng)中如果x與y的值相等那么取余時(shí)就會(huì)有除數(shù)為0的情況。C)選項(xiàng)中取余的兩個(gè)數(shù)據(jù)都應(yīng)為整數(shù),不能有一方為實(shí)型變量,而a*y的結(jié)果為double型。D)選項(xiàng)表達(dá)式本身就錯(cuò)誤,不能給表達(dá)式賦值。所以,本題答案為B)。

      7.若有定義語(yǔ)句:int x=10;,則表達(dá)式x-=x+x的值為_(kāi)_______。A)-20

      B)-10

      C)0

      D)10

      【解析】 x-=x+x可化為:x=x-(x+x),由于x初始值為10,所以計(jì)算后,x=10-20=-10,因此選B)。二.填空題

      1.以下程序的功能是:將值為三位正整數(shù)的變量x中的數(shù)值按照個(gè)位、十位、百位的順序拆分并輸出。請(qǐng)?zhí)羁铡?/p>

      #include main(){int x=256;printf(“%d-%d-%dn”,__,x/10%10,x/100);}

      參考答案:x%10 【解析】x=256,x%10=6。

      2.以下程序運(yùn)行后的輸出結(jié)果是。

      #include 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)(1+0.5+2)=(int)3.5=3。3.若有定義語(yǔ)句:int a=5;,則表達(dá)式:a++的值是____。

      參考答案:5 【解析】 a++的含義是在使用a值以后,使a值加1,所以a++的值為5。4.若有語(yǔ)句double x=17;int y;,當(dāng)執(zhí)行y=(int)(x/5)%2;之后y的值為_(kāi)___。

      參考答案:1 【解析】 y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。

      5.設(shè)變量a和b已正確定義并賦初值。請(qǐng)寫(xiě)出與a-=a+b等價(jià)的賦值表達(dá)式 ____。

      參考答案:a=-b 【解析】a-=a+b等價(jià)于a=a-(a+b),等價(jià)于a=-b。第03章 一.選擇題 1.有以下程序

      #include main(){char 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í),按下列方式輸入數(shù)據(jù)(從第1列開(kāi)始,代表回車,注意,回車也是一個(gè)字符)12 34 順序結(jié)構(gòu)

      則輸出結(jié)果是

      A)1234

      B)12

      C)12

      D)12

      【解析】程序根據(jù)用戶輸入分別給字符型變量a、b、c、d賦值為'1'、'2'、''、'3',因此輸出到屏幕得到選項(xiàng)C中的格式。2.有以下程序段:

      char ch; int k; ch=′a′; k=12;

      printf(“%c,%d,”,ch,ch,k); printf(“k=%dn”,k);

      已知字符a的ASCII碼值為97,則執(zhí)行上述程序段后輸出結(jié)果是 A)因變量類型與格式描述符的類型不匹配輸出無(wú)定值 B)輸出項(xiàng)與格式描述符個(gè)數(shù)不符,輸出為零或不定值 C)a,97,12k=12 D)a,97,k=12

      【解析】輸出格式控制符%c表示將變量以字符的形式輸出;輸出格式控制符%d表示將變量以帶符號(hào)的十進(jìn)制整型數(shù)輸出。所以第一個(gè)輸出語(yǔ)句輸出的結(jié)果為a,97,第二個(gè)輸出語(yǔ)句輸出的結(jié)果為k=12,所以選項(xiàng)D)為正確答案。3.有以下程序

      #include main(){ char a[30],b[30];

      scanf(“%s”,a); gets(b);

      printf(“%sn%sn”,a,b); } 程序運(yùn)行時(shí)若輸入:

      how are you? I am fine <回車> 則輸出結(jié)果是 A)how are you?

      I am fine B)how

      are you? I am fine C)how are you? I am fine

      D)how are you?

      解析】scanf函數(shù)會(huì)把空格字符作為輸入的字符串之間的分隔符,因此字符串a(chǎn)為“how”。gets()函數(shù)讀取字符串時(shí),直至接受到換行符或EOF時(shí)才停止,并將讀取的結(jié)果存放在指針?biāo)赶虻淖址麛?shù)組中,因此其余輸入的內(nèi)容賦值給b。二.填空題

      1.以下程序運(yùn)行后的輸出結(jié)果是。

      #include main(){ int a=200,b=010;

      printf(“%d%dn”,a,b); }

      參考答案:2008 【解析】整型變量a的值為200,b的值“010”是用八進(jìn)制表示的“10”即十進(jìn)制的“8”,最后輸出格式均為%d,即十進(jìn)制格式,所以輸出為“2008”。

      2.有以下程序(說(shuō)明:字符0的ASCIl碼值為48)#include main(){ char c1,c2;

      scanf(“%d”,&c1); c2=c1+9;

      printf(“%c%cn”,c1,c2); } 若程序運(yùn)行時(shí)從鍵盤(pán)輸入48<回車>,則輸出結(jié)果為。

      參考答案:09 【解析】本題中通過(guò)ASCII碼對(duì)字符變量賦值,由于字符0的ASCII碼是48,因此字符變量c1為0,c2的ASCII碼比c1大9,因此c2為9。第04章 一.選擇題

      1.若變量已正確定義,在if(W)printf(“%dn”,k);中,以下不可替代W的是。A)a<>b+c

      B)ch=getchar()

      C)a==b+c

      D)a++

      【解析】在C語(yǔ)言中,表示不等于不能用“<>”,而只能使用“!=”。其他選項(xiàng)均滿足題目的要求。2.當(dāng)變量c的值不為2、4、6時(shí),值也為“真”的表達(dá)式是。A)(c==2)||(c==4)||(c==6)B)(c>=2&& c<=6)||(c?。?)||(c?。?)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&& c<=6)&&(c%2?。?)

      【解析】滿足表達(dá)式(c>=2&& c<=6)的整型變量c的值是2,3,4,5,6。當(dāng)變量c的值不為2,4,6時(shí),其值只能為3或5,所以表達(dá)式c?。?和c!=5中至少有一個(gè)為真,即不論c為何值,選項(xiàng)B)中表達(dá)式的值都為“真”。正確答案為B)。3.已知字母A的ASCII碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫(xiě)字母的表達(dá)式是。A)kk>=′A′&& kk<=′Z′ B)!(kk>=′A′||kk<=′Z′)C)(kk+32)>=′a′&&(kk+32)<=′Z′ D)isalpha(kk)&&(kk<91)

      【解析】C語(yǔ)言的字符以其ASCII碼的形式存在,所以要確定某個(gè)字符是大寫(xiě)字母,只要確定它的ASCII碼在'A'和'Z'之間就可以了,選項(xiàng)A)和C)符合此要求。在選項(xiàng)D)中,函數(shù)isalpha用來(lái)確定一個(gè)字符是否為字母,大寫(xiě)字母的ASCII碼值的范圍為65到90,所以如果一個(gè)字母的ASCII碼小于91,那么就能確定它是大寫(xiě)字母。本題答案選B)。4.有以下程序:

      #include < stdio.h>

      main()

      { int a=l,b=2,c=3,d=0;

      if(a==l && b++==2)

      if(b?。?||c--?。?)

      printf(“%d,%d,%dn”,a,b,c);

      else printf(“%d,%d,%dn”,a,b,c); 選擇結(jié)構(gòu)

      else printf(“%d,%d,%dn”,a,b,c);

      } 程序運(yùn)行后的輸出結(jié)果是________。A)1,2,3 B)1,3,2 C)l,3,3 D)3,2,1

      【解析】 程序首先執(zhí)行第一個(gè)判斷語(yǔ)句,a==1成立;b++==2,先判斷b是否為2,再進(jìn)行b加1操作,執(zhí)行后b的值為3。繼續(xù)執(zhí)行第二個(gè)判斷語(yǔ)句,注意程序此時(shí)進(jìn)行邏輯或運(yùn)算,b?。?的值為真,因此條件表達(dá)式b?。?||c--!=3的值為真,程序便不再執(zhí)行第二個(gè)邏輯語(yǔ)句c--!=3,而直接進(jìn)行輸出操作。因此,本題正確答案為C)。5.執(zhí)行以下程序段后,w的值為_(kāi)_______。

      int w='A',x=14,y=15;

      w=((x‖y)&&(w<'a')); A)-1

      B)NULL C)1

      D)0

      【解析】根據(jù)題目所給條件可知,x||y為1,w<'a'為1,1&&1結(jié)果為1。因此正確答案為C)。6.若變量已正確定義,有以下程序段:

      int a=3,b=5,c=7;

      if(a>b)a=b; c=a;

      if(c!=a)c=b;

      printf(“%d,%d,%dn”,a,b,c); 其輸出結(jié)果是 A)程序段有語(yǔ)法錯(cuò) B)3,5,3 C)3,5,5 D)3,5,7

      【解析】?jī)蓚€(gè)if語(yǔ)句的判斷條件都不滿足,程序只執(zhí)行了c=a這條語(yǔ)句,所以變量c的值等于3,變量b的值沒(méi)能變化,程序輸出的結(jié)果為3,5,3。所以正確答案為選項(xiàng)B)。7.有以下程序段:

      int a,b,c;

      a=10; b=50; c=30;

      if(a>b)a=b,b=c; c=a;

      printf(“a=%d b=%d c=%dn”,a,b,c); 程序的輸出結(jié)果是________。A)a=10 b=50 c=10

      B)a=10 b=50 c=30 C)a=10 b=30 c=10

      D)a=50 b=30 c=50

      【解析】該題考查if條件語(yǔ)句,當(dāng)條件為真時(shí),將b值賦給a,c值賦給b;當(dāng)條件為假時(shí),將a值賦給c。該題中if條件為假,所以將a的值賦給c,故a=10 b=50 c=10。8.有以下程序:

      #include

      main(){ int x=1,y=2,z=3;

      if(x>y)if(y

      else printf(“%d”,++y);

      printf(“%dn”,x++); } 程序的運(yùn)行結(jié)果是________。A)331

      B)41 C)2

      D)1

      【解析】該題目考查if條件語(yǔ)句。else語(yǔ)句和最近的一個(gè)if語(yǔ)句配對(duì)。由于x>y為假,所以直接執(zhí)行最后一行代碼。9.有以下程序:

      #include main(){ int x=1,y=0,a=0,b=0;

      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); } 程序的運(yùn)行結(jié)果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1

      【解析】本題考查了 switch結(jié)構(gòu)的內(nèi)容。在C語(yǔ)言中,程序執(zhí)行完一個(gè)case標(biāo)號(hào)的內(nèi)容后,如果沒(méi)有break語(yǔ)句,控制結(jié)構(gòu)會(huì)轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行,因?yàn)閏ase 常量表達(dá)式只是起語(yǔ)句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。本題程序在執(zhí)行完內(nèi)部switch結(jié)構(gòu)后,繼續(xù)執(zhí)行了外部switch結(jié)構(gòu)的 case 2分支。最后a和b的值分別為2和1。二.填空題

      1.在C語(yǔ)言中,當(dāng)表達(dá)式值為0時(shí)表示邏輯值“假”,當(dāng)表達(dá)式值為

      時(shí)表示邏輯值“真”。

      參考答案:非0 【解析】本題一定要明確一個(gè)概念,即:所有非0的數(shù)(并不只是“1”),在c語(yǔ)言中都表示邏輯值為“真”。

      2.設(shè)x為int型變量,請(qǐng)寫(xiě)出一個(gè)關(guān)系表達(dá)式__ ,用以判斷x同時(shí)為3和7的倍數(shù)時(shí),關(guān)系表達(dá)式的值為真。

      參考答案:(x%3==0)&&(x%7==0)【解析】x%3==0能保證x是3的倍數(shù),x%7==0能保證x是7的倍數(shù),(x%3==0)&&(x%7==0)能保證x是3的倍數(shù)并且

      x是7的倍數(shù)。3.有以下程序

      #include 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);} 程序運(yùn)行后的輸出結(jié)果是__。

      參考答案:4 【解析】a==1為真,b!=2為假,c!=3為假,所以d=4。4.有以下程序

      #include 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); } 若程序運(yùn)行時(shí)從鍵盤(pán)輸入12<回車>,則輸出結(jié)果為。

      參考答案:1217 【解析】本題中輸入12時(shí),第一條if的條件x>15不滿足因此不執(zhí)行,第二條if的條件x>10滿足因此輸出12,第三條if的條件x>5滿足因此輸出17。

      5.以下程序運(yùn)行后的輸出結(jié)果是。

      #include 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章 一.選擇題

      1.以下不構(gòu)成無(wú)限循環(huán)的語(yǔ)句或語(yǔ)句組是 A)n=0;

      do{++n;}while(n<=0); 循環(huán)結(jié)構(gòu)

      B)n=0;

      while(1){n++;} C)n=10;

      while(n);{n--;} D)for(n=0,i=1;;i++)

      n+=i;

      【解析】項(xiàng)A)中變量n的值,先自加1,再進(jìn)行循環(huán)條件判斷,此時(shí)循環(huán)條件n<=0不成立,跳出循環(huán)。所以正確答案為A)。2.有以下程序

      #include main(){ int y=10;

      while(y--);

      printf(“y=%dn”,y); } 程序執(zhí)行后的輸出結(jié)果是 A)y=0

      B)y=-1 C)y=l

      D)while構(gòu)成無(wú)限循環(huán)

      【解析】當(dāng)y減為1時(shí)判斷while(y--),此時(shí)滿足條件,但是y變成0。下次循環(huán)判斷while(y--)時(shí),因?yàn)閥為0不滿足條件跳出循環(huán),但是此時(shí)也要執(zhí)行y--,所以y變成了-1。打印輸出時(shí)輸出-1。3.有以下程序:

      #include main(){ int i=5;

      do { if(i%3==1)if(i%5==2){ printf(“*%d”,i); break; }

      i++;} while(i?。?);

      printf(“n”); } 程序的運(yùn)行結(jié)果是________。A)*7

      B)*3*5 C)*5 D)*2*6

      【解析】整個(gè)程序中只有對(duì)i增加的語(yǔ)句而沒(méi)有對(duì)i減少的語(yǔ)句,所以2、3都不可能出現(xiàn),選項(xiàng)B)和D)錯(cuò)誤。而i=5時(shí)第一個(gè)if語(yǔ)句的表達(dá)式為假,所以選項(xiàng)C)也錯(cuò)誤。4.以下程序段中的變量已正確定義:

      for(i=0;i<4;i++,i++)

      for(k=l;k<3;k++);printf(“*”); 程序段的輸出結(jié)果是________。A)******** B)****

      C)** D)*

      【解析】 本題考察for循環(huán)語(yǔ)句,注意第二個(gè)for語(yǔ)句的后面有一個(gè)分號(hào),即printf函數(shù)不屬于循環(huán)體,無(wú)論循環(huán)執(zhí)行多少次,printf(“*”)語(yǔ)句只執(zhí)行一次。因此,本題正確答案為D)。5.有以下程序

      #include main(){ int a=1,b=2;

      for(;a<8;a++){b+=a;a+=2;}

      printf(“%d,%dn”,a,b);} 程序運(yùn)行后的輸出結(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=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 main(){ int i,j;

      for(i=3;i>=1;i--)

      { for(j=1;j<=2;j++)printf(“%d”,i+j);

      printf(“n”);

      } } 程序的運(yùn)行結(jié)果是________。A)2 3 4

      B)4 3 2 4 5

      4 3 C)2 3

      D)4 5 4

      5

      3

      【解析】該題目主要考查for嵌套循環(huán),要注意循環(huán)變量i和j的取值范圍。輸出結(jié)果為變量i和j的和。8.設(shè)變量已正確定義,以下不能統(tǒng)計(jì)出一行中輸入字符個(gè)數(shù)(不包含回車符)的程序段是________。A)n=0;while((ch=getchar())?。?n')n++; B)n=0;while(getchar()!='n')n++; C)for(n=0;getchar()!='n';n++);

      D)n=0;for(ch=getchar();ch?。?n';n++);

      【解析】 A)項(xiàng)每進(jìn)行一次循環(huán)判斷一個(gè)字符是否為回車,如果不是就進(jìn)行下一次判斷,因此可以統(tǒng)計(jì)出輸入字符個(gè)數(shù);B)項(xiàng)與A)項(xiàng)的判斷相似,僅為是否將讀入的數(shù)據(jù)賦值給一個(gè)變量,因此并不影響判斷結(jié)果;C)想用for循環(huán)來(lái)判斷,與B)項(xiàng)的判斷完全相同,可以統(tǒng)計(jì)出輸入字符個(gè)數(shù);D)項(xiàng)中ch=getchar()是給變量ch賦初值,如果輸入回車,則程序只循環(huán)一次,如果輸入一個(gè)非回車的字符,則程序進(jìn)入死循環(huán)。因此,本題正確答案為D)。9.有以下程序

      #include 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);} 程序運(yùn)行后的輸出結(jié)果是

      A)m=6

      B)m=2

      C)m=4

      D)m=5

      【解析】第一次循環(huán)i=1,j=3和j=2時(shí)都能執(zhí)行m*=i*j,此時(shí)得到m的值為6;然后進(jìn)行第二次循環(huán)i=2,j=3時(shí)會(huì)執(zhí)行break語(yǔ)句,內(nèi)部循環(huán)直接結(jié)束,此時(shí)i再加1,也會(huì)導(dǎo)致退出外部循環(huán),所以最終結(jié)果m的值為6。10.有以下程序

      #include main(){ int s;

      scanf(“%d”,&s); while(s>0){ switch(s){ case 1:printf(“%d”,s+5);

      case 2:printf(“%d”,s+4);break; case 3:printf(“%d”,s+3); default:printf(“%d”,s+1);break; } scanf(“%d”,&s); } } 運(yùn)行時(shí),若輸入123450<回車>,則輸出結(jié)果是

      A)6566456 B)66656

      C)66666

      D)6666656

      【解析】switch語(yǔ)句執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)case語(yǔ)句繼續(xù)執(zhí)行,遇到break會(huì)跳出本次循環(huán)。本題中輸入1時(shí)會(huì)輸出65,輸入2時(shí)會(huì)輸出6,輸入3時(shí)會(huì)輸出64,輸入4時(shí)會(huì)輸出5,輸入5時(shí)會(huì)輸出6,在輸入0時(shí)不滿足循環(huán)條件,程序執(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)語(yǔ)句固定執(zhí)行8次

      B)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為4時(shí)結(jié)束循環(huán)操作 C)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為1和2時(shí)不做任何操作 D)當(dāng)產(chǎn)生的隨機(jī)數(shù)n為0時(shí)結(jié)束程序運(yùn)行

      【解析】當(dāng)產(chǎn)生的隨機(jī)數(shù)n為1或2時(shí),由于沒(méi)有遇到break,因此程序?qū)⒎謩e順序執(zhí)行case 3與case 4;當(dāng)n為3時(shí),程序輸出n的值后跳出switch語(yǔ)句;當(dāng)n為4時(shí),程序輸出n的值后將繼續(xù)執(zhí)行下一次循環(huán);當(dāng)n為0時(shí),程序執(zhí)行exit函數(shù)結(jié)束運(yùn)行。二.填空題 1.有以下程序

      #include main(){

      int m,n;

      scanf(“%d%d”,&m,&n);

      while(m!=n)

      { while(m>n)m=m-n;

      while(m

      }

      printf(“%dn”,m);} 程序運(yùn)行后,當(dāng)輸入14<空格>7<回車>時(shí),輸出結(jié)果是_____。

      參考答案:7 【解析】執(zhí)行while(mn)的循環(huán),得到m=7,n=7。此時(shí)所有循環(huán)結(jié)束,m=7。2.以下程序運(yùn)行后的輸出結(jié)果是____。

      #include main(){ int a=1,b=7;

      do{

      b=b/2;a+=b;

      } while(b>1);

      printf(“%dn”,a);}

      參考答案:5 【解析】 第一次循環(huán)執(zhí)行后,b=3,a=4,滿足條件b>1,循環(huán)繼續(xù);第二次循環(huán)執(zhí)行后,b=1,a=5,不滿足條件b>1,結(jié)束循環(huán)。所以輸出的a值為5。3.有以下程序:

      #include main(){ int f,fl,f2,i;

      f1=0;f2=1;

      printf(“%d %d ”,f1,f2);

      for(i=3;i<=5;i++)

      { f=f1+f2;printf(“%d”,f);

      f1=f2;f2=f;

      }

      printf(“n”); } 程序運(yùn)行后的輸出結(jié)果是____。

      參考答案:0 1 123 【解析】 第一個(gè)printf語(yǔ)句輸出結(jié)果為0 1。循環(huán)體總共循環(huán)三次,第一次循環(huán)結(jié)果為,f=1,f1=1,f2=1;第二次循環(huán)結(jié)果為f=2,f1=1,f2=2;第三次循環(huán)結(jié)果為f=3,f1=2,f2=3。4.若有定義:int k;,以下程序段的輸出結(jié)果是____。

      for(k=2;k<6;k++,k++)printf(“##%d”,k);

      參考答案:##2##4 【解析】在for循環(huán)語(yǔ)句中,自變量k的自增表達(dá)式為k++,k++。這是一個(gè)逗號(hào)表達(dá)式,所以輸出結(jié)果為##2##4。5.以下程序運(yùn)行后的輸出結(jié)果是____。

      #include

      main()

      { int k=1,s=0;

      do{

      if((k%2)?。?)continue;

      s+=k;k++;

      }while(k>10);

      printf(“s=%dn”,s);

      }

      參考答案:s=0 【解析】continue語(yǔ)句用于跳出本次循環(huán),直接進(jìn)行下一次循環(huán)。進(jìn)行if判斷時(shí)k的值為1不能夠被2整除,因此執(zhí)行continue退出本次循環(huán),不對(duì)s進(jìn)行任何操作,直接進(jìn)行循環(huán)條件判斷,此時(shí)k的值為1不滿足循環(huán)條件,退出while循環(huán),輸出s的值為0。第06章 一.選擇題

      1.下列選項(xiàng)中,能正確定義數(shù)組的語(yǔ)句是 A)int num[0..2008];

      B)int num[];C)int N=2008;

      D)#define N 2008

      int num[N];

      int num[N];

      【解析】選項(xiàng)A不符合C語(yǔ)言的語(yǔ)法要求;選項(xiàng)B中沒(méi)有指定數(shù)組的大?。贿x項(xiàng)C中數(shù)組大小不能用變量來(lái)指定。2.下列定義數(shù)組的語(yǔ)句中,正確的是。

      A)int N=10;

      B)#define N 10

      C)int x[0..10];

      D)int x[];

      int x[N];

      int x[N];

      【解析】A)中的N是一個(gè)變量,不可以用變量來(lái)定義數(shù)組,所以選項(xiàng)A)錯(cuò)誤。C)中把所有的下標(biāo)均列出不正確,此處只需指明數(shù)組長(zhǎng)度即可。D)中在定義時(shí)沒(méi)有指明數(shù)組長(zhǎng)度不正確,如果不指明長(zhǎng)度就應(yīng)在定義時(shí)對(duì)數(shù)組元素進(jìn)行賦值,而此選項(xiàng)沒(méi)有,所以錯(cuò)誤。故本題答案為B)。

      3.若要定義一個(gè)具有5個(gè)元素的整型數(shù)組,以下錯(cuò)誤的定義語(yǔ)句是 A)int a[5]={0};

      B)int b[]={0,0,0,0,0}; C)int c[2+3];

      D)int i=5,d[i];

      【解析】在進(jìn)行數(shù)組的定義時(shí),不能使用變量對(duì)數(shù)組的長(zhǎng)度進(jìn)行定義。其他選項(xiàng)均符合數(shù)組定義標(biāo)準(zhǔn)。4.以下錯(cuò)誤的定義語(yǔ)句是。

      A)int x[][3]={{0},{1},{1,2,3}};

      B)int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; C)int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}}; 數(shù)組

      D)int x[][3]={1,2,3,4};

      【解析】本題考查的是二維數(shù)組的定義和初始化方法。C語(yǔ)言中,在定義并初始化二維數(shù)組時(shí),可以省略數(shù)組的第一維的長(zhǎng)度,但是不能省略第二維的長(zhǎng)度。故選項(xiàng)C)錯(cuò)誤。

      5.若有定義:int a[2][3];,以下選項(xiàng)中對(duì)a數(shù)組元素正確引用的是。A)a[2][!1]

      B)a[2][3] C)a[0][3]

      D)a[1>2][!1]

      【解析】C語(yǔ)言中數(shù)組下標(biāo)是從0開(kāi)始的,所以二維數(shù)組a[2][3]的第一維下標(biāo)取值為0、1;第二維的下標(biāo)取值為0、1、2,因而選項(xiàng)A)、B)、C)都是錯(cuò)誤的,選項(xiàng)D)表示的是數(shù)組元素a[0][0]。所以正確答案為D)。6.有以下程序:

      #include #include main(){ char a[10]=“abcd”;

      printf(“%d,%dn”,strlen(a),sizeof(a)); } 程序運(yùn)行后的輸出結(jié)果是________。A)7,4

      B)4,10

      C)8,8

      D)10,10

      【解析】 strlen()用來(lái)返回字符串的長(zhǎng)度,而sizeof()返回的是一個(gè)對(duì)象或者類型所占的內(nèi)存字節(jié)數(shù),即數(shù)組所占的內(nèi)存。二.填空題

      1.以下程序運(yùn)行后的輸出結(jié)果是。

      #include main(){ int i,n[5]={0};

      for(i=1;i<=4;i++){ n[i]=n[i-1]*2+1;printf(“%d”,n[i]);} printf(“n”); } 參考答案:13715 【解析】本題中已知n[0]為0,根據(jù)循環(huán)的執(zhí)行可以得到n[1]為1,n[2]為3,n[3]為7,n[4]為15,因此輸出結(jié)果是13715。2.有以下程序

      #include main(){ int i,n[]={0,0,0,0,0};

      for(i=l;i<=4;i++)

      {n[i]=n[i-1]*3+1;printf(“%d ”,n[i]);} } 程序運(yùn)行后的輸出結(jié)果是。參考答案:1 4 13 40 【解析】第一次循環(huán)結(jié)果為:n[1]=0*3+1,即n[1]的值為1,打印輸出1 ;第二次循環(huán)結(jié)果為:n[2]=1*3+1,即n[2]的值為4,打印輸出4 ;第三次循環(huán)結(jié)果為:n[3]=4*3+1,即n[3]的值為13,打印輸出13 ;第四次循環(huán)結(jié)果為:n[4]=13*3+1,即n[4]的值為40,打印輸出40。3.有以下程序

      #include main(){

      int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};

      int b[3]={0},i;

      for(i=0;i<3;i++)

      b[i]=a[i][2]+a[2][i];

      for(i=0;i<3;i++)

      printf(“%d”,b[i]);

      printf(“n”);} 程序運(yùn)行后的輸出結(jié)果是____。

      參考答案:101418 【解析】當(dāng)i=0時(shí),b[0]=a[0][2]+a[2][0]=3+7=10;當(dāng)i=1時(shí),b[1]=a[1][2]+a[2][1]=6+8=14;當(dāng)i=2時(shí),b[2]=a[2][2]+a[2][2]=9+9=18,則打印結(jié)果為101418。4.有以下程序

      #include main(){ int n[2],i,j;

      for(i=0;i<2;i++)n[i]=0;

      for(i=0;i<2;i++)

      for(j=0;j<2;j++)n[j]=n[i]+1;

      printf(“%dn”,n[1]); }

      結(jié)果為:__________參考答案:3 【解析】通過(guò)第一次 for(i=0;i<2;i++)n[i]=0;的循環(huán)語(yǔ)句可知,已經(jīng)將數(shù)組n 中的兩個(gè)元素都賦初值為0。接下來(lái)的循環(huán)中,第一次循環(huán),外循環(huán) i=0 的前提下:內(nèi)循環(huán)j=0時(shí),運(yùn)行完n[0]=n[0]+1后n[0]為1;j=1時(shí),運(yùn)行完n[1]=n[0]+1后,n[1]為2。第二次循環(huán),外循環(huán)i=1的前提下,內(nèi)循環(huán)j=0時(shí),運(yùn)行完n[0]=n[1]+1后n[0]為3;j=1時(shí),運(yùn)行完n[1]=n[1]+1后,n[1]為3。

      5.以下fun函數(shù)的功能是在N行M列的整型二維數(shù)組中,選出一個(gè)最大值作為函數(shù)值返回,請(qǐng)?zhí)羁铡?設(shè)M,N已定義)int fun(int a[N][M]){ int i,j,row=0,col=0;

      for(i=0; i

      for(j=0;j

      if(a[i][j]>a[row][co1]){row=i;col=j(luò);}

      return(____); }參考答案:a[row][col] 【解析】通過(guò)程序可以看出,外循環(huán)是行,內(nèi)循環(huán)是列。先在行不變的情況下找一行內(nèi)最大的數(shù)據(jù)進(jìn)行記錄。通過(guò)語(yǔ)句 if(a[i][j]>a[row][col]){ row=i;col=j;}可知,如果變量a[i][j]大于a[row][col],將i賦給了row,將j賦給了col,所以a[row][col]是記錄當(dāng)前最大值的變量。6.有以下程序

      #include main(){ int i,j,a[][3]={1,2,3,4,5,6,7,8,9};

      for(i=0;i<3;i++)

      for(j=i;j<3;j++)printf(“%d”,a[i][j]);

      printf(“n”);

      } 程序運(yùn)行后的輸出結(jié)果是____。參考答案:123569 【解析】當(dāng)i=0時(shí),j=0、1、2時(shí)滿足條件,則打印a[0][0]、a[0][1]、a[0][2];當(dāng)i=1時(shí),j=1、2時(shí)滿足條件,則打印a[1][1]、a[1][2];當(dāng)i=2時(shí),j=2時(shí)滿足條件,則打印a[2][2],所以打印結(jié)果為123569。7.有以下程序:

      #include main(){ char a[20]=“How are you?”,b[20];

      scanf(“%s”,b);printf(“%s %sn”,a,b); } 程序運(yùn)行時(shí)從鍵盤(pán)輸入:How are you?<回車> 則輸出結(jié)果為_(kāi)___。參考答案:How are you? How 【解析】用%s格式輸入字符串時(shí),空格和回車都作為輸入數(shù)據(jù)的分隔符,不能被讀入,因此數(shù)組b的輸出結(jié)果為How。第07章 一.選擇題 1.有以下程序:

      #include main(){ int m=1,n=2,*p=&m,*q=&n,*r;

      r=p;p=q;q=r;

      printf(“%d,%d,%d,%dn”,m,n,*p,*q); } 程序運(yùn)行后的輸出結(jié)果是________。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)選項(xiàng)輸入的是指針型變量p的地址,變量一定義就已分配好了地址不能再指定了,所以A錯(cuò)誤。B)選項(xiàng)沒(méi)有指定指針p應(yīng)該指向的變量,沒(méi)給變量賦初值。D)選項(xiàng)中,p是地址,*p是地址內(nèi)存放的數(shù)據(jù),它把整型變量k的地址賦給了*p,所以錯(cuò)誤。

      3.以下定義語(yǔ)句中正確的是。

      A)int a=b=0;

      B)char A=65+1,b=′b′;

      C)float a=1,*b=&a,*c=&b;

      D)double a=0.0;b=1.1;

      【解析】本題考查變量的定義方法。如果要一次進(jìn)行多個(gè)變量的定義,則在它們之間要用逗號(hào)隔開(kāi)。因此選項(xiàng)A)和D)錯(cuò)誤;在選項(xiàng)C)中,變量c是一個(gè)浮點(diǎn)型指針,它只能指向一個(gè)浮點(diǎn)型數(shù)據(jù),不能指向指針變量b;所以正確答案為B)。4.若有定義語(yǔ)句:double x,y,*px,*py;執(zhí)行了px=&x;py=&y;之后,正確的輸入語(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ù),其格式為:scanf(“控制格式”,地址表列)。其中地址表列中應(yīng)為要賦值變量的地址。本題要為變量x和y賦值,并定義了兩個(gè)指針?lè)謩e指向x和y,因此取得變量x和y的地址的方法有兩種,一種是使用取地址符號(hào)“&”,即&x和&y,另一種是使用指針變量,即px和py。選項(xiàng)A)和D)中地址表列表示錯(cuò)誤;選項(xiàng)B)中控制格式與地址表列之間應(yīng)用逗號(hào)分開(kāi)。因此,本題正確答案為C)。5.有以下程序:

      #include main(){ int a[ ]={1,2,3,4},y,*p=&a[3];

      --p;y=*p;printf(“y=%dn”,y); } 程序的運(yùn)行結(jié)果是 A)y=0

      B)y=1 C)y=2

      D)y=3

      【解析】在程序中指針變量p初始指向a[3],執(zhí)行p減1后,p指向a[2],語(yǔ)句y=*p的作用是把a(bǔ)[2]的值賦給變量y,所以輸出為y=3。正確答案為D)。6.下列函數(shù)的功能是________。

      fun(char *a,char *b){ while((*b=*a)!='