![《全國計算機等級考試二級教程——C語言程序設計》課后習題詳解[1]_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/8f16d7d6-2c94-4225-b687-c5497b955992/8f16d7d6-2c94-4225-b687-c5497b9559921.gif)
![《全國計算機等級考試二級教程——C語言程序設計》課后習題詳解[1]_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/8f16d7d6-2c94-4225-b687-c5497b955992/8f16d7d6-2c94-4225-b687-c5497b9559922.gif)
![《全國計算機等級考試二級教程——C語言程序設計》課后習題詳解[1]_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/8f16d7d6-2c94-4225-b687-c5497b955992/8f16d7d6-2c94-4225-b687-c5497b9559923.gif)
![《全國計算機等級考試二級教程——C語言程序設計》課后習題詳解[1]_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/8f16d7d6-2c94-4225-b687-c5497b955992/8f16d7d6-2c94-4225-b687-c5497b9559924.gif)
![《全國計算機等級考試二級教程——C語言程序設計》課后習題詳解[1]_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-1/16/8f16d7d6-2c94-4225-b687-c5497b955992/8f16d7d6-2c94-4225-b687-c5497b9559925.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、全國計算機等級考試二級教程C 語言程序設計13習題分析與解答第一章 程序設計基本概念習題分析與解答11【參考答案】.EXE12【參考答案】1.C 2.OBJ 3 .EXE13【參考答案】1順序結構2 選擇結構 3 循環(huán)結構第二章 C 程序設計的初步知識習題分析與解答一、選擇題21【參考答案】B)22【參考答案】D)23【參考答案】B)24【參考答案】A)25【參考答案】C)26【參考答案】A)27【參考答案】B)28【參考答案】B)29【參考答案】D)210【參考答案】C)211【參考答案】B)212【參考答案】B)213【參考答案】A)二、填空題214【參考答案】1112 12215【參考答
2、案】14.22 4.2216【參考答案】12 3 定義 4 執(zhí)行217【參考答案】1關鍵字 2 用戶標識符218【參考答案】1int 2 float 3 double219【參考答案】floata1=1.0, a2=1.0;或 floata1=1, a2=1;係統(tǒng)將自動把1轉換為1.0)220【參考答案】存儲單元221【參考答案】3.5222【參考答案】1a*b/c2 a/c*b3 b/c*a223【參考答案】把 1 0賦給變量s224【參考答案】1位2 1 位二進制數(shù)據 (0 或 1)225【參考答案】18 2127 301111111 4-128 5 10000000226【參考答案】13
3、2767 2 -32768 3 10000227【參考答案】1十 2 八 3 十六三、上機改錯題2 28 【分析與解答】第 1 行的錯誤:(1) include 是一個程序行,因此在此行的最后不應當有分號 (;)。第 2 行的錯誤:(1) ma i n ()是主函數(shù)的起始行,不是語句,因此最后不應當有分號(;)。(2) 在同一行上的 / * main function */ 顯然是注釋; C 語言規(guī)定:注釋由 /*開頭,由 */結束,但在 *號和/之間不得插入任何空格,而在此處“ / *”和“*/”之間存在空格,因此,/ * main function */的寫法是錯誤的,而應寫成: /* m
4、ain function */。第 3 行的錯誤:(1) 在主函數(shù)的起始行 main()的后面是函數(shù)體,函數(shù)體由左花括號(開始。但在函數(shù)體的第 一行:float的前面缺少了左花括號(。(2) 在同一行上的 /* /*r is radius*/, /* s is area of circular*/ */ 顯然是注釋; C 語言規(guī)定: 注釋由 /*開頭,由*/結束,并且開頭的 /*將去找最近的 */去配對,因此在 /* /*r is radius*/ 中,第一個/* 與radius后的那個*/配上了對,結果緊跟在后面的那個逗號(,)落在了注釋的外面,而構成了 一個多余符號,為此,在編譯時將報告“
5、語法錯” 。 /* s is area of circular*/ */ 中第一個 */就結 束了注釋,第一個 */就成了多余的了。第 6 行的錯誤:(1) printf( %f n,s)應當是一條輸出語句,但在最后缺少了一個分號。printf( %f n ,s);是程序的最后一條語句,程序應當結束;但缺少了程序體結束所需的 右花括號();此右花括號可以放在 printf( %f n ,s);的后面,也可以放在 printf( %f n ,s);的下一行上。2 27 【分析與解答】第 2 行的錯誤:第 4 行的錯誤:第 6 行的錯誤:main 的后面缺少一對圓括c=4.0 的后面缺少分號。 p
6、rintf( %f n ,v)的后面缺少分號。第三章 順序結構習題分析與解答3.13.23.33.43.53.63.73.83.93.103.113.123.133.143.153.163.173.183.193.20選擇題 (單選題 ) 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】C)C)D)C)D)B)C)D)A)B)C)D)D)A)C)C)C)D)把D的答案
7、修改為:seanf(“8f”,&c);C)B)二、填空題3.21 【參考答案】 (1)-200,2500(2)i=-200,j=2500(3) i=-200 j=25003.223.233.243.251:2:參考答案】 參考答案】 參考答案】 參考答案】100 25.81100 <CR>1 12 2 0 3 01 一條語句 2 分號 (或; 分號(;)1.8923425.81 <CR>1.89234 <CR>3:100 <Tab> 25.81 <Tab> 1.892343.26 【參考答案】3.27 【參考答案】3.287f
8、, x= 127 000127, x=%06d參考答案】x=127, x= 127, x= 177,x= x=127, x=127 , x= 127 ,x=a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500三、編程題和改錯題3.29 【分析與解答】(1) 主函數(shù)名 main 后應有一對圓括號。(2) 第三行的 printf 語句用以提示輸入,但是原樣輸出的字符串沒有用雙引號括起來;另外, 從輸入的形式看,輸入的數(shù)據緊跟在提示之后,因此, printf 格式串中最后不應該有換行符 n。(3) 因為輸入項 a、b、c 從定義和計算結果來看都
9、是 double 類型,因此,第四行 scanf 語句格 式串中的格式說明不應當用 %d而應當用lf ;且每一個變量之前應該加地址運算符 &。(4) 第七行的printf語句中應當把%d都改成%lf或%f ;按輸出要求在格式串中應添加相應的原 樣輸出的字符;因為下一個 printf 的輸出從新的一行開始,因此在本輸出語句的格式串的最 后應當加換行符 n。%d(5) 第八行的 printf 語句中應當把格式串整理合并放在輸出項的前面,輸出項放在后面, 都改成%lf或%f;中間的、n刪去。(6) 請同學們自己寫出修改后的程序,并上機調試。3.30 【分析與解答】(1) 分析:可用算術式56
10、0*60把分鐘換算成小時和分鐘,商數(shù)就是小時數(shù),余數(shù)就是分鐘 數(shù)。(2) 確定變量的名字和定義變量的類型:在程序中把小時數(shù)放在變量 h 中,把分鐘數(shù)放在變 量 m 中。這兩個變量的類型可以是整型 (本題中采用整型 ),也可以是實型。(3) 確定所用算法:求 560*60 的商數(shù),在 C 語言中可以用整除的算法,語句是 h=560/60;。 求余數(shù)可用求余運算符 %: 560%60,其值放入變量 m 中的語句是: m=560%60;。 (4) 設計輸 出格式。若輸出的形式定為:小時 :分鐘,則按此形式設計輸出語句。(5) 把以上內容放在主函數(shù)的一對花括號中。(6) 編寫程序如下:main() i
11、nt h, m;h=560/60; m=560%60;printf( The result: %3d : %3dn,h,m);運行結果是:The result: 9 : 203.31 【分析與解答】(1) 確定變量的名字和定義變量的類型。若用a存放1500,用b存放350;用q存放商數(shù),用r 存放余數(shù),所有變量應定義成 int 類型。(2) 設計輸入語句從終端輸入 1500 和 350;在輸入語句之前,應當設計一個輸出語句,用以 提示輸入??捎谜笊虜?shù),結果放在變量 q 中。可用求余運算符 %求兩數(shù)之余數(shù),結果放在變量 r(3) 中。設計輸出語句。輸出 a、b、q、 r。 把以上內容放在主函
12、數(shù)的一對花括號中。(4)(5)本題的程序與 3.30相似,請大家參考上題并根據本題的解釋自己編程,并上機調試。3.32 【分析與解答】(1) 定義4個雙精度變量a、b、c和ave,變量a、b、c分別存放讀入的3個雙精度數(shù),ave 存放它們的平均值。 設計輸入語句,以及在此之前用于提示輸入的(printf)語句。(3) 設計求平均值的算法,把所求得的平均值放入變量ave中。(4) 設計把變量ave中的數(shù),從小數(shù)點后第二位數(shù)進行四舍五入的算法?,F(xiàn)舉例說明:若ave中的數(shù)為123.4644,為了保留此值小數(shù)點后一位,可用表達式:(int)(123.4644*10)/10.0 ;依次推算,為了保留此值
13、小數(shù)點后二位,可用表達式:(in t)(123.4644*100)/100.0;其他依此類推。(5) 若要求對小數(shù)點后第二位數(shù)進行四舍五入,則可對原數(shù)加 0.05 后再進行以上運算。如要 求 保 留 123.4644 小 數(shù)點 后 一 位 且 對 第 二 位 數(shù) 進 行四 舍 五 入 , 可 用 表 達 式 : (int)(123.467+0.05)*10)/10.0。注意:分母一定要用實數(shù)10.0而不能用整數(shù)10,否則就變成整 除了;若要求保留 123.4644 小數(shù)點后兩位且對第三位數(shù)進行四舍五入,可用表達式:(in t)(123.467+0.005)*100)/100.0 ;其他依此類推
14、。 設計輸出語句。輸出 a、b、c和ave。(7) 把以上內容放在主函數(shù)的一對花括號中。(8) 編寫程序如下:main() double a,b,c,ave; printf( Enter a ,b ,c : ); scanf( %lf%lf%lf , &a, &b, &c ); ave=(a+b+c)/3;printf( ave=%fn , ave);/*用以比較四舍五入前后的數(shù)據*/ave=(int)(ave+0.05)*10)/10.0;/*上句也可寫成 ave=(int)(ave*10+0.5)/10.0;*/ printf( a=%f, b=%f, c=%f,
15、ave=%fn , a,b,c,ave);3.33 【分析與解答】(1) 關于對變量中的數(shù)進行交換的算法請參考 3.7題中的解釋和教程中有關的例題。 定義4個整型變量a、b、c和t,變量a、b、c分別存放讀入的3個整數(shù),t用作臨時存儲 單元。(3)(4)(5) t。 c。 b。 a。設計輸入語句,以及在此之前用于提示輸入的 (printf) 語句。 輸出 a、b、c 中的值,以便于比較。 交換的步驟如下: 把 c 中的值賦給 把 b 中的值賦給 把 a 中的值賦給 把 t 中的值賦給 經過以上步驟,已按要求進行了交換。(6) 輸出 a、b、c 中的值。(7) 編寫程序如下: main() in
16、t a, b, c, t;,a,b ,c);printfC' Enter a, b, c :、rT ); seanf( d%d%d,&a,&b,&c); printf( (1) a=%d,b=%d,c=%dn t=c; c=b; b=a; a=t;,a,b,c);printf( (2) a=%d,b=%d,c=%dn第四章 選擇結構習題分析與解答一、選擇題4.1 【參考答案】A)4.2 【參考答案】B)4.3 【參考答案】A)4.4 【參考答案】D)4.5 【參考答案】C)4.6 【參考答案】A)4.7 【參考答案】B)4.8 【參考答案】C)4.9 【參考答案
17、】D)4.10 【參考答案】D)二、填空題4.11【參考答案】1 非零 2 零4.12【參考答案】<、>、<=、>=、=、!KG-*2=4.13【參考答案】1 ! 2 && 3 JB>1|JB>1|4.14【參考答案】1:!KG-*2( 邏輯非 )2:、=、=(小于、大于、小于等于、大于等于 )3:=、!KG-*2=( 等于、不等 )4:&&( 邏輯與 )5: JB>1|JB>1|(邏輯或)。4.15【參考答案】!4.16【參考答案】1 a=b 或 a<c2JB>1|xJB>1|>44.17
18、【參考答案】14.18【參考答案】1 x<=0 2 14.19【參考答案】1 3 2 2 3 24.20【參考答案】*#相關內容請參考教程 4.2 節(jié)和 4.4 節(jié)。三、編程題 4.21【分析與解答】(1) 改寫如下: switch(a/10) default : m=5; break;case 0 : case 1 : case 2case3 :m=2; break;case4 :m=3; break;case5 :m=4; break;: m=1; break;在 switch 語句后的表達式中利用了(設存放實足年齡的變量是 age)。 age=y1-y0。(2) 本題中對a的判斷條
19、件有一定的規(guī)律可尋;關鍵是, a/10,從而簡化了 case標號。4.22【分析與解答】 編寫本題的程序,首先要解決如何計算學生當前的年齡(1) 如果當前的月份大于生日的月份,則學生的實足年齡(2) 如果當前的月份等于生日的月份,就要看日數(shù),當前的日數(shù)大于或等于生日的日數(shù),則 學生的實足年齡 age=y1-y0。(3) 如果不滿足以上的條件,就可斷定當前的日期沒有超過生日日期,就是說學生的年齡應 當是 age=y1-y0-1。以上 3條,用 C 語言可以描述如下: if(m1>m0)JB>1|JB>1|(m1=m0&&d1>=d0) age=y1-y0;
20、else age=y1-y0-1; 讀者可以參考以上語句寫出程序,也可以根據分析寫出與此形式不同的語句和程序。4.23【分析與解答】(1) 若輸入的整數(shù)a是奇數(shù),輸出:odd number,是偶數(shù)輸出:even number 若一個a是偶數(shù),它就能被2除盡,即a%2=0,輸出even numbe;若是奇數(shù), 它就不能被2除盡,即a%2!KG-*2=0,輸出odd number。 讀者可以參考以上給出的算法,寫出相應的 C 語句,并編寫出完整的程序。4.24 【分析與解答】max 中。本題的主要算法是從 3個數(shù)中找出最大的那個數(shù)。假定始終把最大的數(shù)放在變量假定a中的數(shù)最大,把a賦給max。用b去
21、和max比較,若b大于max,則把b賦給max;若不大于max,則什么也不做。 用c去和 max比較,若c大于 max,則把c賦給max;若不大于 max,則什么也不做。 經過以上操作,max中已放入了 a、b、c三個數(shù)中的最大數(shù),輸出 max即可。讀者可以參考以上給出的算法,寫出相應的 C 語句,并編寫出完整的程序。(1)(2)(3)(4) 4.25 【分析與解答】(1) 本題已給出了非常明確的條件,只要寫出正確的條件判斷語句就可基本完成程序的編寫。(2) 由給出的函數(shù)可知,只有 x 的值在規(guī)定的范圍內時,才求出 y 的值,因此程序應當對輸 入的 x 進行判斷,若超過范圍就不求 y 的值。(
22、3) 現(xiàn)以使用 ifCD#*2else 語句為例寫出程序供參考。main() int x,y;printf( Enter x : ); scanf( d , &x);if(x>-5&&x<10)if(x=0)y=x-1;else if(x<10 && x>0 )y=x+1;else if(x<0 && x>-5) y=x;printf( x=%d y=%dn , x,y); printf( *enD* nn);第五章循環(huán)結構習題分析與解答二、填空題5.115.125.135.145.155.16【參考答
23、案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】 【參考答案】15 2436程序段無限循環(huán),沒有輸出結果 -11111d=1.0 2k+ 3 k<=nx>=0 2 x<am in一、選擇題(單選題)5.1【參考答案】D)5.2【參考答案】C)5.3【參考答案】B)5.4【參考答案】C)5.5【參考答案】C)5.6【參考答案】B)5.7【參考答案】D)5.8【參考答案】A)5.9【參考答案】D)5.10【參考答案】D)三、編程題5.17【分析與解答】累加項的值有規(guī)律的遞增,每一項的絕對值比前一項增2,(1) 本題的基本算法是求累加值。 因此可以利用循環(huán)的控制變量的遞
24、增來得到累加項的絕對值。例如:for( i=1; i<=101; i+=2 )(2) 按所給的算式可以看到,累加項的符號是在交叉改變的,為此應當在循環(huán)體內設置一個變量,使它的符號按此規(guī)律交叉改變,這可用: s=-s來實現(xiàn),s的初值為1;當s的值 為1時,賦值后s中新的值為-1,當s的值為-1時,賦值后s中新的值為1。用s去乘累加項, 將使累加項的符號也隨之有規(guī)律地改變。 若累加和放在變量sum中,累加項放在變量t中,按照以上敘述,for循環(huán)體內的語句可 以設計如下:s=-s; t=s*i; sum=sum+t;sum的值是51。(5)請讀者自己對變量做出正確的定義并賦初值,設計輸出語句,
25、完善程序。5.18【分析與解答】(1)本題的基本算法是求累加值。累加項的分子部分都是1;分母的值有規(guī)律的遞增,依次為1!、2!、n!,即,若第i-1項的累加項為t(i-1),則第i項的累加項是t( i-1)*i,在程序中可用表達式:t=t/i(i從1變化到n)來表示。 根據以上分析,若用變量t來存放累加項,當i的值從1變化到n時,可用以下語句來實現(xiàn)累加:t=t/i; e+=t; 為了實現(xiàn)累加過程,以上語句應當放在循環(huán)內,循環(huán)控制變量從 1變化到n。 若用for循環(huán),按題目要求已指定n的值是50。若用while循環(huán),并沒有指定n的值,但 已指定了循環(huán)結束的條件,當t的值小于10-4 結束循環(huán)。(
26、5)現(xiàn)例示用while循環(huán)來求e值的部分程序:i=1; e=1.0; t=1.0;while( t>=1e-4 ) t=t/i;e+=t;i+; 請讀者自己對變量做出正確的定義,設計輸出語句,完善程序;也可以參考此程序段, 按照自己的思路獨立地完成程序。e的值應當是:2.71828。(8) 根據以上分析,讀者已不難用for循環(huán)來實現(xiàn)求e值的計算。(9) 注意:在完成此程序時,不要對分母中的階乘值進行單獨計算,因為17!的值已超過long類型的最大值,更無法求到50!。5.19【分析與解答】(1) 從1880年至2000年的年數(shù)可用一個for循環(huán)來取得。(2) 對每一年,用以上指定的條件來
27、進行判斷,若滿足條件即為閏年,進行輸出。(3) 按輸出的要求,需要設一個變量用于統(tǒng)計一行中輸出的個數(shù), 若在一行上已連續(xù)輸出了 5個年數(shù),就需輸出一個換行符,使下一個輸出項在新的一行上開始;若用變量n來做此統(tǒng)計,則當表達式n%5=0時就應輸出一個換行符,同時使 n重新置0值。(4) 若變量y代表年數(shù),if語句的邏輯表達式可以寫成如下:(y%4=0 && y%100!=0JB>1|JB>1|y%400=0)(5) 以下程序段供參考:for ( y=1880; y<=2000; y+ )if(y%4=0 && y%100!KG-*2=0JB>
28、1|JB>1|y%400=0)printf( %d ,y);n+;if(n %5=0) printf( n);n=0; (6) 請讀者自己對變量做出正確的定義并賦初值,完善程序;也可以參考此程序段,按照自 己的思路獨立地完成程序。從 1880年至2000年有30個閏年。5.20【分析與解答】(1) 不難理解利用以下的for循環(huán)可以在一行上連續(xù)輸出n個*號:for(i=1; i<=n; i+) printf( * );printf( n);若n的值是6,則連續(xù)輸出6個*號。(2) 以上圖形是在各行上輸出數(shù)目不等的*號,只是*號的數(shù)目依次有規(guī)律地變化。在上半部 分各行依次是1、3、5、
29、7個,因此可以用以下的程序段來實現(xiàn)這樣的輸出:for(k=1;kv=7;k+,k+)for(i=1;i<=k; i+)printf( * );printf( n);在下半部依次是 5、3、1 個;因此可以用以下的程序段來實現(xiàn)這樣的輸出: for(k=5;k>=1;k-,k-)for(i=1;i<=k; i+)printf( * );printf( n);以上程序段從第一列起輸出的結果如下:*現(xiàn)在我們已完成了在每行輸出指定數(shù)目的 * 號。(3) 輸出結果與題目要求不同,它們的區(qū)別是:按題目每一行之前有不同的空格,而這里則 是所有的行都在第一列上開始輸出 * 號;所以接著就應當解
30、決這一問題。(4) 分析題目要求,每行第一個 * 號位置的縮進是有規(guī)律的,假定中間這一行第一個 *號位置 是在第一列,則可看出,第一至第三行的縮進分別是 3、2、1 個空格;而圖形下半部的縮進 數(shù)則剛好相反。這可在以上循環(huán)中添加輸出連續(xù)空格的 for 循環(huán)來實現(xiàn),對于上半部程序如 下: b=3;for(k=1;k<=7;k+,k+)for(j=1;j<=b; j+)printf( );b-;for(i=1;i<=k; i+)printf( * );printf( n);(5)請讀者在理解以上給出的示例的基礎上,自己添加下半部空格的輸出。第六章 字符型數(shù)據習題分析與解答6.16
31、.26.36.46.56.66.76.86.9選擇題 參考答案】 參考答案】 參考答案】 參考答案】 參考答案】 參考答案】 參考答案】 參考答案】 參考答案】6.10【參考答案】6.11【參考答案】 二、填空題B)D)A)A)B)D)D)B)A)A)C)6.126.136.146.156.16或:參考答案】參考答案】參考答案】參考答案】參考答案】10A<CR>-11 ctype.h010A 20B 30C 40D<CR>7.29 101.298AB<CR>20B<CR> 30C<CR> 40D<CR> 6.17【參考答案
32、】 或: 7.29<CR> 101.29AB<CR> 6.18【參考答案】 A 7.29B 101.298<CR> 6.19【參考答案】 A<CR> B<CR> C<CR> 三、編程題 6.20【分析與解答】(1) 在進行字符輸入時,即使一次輸入了一行字符(最后用回車結束輸入 ),字符也只能一個一個地讀入。若ch已定義為char型變量,可以用以下的程序段來完成操作:ch=getchar();while(ch!KG-*2= 、n) ch=getchar();當讀入的是一個回車符時,循環(huán)就結束。循環(huán)體內的“”符號表示需要在循環(huán)
33、體內完成 的其他操作。(2) 在循環(huán)內要求進行的操作之一是:輸出每個字符以及與之對應的 ASCII 代碼值。因此可 用以下語句來實現(xiàn)。printf( %c : %d ,ch,ch);3 對字符和與之對應的 ASCII 代碼值。 則可用來作計數(shù)器;使 n 的初值為 0,每輸出一次, n 的值增 1, 額外輸出一個換行符。例如:(3) 在循環(huán)內要求進行的另一個操作是:每行只能輸出 若 n 已定義為 int 型變量, 當 n 的值為 3的整數(shù)倍時, n+;);if(n %3=0) putchar(' n(4) 把(2)和(3)中給出的語句放在循環(huán)體內,并按要求給出正確的定義和初值,就可完成題
34、目 所要求的操作。 也可以在while后的一對括號中來完成字符的讀入,如while(ch=getchar()!KG-*2= n)。這時,循環(huán)內、外的“ ch=getchar();”語句應當去掉。6.21【分析與解答】(1) 一行字符的讀入,請參照題6.20(1)和中的解釋。循環(huán)體內的“”符號表示需要在循環(huán)體內完成的其他操作。ch=getchar(); while(ch!KG-*2= n) ch=getchar();(2) 在本題中循環(huán)體內需要把讀入的所有數(shù)字字符轉換成一個整數(shù)。若用變量 n 來存放這個 整數(shù),為了保證有效的存放,應當把它定義成 long 類型。(3) 要把輸入的一串數(shù)字字符轉換
35、成一個整數(shù),首先需要判斷當前讀入的字符是否是數(shù)字字 符,若不是則什么也不做;若是,則進行以下操作: 把當前讀入的一個字符轉換成一個一位整數(shù),這可由語句“d=ch-' O' ”來實現(xiàn),在這里d 是一個整型變量; 把d中的一位數(shù)歸并到n的低位中,這可用語句“ n=n*1O+d;”來實現(xiàn)。這里所述的操作 可由以下語句來完成:if(ch>='O'&&ch<= '9') d=ch-'O' n=n*1O+d; if 語句后一對括號中的判斷表達式可以調用字符函數(shù) isdigit 來實現(xiàn):if( isdigit(ch)
36、 ) d=ch- 'O' n=n*1O+d; if 子句的兩個語句可以合并成: n=n*1O+ch-'O'。(4) 把(3)中的語句放入循環(huán)中: ch=getchar();while(ch!KG-*2= ' n') if(ch>= ' O' &&ch<= ' 9)n=n*10+ ch-' O'ch=getchar(); 請自己寫出定義語句并賦初值。注意,最后輸出n時,應當使用格式說明%ld,而不能使用d。6.22【分析與解答】(1) 行數(shù)的統(tǒng)計可通過統(tǒng)計輸入的 n'符的個
37、數(shù)來完成。(2) 統(tǒng)計的過程應當放在一個 while 循環(huán)體中;判斷循環(huán)是否進行的條件可以用: (ch=getchar()=EOF)。若用整型變量n作為計數(shù)器對 n'符進行統(tǒng)計,只要讀入的字符 是' n',則 n 增 1。如:while(ch=getchar()!KG-*2=EOF)if(ch= n' )n+;EOF是在stdio.h中預定義了的標識符,在 TURBO C的環(huán)境下,鍵入Ctrl+Z(即按住鍵盤 上的Ctrl鍵,同時按字母Z鍵)后,敲Enter鍵,即輸入了 EOF。6.23【分析與解答】(1) 本題要求的操作同樣可在 while 循環(huán)中完成:whi
38、le(ch=getchar()!= n ) (2) 若用整型變量n作為計數(shù)器對小寫字母進行統(tǒng)計,只要讀入的字符是小寫字母,則n增1。 如:if(ch>= ' a '&& ch<= ' z ' )n+;(3) 在退出循環(huán)后,輸出 n 的值。(4) 請自己完善程序。6.24【分析與解答】(1) 若圖案的行數(shù)輸入到變量 L 中。(2) 按要求 L 決定了圖形的行數(shù),因此可通過循環(huán)來實現(xiàn) L 行的輸出: for(i=1; i<=L; i+) 循環(huán)體中的“”號,代表輸出L行的操作。(3) 假定ch中存放了一個字符,我們知道,通過以下循環(huán)可
39、以在一行上輸出n個字符:for(j=1; j<=n; j+)putchar(ch);putchar('n);注意,在循環(huán)后putchar('n);語句不可少,它用以換行。(4) 現(xiàn)在應當解決如何按要求給出每行輸出的字符。由圖分析,行數(shù)(或行號)為 1時輸出字符A,行數(shù)為2時輸出字母B若輸出的字母放在變量ch中,行號取決于外循環(huán)的控制變量 i,則輸出的字母和行號的關系可用表達式:ch= A +i-1來表示。當i為1時ch中被賦予字 母A,當i為2時ch中被賦予了字母B,其他依此類推。因此,在此表達式后,利用(3)中的 循環(huán)就解決了各行上輸出的字母。(5) 按要求每行輸出的字
40、母的個數(shù)不同,第二行輸出 3 個字母,第三行輸出 5 個字母,第四 行輸出7個字母(3)中for循環(huán)體的執(zhí)行次數(shù)取決于n的值,也就是說n的值決定了每行 輸出字母的個數(shù)。其實,n的值與行號有著密切的關系:n=2*i-1,當i為1時n的值是1、當 i的2時n的值是3、當i的3時n的值是5、當i的4時n的值是7。因此在中for循環(huán) 之前可用此表達式求出n的值。(6) 總結以上分析,我們可得到以下的程序段:for(i=1; i<=L; i+) ch= A +i-1;n=2*i-1;for(j=1; j<=n; j+)putchar(ch);putchar(' n);若所用的變量都已
41、正確定義,通過輸入 L 的值為 5,則程序段在第一列起有以下的輸出結果:ABBBCCCCCEEEEEEEEE和題目的要求比較已趨接近,不同的是在每行沒有適當?shù)目s進。(7) 現(xiàn)在來解決每行的縮進問題。由題中給出的圖形可知,若指定輸出 5 行,第一行縮進 5 個空格,第二行則縮進 4個空格,第三行則縮進 3 個空格,第四行則縮進 2個空格,第五行 則縮進 1個空格。這同樣可以由以下的 for 循環(huán)來實現(xiàn):for(k=L; k>=i; k-)putchar( );把此循環(huán)放在 i 控制的循環(huán)體內、輸出每行字符的循環(huán)之前即可。(8) 請讀者自己補充有關的 include 行、語句和變量的定義,以
42、完成整個程序。注意,如果有 能力可在某些地方作些簡化。第七章 函數(shù)習題分析與解答77771234選擇題【參考答案】【參考答案】【參考答案】參考答案】參考答案】C)C)B)C)A)7.6【參考答案】D)7.7【參考答案】A)二、填空題7.8【參考答案】127.9【參考答案】9.0(或 9.000000)7.10【參考答案】47.11【參考答案】1n=1 2 s7.12【參考答案】1<=y2 z*x7.13【參考答案】112 s*i 30 4 f(k)三、程序調試和編程題7.14 【分析與解答】(1) fun 函數(shù)判斷傳給形參(2) 函數(shù)的原意是用變量 而所給函數(shù)的實際流程卻不能實現(xiàn)這一功能
43、,例如,若n 的數(shù)是否為素數(shù),若是函數(shù)返回 1 ,否則返回 0。yes 作為判斷 n 是否為素數(shù)的標志,是素數(shù),其值為 1,否則為 0。n 的值為 15(明顯不是素數(shù) ) 時,在 for循環(huán)中,當k的值為3時,就會執(zhí)行if子句,yes得0,但for循環(huán)并沒有終止,接著k為4 時就會執(zhí)行else子句,又使yes得1由此可見此程序段并不能準確地判斷一個數(shù)是否為素數(shù); 最后確定yes為何值的是for循環(huán)的終止值n/2,當n為15時,k的值為n/2等于7,在循環(huán) 體內將又一次執(zhí)行else子句,使yes得1,這時循環(huán)結束,函數(shù)返回1。由此可見所給fun函 數(shù)不能起到預想的作用。 由上分析可知,對于n的值
44、為15時而言,問題是在一旦yes的值為0,已判斷n中的值 不是素數(shù)時,沒有及時退出循環(huán),返回 0;因此,若在if子句中添加一條語句:break就能解 決這一問題,把 if 語句改寫如下:if(n%k=0) yes=0; break; else yes=1;(4) 在所給 fun 函數(shù)中,當 n 的值為 2、3 時(都是素數(shù) ),因為 n/2 的值為 1(大于 k 中的 2),所 以不會進入for循環(huán),而直接執(zhí)行return語句,細心的讀者應該可以發(fā)現(xiàn),這時 yes沒有賦過 值,也就是說,返回的是一個不確定的值,這將會導致錯誤;因此,應當在定義語句中給 yes 賦初值 1 :int k, yes
45、=1;至此 fun 函數(shù)能正確運行。(5) 總結:因為一旦 if 語句中的表達式: n%k=0 的值為 1(即可被某數(shù)整除 ),則可以確定 n 不是素數(shù),因此即可返回,不必再執(zhí)行函數(shù)其他部分, if 子句可改成:if(n%k=0) yes=0; return yes; else yes=1;也可簡化成:if (n%k=0) return 0;else yes=1;又可進一步不用變量yes,并去掉else,簡化成(請參考例7.4):for( k=2; k<=n/2; k+)if(n%k=0) return 0;return 1;7.15【分析與解答】(1) 若用整型變量c存放余數(shù),則求a被
46、b除后的余數(shù)可用表達式:c=a%b。 本題要求編寫函數(shù) mymod用以求a被b除后的余數(shù)即:c=mymod( a,b ); int 只要把a%b作為函數(shù)值返回即可完成操作(請參考例7.1):mymod(i nt a, int b)return a%b; 總結:本題在算法上十分簡單,只是要求讀者能夠掌握編寫函數(shù)的基本知識。7.16【分析與解答】(1)本題所要采用的算法是累加。分析可見,所有累加項的分子都是1,而分母部分逐項增1; 只是累加項的符號交叉變化。因此處理好符號的變化是完成操作的關鍵之一。若函數(shù)名為funa,傳送到函數(shù)的參數(shù)是整型值,假定形參命名為n;函數(shù)的返回值應當是浮點型,為此函數(shù)的
47、首部可以是:double funa( int n )(3) 接著寫函數(shù)體。累加放在一個for循環(huán)中來完成,若循環(huán)控制變量為k,可利用循環(huán)控制變量作為累加項t的分母,累加值放在add中:for( k=1; kv=n; k+) t=s*1.0/k;add=add+t;此處,s用作符號變量,在1和-1之間交叉變化,乘以1.0/k后,t的值也將按要求變化符號。 注意,表達式1.0/k不可以寫成1/k,因為每一項的絕對值必定是小于 1的小數(shù)。(4) 現(xiàn)在需要確定s的值。最簡單的可用表達式:s=-s來實現(xiàn)(請參考例5.2),若賦值號右邊s中的值為-1,則賦值號左邊s中的值就得1;若賦值號右邊s中的值為1
48、,則賦值 號左邊s中的值就會得-1;則每循環(huán)一次就使s改變了一次符號。當然還可有多種方法。把以 上表達式添加到循環(huán)體中:for( k=1; kv=n; k+)s=-s;t=s*1.0/k;add=add+t; 最后注意應當給各變量賦以適當?shù)某踔担⒎祷睾瘮?shù)值。請編寫主函數(shù)。當傳給形參的值為10時,函數(shù)的返回值應當是:0.6456350總結:本題的算法并不復雜,但是需要讀者掌握編寫函數(shù)的基本知識。掌握需要傳入函。 數(shù)的參數(shù)及其類型,掌握需要返回的值及其類型。在此基礎上,其他方面與先前在主函數(shù)中編寫的程序沒有什么區(qū)別。7.17【分析與解答】(1) 此題與7.18相似。函數(shù)的返回值為浮點型,函數(shù)只有
49、一個形參,為整型。(2) 函數(shù)的基本算法是累加,只是除第一項外其余各項都用減法;每一項的分子都是1,分母部分為k 2, k的值逐項增1,由2變化到mo因此,算法可以用一個循環(huán)來實現(xiàn)。 當m的值為12時,函數(shù)值應是:0.435023。7.18【分析與解答】(1)若函數(shù)取名為fun,按題意,x作為形參,由調用函數(shù)傳入,其類型不應當用整型;表達 式x2-5X+4的值作為函數(shù)值返回,函數(shù)值的類型應為浮點型。因此,很容易寫出函數(shù):double fun( double x ) return x*x-5*x+4; 若在調用函數(shù)時,x和y2已正確定義,且x已有確定的值,則可用以下函數(shù)調用語句得到 y2 的值:
50、y2=fun( x+15 );(3) 同樣,若在調用函數(shù)時, x 和 y3 已正確定義,且 x 已有確定的值,則可用以下函數(shù)調用 語句得到 y3 的值:y3=fun( sin(x) );注意,因為在程序中調用了 C語言提供的庫函數(shù)sin,因此應當在程序的最前面包含以下命令 行:#inelude" math.h"(4) 參考(2) 和(3) 應不難寫出求 y1 的語句,請讀者自己完成。(5) y1 的值應是: -2.0。當 x 的值為 5 時, y2 的值應是: 304.0。當 x 的值為 0.5 時, y3 的值 應是: 1.832721。(6) 總結: 本題已給出了函數(shù)需
51、要求值的表達式, 讀者只需確定函數(shù)的類型和形參的類型, 就可以寫 出函數(shù),就像例 7.1 中求兩數(shù)之和的函數(shù)一樣簡單。 在給定了函數(shù)之后,調用函數(shù)時,函數(shù)的實參應當是一個與形參類型一致的任意合法的 表達式。例如,可以是常量、算術表達式,也可以是函數(shù)等。就像例 7.1 中求兩數(shù)之和的 add 函數(shù)一樣, 可以用 add( 3,4 );來求 3+4;當 x、y 有確定值時, 可以用 add( x*x,y*y); 來求 x2+y2 ; 當x、y有確定值時,可以用add( sin(x+y),cos(x+y);來求sin(x+y)+cos(x+y),這同樣可以通過 add( sin(add(x,y),c
52、os(add(x,y) );來求得。第八章 指針習題分析與解答一、選擇題8.1【參考答案】A)8.2【參考答案】B)8.3【參考答案】B)8.4【參考答案】C)8.5【參考答案】B)8.6【參考答案】B)8.7【參考答案】C)8.8【參考答案】D)8.9 【參考答案】B)8.10【參考答案】C)8.11【參考答案】C)8.12【參考答案】二、填空題C)參考答案】參考答案】參考答案】參考答案】、編程題8.138.148.158.161107 1char *p, *p=ch, p=&ch; scanf(“%c/n”p,); ch=*p; p=&ch; printf( “%c/n”,*p); *s=*(p+3), *(s-2),50, *s=*(a+1), 2, 10,20,30,40 8.17【分析與解答】若函數(shù)名為fun,按題意,函數(shù)不返回函數(shù)值;函數(shù)的形參需要接受傳送過來的兩個浮點 數(shù),因此需要有兩個 double 類型的形參;另外要把它們的和值與差值,通過形參傳送回去, 這就要求有兩個double類型的形參指針,接受傳送過來的地址,以便通過指針把和值與差值 傳送給所指的主函數(shù)中的變量。因此函數(shù)的首部應當是:45void f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全文化課件公司介紹
- 電梯合同協(xié)議書注意事項
- 老年創(chuàng)業(yè)活動策劃方案模板
- 考研網絡平臺創(chuàng)業(yè)計劃書
- 2025年智能家居能源管理系統(tǒng)的節(jié)能效果與優(yōu)化策略報告
- 拆除改裝合同協(xié)議書模板
- 獸醫(yī)診療實訓報告
- 4.3探索三角形全等的條件課件 -2024-2025學年北師大版數(shù)學七年級下冊
- 7《納米技術就在我們身邊》課件-2024-2025學年四年級下冊語文統(tǒng)編版
- 拓展培訓機構哪家好002
- 工程部部門級安全培訓課件
- DB42T1745-2021橋梁高強度螺栓連接安裝技術指南
- 實驗室安全記錄表
- 進出口業(yè)務內部審計制
- 揚塵污染防治監(jiān)理實施細則
- 詞匯及翻譯四級漢譯英練習
- 教科版二年級下冊各單元知識整理復習及思維導圖-課件
- 四年級下冊數(shù)學課件-3 乘法分配律2-冀教版14張PPT
- 《學弈》優(yōu)質課教學課件
- 2022屆北京市海淀區(qū)高考語文查漏補缺練習(七):文學類文本
- 2022年檢驗科三基試題及答案
評論
0/150
提交評論