版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)教程C語言程序設(shè)計(jì)習(xí)題分析與詳細(xì)解答第一章 程序設(shè)計(jì)基本概念習(xí)題分析與解答11 【參考答案】 EXE12 【參考答案】 1 .C 2 .OBJ 3 .EXE13 【參考答案】 1 順序結(jié)構(gòu) 2 選擇結(jié)構(gòu) 3 循環(huán)結(jié)構(gòu)第二章 C程序設(shè)計(jì)的初步知識(shí)習(xí)題分析與解答一、選擇題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 【參考答
2、案】 A)二、填空題214 【參考答案】 1 11 2 12215 【參考答案】 1 4.2 2 4.2216 【參考答案】 1 2 3 定義 4 執(zhí)行217 【參考答案】 1 關(guān)鍵字 2 用戶標(biāo)識(shí)符218 【參考答案】 1 int 2 float 3 double219 【參考答案】 float a1=1.0, a2=1.0;或float a1=1, a2=1;(系統(tǒng)將自動(dòng)把1轉(zhuǎn)換為1.0)220 【參考答案】 存儲(chǔ)單元221 【參考答案】 3.5222 【參考答案】 1 a*b/c 2 a/c*b 3 b/c*a223 【參考答案】 把10賦給變量s224 【參考答案】 1 位 2 1位二
3、進(jìn)制數(shù)據(jù)(0或1)225【參考答案】1 8 2127 3 4-128 5 226【參考答案】1 32767 2 -32768 3 00000227 【參考答案】 1 十 2 八 3 十六三、上機(jī)改錯(cuò)題228 【分析與解答】第1行的錯(cuò)誤:(1) include是一個(gè)程序行,因此在此行的最后不應(yīng)當(dāng)有分號(hào)(;)。第2行的錯(cuò)誤:(1) main()是主函數(shù)的起始行,不是語句,因此最后不應(yīng)當(dāng)有分號(hào)(;)。(2) 在同一行上的/ * main function * / 顯然是注釋;C語言規(guī)定:注釋由/*開頭,由*/結(jié)束,但在*號(hào)和/之間不得插入任何空格,而在此處“/ *”和“* /”之間存在空格,因此,/
4、 * main function * /的寫法是錯(cuò)誤的,而應(yīng)寫成:/* main function */。第3行的錯(cuò)誤:(1) 在主函數(shù)的起始行main()的后面是函數(shù)體,函數(shù)體由左花括號(hào)(開始。但在函數(shù)體的第一行:float的前面缺少了左花括號(hào)(。(2) 在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 顯然是注釋;C語言規(guī)定:注釋由/*開頭,由*/結(jié)束,并且開頭的/*將去找最近的*/去配對(duì),因此在/* /*r is radius*/中,第一個(gè)/*與radius后的那個(gè)*/配上了對(duì),結(jié)果緊跟在后面的那個(gè)逗號(hào)(,)落在了注釋的外面,
5、而構(gòu)成了一個(gè)多余符號(hào),為此,在編譯時(shí)將報(bào)告“語法錯(cuò)”。/* s is area of circular*/ */中第一個(gè)*/就結(jié)束了注釋,第一個(gè)*/就成了多余的了。第6行的錯(cuò)誤:(1) printf(%f n,s)應(yīng)當(dāng)是一條輸出語句,但在最后缺少了一個(gè)分號(hào)。(2) printf(%f n,s);是程序的最后一條語句,程序應(yīng)當(dāng)結(jié)束;但缺少了程序體結(jié)束所需的右花括號(hào)();此右花括號(hào)可以放在printf(%f n,s);的后面,也可以放在printf(%f n,s);的下一行上。227 【分析與解答】第2行的錯(cuò)誤:在main的后面缺少一對(duì)圓括號(hào)。第4行的錯(cuò)誤:在c=4.0的后面缺少分號(hào)。第6行的錯(cuò)誤
6、:在printf(%f n,v)的后面缺少分號(hào)。第三章 順序結(jié)構(gòu)習(xí)題分析與解答一、選擇題 (單選題)3.1 【參考答案】 C)3.2 【參考答案】 C)3.3 【參考答案】 D)3.4 【參考答案】 C)3.5 【參考答案】 D)3.6 【參考答案】 B)3.7 【參考答案】 C)3.8 【參考答案】 D)3.9 【參考答案】 A)3.10 【參考答案】 B)3.11 【參考答案】 C)3.12 【參考答案】 D)3.13 【參考答案】 D)3.14 【參考答案】 A)3.15 【參考答案】 C)3.16 【參考答案】 C)3.17 【參考答案】 C)3.18 【參考答案】 D)把D的答案修改
7、為:scanf(“%8f”,&c);3.19 【參考答案】 C)3.20 【參考答案】 B)二、填空題3.21 【參考答案】(1)-200,2500(2)i=-200,j=2500(3) i=-200j=25003.22 【參考答案】 1 12 2 0 3 03.23 【參考答案】 1 一條語句 2 分號(hào)(或;)3.24 【參考答案】 分號(hào)(;)3.25 【參考答案】1:100 25.81 1.892342: 100 25.81 1.89234 3:100 25.81 1.892343.26 【參考答案】 x=127, x= 127, x= 177,x= 7f, x= 1273.27 【參考答
8、案】 x=127, x=127 , x=127 ,x= , x=%06d3.28 【參考答案】 a=513.,a= 513.79,a= 513.,a= 513.三、編程題和改錯(cuò)題3.29 【分析與解答】(1) 主函數(shù)名main后應(yīng)有一對(duì)圓括號(hào)。(2) 第三行的printf語句用以提示輸入,但是原樣輸出的字符串沒有用雙引號(hào)括起來;另外,從輸入的形式看,輸入的數(shù)據(jù)緊跟在提示之后,因此,printf格式串中最后不應(yīng)該有換行符n。(3)因?yàn)檩斎腠?xiàng)a、b、c從定義和計(jì)算結(jié)果來看都是double類型,因此,第四行scanf語句格式串中的格式說明不應(yīng)當(dāng)用%d而應(yīng)當(dāng)用%lf;且每一個(gè)變量之前應(yīng)該加地址運(yùn)算符&
9、。(4)第七行的printf語句中應(yīng)當(dāng)把%d都改成%lf或%f;按輸出要求在格式串中應(yīng)添加相應(yīng)的原樣輸出的字符;因?yàn)橄乱粋€(gè)printf的輸出從新的一行開始,因此在本輸出語句的格式串的最后應(yīng)當(dāng)加換行符n。(5) 第八行的printf語句中應(yīng)當(dāng)把格式串整理合并放在輸出項(xiàng)的前面,輸出項(xiàng)放在后面,%d都改成%lf或%f;中間的n刪去。(6)請(qǐng)同學(xué)們自己寫出修改后的程序,并上機(jī)調(diào)試。3.30 【分析與解答】(1) 分析:可用算術(shù)式56060把分鐘換算成小時(shí)和分鐘,商數(shù)就是小時(shí)數(shù),余數(shù)就是分鐘數(shù)。(2) 確定變量的名字和定義變量的類型:在程序中把小時(shí)數(shù)放在變量h中,把分鐘數(shù)放在變量m中。這兩個(gè)變量的類型可
10、以是整型(本題中采用整型),也可以是實(shí)型。(3) 確定所用算法:求56060的商數(shù),在C語言中可以用整除的算法,語句是h=560/60;。求余數(shù)可用求余運(yùn)算符 %:560%60,其值放入變量m中的語句是:m=560%60;。(4) 設(shè)計(jì)輸出格式。若輸出的形式定為:小時(shí):分鐘,則按此形式設(shè)計(jì)輸出語句。(5) 把以上內(nèi)容放在主函數(shù)的一對(duì)花括號(hào)中。(6) 編寫程序如下:main() int h, m;h=560/60;m=560%60;printf(The result: %3d : %3dn, h,m);運(yùn)行結(jié)果是:The result: 9 : 203.31 【分析與解答】(1) 確定變量的名字
11、和定義變量的類型。若用a存放1500,用b存放350;用q存放商數(shù),用r存放余數(shù),所有變量應(yīng)定義成int類型。(2) 設(shè)計(jì)輸入語句從終端輸入1500和350;在輸入語句之前,應(yīng)當(dāng)設(shè)計(jì)一個(gè)輸出語句,用以提示輸入。(3) 可用整除求商數(shù),結(jié)果放在變量q中??捎们笥噙\(yùn)算符%求兩數(shù)之余數(shù),結(jié)果放在變量r中。(4) 設(shè)計(jì)輸出語句。輸出a、b、q、r。(5) 把以上內(nèi)容放在主函數(shù)的一對(duì)花括號(hào)中。本題的程序與3.30相似,請(qǐng)大家參考上題并根據(jù)本題的解釋自己編程,并上機(jī)調(diào)試。3.32 【分析與解答】(1) 定義4個(gè)雙精度變量a、b、c和ave,變量a、b、c分別存放讀入的3個(gè)雙精度數(shù),ave存放它們的平均值。
12、(2) 設(shè)計(jì)輸入語句,以及在此之前用于提示輸入的(printf)語句。(3) 設(shè)計(jì)求平均值的算法,把所求得的平均值放入變量ave中。(4) 設(shè)計(jì)把變量ave中的數(shù),從小數(shù)點(diǎn)后第二位數(shù)進(jìn)行四舍五入的算法。現(xiàn)舉例說明:若ave中的數(shù)為123.4644,為了保留此值小數(shù)點(diǎn)后一位,可用表達(dá)式:(int)(123.4644*10)/10.0;依次推算,為了保留此值小數(shù)點(diǎn)后二位,可用表達(dá)式:(int)(123.4644*100)/100.0;其他依此類推。(5) 若要求對(duì)小數(shù)點(diǎn)后第二位數(shù)進(jìn)行四舍五入,則可對(duì)原數(shù)加0.05后再進(jìn)行以上運(yùn)算。如要求保留123.4644小數(shù)點(diǎn)后一位且對(duì)第二位數(shù)進(jìn)行四舍五入,可用
13、表達(dá)式:(int)(123.467+0.05)*10)/10.0。注意:分母一定要用實(shí)數(shù)10.0而不能用整數(shù)10,否則就變成整除了;若要求保留123.4644小數(shù)點(diǎn)后兩位且對(duì)第三位數(shù)進(jìn)行四舍五入,可用表達(dá)式:(int)(123.467+0.005)*100)/100.0;其他依此類推。(6) 設(shè)計(jì)輸出語句。輸出a、b、c和ave。(7) 把以上內(nèi)容放在主函數(shù)的一對(duì)花括號(hào)中。(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(a
14、ve=%fn, ave); /*用以比較四舍五入前后的數(shù)據(jù)*/ave=(int)(ave+0.05)*10)/10.0;/*上句也可寫成ave=(int)(ave*10+0.5)/10.0;*/printf(a=%f, b=%f, c=%f, ave=%fn, a,b,c,ave);3.33 【分析與解答】(1) 關(guān)于對(duì)變量中的數(shù)進(jìn)行交換的算法請(qǐng)參考3.7題中的解釋和教程中有關(guān)的例題。(2) 定義4個(gè)整型變量a、b、c和t,變量a、b、c分別存放讀入的3個(gè)整數(shù),t用作臨時(shí)存儲(chǔ)單元。(3) 設(shè)計(jì)輸入語句,以及在此之前用于提示輸入的(printf)語句。(4) 輸出a、b、c中的值,以便于比較。(
15、5) 交換的步驟如下: 把c中的值賦給t。 把b中的值賦給c。 把a(bǔ)中的值賦給b。 把t中的值賦給a。經(jīng)過以上步驟,已按要求進(jìn)行了交換。(6) 輸出a、b、c中的值。(7) 編寫程序如下:main() int a, b, c, t;printf(Enter a, b, c :n);scanf(%d%d%d,&a,&b,&c);printf(1) a=%d,b=%d,c=%dn,a,b ,c);t=c; c=b; b=a; a=t;printf(2) a=%d,b=%d,c=%dn,a,b,c);第四章 選擇結(jié)構(gòu)習(xí)題分析與解答一、選擇題4.1 【參考答案】 A)4.2 【參考答案】 B)4.3
16、【參考答案】 A)4.4 【參考答案】 D)4.5 【參考答案】 C)4.6 【參考答案】 A)4.7 【參考答案】 B)4.8 【參考答案】 C)4.9 【參考答案】 D)4.10 【參考答案】 D)二、填空題4.11【參考答案】 1 非零 2 零4.12【參考答案】 、=、=、!KG-*2=4.13【參考答案】 1 ! 2 & 3 JB1|JB1|4.14【參考答案】 1:!KG-*2(邏輯非)2:、=(小于、大于、小于等于、大于等于)3:=、!KG-*2=(等于、不等)4:&(邏輯與) 5:JB1|JB1|(邏輯或)。4.15【參考答案】 !4.16【參考答案】 1 a=b 或 a1|x
17、JB1|44.17【參考答案】 14.18【參考答案】 1 xm0)JB1|JB1|(m1=m0&d1=d0) age=y1-y0;else age=y1-y0-1;讀者可以參考以上語句寫出程序,也可以根據(jù)分析寫出與此形式不同的語句和程序。4.23【分析與解答】(1) 若輸入的整數(shù)a是奇數(shù),輸出:odd number,是偶數(shù)輸出:even number。(2) 若一個(gè)a是偶數(shù),它就能被2除盡,即a%2=0,輸出even number;若是奇數(shù),它就不能被2除盡,即a%2!KG-*2=0,輸出odd number。讀者可以參考以上給出的算法,寫出相應(yīng)的C語句,并編寫出完整的程序。4.24 【分析
18、與解答】本題的主要算法是從3個(gè)數(shù)中找出最大的那個(gè)數(shù)。假定始終把最大的數(shù)放在變量max中。(1) 假定a中的數(shù)最大,把a(bǔ)賦給max。(2) 用b去和max比較,若b大于max,則把b賦給max;若不大于max,則什么也不做。(3) 用c去和max比較,若c大于max,則把c賦給max;若不大于max,則什么也不做。(4) 經(jīng)過以上操作,max中已放入了a、b、c三個(gè)數(shù)中的最大數(shù),輸出max即可。讀者可以參考以上給出的算法,寫出相應(yīng)的C語句,并編寫出完整的程序。4.25 【分析與解答】(1) 本題已給出了非常明確的條件,只要寫出正確的條件判斷語句就可基本完成程序的編寫。(2) 由給出的函數(shù)可知,只
19、有x的值在規(guī)定的范圍內(nèi)時(shí),才求出y的值,因此程序應(yīng)當(dāng)對(duì)輸入的x進(jìn)行判斷,若超過范圍就不求y的值。(3) 現(xiàn)以使用ifCD#*2else語句為例寫出程序供參考。main() int x,y;printf(Enter x : ); scanf(%d, &x);if(x-5&x10) if(x=0) y=x-1;else if(x0 ) y=x+1;else if(x-5) y=x;printf(x=%d y=%dn, x,y);printf(*END*nn);第五章 循環(huán)結(jié)構(gòu)習(xí)題分析與解答一、選擇題 (單選題)5.1 【參考答案】 D)5.2 【參考答案】 C)5.3 【參考答案】 B)5.4 【
20、參考答案】 C)5.5 【參考答案】 C)5.6 【參考答案】 B)5.7 【參考答案】 D)5.8 【參考答案】 A)5.9 【參考答案】 D)5.10【參考答案】 D)二、填空題5.11 【參考答案】 1 5 2 4 3 65.12 【參考答案】 程序段無限循環(huán),沒有輸出結(jié)果5.13 【參考答案】 -15.14 【參考答案】 115.15 【參考答案】 1 d=1.0 2 k+ 3 k=0 2 xamin三、編程題5.17【分析與解答】(1) 本題的基本算法是求累加值。累加項(xiàng)的值有規(guī)律的遞增,每一項(xiàng)的絕對(duì)值比前一項(xiàng)增2,因此可以利用循環(huán)的控制變量的遞增來得到累加項(xiàng)的絕對(duì)值。例如:for(
21、i=1; i=1e-4 ) t=t/i;e+=t;i+;(6) 請(qǐng)讀者自己對(duì)變量做出正確的定義,設(shè)計(jì)輸出語句,完善程序;也可以參考此程序段,按照自己的思路獨(dú)立地完成程序。(7) e的值應(yīng)當(dāng)是:2.71828。(8) 根據(jù)以上分析,讀者已不難用for循環(huán)來實(shí)現(xiàn)求e值的計(jì)算。(9) 注意:在完成此程序時(shí),不要對(duì)分母中的階乘值進(jìn)行單獨(dú)計(jì)算,因?yàn)?7!的值已超過long類型的最大值,更無法求到50!。5.19【分析與解答】(1) 從1880年至2000年的年數(shù)可用一個(gè)for循環(huán)來取得。(2) 對(duì)每一年,用以上指定的條件來進(jìn)行判斷,若滿足條件即為閏年,進(jìn)行輸出。(3) 按輸出的要求,需要設(shè)一個(gè)變量用于統(tǒng)
22、計(jì)一行中輸出的個(gè)數(shù),若在一行上已連續(xù)輸出了5個(gè)年數(shù),就需輸出一個(gè)換行符,使下一個(gè)輸出項(xiàng)在新的一行上開始;若用變量n來做此統(tǒng)計(jì),則當(dāng)表達(dá)式n%5=0時(shí)就應(yīng)輸出一個(gè)換行符,同時(shí)使n重新置0值。(4) 若變量y代表年數(shù),if語句的邏輯表達(dá)式可以寫成如下:(y%4=0 & y%100!=0JB1|JB1|y%400=0)(5) 以下程序段供參考:for ( y=1880; y1|JB1|y%400=0) printf(%d ,y);n+;if(n%5=0) printf(n); n=0; (6) 請(qǐng)讀者自己對(duì)變量做出正確的定義并賦初值,完善程序;也可以參考此程序段,按照自己的思路獨(dú)立地完成程序。從18
23、80年至2000年有30個(gè)閏年。5.20【分析與解答】(1) 不難理解利用以下的for循環(huán)可以在一行上連續(xù)輸出n個(gè)*號(hào):for(i=1; i=n; i+) printf(*);printf(n);若n的值是6,則連續(xù)輸出6個(gè)*號(hào)。(2) 以上圖形是在各行上輸出數(shù)目不等的*號(hào),只是*號(hào)的數(shù)目依次有規(guī)律地變化。在上半部分各行依次是1、3、5、7個(gè),因此可以用以下的程序段來實(shí)現(xiàn)這樣的輸出:for(k=1;k=7;k+,k+) for(i=1;i=1;k-,k-) for(i=1;i=k; i+)printf(*);printf(n);以上程序段從第一列起輸出的結(jié)果如下:*現(xiàn)在我們已完成了在每行輸出指
24、定數(shù)目的*號(hào)。(3) 輸出結(jié)果與題目要求不同,它們的區(qū)別是:按題目每一行之前有不同的空格,而這里則是所有的行都在第一列上開始輸出*號(hào);所以接著就應(yīng)當(dāng)解決這一問題。(4) 分析題目要求,每行第一個(gè)*號(hào)位置的縮進(jìn)是有規(guī)律的,假定中間這一行第一個(gè)*號(hào)位置是在第一列,則可看出,第一至第三行的縮進(jìn)分別是3、2、1個(gè)空格;而圖形下半部的縮進(jìn)數(shù)則剛好相反。這可在以上循環(huán)中添加輸出連續(xù)空格的for循環(huán)來實(shí)現(xiàn),對(duì)于上半部程序如下: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)
25、請(qǐng)讀者在理解以上給出的示例的基礎(chǔ)上,自己添加下半部空格的輸出。第六章 字符型數(shù)據(jù)習(xí)題分析與解答一、選擇題6.1【參考答案】 B)6.2【參考答案】 D)6.3【參考答案】 A)6.4【參考答案】 A)6.5【參考答案】 B)6.6【參考答案】 D)6.7【參考答案】 D)6.8【參考答案】 B)6.9【參考答案】 A)6.10【參考答案】 A)6.11【參考答案】 C)二、填空題6.12【參考答案】 -16.13【參考答案】 16.14【參考答案】 ctype.h6.15【參考答案】 06.16【參考答案】 10A 20B 30C 40D或: 10A20B30C40D6.17【參考答案】 7.
26、29 101.298AB或: 7.29101.29AB6.18【參考答案】A 7.29B 101.2986.19【參考答案】ABC三、編程題6.20【分析與解答】(1) 在進(jìn)行字符輸入時(shí),即使一次輸入了一行字符(最后用回車結(jié)束輸入),字符也只能一個(gè)一個(gè)地讀入。若ch已定義為char型變量,可以用以下的程序段來完成操作: ch=getchar();while(ch!KG-*2=n) ch=getchar();當(dāng)讀入的是一個(gè)回車符時(shí),循環(huán)就結(jié)束。循環(huán)體內(nèi)的“”符號(hào)表示需要在循環(huán)體內(nèi)完成的其他操作。(2) 在循環(huán)內(nèi)要求進(jìn)行的操作之一是:輸出每個(gè)字符以及與之對(duì)應(yīng)的ASCII代碼值。因此可用以下語句來實(shí)
27、現(xiàn)。printf(%c : %d ,ch,ch);(3) 在循環(huán)內(nèi)要求進(jìn)行的另一個(gè)操作是:每行只能輸出3對(duì)字符和與之對(duì)應(yīng)的ASCII代碼值。若n已定義為int型變量,則可用來作計(jì)數(shù)器;使n的初值為0,每輸出一次,n的值增1,當(dāng)n的值為3的整數(shù)倍時(shí),額外輸出一個(gè)換行符。例如:n+;if(n%3=0)putchar(n);(4) 把(2)和(3)中給出的語句放在循環(huán)體內(nèi),并按要求給出正確的定義和初值,就可完成題目所要求的操作。(5) 也可以在while后的一對(duì)括號(hào)中來完成字符的讀入,如while(ch=getchar()!KG-*2=n)。這時(shí),循環(huán)內(nèi)、外的“ch=getchar();”語句應(yīng)當(dāng)去
28、掉。6.21【分析與解答】(1) 一行字符的讀入,請(qǐng)參照題6.20(1)和(5)中的解釋。循環(huán)體內(nèi)的“”符號(hào)表示需要在循環(huán)體內(nèi)完成的其他操作。ch=getchar();while(ch!KG-*2=n) ch=getchar();(2) 在本題中循環(huán)體內(nèi)需要把讀入的所有數(shù)字字符轉(zhuǎn)換成一個(gè)整數(shù)。若用變量n來存放這個(gè)整數(shù),為了保證有效的存放,應(yīng)當(dāng)把它定義成long類型。(3) 要把輸入的一串?dāng)?shù)字字符轉(zhuǎn)換成一個(gè)整數(shù),首先需要判斷當(dāng)前讀入的字符是否是數(shù)字字符,若不是則什么也不做;若是,則進(jìn)行以下操作: 把當(dāng)前讀入的一個(gè)字符轉(zhuǎn)換成一個(gè)一位整數(shù),這可由語句“d=ch-0; ”來實(shí)現(xiàn),在這里d是一個(gè)整型變量
29、; 把d中的一位數(shù)歸并到n的低位中,這可用語句“n=n*10+d;”來實(shí)現(xiàn)。這里所述的操作可由以下語句來完成:if(ch=0&ch=0&ch=a & ch=z)n+;(3) 在退出循環(huán)后,輸出n的值。(4) 請(qǐng)自己完善程序。6.24【分析與解答】(1) 若圖案的行數(shù)輸入到變量L中。(2) 按要求L決定了圖形的行數(shù),因此可通過循環(huán)來實(shí)現(xiàn)L行的輸出:for(i=1; i=L; i+) 循環(huán)體中的“”號(hào),代表輸出L行的操作。(3) 假定ch中存放了一個(gè)字符,我們知道,通過以下循環(huán)可以在一行上輸出n個(gè)字符:for(j=1; j=n; j+)putchar(ch);putchar(n);注意,在循環(huán)后p
30、utchar(n);語句不可少,它用以換行。(4) 現(xiàn)在應(yīng)當(dāng)解決如何按要求給出每行輸出的字符。由圖分析,行數(shù)(或行號(hào))為1時(shí)輸出字符A,行數(shù)為2時(shí)輸出字母B若輸出的字母放在變量ch中,行號(hào)取決于外循環(huán)的控制變量i,則輸出的字母和行號(hào)的關(guān)系可用表達(dá)式:ch=A+i-1來表示。當(dāng)i為1時(shí)ch中被賦予字母A,當(dāng)i為2時(shí)ch中被賦予了字母B,其他依此類推。因此,在此表達(dá)式后,利用(3)中的循環(huán)就解決了各行上輸出的字母。(5) 按要求每行輸出的字母的個(gè)數(shù)不同,第二行輸出3個(gè)字母,第三行輸出5個(gè)字母,第四行輸出7個(gè)字母(3)中for循環(huán)體的執(zhí)行次數(shù)取決于n的值,也就是說n的值決定了每行輸出字母的個(gè)數(shù)。其實(shí)
31、,n的值與行號(hào)有著密切的關(guān)系:n=2*i-1,當(dāng)i為1時(shí)n的值是1、當(dāng)i的2時(shí)n的值是3、當(dāng)i的3時(shí)n的值是5、當(dāng)i的4時(shí)n的值是7。因此在(3) 中for循環(huán)之前可用此表達(dá)式求出n的值。(6) 總結(jié)以上分析,我們可得到以下的程序段:for(i=1; i=L; i+) ch=A+i-1;n=2*i-1;for(j=1; j=i; k-)putchar( );把此循環(huán)放在i控制的循環(huán)體內(nèi)、輸出每行字符的循環(huán)之前即可。(8) 請(qǐng)讀者自己補(bǔ)充有關(guān)的include行、語句和變量的定義,以完成整個(gè)程序。注意,如果有能力可在某些地方作些簡(jiǎn)化。第七章 函數(shù)習(xí)題分析與解答一、選擇題7.1 【參考答案】 C)7
32、.2 【參考答案】 C)7.3 【參考答案】 B)7.4【參考答案】 C)7.5【參考答案】 A)7.6【參考答案】 D)7.7【參考答案】 A)二、填空題7.8【參考答案】 127.9【參考答案】 9.0(或9.)7.10【參考答案】 47.11【參考答案】 1 n=1 2 s7.12【參考答案】 1 =y 2 z*x7.13【參考答案】 1 1 2 s*i 3 0 4 f(k)三、程序調(diào)試和編程題7.14 【分析與解答】(1) fun函數(shù)判斷傳給形參n的數(shù)是否為素?cái)?shù),若是函數(shù)返回1,否則返回0。(2) 函數(shù)的原意是用變量yes作為判斷n是否為素?cái)?shù)的標(biāo)志,是素?cái)?shù),其值為1,否則為0。而所給函
33、數(shù)的實(shí)際流程卻不能實(shí)現(xiàn)這一功能,例如,若n的值為15(明顯不是素?cái)?shù))時(shí),在for循環(huán)中,當(dāng)k的值為3時(shí),就會(huì)執(zhí)行if子句,yes得0,但for循環(huán)并沒有終止,接著k為4時(shí)就會(huì)執(zhí)行else子句,又使yes得1,由此可見此程序段并不能準(zhǔn)確地判斷一個(gè)數(shù)是否為素?cái)?shù);最后確定yes為何值的是for循環(huán)的終止值n/2,當(dāng)n為15時(shí),k的值為n/2等于7,在循環(huán)體內(nèi)將又一次執(zhí)行else子句,使yes得1,這時(shí)循環(huán)結(jié)束,函數(shù)返回1。由此可見所給fun函數(shù)不能起到預(yù)想的作用。(3) 由上分析可知,對(duì)于n的值為15時(shí)而言,問題是在一旦yes的值為0,已判斷n中的值不是素?cái)?shù)時(shí),沒有及時(shí)退出循環(huán),返回0;因此,若在i
34、f子句中添加一條語句:break;就能解決這一問題,把if語句改寫如下:if(n%k=0) yes=0; break; else yes=1;(4) 在所給fun函數(shù)中,當(dāng)n的值為2、3時(shí)(都是素?cái)?shù)),因?yàn)閚/2的值為1(大于k中的2),所以不會(huì)進(jìn)入for循環(huán),而直接執(zhí)行return語句,細(xì)心的讀者應(yīng)該可以發(fā)現(xiàn),這時(shí)yes沒有賦過值,也就是說,返回的是一個(gè)不確定的值,這將會(huì)導(dǎo)致錯(cuò)誤;因此,應(yīng)當(dāng)在定義語句中給yes賦初值1:int k, yes=1;至此fun函數(shù)能正確運(yùn)行。(5) 總結(jié):因?yàn)橐坏﹊f語句中的表達(dá)式:n%k=0的值為1(即可被某數(shù)整除),則可以確定n不是素?cái)?shù),因此即可返回,不必再
35、執(zhí)行函數(shù)其他部分,if子句可改成:if(n%k=0) yes=0; return yes; else yes=1;也可簡(jiǎn)化成:if (n%k=0) return 0;else yes=1;又可進(jìn)一步不用變量yes,并去掉else,簡(jiǎn)化成(請(qǐng)參考例7.4):for( k=2; k=n/2; k+)if(n%k=0) return 0;return 1;7.15【分析與解答】(1) 若用整型變量c存放余數(shù),則求a被b除后的余數(shù)可用表達(dá)式:c=a%b。(2) 本題要求編寫函數(shù)mymod用以求a被b除后的余數(shù)即:c=mymod( a,b );(3) 只要把a(bǔ)%b作為函數(shù)值返回即可完成操作(請(qǐng)參考例7.
36、1):int mymod(int a, int b) return a%b; (4) 總結(jié):本題在算法上十分簡(jiǎn)單,只是要求讀者能夠掌握編寫函數(shù)的基本知識(shí)。7.16【分析與解答】(1) 本題所要采用的算法是累加。分析可見,所有累加項(xiàng)的分子都是1,而分母部分逐項(xiàng)增1;只是累加項(xiàng)的符號(hào)交叉變化。因此處理好符號(hào)的變化是完成操作的關(guān)鍵之一。(2) 若函數(shù)名為funa,傳送到函數(shù)的參數(shù)是整型值,假定形參命名為n;函數(shù)的返回值應(yīng)當(dāng)是浮點(diǎn)型,為此函數(shù)的首部可以是:double funa( int n )(3) 接著寫函數(shù)體。累加放在一個(gè)for循環(huán)中來完成,若循環(huán)控制變量為k,可利用循環(huán)控制變量作為累加項(xiàng)t的分
37、母,累加值放在add中:for( k=1; k=n; k+) t=s*1.0/k;add=add+t;此處,s用作符號(hào)變量,在1和-1之間交叉變化,乘以1.0/k后,t的值也將按要求變化符號(hào)。注意,表達(dá)式1.0/k不可以寫成1/k,因?yàn)槊恳豁?xiàng)的絕對(duì)值必定是小于1的小數(shù)。(4) 現(xiàn)在需要確定s的值。最簡(jiǎn)單的可用表達(dá)式:s=-s來實(shí)現(xiàn)(請(qǐng)參考例5.2),若賦值號(hào)右邊s中的值為-1,則賦值號(hào)左邊s中的值就得1;若賦值號(hào)右邊s中的值為1,則賦值號(hào)左邊s中的值就會(huì)得-1;則每循環(huán)一次就使s改變了一次符號(hào)。當(dāng)然還可有多種方法。把以上表達(dá)式添加到循環(huán)體中:for( k=1; k=n; k+) s=-s;t=
38、s*1.0/k;add=add+t;(5) 最后注意應(yīng)當(dāng)給各變量賦以適當(dāng)?shù)某踔?,并返回函?shù)值。(6) 請(qǐng)編寫主函數(shù)。當(dāng)傳給形參的值為10時(shí),函數(shù)的返回值應(yīng)當(dāng)是:0.。(7) 總結(jié):本題的算法并不復(fù)雜,但是需要讀者掌握編寫函數(shù)的基本知識(shí)。掌握需要傳入函。數(shù)的參數(shù)及其類型,掌握需要返回的值及其類型。在此基礎(chǔ)上,其他方面與先前在主函數(shù)中編寫的程序沒有什么區(qū)別。7.17 【分析與解答】(1) 此題與7.18相似。函數(shù)的返回值為浮點(diǎn)型,函數(shù)只有一個(gè)形參,為整型。(2) 函數(shù)的基本算法是累加,只是除第一項(xiàng)外其余各項(xiàng)都用減法;每一項(xiàng)的分子都是1,分母部分為k2,k的值逐項(xiàng)增1,由2變化到m。因此,算法可以用
39、一個(gè)循環(huán)來實(shí)現(xiàn)。(3) 當(dāng)m的值為12時(shí),函數(shù)值應(yīng)是:0.。7.18【分析與解答】(1) 若函數(shù)取名為fun,按題意,x作為形參,由調(diào)用函數(shù)傳入,其類型不應(yīng)當(dāng)用整型;表達(dá)式x2-5x+4的值作為函數(shù)值返回,函數(shù)值的類型應(yīng)為浮點(diǎn)型。因此,很容易寫出函數(shù):double fun( double x ) return x*x-5*x+4; (2) 若在調(diào)用函數(shù)時(shí),x和y2已正確定義,且x已有確定的值,則可用以下函數(shù)調(diào)用語句得到y(tǒng)2的值:y2=fun( x+15 );(3) 同樣,若在調(diào)用函數(shù)時(shí),x和y3已正確定義,且x已有確定的值,則可用以下函數(shù)調(diào)用語句得到y(tǒng)3的值:y3=fun( sin(x) );
40、注意,因?yàn)樵诔绦蛑姓{(diào)用了C語言提供的庫(kù)函數(shù)sin,因此應(yīng)當(dāng)在程序的最前面包含以下命令行:#include math.h(4) 參考(2) 和(3) 應(yīng)不難寫出求y1的語句,請(qǐng)讀者自己完成。(5) y1的值應(yīng)是:-2.0。當(dāng)x的值為5時(shí),y2的值應(yīng)是:304.0。當(dāng)x的值為0.5時(shí),y3的值應(yīng)是:1.。(6) 總結(jié): 本題已給出了函數(shù)需要求值的表達(dá)式,讀者只需確定函數(shù)的類型和形參的類型,就可以寫出函數(shù),就像例7.1中求兩數(shù)之和的函數(shù)一樣簡(jiǎn)單。 在給定了函數(shù)之后,調(diào)用函數(shù)時(shí),函數(shù)的實(shí)參應(yīng)當(dāng)是一個(gè)與形參類型一致的任意合法的表達(dá)式。例如,可以是常量、算術(shù)表達(dá)式,也可以是函數(shù)等。就像例7.1中求兩數(shù)之和
41、的add函數(shù)一樣,可以用add( 3,4 );來求3+4;當(dāng)x、y有確定值時(shí),可以用add( x*x,y*y);來求x2+y2;當(dāng)x、y有確定值時(shí),可以用add( sin(x+y),cos(x+y);來求sin(x+y)+cos(x+y),這同樣可以通過add( sin(add(x,y),cos(add(x,y) );來求得。第八章 指針習(xí)題分析與解答一、選擇題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【參考答案
42、】 C)8.11【參考答案】 C)8.12【參考答案】 C)二、填空題8.13【參考答案】 1108.14【參考答案】 7 18.15【參考答案】 char *p, *p=ch, p=&ch; scanf(“%c/n”p,); ch=*p; p=&ch; printf(“%c/n”,*p);8.16【參考答案】 *s=*(p+3), *(s-2),50, *s=*(a+1), 2, 10,20,30,40三、編程題8.17【分析與解答】(1) 若函數(shù)名為fun,按題意,函數(shù)不返回函數(shù)值;函數(shù)的形參需要接受傳送過來的兩個(gè)浮點(diǎn)數(shù),因此需要有兩個(gè)double類型的形參;另外要把它們的和值與差值,通過
43、形參傳送回去,這就要求有兩個(gè)double類型的形參指針,接受傳送過來的地址,以便通過指針把和值與差值傳送給所指的主函數(shù)中的變量。因此函數(shù)的首部應(yīng)當(dāng)是:void fun(double a, double b, double *p1, double *p2)這里,a、b、p1、p2是自己取的名。(2) 假設(shè)把a(bǔ)、b的和值傳送給p1所指的存儲(chǔ)單元,可用語句:*p1=a+b; 把a(bǔ)、b的差值傳送給p2所指的存儲(chǔ)單元,可用語句:*p2=a-b;。(3) 因此函數(shù)可寫成:void fun(double a,double b,double *p1,double *p2) *p1=a+b; *p2=a-b;
44、(4) 在主函數(shù)中,若有定義語句:double x,y,z1,z2;,且x、y已賦值,則調(diào)用fun函數(shù)的語句可以是:fun(x,y,&z1,&z2);。(5) 總結(jié):本題所要求的算法極簡(jiǎn)單,但它要求有兩個(gè)值返回,用return語句就不可能返回兩個(gè)函數(shù)值。要求讀者能利用形參指針把要求的值間接地傳回調(diào)用函數(shù)。8.18【參考答案】(1) 若函數(shù)名為maxandmin,按題意,函數(shù)不返回函數(shù)值;函數(shù)將接受3個(gè)數(shù)(假定為int類型),并需要通過指針指向主函數(shù)中的兩個(gè)int型變量,以便把最大值和最小值放入指針?biāo)傅拇鎯?chǔ)單元中。因此函數(shù)的首部應(yīng)當(dāng)是:void maxandmin(int a,int b,int c,int *pmax,int *pmin)(2) 函數(shù)體中需要實(shí)現(xiàn)求3個(gè)數(shù)的最大值和最小值的算法,此算法應(yīng)當(dāng)在學(xué)習(xí)第四章時(shí)已經(jīng)掌握(可參考例4.2和習(xí)題4.24)。如果把a(bǔ)、b、c中的最大值暫時(shí)放在max中,把最小值放在min中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 英語語法教學(xué)中一般現(xiàn)在時(shí)的應(yīng)用
- 人教部編版生字詞認(rèn)知清單解析
- Java高級(jí)開發(fā)面試題庫(kù)解析
- 中醫(yī)養(yǎng)生保健知識(shí)普及課件
- 畢業(yè)生實(shí)習(xí)指導(dǎo)與企業(yè)對(duì)接方案
- 小學(xué)勞動(dòng)教育活動(dòng)方案5篇專項(xiàng)范文集
- 2026年高性能材料在橋梁優(yōu)化設(shè)計(jì)中的應(yīng)用
- 2026年現(xiàn)場(chǎng)電氣安全管理的最佳實(shí)踐
- 2026年照明與自然采光的協(xié)調(diào)設(shè)計(jì)
- 能源轉(zhuǎn)換的未來趨勢(shì)與技術(shù)創(chuàng)新-洞察及研究
- 2024版裝修公司軟裝合同范本
- IABP主動(dòng)脈球囊反搏課件
- 加壓站清水池建設(shè)工程勘察設(shè)計(jì)招標(biāo)文件
- 工會(huì)制度匯編
- 喪假國(guó)家規(guī)定
- 2023年醫(yī)務(wù)科工作計(jì)劃-1
- 乒乓球社團(tuán)活動(dòng)記錄
- 地基與基礎(chǔ)分項(xiàng)工程質(zhì)量驗(yàn)收記錄
- 一文多用作文課公開課課件
- 水運(yùn)工程施工課程設(shè)計(jì)指導(dǎo)書
- 驚恐障礙診治課件
評(píng)論
0/150
提交評(píng)論