C語言-習題集答案全部_第1頁
C語言-習題集答案全部_第2頁
C語言-習題集答案全部_第3頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.目 錄第一章 C語言基礎知識參考答案- 2 -第二章順序結構參考答案- 5 -第三章選擇結構參考答案- 7 -第四章循環(huán)結構參考答案- 11 -第五章函數(shù)參考答案- 15 -第六章指針參考答案- 18 -第七章一維數(shù)組參考答案- 21 -第八章二維數(shù)組參考答案- 28 -第九章字符串參考答案- 31 -第十章對C語言的深入討論參考答案- 33 -第十一章結構體與共用體參考答案- 34 -第十二章文件參考答案- 35 -. v.第一章 C語言基礎知識 參考答案一,選擇題1 C2 D3 A4 C5 A6 D7C 分析:C答案以數(shù)字開頭了8D 分析:int 是關鍵字9 C10 D11 B12 D

2、分析:Visual C+6.0中int類型的變量占的字節(jié)數(shù)為4。13 B分析:B中出現(xiàn)了8,而八進制只能有0到7組成14 D分析:答案D中開頭是0不是o15 A16 D17 B18 D分析:3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8本題目考察算術運算符,需要注意整數(shù)除以整數(shù)結果只能是整數(shù)19 A20C21A22 C23 D24 C分析:考察的是強制類型轉換,正確的是k%(int)f 25B26 C27 C28 B29A分析:本題目主要考察n+表達式的值是n變化之前的值,然后使n的值增加130 A31D分析:(int)a+b/b=(int)5.5+2.5/2.5=5+1.00

3、0000=b=6.000000同樣a,b的類型是double型的32D分析:long 和short不能相互修飾33 A34 C35 B36 B分析:C語言的標識符中只能包含字線、數(shù)字和下劃線,沒有連接符。37D分析:不同的計算機系統(tǒng)或者編譯系統(tǒng),對3種整數(shù)類型所占用的字節(jié)數(shù)有不同的規(guī)定。38 B39A分析:+運算符有前綴和后綴兩種形式,本題中的選項C就是前綴形式,其表達式的值為增1后的值,而選項A為后綴形式,其表達式的值為增1之前的值。而選項B和D的表達式都是k加1之后的值40D分析:字符常量是用單引號括起來的單個字符,所以選項B錯誤;此外還有一種特殊的字符專為控制設計,稱為轉義字符,有三種轉

4、義字符:一種是由一個“”開頭加一個普通字符組成,代表一個字符。如表示一個單引號字符,所以選項D正確;表示一個斜杠字符,而選項C中的則是錯誤的;用“”與其后的13位八進制數(shù)字構成的字符序列,表示ASCII碼等值于該八進制數(shù)的字符;用“x”與其后的12位十六進制數(shù)字構成的字符序列,表示ASCII碼等值于該十六進制數(shù)的字符;所以選項A錯誤。41 B分析:字符常量是用單引號括起來的單個字符,所以選項A正確;此外還有一種特殊的字符專為控制設計,稱為轉義字符,有三種轉義字符:一種是由一個“”開頭加一個普通字符組成,代表一個字符。如n表示一個換行符,所以選項D正確;用“”與其后的13位八進制數(shù)字構成的字符序

5、列,表示ASCII碼等值于該八進制數(shù)的字符,所以選項B錯誤,因為9不是八進制數(shù)字;用“x”與其后的12位十六進制數(shù)字構成的字符序列,表示ASCII碼等值于該十六進制數(shù)的字符;所以選項C正確。42 D43 B44 A45 B分析:選項A中字符0的ASCII碼值為48,所以A的結果不為1;選項B中0代表空值,空值NULL的ASCII碼值為0所以結果為1;選項C中字符1的ASCII碼值為49,所以結果不為1;選項D相當于用0-48結果也不為1。46D如果要表示十六進制字符,則要用x開頭,所以選項A錯誤;如果要表示八進制,則0開頭,后面跟13位的八進制數(shù),八進制數(shù)由07組成,不包含8,所以選項B錯誤;

6、用單引號括起來的單個字符才是字符常量,所以C錯誤;而n是轉義字符,用來表示回車符。47 C先將c1 變量中的字符的ASCII碼值輸出,即為65,將變量c2中字符的ASCII碼值減2后輸出,即為66。48 A變量c1和c2中的值相同,所以轉換成二進制數(shù)后,對應的二進制位上的值也相同,當兩值相同時,只有進行異或運算,結果才為0,所以c1c2值為0。所以本題的正確答案為A。二,填空題1 位 0 12 關鍵字 預定義標識符 用戶標識符3 84 八 十 十六5 int float double6 5+3.6/2=5+1.8=6.87 15 16 a+表達式的值是a變化之前的值,當然a本身增加了18 把1

7、0賦給變量B9printf(“*a=%d,b=%d*”,a,b);103整個表達式是一個逗號表達式,變量n和i賦值為2后,通過+i將i的值增加1變?yōu)?,然后再通過i+為i增加1,整個逗號表達式的值為i+的值,此時是后綴,所以整個i+表達式的值為3,而變量i的值為2。11、112、3. v.第二章 順序結構 參考答案一 選擇題1.C 解析:結構化程序的算法可以解決任何復雜的問題。2.C 解析:C程序的基本組成單位是函數(shù),在C程序中每行可以寫多條語句,每條語句以分號結束,每條語句可以占用幾行,在幾行內寫完。3.C 解析:隨意使用空語句會導致邏輯上出現(xiàn)錯誤,不要隨便使用。4.D5.D6.B7.A8.

8、C9.B 解析:在printf語句中,格式控制的個數(shù)只有一個,即d,而輸出項有兩項,即a和b。而得到的結果應該只有一個,所以應該輸出第一個變量的值,即變量a的值。10.C 解析:m=0256,即m是八進制的數(shù)0256,要以八進制無符號的形式輸出,即輸出256;n=256,即n是十進制的數(shù)256,也要以八進制無符號的形式輸出,首先要把十進制數(shù)轉化為八進制數(shù),256轉化為八進制為0400,以無符號形式輸出,即輸出400。11.C 解析:第一個數(shù)據(jù)的輸出控制寬度是2位,但是x的值是102,占3位,要輸出的數(shù)據(jù)寬度大于規(guī)定的輸出寬度,由于數(shù)據(jù)時右對齊方式,所以按數(shù)據(jù)的實際寬度輸出,輸出102。第二個數(shù)

9、據(jù)要求以十進制形式輸出,輸出控制寬度是2,y的值為012,是八進制數(shù),所以要轉換成十進制數(shù)10后再輸出。12.C13.A14.D 解析:float x=-123.456;說明x為單精度浮點數(shù)據(jù),單精度浮點數(shù)據(jù)對應的輸出格式應該為%f。15.C16.D.解析:m遵循從右向左結合的原則;m的值為m自增之前的值,所以執(zhí)行完xm以后,x被賦值為3;表達式xx8/+n中有加號除號,先算8/+n,+n的值為自增之后的值為5,8/5取整為1,即xx8/+n轉化為xx1,即把x1的值賦給x,x的值變?yōu)?。17.B 解析:輸入控制中第一個數(shù)要求以“2d”形式輸入,即要求輸入一個兩位的數(shù),而從鍵盤輸入的數(shù)為876

10、,所以從左到右取兩位數(shù)字87,即把87賦值給整型變量a,余下的6再賦值給浮點型變量b,自動進行類型轉換,b的值為6.000000,后面輸入的543則沒有賦值給變量。18.B19.B20.A21.A 解析:從鍵盤輸入數(shù)據(jù)的格式必須與輸入控制要求的格式一樣,B答案三個之間不要有空格;C答案用逗號分開是多余的;D答案格式不匹配。22.C23.C 解析:x乘以100是為了把x小數(shù)點后的兩位小數(shù)變?yōu)檎麛?shù),再加上0.5,如果小數(shù)點后一位大于等于5則會進一位,如果小數(shù)點后一位小于5則不會出現(xiàn)進位的情況,再對其進行強制類型轉換,采用舍去法丟掉小數(shù)部分,即對x乘上100后的數(shù)實現(xiàn)了小數(shù)位到整數(shù)位的四舍五入。最后

11、再除以100.0,把數(shù)字變回原來的大小,整數(shù)與浮點數(shù)相除結果為浮點數(shù),即實現(xiàn)了要求。24.C25.A26.D 解析:第1個輸出語句要求ch以%c(字符)形式輸出所以為輸出“a”,以%d(整數(shù))形式輸出為,字符轉換為整型要使用ASCII碼所以為“97”,k沒有對應的輸出符所以沒有輸出,第2個輸出語句要求以整型方式輸出k得到“12”。結果為“a,97,k=12”。27.C28.D二填空題1.結構化2.一條語句 分號3.884.115.25 21 376.27.58.099.i=10,j=2010.1611.AB回車12.B 6513.3457914.12<CR>315.12. v.第三

12、章 選擇結構 參考答案一、選擇題1、D 邏輯運算符兩側運算對象可以是任意合法的表達式,應該是兩條語句,所以選D。2、A 此題主要是考查C語言中if語句的合法條件表達式描述,在C語言中“不等于”用“!=”描述而不是用“<>”描述。B、C、D選項都是合法的表達式。3、D if語句的表達式可以是任意合法的表達式4、D 此題主要是考邏輯運算和關系運算的優(yōu)先級別.只要掌握!、算術運算和&&的優(yōu)先級別便可選對.這幾種運算符的具體優(yōu)先級關系見見教材P188,附錄三。5、A 此題主要是考邏輯運算符!、&&和|之間的優(yōu)先級別。!最高,&&次之,|最低。

13、先求得!a為0,所以不必計算!b的值,即!a&&!b的值為0,由c=0,!c=1,而0|1=1,所以選A。6、答案是BC語言的字符以其ASCII碼的形式存在,所以要確定某個字符是大寫字母,只要確定它的ASCII碼在A和Z之間就可以了,選項A和C符合要求。大寫字母的ASCII碼值的范圍為65到90,所以D選項符合要求,所以只有C是錯誤的。7、D 此題考到了+運算符以及邏輯運算。當計算機碰到a&&b時,先計算表達式a的值,若為真才會計算表達式b的值,否則將不會去計算b的值,因為一旦a=0,則0&&b必為0;而a|b則正好是相反的,即先計算表達式a的值

14、,若a為假才會計算表達式b的值,否則將不會去計算b的值,因為一旦a=1,則1|b的值必為1,理解了這兩點后,我們在看題目:i+=1的值為1,此時i為2,所以計算&&后的表達式,首先計算+j=3的值為1,j的值為3,由上面的原理我們可知,|后面的表達式不用再計算,所以此時i,j,k的值分別為2,3,3。8、C 此題主要是從概念上考if和else的配對問題9、A 此題主要是從實際應用上考if和else的配對問題,a=1,則!a的值是假,程序執(zhí)行第一個if下的第一個else語句,在判斷a=0顯然條件為假查看第二個if是否有其配對的else,發(fā)現(xiàn)沒有,則執(zhí)行最后一條printf語句輸出

15、b的值,因為在整個過程中程序沒有對b的值做任何改變,所以答案選擇A.10、D 此題主要是考if和else的一般形式。if后面的語句要么是單條語句,要么是由 擴起來的復合語句,不能是if后有兩條語句的,所以本題程序在運行的時候會出錯。11、C 此題考到了關系運算和邏輯運算及一定數(shù)學知識。|x-y|<10可等價為-10<x-y<10,首先選項A表示x-y的絕對值小于10,與題中的數(shù)學關系一樣;將-10<x-y<10用邏輯表達式表示的話就是B選項;而D選項只是數(shù)學變換,所以選擇C12、D 此題也是考到了真假條件的變換和if-else語句。A、B、C三項都是表示a為真時輸

16、出x,為假時輸出y,而D則是a為假時輸出x,為真時輸出y。13、D 此題考查了賦值表達式的一般格式,=的左邊是變量名,右邊是表達式,所以D項錯誤。14、C 此題主要是考查邏輯值用整數(shù)值替代的結果,數(shù)0代表邏輯假,非零值代表邏輯真。15、C 此題主要是考查if-else-if和if語句。具體分析見教材第49頁例7。16、C此題主要是考查if-else-if以及關系表達式的運算。首先判斷第一個條件a>b>c的值為0,所以不執(zhí)行第一條語句;在判斷第二個條件,c-1>=c表達式的結果為假,所以也不執(zhí)行其下面的語句,因此執(zhí)行最后一條語句,將輸出d+2的值為4 。17、C 此題主要是考查

17、條件表達式和條件運算符。首先要注意條件表達式的結合方向,它是從右至左的(可參照附錄三) 第一個條件表達式的值為a,第二個條件表達式的值為c ,而c=6,所以答案選C 。18、A此題主要是考查if-else語句和條件表達式的轉化。只要理解了if-else語句和條件表達式的運算規(guī)則的話,就很容易選出A。19、D 此題主要是考查在switch語句中break和default的作用及break的適用范圍。詳細說明可參看教材第三章 P53對switch的說明部分。20、 B 此題考查的是條件表達式求解問題。先看第一個條件表達式語句,a<b為真,所以k=b=2;再看第二個條件表達式語句,k>c

18、為假,所以k=k=2選 B21、C 此題考查邏輯與 && 的運算工作特性,&&運算的是從左至右,當左邊表達式的值為假時,右邊的表達式則不執(zhí)行,因本題中 k1=k1>k2的值為0亦為假,該表達式是一個賦值語句,且此時k1的值為0,因而右邊的表達式k2=k2>k1不執(zhí)行,因此K2的值沒有做任何改變。值依然是20,所以本題選選B。22、C 此題考查的是真假條件的等價問題。x-y為真表示x-y是非0的,也即x-y<0或x-y>0 即選C。23 答案是B滿足表達式(c>=2&&c<=6)的整型變量c的值是2,3,4,5,

19、6。當變量c的值不為2,4,6時,其值只能為3或5,所以表達式c!=3和c!=5中至少有一個為真,即不論c為何值,B選項中的表達式的值都為真,所以B選項正確。24 答案是D 舉個例子 如x=3帶入得出結果為0的選項是D選項。25 答案是D條件x=0|x=1為真,所以執(zhí)行y=1,然后執(zhí)行y=x*x-(x-2)*(x-2)=1-(-1)*(-1)=1-1=0,所以選擇A。26 答案是B此題考查if語句條件表達式后的語句塊區(qū)分問題。題中第一條if語句之后有兩條賦值語句,但他們不在一個復合語句之內,所以只有a=b是直接附屬于第一條if語句的,因此當a=3,b=5,c=7,則a>b為0,程序不執(zhí)行

20、a=b,但執(zhí)行c=a 此時c的值是3,在第二條if語句的條件表達式中c!=a條件值為0,則不執(zhí)行c=b因此最終a、b、c的值為3、5、3,因此選B27 答案是DC語言的字符以其ASCII碼的形式存在,所以要確定某個字符是大寫字母,只要確定它的ASCII碼在A和Z之間就可以了,選項B的書寫格式錯誤,而選項C不符合要求。大寫字母的ASCII碼值的范圍為65到90,所以A選項不符合要求,小寫字母的ASCII碼比大寫字母的ASCII碼大32,所以只有D是正確的。28 答案是B,此題考查三目運算符的運算特性。29 答案是B,此題考查switch語句運算過程。30 答案是C,表達式y(tǒng)%3=0的值為1,所以

21、執(zhí)行下面的輸出語句,表達式y(tǒng)的值為8,所以輸出結果是8。選擇C。31 答案是C,表達式x%3的值為2,非0所以執(zhí)行下面的輸出語句,將x-的值8輸出,此時x的值變?yōu)?,然后再執(zhí)行下一個輸出語句,將-x的值6輸出,x的值也變?yōu)?,所以選擇C。32 答案是D,這是嵌套形式的switch語句,因為break結構影響較大,而此程序中的第一個case后沒有break語句,程序執(zhí)行時,x=1,執(zhí)行內嵌的switch語句,因y=0,執(zhí)行a+,使變量a的值為1并終止內層switch結構,回到外層。程序繼續(xù)執(zhí)行case 2后面的語句a+;b+;,這使變量a,b的值分別為2和1,外層switch語句結束。所以此題選

22、擇D。33 答案是C,switch語句中開關條件必須是整型、字符型和float類型,此外強制類型轉換的格式C選項正確。二、填空題1、答案是:(x%3=0)&&(x%7=0)2、答案是: 4分析:程序中是一個ifelse結構。分析時要理清if與else的配對情況。3、答案是:4,5,99分析:題中的重點在于兩個if結構,大家要注意兩點:第一,如果if后面沒有花括號,則它后面的第一條語句是它的結構體,并且只有一條語句。(如果后面是一個結構,則整個結構都屬于if結構的結構體)。第二,變量在不斷的被重新賦值,所以其值在不斷的變化。4、答案是:yes,分析:該題與第二題是同一回事。5、答

23、案是:1。分析:這個題還上一個ifelse結構,考查點仍然是考察考生是否能夠正確識別if后面括號里的表達式p=a!=0,根據(jù)運算符的優(yōu)先級知道,這里應該先算a!=0,這是一個邏輯運算,a的值為5,所以a!=0為真,其邏輯值為1,將1賦值給p,所以條件為真,輸出p的值,為1。6、答案是:非零7、答案是:585858。分析:題中有三個if結構,注意,這三個if結構是相互獨立的,是互不相關的,只要他們的條件成立,就要執(zhí)行其結構體(后面的輸出語句)。通過鍵盤輸入,得a的值為58,所以a>50為真,輸出58;然后判斷a>40,仍然為真,再輸出58,最后判斷a>30,肯定為真,所以再輸出

24、58,連續(xù)三次輸出58。8、答案是:0。分析:本題的關鍵在于關系運算符的運算次序,a=5,b=4,c=3.a>b>c看起來是真的,但是這這是數(shù)學里面是這樣的,這里我們要一步一步的計算,先算a>b,a確實大于b,所以為真,邏輯值為1,后面的計算就變成了1>c,顯然為假,邏輯值為0,并將它賦值給d,所以最后輸出d的值為0。9、答案是:3。分析:這個題主要考察條件運算符。程序要輸出(P/3>0"p/10:p%3)這個條件表達式的值。P為30,所以p/3=10,10>0顯然為真,所以整個表達式的值應該是p/10的值,p/10得3。10、答案是:2 1。分析

25、:題中是一個switch嵌套結構。里面的switch是case 1的語句,題的關鍵點在于這個語句(即里面的這個switch結構)的后面并沒有跳出整個結構的break語句。所以,當x=1,與case相配以后,執(zhí)行完后面的語句(即里面的這個switch結構),然后沒有遇到break語句,所以并不跳出結構體,而是繼續(xù)執(zhí)行case 2后面的語句。所以最后得到的結果應該是2 1,而不是1 0。11、答案是:0。字符空格的ASCII碼不為0,所以本題中表達式!c的值為0,b=0&&1的結果顯然為0。12、答案是:2。此題考查邏輯或運算的運算特性,當|運算的左邊的表達式值為1時則不進行右邊表

26、達式的計算。此外對于自增運算a+的運算規(guī)則是先使用在自增。13、答案是:-4。表達式!n的值為1,所以執(zhí)行x-=1后x=1;表達式m的值為非0值,所以執(zhí)行其后的語句x-=2后x的值為-1,表達式x的值也為非0,所以執(zhí)行其后的語句后x的值為-4,最后輸出x的值即為-4。14、答案是:*&。表達式c=5的值為真,所以表達式的值等于1,因此輸出符號“*”,然后執(zhí)行“break”,繼而去執(zhí)行“default:printf(“&”);”語句,輸出符號“&”。15、答案是:12 17。當從鍵盤輸入x的值為12時,程序自上而下執(zhí)行經(jīng)過三個if條件判斷第一個條件不滿足,第二、第三兩個都

27、滿足。因此最終輸出結果為12 17。16、答案是:a:b c:t1。條件表達式類似于if語句,根據(jù)“.”前面子表達式的邏輯值來判斷應該計算“:”前面的子表達式還是后面的作為整個條件表達式的結果。題目要求輸出a、b、c3個變量中的最小值,所以當a<b時,應該選a,否則選b,幫前一空應填a:b。同理,后一空應填c:t1。. v.第四章 循環(huán)結構 參考答案一、選擇題:1. B 解析:a的值為1,a<6為真,執(zhí)行循環(huán)體,b的值加a后為3,a的值加2后為3,b的值與10求余運算后值為3。 a的值為3,a<6為真,執(zhí)行循環(huán)體,b的值加a后為6,a的值加2后為5,b的值與10求余運算后值為

28、6。 a的值為6,a<6為真,執(zhí)行循環(huán)體,b的值加a后為11,a的值加2后為7,b的值與10求余運算后值為1。 a的值為7,a<6為假,不執(zhí)行循環(huán)體,直接輸出a、b的值為7,1。2. A 解析:k的值為5,進入循環(huán),(-k)表達式的值為4(真),同時k的值改變?yōu)?,輸出表達式k-=3的值1,同時k的值為1。k為1,表達式(k)的值為0, 結束循環(huán)。3. A 解析:X=0,y=5,z=3,(z>0&&x<4)值為真,進入循環(huán)體,y值為4,z值為2, x值為11 (z>0&&x<4)值為真,進入循環(huán)體, y值為3,z值為1, x值

29、為22 (z>0&&x<4)值為真,進入循環(huán)體, y值為2,z值為0, x值為33 (z>0&&x<4)值為假,結束循環(huán)。4 輸出x,y,z的值3,2,04. D 解析:當K的值為3時,只執(zhí)行case 3后面的語句n+=k,n的值為3;當k的值為2時,先執(zhí)行case 2后面的語句,但沒有break,所以不會退出,繼續(xù)執(zhí)行case 3后面的語句n+=k,n的值為5;當k的值為1時,先執(zhí)行case 1后面的語句n+=k,n的值為6,先執(zhí)行case 2后面的語句(沒有),繼續(xù)執(zhí)行case 3后面的語句n+=k,n的值為7。輸出n的值7。5. B

30、 解析: 在循環(huán)體中有“s+=1;”s的初始值為0,要讓s的值等于2必須是循環(huán)體執(zhí)行兩遍。當循環(huán)提執(zhí)行兩遍后a的值等于-3,所以在n=-3的時候循環(huán)體執(zhí)行兩遍后條件表達試(a!=0)為假,會退出循環(huán)。6. B 解析: 程序開始時,y=10,while循環(huán)中執(zhí)行y自減運算,值的注意的是他的循環(huán)體只是一個空語句,則由于自減運算y- 的特點:先使用后自減,因為當y的值減為0時,while循環(huán)結束,但y變量依然執(zhí)行自減運算,此時y = -1。因此最終輸出的y的值為 y=-1,因此選B。7. A 解析:x3; 先執(zhí)行循環(huán)體,輸出表達式x-=2的值1,同時x的值也改變成1,再判斷表達式的值(!x),x的值

31、為1(真),(!x)為假,循環(huán)結束。8. B 解析:分析:B選項每次進入循環(huán)體,都要先執(zhí)行p=1;即1賦值給p.所以不能求出5!的值。9. D解析:變量i每次增量為2,變化過程為:1->3->5->7->9,語句s+=1每次執(zhí)行使s增加的數(shù)為:2,4,6,8,10,所以s的值為自然數(shù)110中偶數(shù)的值。10. C 解析:C項s=s+1/n, 1/n首先運算,n為整型變量,1也是整型變量,當n=210時,1/n的值為整數(shù)0,故C不正確11. B 分析過程與第6題類似。12. C13. A從鍵盤輸入 1 2 3 4 5 0后,程序從main函數(shù)開始執(zhí)行,先將1讀入到s變量中,

32、while的判斷條件s>0成立,則執(zhí)行循環(huán)體。循環(huán)體語句是一個switch結構的語句,依據(jù)s的值去執(zhí)行相應的case語句,直到碰到break語句跳出switch結構。第一次s為1,執(zhí)行case 1: 此時輸出6,沒有碰到break語句,繼續(xù)執(zhí)行case 2:輸出5,緊接著碰到break語句跳出本次switch結構。然后程序再次讀入整數(shù)2再次執(zhí)行while循環(huán)。此題需要理解switch語句的執(zhí)行過程。14. D 解析:在循環(huán)中當x等于0,3,6,9時x%3等于0,這時會進入if語句執(zhí)行printf語句,在輸出前x會先自加。屏幕上輸出14710。15. D 解析: 注意a變量在for循環(huán)的表

33、達式3和循環(huán)體中都有改變。16. 2345 解析:選擇中沒有此答案。本題注意的是在循環(huán)第一次進入switch語句的時候是執(zhí)行的default后面的語句塊,由于沒有break,所以還會執(zhí)行case2:case4:后面的語句。17. A解析: 首先執(zhí)行+n,判斷條件表達式n<=0為假退出循環(huán)。B條件表達式1永遠為真是無限循環(huán),C條件表達式n的值為10永遠為真是無限循環(huán),D沒有條件表達式,所以沒有退出條件,是無限循環(huán)。此題要注意的是0為假,非0為真。18. B解析:此題考查for語句的嵌套以及if語句的執(zhí)行。此題輸出的結果是m=1。分析:第一次循環(huán) i=1,j=319. D 解析:第一次循環(huán)x

34、=8,x%3<>0,進入if語句輸出x的值為8,然后x自減1,執(zhí)行continue立即進行下次循環(huán)條件判斷。第二次循環(huán)x=6,x%3=0,不進入if語句,執(zhí)行if語句后面的printf(“%d,”,-x),x先自減1再輸出得到5。第三次循環(huán)x=4,x%3<>0,進入if語句輸出x的值為4,然后x自減1,執(zhí)行continue立即進行下次循環(huán)條件判斷。第四次循環(huán)x=2,x%3<>0,進入if語句,輸出x的值為2,然后x自減1,執(zhí)行continue立即進行下次循環(huán)條件判斷。第五次循環(huán)x=0,判斷表達式x>0為假。結束循環(huán)輸出結果為8,5,4,2。答案D20.

35、 C解析:第一次循環(huán)a=0,a%2=0,進入if語句的else部分輸出字符A,第二次循環(huán)a=1,a%2=1,進入if語句輸出字符2, 第三次循環(huán)a=2,a%2=0,進入if語句的else部分輸出字符C, 第四次循環(huán)a=3,a%2=1,進入if語句輸出字符4, 第五次循環(huán)a=4,a%2=0,進入if語句的else部分輸出字符E, 第六次循環(huán)a=5,a%2=1,進入if語句輸出字符6,此時a=6,跳出循環(huán),因此最終結果輸出:A2C4E6。21. A22. B 解析:外層循環(huán)3次,i的值在內層循環(huán)中依次為1,2,3內層循環(huán)次數(shù)依次為3,2,1次。23. D 解析:代碼“if(n%3!=0) cont

36、inue;”無實際意義。當n自加到4的時候結束循環(huán)。答案D。24. D解析: 表達式2為賦值語句k=1,條件永遠為真,會進入死循環(huán)。答案D25. A 解析:0%任何數(shù)等于0,所以第一次循環(huán)的時候就進入了if語句退出了for循環(huán)。i=21,i<20為假,退出了while循環(huán)。a的值為21。26. D 解析:i的初值為0,第一次循環(huán)的時候滿足i<0,進入第一個if語句,執(zhí)行continue直接進行下次循環(huán),i的值沒有改變。第二次循環(huán)又重復了第一次循環(huán)的操作,所以是死循環(huán)。27. B解析: 控制每行輸出“*”號的過程。一共四行,每行輸出奇數(shù)個。二填空題:1. 7 解析:從鍵盤輸入14 6

37、3后程序將14賦給變量m,63賦值給變量n,最外層的while條件m!=n為真,進入循環(huán)體。循環(huán)體語句是兩組while循環(huán),依次計算改變m、n的值直到m=n時程序結束,因此最終輸出m的值為7。2. 11解析:循環(huán)的判斷表達式為i<5,i的初值是1,所以i得值依次是1,2,3,4。sum=sum+1+2+3+4,sum的值等于11.答案是113. n=n/10 解析:此題的解法是先用輸入的數(shù)據(jù)%10可以得到個位數(shù),再讓輸入的數(shù)據(jù)除以10,使十位變成個位。循環(huán)使用上面的方法。當只剩下個位的時候也就是n小于10的時候n/10等于0退出循環(huán)。所以填入的是“n=n/10”。4. 3 4解析:此題考

38、查for循環(huán)語句的執(zhí)行機制。表達式3在跳出循環(huán)前會執(zhí)行一遍,因此i的值最后為3。5. 5解析:for循環(huán)語句的循環(huán)體是空語句。6. 6 解析:此題屬于循環(huán)的嵌套。當i=1時,輸出0個號,當i=2時,輸出1個號,當i=3時,輸出2個號,當i=,4時,輸出3個號,共輸出6個號。7. 0 解析:getchar()只能獲得單個字符,輸入“1234567890”ch的值為1。循環(huán)條件為假,循環(huán)一次也沒有執(zhí)行。答案為:0 8. 23 解析:參考第3題。答案:543219. k<=n k+解析: 見書59,64頁while和for循環(huán)的執(zhí)行過程。答案:k<=n k+10. ACE解析:理解字符轉

39、化為整形數(shù)使用到ASCII碼,a的ASCII碼是97,f是102,A是65。答案是ACE11. k<=n12. 23 解析:此題需理解的是在switch中case后面沒有break的話會繼續(xù)執(zhí)行下一個case或default后面的語句。答案為2313. 1 3 2 解析:m=0,n=0,k=0,i=9當i值為9時,i<=11為真,執(zhí)行switch語句,(i/10)的值為0,匹配case 0,執(zhí)行m+,n+,再執(zhí)行break語句,跳出switch體,再執(zhí)行i+, i值為10;此時m值為1,n的值為1,k的值為0.當i值為10時,i<=11為真,執(zhí)行switch語句,(i/10)

40、的值為1,匹配default,執(zhí)行k+,n+,結束switch體,執(zhí)行i+,i值為11. 此時m值為1,n的值為2,k的值為1.當i值為11時,i<=11為真,執(zhí)行switch語句,(i/10)的值為1,匹配default,執(zhí)行k+,n+,結束 switch體,執(zhí)行i+,i值為12. 此時m值為1,n的值為3,k的值為2. i值為12時,i<=11為假,結束for循環(huán)。最后輸出m,n,k的值132.14. i<10 i%3 解析:根據(jù)題意先得到100以內所有個位是6的數(shù),在判斷哪些能被3整除。答案為i<10 i%3!=0。15. 074 解析:當a的值為0時,a<

41、20為真,則執(zhí)行b=a%10后b的值為0,執(zhí)行putchar函數(shù)后輸出字符0,for循環(huán)中表達式3中每次a遞增7,所以第二次循環(huán)時,a的值為7,a<20為真,則執(zhí)行b=a%10后b的值為7,執(zhí)行putchar函數(shù)后輸出字符7。第三次a的值為14,a<20為真,則執(zhí)行b=a%10后b的值為4,執(zhí)行putchar函數(shù)后輸出字符4,此時執(zhí)行表達式3后a的值為21,a<20條件為假,循環(huán)結束。因此最終答案為輸出:074. v.第五章 函數(shù) 參考答案一 選擇題1.C 解析:在C程序的書寫時,嚴格的縮進要求可以增強程序的可讀性,但是不會影響程序的編譯于運行。2.B 解析:在C程序中必須有

42、且僅有一個主函數(shù)為main函數(shù),它是程序的入口和出口。但是沒有規(guī)定它在程序中具體的位置。3.A4.B5.A 解析:函數(shù)的實參可以使被調用函數(shù)的調用語句。但是總之函數(shù)的實參個數(shù)之間用逗號隔開,個數(shù),類型分別于形參的一一對應。6.B 解析:當程序在函數(shù)體中執(zhí)行時,遇到return語句結束函數(shù)的調用。即使函數(shù)體中有多個return語句,但是遇見第一個return語句時函數(shù)的調用就結束了,后面的return語句是不會再執(zhí)行的(也就是說即使有多條return語句,最終執(zhí)行的只有一句)。而返回值是void類型的函數(shù)一般有return語句是缺省的,如果要有不能return語句后面不能有返回值,可以是retu

43、rn;;如果函數(shù)體中沒有使用return語句,當函數(shù)調用結束后,還是會回到調用處的。7.B 解析:其他解析同上。return語句中可以有表達式和常量,變量等。8.D.解析:調用語句可以出現(xiàn)在表達式,實參和當一句話獨立存在,但是不能出現(xiàn)在形參中,形參一般情況下是變量。9.C 解析:考察的是函數(shù)的調用;其中的實參有兩個,實參1為逗號表達式最終的值,實參2為自增表達式的值。10.C解析:f1(x,y)的作用是返回x、y中較大的,f2(x,y)的作用是返回x、y中較小的。d=f1(a,b)=f1(4,3)=4d=f1(d,c)=f1(4,5)=5e=f2(a,b)=f2(4,3)=3e=f2(e,c)

44、=f2(3,5)=3此時各值為a=4,b=3,c=5,d=5,e=3,f=a+b+c-d-e=4。所以答案d, f , e為5, 4, 311.A解析:函數(shù)不能嵌套調用,但是可以自己調用自己成為遞歸;被調用函數(shù)在調用之前可以先聲明,再調用,后定義;構成C程序的基本單位是函數(shù)而不是語句。12.C 解析:fun1(a)=a2,fun2(x,y)=(int)(fun1(x)+fun1(y)=(int)( x2+ y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值為5.0。13.C 解析:函數(shù)的值是單向傳遞的,只能是從實參

45、傳到形參,而且只有當從實參傳到形參時才為形參分配一定的存儲空間。等函數(shù)調用結束后,這個空間就會被釋放掉。14.B解析:考察函數(shù)的調用。調用語句中的實參有兩個,實參1為表達式2*a,其值為8,實參2為調用語句fun(b,c),在這個調用語句中又有兩個實參分別傳給fun函數(shù)的形參a和b,調用結束后返回的值為5;故實參2的最終值為5,再次調用函數(shù)fun,分別把8傳給a,把5傳給b,最后返回的結果值為6.故答案選B.15.C 解析:函數(shù)不能嵌套定義。改變形參的值不會影響實參的值。函數(shù)體中要使用C中的庫函數(shù),得包含定義其所在的頭文件。16.A 考察的是函數(shù)的聲明。在函數(shù)聲明時,聲明是一句話,其中形參的類

46、型不能省略,但是形參名可以省略;聲明時形參名可以和定義時的形參名不相同,但是類型必須匹配;聲明時必須指出函數(shù)的返回值類型和名稱,這兩點必須與定義時的返回值類型和名稱一一對應。17.B 解析:允許這種函數(shù)說明的方式存在。如果只在主函數(shù)中說明,則只能在主函數(shù)中調用f;如果在主函數(shù)以前說明,則包括主函數(shù)的所有函數(shù)都可以調用,如果同時主函數(shù)又說明了,則不影響。18.B19.C20.A 解析:程序的執(zhí)行總是從main函數(shù)開始,在main函數(shù)結束,無論main函數(shù)在程序的什么地方。21.D22.A 解析:函數(shù)f(int v,int w)的功能是將實參v和w進行交換,但是實參值的變化對形參沒有影響,所以本題

47、中x,y,z中的值不發(fā)生變化。23.C 解析:本題考察的是函數(shù)的遞歸調用。在解決這類題時,先找出何時被調用函數(shù)調用結束,然后確定被調用函數(shù)總共被調用了幾次。再分析最終的結果。24.B上面已經(jīng)分析過同類問題。25.A 考察的還是遞歸調用的問題。26.B.同時。27.A.解析:在主函數(shù)中確定循環(huán)的次數(shù)為三次,實參i的值分別為0,10.20.故調用f函數(shù)的次數(shù)為3次;故結果為1+101+401=503.28.B.解析:主函數(shù)中第一次調用fun函數(shù)時實參為3,故調用fun函數(shù)時在函數(shù)體中循環(huán)了3次,輸出了3個*;第二次調用fun函數(shù)時實參為4,故輸出了4個*;由此可以確定選擇B答案。29.B30.D

48、主函數(shù)的循環(huán)語句中對fun函數(shù)總共調用了4次,每次都返回形參a的值;只有在把值從實參傳給形參時才為形參分配存儲空間,等函數(shù)調用結束,這個空間會消失掉。所以形參a的值在每次調用時都為2,故最后主函數(shù)中的s的值為2*2*2*2=16.二填空題1.1.0,1.0,1.0解析:分別求出變量的初始值。a=a*x為的是求xn ,所以其初始值為1,b=b*i位的是求n!,所以其初始值為1,當n=0時,s=1,所以s的初始值為1。由于定義的是double型的數(shù)據(jù),所以答案為a=1.0,b=1.0,s=1.0;2.m=fun(a,4)+fun(b,4)-fun(a+b),4);解析:由程序可以看出fun(x,n

49、)=xn。fun(a,4)=a4, fun(b,4)=b4,fun(a+b,3)=(a+b)3,當要計算m= a4+ b4+(a+b)3 時,函數(shù)調用語句為m= fun(a,4)+ fun(b,4)+ fun(a+b,3);3. x,x*x+1解析:1)求f(x)的累加和,即為求f(0)+f(1)+ f(2)+ f(3)+ f(4)+,函數(shù)SunFun來實現(xiàn)此功能。括號中應該填入累加的序號值,即為x。2)f(x)=x2+1,F(xiàn)(int x)函數(shù)來實現(xiàn)這個功能,所以填寫x*x+1。4. 5.0解析:fun1(a)=a2,fun2(x,y)=(int)(fun1(x)+fun1(y)=(int)(

50、 x2+ y2),所以fun1(1.1,2.0)=(int)(1.21+4.0)=(int)5.21=5由于w是double型的,所以w的值為5.0。5.1 3 解析:fun函數(shù)是一個遞歸函數(shù),主函數(shù)中調用的fun(3)共遞歸兩次,fun(3)中又調用fun(3/2)即fun(1),先輸出fun(1)中x的值,為1,然后再輸出fun(3)中x的值為3。所以結果為1 3。6. double max解析:通過程序可以看出,main函數(shù)中使用了max函數(shù),而其他地方?jīng)]有對max函數(shù)進行說明。所以程序中應該對max函數(shù)進行說明。說明的格式為double max(double,double)。7.3,2

51、,2,3 解析:同課本本章第三節(jié)例1。8.2 5解析:同上面第5題相類似。9.5510.30 0. v.第六章 指針 參考答案一、選擇題1 答案:A 分析:本題主要考指針賦值,n2=n1;是把n2的值賦給n1,故根據(jù)指針賦值的定義可知選A,即把q所指對象的值賦給p所指對象。2 答案:B 分析:本題主要考指針定義,因為p指向變量x,故輸出其值的時候應該是x的值。3 答案:C 分析:本題主要考指針的定義和賦值,C前面是定義一個量a并賦值為10,后面定義一個指針,并把a的值賦給這個指針。4 答案:D5 答案:A分析:本題主要考的是指針的變量的賦值,在使用scanf()函數(shù)的時候,后面跟的是一個地址,

52、由于pa本身保存的是地址,故選A6 答案:D分析:本題主要考的指針的賦值及指向指針的指針的賦值,根據(jù)定義知選D。B的正確形式是*q2;C的正確形式應該是q=&p。7 答案:C分析:本題主要考的是全局變量和局部變量,以及指針的用法,第一個f(&a)的返回值是5,第二個返回值是2。8 答案:A 分析:本題主要考的是變量自加,指針傳值,以及指針的賦值。通過第二行a=b可知p1,p2指向的變量的值相同,都指向了b所指的對象,也是p2所指的對象a,由于(*a)+;是實現(xiàn)a所指對象的自加,故由a變成b,故最終選A。9 答案:A 分析:本題主考NULL,一般來說當我們把一個空值以整數(shù)的形式輸

53、出出來的時候,默認的情況是0。10 答案:C11 答案:C 分析:本題主要考指針的指針,c先指向b,b是一個指針,它指向a,故c最終是指向a的,故其值是a中的值。12 答案:A 分析:本題主要考指針的賦值,我們不能把一個具體的值賦給一個指針變量。B選項是w,p指向同一對象。C是p指向a。D是把w所指對象的值賦給p所指對象。13 答案:B 分析:本題主要考指針傳值,p,q分別指向a,b,然而r會指向它們的較小值。14 答案:D 分析:在D中把一個整形變量的值賦給一個指針的地址,故而是錯的。應該寫成p=&a。15 答案:D16 答案:D17 答案:C 分析:本題主要考指針標識符*和乘號*的

54、區(qū)別,*p=*p1*(*p2)中第1,2,4個*號是指針標識符,而第三個是乘號,故其運算的結果是3。18 答案:A19 答案:A 分析:本題主要說的是函數(shù)的遞歸調用,函數(shù)fun()實現(xiàn)的功能是從1加到n,然后返回給主函數(shù)。20 答案:D分析:A不能把一個具體的值賦給一個指針變量。B q是指向指針的指針只能保存指針的地址。C同B。21 答案:D分析:A指針賦處初值時不能把一個具體的值賦給一個指針變量指向的地址。B語法錯誤,C不能發(fā)地址賦給浮點型變量。22 答案:C分析:scanf()函數(shù)的輸入數(shù)據(jù)列表應該是合法的地址表達式。23 答案:D分析:A中b需要預先定義,B中字符變量b只能接收單個字符。C中二級指針應定義為*c。24 答案D25 答案:B二、填空題1 答案:8 4 分析:void f()函數(shù)里的x,y分別是一個指針變量和整型變量,指針x指向一個整型的變量,即指向主函數(shù)里的x,故在函數(shù)void f()里修改指針x的值,會影響到主函數(shù)里的x的值,但修改void f()里的y的值卻不會影響到主函數(shù)里的y的值。因為主函數(shù)x傳的是地址,y傳的是值。2 答案:d。 3 答案:35分析:p,q分別指向x,y,然后調用函數(shù)swap();它的功能是把兩個指針所指向的對象交換,原來a,b分別指向x,y,但交換后分別指向y,x,

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論