

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、全國計(jì)算機(jī)等級(jí)考試二級(jí)教程C 語言程序設(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 一、選擇題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 【參考答案】 1 11215 【參考答案】
2、1 4.2216 【參考答案】 1 2 122 4.22 3 定義4 執(zhí)行217 【參考答案】 1 關(guān)鍵字 2 用戶標(biāo)識(shí)符218 【參考答案】 1 int2 float3 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/c223 【參考答案】 把 10 賦給變量 s224 【參考答案】 1 位2 a/c*b3 b/c*a2 1 位二進(jìn)制數(shù)據(jù)(0或 1)225 【參考答案】 1 8 2127 301111
3、111 4-128 5 10000000226 【參考答案】 1 32767 2 -32768 3 1000000000000000227 【參考答案】 1 十 2 八 3 十六三、上機(jī)改錯(cuò)題228 【分析與解答】第 1 行的錯(cuò)誤:(1) include是一個(gè)程序行,因此在此行的最后不應(yīng)當(dāng)有分號(hào)(;)。1第 2 行的錯(cuò)誤:(1) main()是主函數(shù)的起始行,不是語句,因此最后不應(yīng)當(dāng)有分號(hào)。(2) 在同一行上的/ * main function * / 顯然是注釋;C 語言規(guī)定:注釋由開頭,由*/*號(hào)和/ * / * main function * 的寫法是錯(cuò)誤的,而應(yīng)寫成:/* main f
4、unction */。第 3 行的錯(cuò)誤:(1) 在主函數(shù)的起始行 的后面是函數(shù)體,函數(shù)體由左花括號(hào)(開始。但在函數(shù)體的第一行:float的前面缺少了左花括號(hào)。(2) 在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 顯然是注釋;C 將去找最近的*/* /*r is 中,第一個(gè)/*與 radius后的那個(gè)*/落在了注釋的外面,而構(gòu)成了/* s is area of circular*/ */中第一個(gè)*/就結(jié)束了注釋,第一個(gè)就成了多余的了。第 6 行的錯(cuò)誤:(1) %f ,s)應(yīng)當(dāng)是一條輸出語句,但在最后缺少了一個(gè)分號(hào)。(2) %f ,
5、s);右花括號(hào)();此右花括號(hào)可以放在 printf(%f ,s);的后面,也可以放在 %f ,s);的下一行上。227 【分析與解答】第 2 行的錯(cuò)誤:在 main的后面缺少一對(duì)圓括號(hào)。第 4 行的錯(cuò)誤:在 c=4.0的后面缺少分號(hào)。第 6 行的錯(cuò)誤:在 %f 的后面缺少分號(hào)。 一、選擇題 單選題)3.1 【參考答案】3.2 【參考答案】3.3 【參考答案】3.4 【參考答案】3.5 【參考答案】3.6 【參考答案】3.7 【參考答案】3.8 【參考答案】3.9 【參考答案】3.10 【參考答案】3.11 【參考答案】3.12 【參考答案】3.13 【參考答案】3.14 【參考答案】3.15
6、 【參考答案】3.16 【參考答案】3.17 【參考答案】3.18 【參考答案】3.19 【參考答案】3.20 【參考答案】C)C)D)C)D)B)C)D)A)B)C)D)D)A)C)C)C)把 D的答案修改為:scanf(“%8f”,&c);C)B)2二、填空題3.21 【參考答案】(1)-200,2500(2)i=-200,j=2500(3) i=-200j=25003.22 【參考答案】3.23 【參考答案】3.24 【參考答案】3.25 【參考答案】1 12 2 0 3 01 一條語句 2 分號(hào)或;)分號(hào);)1100 25.81 1.892342 100 25.81 1.89234 3
7、100 25.81 1.892343.26 【參考答案】3.27 【參考答案】3.28 【參考答案】三、編程題和改錯(cuò)題3.29 【分析與解答】x=127, x= 127, x= 177,x=x=127, x=127 , x=127 ,x= 000127, x=%06da=513.789215,a= 513.79,a= 513.78921500,a= 513.789215007f, x= 127(1) 主函數(shù)名 main后應(yīng)有一對(duì)圓括號(hào)。(2) 第三行的 printf語句用以提示輸入,但是原樣輸出的字符串沒有用雙引號(hào)括起來;另外,printf 格式串中最后不應(yīng)該有換行符。因?yàn)檩斎腠?xiàng) 、b、c 從
8、定義和計(jì)算結(jié)果來看都是 double 類型,因此,第四行 scanf 語句格式串中的格式說明不應(yīng)當(dāng)用%d而應(yīng)當(dāng)用;且每一個(gè)變量之前應(yīng)該加地址運(yùn)算符。第七行的 printf語句中應(yīng)當(dāng)把%d都改成%lf或%f樣輸出的字符;因?yàn)橄乱粋€(gè) printf 的輸出從新的一行開始,因此在本輸出語句的格式串的最后應(yīng)當(dāng)加換行符。(5) 第八行的 printf 語句中應(yīng)當(dāng)把格式串整理合并放在輸出項(xiàng)的前面,輸出項(xiàng)放在后面,%d都改成%lf或%f;中間的n刪去。請同學(xué)們自己寫出修改后的程序,并上機(jī)調(diào)試。3.30 【分析與解答】(1) 分析:可用算術(shù)式 56060 把分鐘換算成小時(shí)和分鐘,商數(shù)就是小時(shí)數(shù),余數(shù)就是分鐘數(shù)。
9、(2) 確定變量的名字和定義變量的類型:在程序中把小時(shí)數(shù)放在變量 h 中,把分鐘數(shù)放在變量 m中。這兩個(gè)變量的類型可以是整型本題中采用整型,也可以是實(shí)型。(3) 確定所用算法:求 56060 的商數(shù),在 C 語言中可以用整除的算法,語句是 。求余數(shù)可用求余運(yùn)算符 560%60 mm=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;3The result: %3d : %3d, h,m);運(yùn)行結(jié)果是:The result:9
10、: 203.31 【分析與解答】(1) a存放 1500 b 存放 350 q 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ì)輸出語句。輸出 、b、q、。(5) 把以上內(nèi)容放在主函數(shù)的一對(duì)花括號(hào)中。本題的程序與 3.30 相似,請大家參考上題并根據(jù)本題的解釋自己編程,并上機(jī)調(diào)試。3.32 【分析與解答】(1) 定義 4 個(gè)雙精度變量 、b、c 和 ,變量 、b、c 分別存放讀入的 3 個(gè)雙
11、精度數(shù),ave存放它們的平均值。(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
12、.4644 小 數(shù) 點(diǎn) 后 一 位 且 對(duì) 第 二 位 數(shù) 進(jìn) 行 四 舍 五 入 , 可 用 表 達(dá) 式 :(int)(123.467+0.05)*10)/10.0 10.0 而不能用整數(shù) 10除了;若要求保留 123.4644 小數(shù)點(diǎn)后兩 位且對(duì)第三 位數(shù)進(jìn)行四舍 五入,可用表 達(dá)式:;其他依此類推。(6) 設(shè)計(jì)輸出語句。輸出 、b、c和 。(7) 把以上內(nèi)容放在主函數(shù)的一對(duì)花括號(hào)中。(8) 編寫程序如下:main()double a,b,c,ave;Enter a ,b ,c : );, &a, &b, &c );ave=(a+b+c)/3;ave=%f, ave);用以比較四舍五入前后
13、的數(shù)據(jù)*/ave=(int)(ave+0.05)*10)/10.0;上句也可寫成 ave=(int)(ave*10+0.5)/10.0;*/a=%f, b=%f, c=%f, ave=%f, a,b,c,ave);3.33 【分析與解答】(1) 關(guān)于對(duì)變量中的數(shù)進(jìn)行交換的算法請參考 3.7 題中的解釋和教程中有關(guān)的例題。(2) 定義 4 個(gè)整型變量 bc和 ,變量bc分別存放讀入的 3 個(gè)整數(shù),t用作臨時(shí)存儲(chǔ)單元。4(3) 設(shè)計(jì)輸入語句,以及在此之前用于提示輸入的(printf)語句。(4) 輸出 、b、c中的值,以便于比較。(5) 交換的步驟如下: 把 c中的值賦給 。 把 b 中的值賦給
14、。 把 a中的值賦給 b。 把 t中的值賦給 。經(jīng)過以上步驟,已按要求進(jìn)行了交換。(6) 輸出 、b、c中的值。(7) 編寫程序如下:main()int a, b, c, t;Enter a, b, c );%d%d%d,&a,&b,&c);(1) a=%d,b=%d,c=%d,a,b ,c);t=c; c=b; b=a; a=t;(2) a=%d,b=%d,c=%d,a,b,c); 一、選擇題4.1 【參考答案】4.2 【參考答案】4.3 【參考答案】4.4 【參考答案】4.5 【參考答案】4.6 【參考答案】4.7 【參考答案】4.8 【參考答案】4.9 【參考答案】4.10 【參考答案】
15、二、填空題A)B)A)D)C)A)B)C)D)D)【參考答案】4.12【參考答案】4.13【參考答案】4.14【參考答案】1 非零 2 零、1|JB1|1邏輯非)2、小于、大于、小于等于、大于等于)3、等于、不等)4&(邏輯與) 5JB1|JB1|(邏輯或。4.15【參考答案】!4.16【參考答案】 1 a=b 或 2 JB1|xJB1|44.17【參考答案】4.18【參考答案】4.19【參考答案】4.20【參考答案】11 xm0)JB1|JB1|(m1=m0&d1=d0) age=y1-y0;else age=y1-y0-1;讀者可以參考以上語句寫出程序,也可以根據(jù)分析寫出與此形式不同的語句
16、和程序。4.23【分析與解答】(1) 若輸入的整數(shù) a是奇數(shù),輸出:odd number,是偶數(shù)輸出:even number。(2) 若一個(gè) a是偶數(shù),它就能被 2 除盡,即 ,輸出 even number;若是奇數(shù),它就不能被 2 除盡,即 KG-*2=0,輸出 odd 。讀者可以參考以上給出的算法,寫出相應(yīng)的 C 語句,并編寫出完整的程序。4.24 【分析與解答】本題的主要算法是從 3 個(gè)數(shù)中找出最大的那個(gè)數(shù)。假定始終把最大的數(shù)放在變量 max中。(1) 假定 a中的數(shù)最大,把 a賦給 。(2) 用 b 去和 max比較,若 b 大于 ,則把 b 賦給 max;若不大于 max,則什么也不
17、做。(3) 用 c去和 max比較,若 c大于 max,則把 c賦給 ;若不大于 max,則什么也不做。(4) 經(jīng)過以上操作,max中已放入了 、b、c三個(gè)數(shù)中的最大數(shù),輸出 max即可。讀者可以參考以上給出的算法,寫出相應(yīng)的 C 語句,并編寫出完整的程序。4.25 【分析與解答】(1) 本題已給出了非常明確的條件,只要寫出正確的條件判斷語句就可基本完成程序的編寫。(2) 由給出的函數(shù)可知,只有 x 的值在規(guī)定的范圍內(nèi)時(shí),才求出 y 的值,因此程序應(yīng)當(dāng)對(duì)輸入的 x進(jìn)行判斷,若超過范圍就不求 y的值。(3) 現(xiàn)以使用 ifCD#*2else語句為例寫出程序供參考。main()int x,y;En
18、ter x : ); scanf(, &x);if(x-5&x10)if(x=0) y=x-1;6else if(x0 ) y=x+1;else if(x-5) y=x;x=%d , x,y);*END*); 一、選擇題 單選題)5.1 【參考答案】5.2 【參考答案】5.3 【參考答案】5.4 【參考答案】5.5 【參考答案】5.6 【參考答案】5.7 【參考答案】5.8 【參考答案】5.9 【參考答案】5.10【參考答案】二、填空題D)C)B)C)C)B)D)A)D)D)5.11 【參考答案】5.12 【參考答案】5.13 【參考答案】5.14 【參考答案】5.15 【參考答案】5.16
19、【參考答案】三、編程題1 5 2 4 3 6程序段無限循環(huán),沒有輸出結(jié)果-1111 d=1.0 2 k+ 3 k=0 2 xamin5.17【分析與解答】(1) 本題的基本算法是求累加值。累加項(xiàng)的值有規(guī)律的遞增,每一項(xiàng)的絕對(duì)值比前一項(xiàng)增 2,因此可以利用循環(huán)的控制變量的遞增來得到累加項(xiàng)的絕對(duì)值。例如:for( i=1; i=1e-4 )t=t/i;e+=t;i+;(6) 請讀者自己對(duì)變量做出正確的定義,設(shè)計(jì)輸出語句,完善程序;也可以參考此程序段,按照自己的思路獨(dú)立地完成程序。(7) e的值應(yīng)當(dāng)是:2.71828。(8) 根據(jù)以上分析,讀者已不難用 for循環(huán)來實(shí)現(xiàn)求 e值的計(jì)算。(9) 注意:
20、在完成此程序時(shí),不要對(duì)分母中的階乘值進(jìn)行單獨(dú)計(jì)算,因?yàn)榈闹狄殉^ long類型的最大值,更無法求到 。5.19【分析與解答】(1) 從 1880 年至 2000 年的年數(shù)可用一個(gè) for循環(huán)來取得。(2) 對(duì)每一年,用以上指定的條件來進(jìn)行判斷,若滿足條件即為閏年,進(jìn)行輸出。(3) 5 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
21、 ,y);n+;if(n%5=0) printf(); n=0; (6) 請讀者自己對(duì)變量做出正確的定義并賦初值,完善程序;也可以參考此程序段,按照自己的思路獨(dú)立地完成程序。從 1880 年至 2000 年有 30 個(gè)閏年。5.20【分析與解答】(1) 不難理解利用以下的 for循環(huán)可以在一行上連續(xù)輸出 n個(gè)*號(hào):for(i=1; i=n; i+) printf(*););若 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
22、;k+,k+)for(i=1;i=1;k-,k-)for(i=1;i=k; *););以上程序段從第一列起輸出的結(jié)果如下:*現(xiàn)在我們已完成了在每行輸出指定數(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
23、;k=7;k+,k+)for(j=1;j=b; );b-;for(i=1;i=k; *););(5) 請讀者在理解以上給出的示例的基礎(chǔ)上,自己添加下半部空格的輸出。 一、選擇題6.1【參考答案】6.2【參考答案】6.3【參考答案】6.4【參考答案】6.5【參考答案】6.6【參考答案】6.7【參考答案】6.8【參考答案】6.9【參考答案】6.10【參考答案】【參考答案】二、填空題B)D)A)A)B)D)D)B)A)A)C)96.12【參考答案】6.13【參考答案】6.14【參考答案】6.15【參考答案】6.16【參考答案】或: 10A20B-11ctype.h010A 20B 30C 40D30
24、C40D6.17【參考答案】或: 7.29101.29AB6.18【參考答案】A 7.29B 101.2986.19【參考答案】A7.29 101.298ABBC三、編程題6.20【分析與解答】(1) 最后用回車結(jié)束輸入,字符也只能一個(gè)一ch已定義為charwhile(ch!KG-*2=)ch=getchar();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í)現(xiàn)。%c : %d ,ch,ch);(3) 3 對(duì)字符和與之對(duì)應(yīng)
25、的 ASCII代碼值。若 n 已定義為 int型變量,則可用來作計(jì)數(shù)器;使 n 的初值為 0,每輸出一次,n 的值增 1,當(dāng) n的值為 3 的整數(shù)倍時(shí),額外輸出一個(gè)換行符。例如:n+;);(4) 把(2)和中給出的語句放在循環(huán)體內(nèi),并按要求給出正確的定義和初值,就可完成題目所要求的操作。(5) 也可以在 whilewhile(ch=getchar()!KG-*2=。這時(shí),循環(huán)內(nèi)、外的“ch=getchar();”語句應(yīng)當(dāng)去掉。6.21【分析與解答】(1) 一行字符的讀入,請參照題 和(5)中的解釋。循環(huán)體內(nèi)的“”符號(hào)表示需要在循環(huán)體內(nèi)完成的其他操作。ch=getchar();while(ch!
26、KG-*2=)10ch=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)行以下操作: 0; ,在這里d 是一個(gè)整型變量; 把 d 中的一位數(shù)歸并到 n 的低位中,這可用語句“”來實(shí)現(xiàn)。這里所述的操作可由以下語句來完成:09) d=ch-0; n=n*10+d; if語句后一對(duì)括號(hào)中的判斷表達(dá)式可以調(diào)用字符函數(shù) isdigit來實(shí)現(xiàn):if( isdigit(ch)
27、) 0; n=n*10+d; if子句的兩個(gè)語句可以合并成:0。(4) 把中的語句放入循環(huán)中:ch=getchar();while(ch!KG-*2=)0&ch=9) n=n*10+ ch-0;ch=getchar();(5) 請自己寫出定義語句并賦初值。注意,最后輸出 n時(shí),應(yīng)當(dāng)使用格式說明,而不能使用。6.22【分析與解答】(1) 行數(shù)的統(tǒng)計(jì)可通過統(tǒng)計(jì)輸入的符的個(gè)數(shù)來完成。(2) 統(tǒng)計(jì)的過程應(yīng)當(dāng)放在一個(gè) while 循環(huán)體中;判斷循環(huán)是否進(jìn)行的條件可以用:(ch=getchar()=EOF)。若用整型變量 n 作為計(jì)數(shù)器對(duì)符進(jìn)行統(tǒng)計(jì),只要讀入的字符是,則 n增 1。如:while(ch=g
28、etchar()!KG-*2=EOF)n+;(3) EOF是在 stdio.h中預(yù)定義了的標(biāo)識(shí)符,在 TURBO C 的環(huán)境下,鍵入 Ctrl+Z(即按住鍵盤上的 Ctrl鍵,同時(shí)按字母 Z鍵后,敲 Enter鍵,即輸入了 。6.23【分析與解答】(1) 本題要求的操作同樣可在 while循環(huán)中完成:) (2) 若用整型變量 n n增 1。如: & )n+;(3) 在退出循環(huán)后,輸出 n的值。(4) 請自己完善程序。6.24【分析與解答】(1) 若圖案的行數(shù)輸入到變量 L中。(2) 按要求 L決定了圖形的行數(shù),因此可通過循環(huán)來實(shí)現(xiàn) L行的輸出:for(i=1; i=L; i+)11 循環(huán)體中的
29、“”號(hào),代表輸出 L行的操作。(3) 假定 ch中存放了一個(gè)字符,我們知道,通過以下循環(huán)可以在一行上輸出 n個(gè)字符:for(j=1; j=n; j+)putchar(ch););注意,在循環(huán)后 語句不可少,它用以換行。(4) 或行號(hào)為 1 時(shí)輸出字符,行數(shù)為 2 時(shí)輸出字母 若輸出的字母放在變量 ch 中,行號(hào)取決于外循環(huán)的控制變量+i-1 i為 1 時(shí) ch中被賦予字母 ,當(dāng) i為 2 時(shí) ch中被賦予了字母 ,其他依此類推。因此,在此表達(dá)式后,利用中的循環(huán)就解決了各行上輸出的字母。(5) 按要求每行輸出的字母的個(gè)數(shù)不同,第二行輸出 3 個(gè)字母,第三行輸出 5 個(gè)字母,第四行輸出 7 個(gè)字母
30、中 for循環(huán)體的執(zhí)行次數(shù)取決于 n 的值,也就是說 n 的值決定了每行輸出字母的個(gè)數(shù)。其實(shí),n的值與行號(hào)有著密切的關(guān)系:,當(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=+i-1;n=2*i-1;for(j=1; j=i; k-)putchar( );把此循環(huán)放在 i控制的循環(huán)體內(nèi)、輸出每行字符的循環(huán)之前即可。(8) 請讀者自己補(bǔ)充有關(guān)的 include行、語句和變量的定義
31、,以完成整個(gè)程序。注意,如果有能力可在某些地方作些簡化。 一、選擇題7.1 【參考答案】7.2 【參考答案】7.3 【參考答案】7.4【參考答案】7.5【參考答案】C)C)B)C)A)127.6【參考答案】7.7【參考答案】二、填空題D)A)7.8【參考答案】7.9【參考答案】7.10【參考答案】【參考答案】7.12【參考答案】7.13【參考答案】三、程序調(diào)試和編程題7.14 【分析與解答】12或 9.000000)41 n=1 2 s1 =y 2 z*x1 1 2 s*i 3 0 4 f(k)(1) fun函數(shù)判斷傳給形參 n的數(shù)是否為素?cái)?shù),若是函數(shù)返回 1,否則返回 0。(2) 函數(shù)的原意
32、是用變量 yes作為判斷 n 是否為素?cái)?shù)的標(biāo)志,是素?cái)?shù),其值為 1,否則為 0。而所給函數(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最后確定 yes為何值的是 for循環(huán)的終止值 ,當(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í)而言,問題是
33、在一旦 yes的值為 0,已判斷 n 中的值不是素?cái)?shù)時(shí),沒有及時(shí)退出循環(huán),返回0;因此,若在 if子句中添加一條語句:break;就能解決這一問題,把 if語句改寫如下:if(n%k=0) yes=0; break; else yes=1;(4) 在所給 fun n的值為 23 時(shí)都是素?cái)?shù) n/2的值為 大于 k 中的 2)以不會(huì)進(jìn)入 for循環(huán),而直接執(zhí)行return語句,細(xì)心的讀者應(yīng)該可以發(fā)現(xiàn),這時(shí)yes沒有賦過yes賦初值 1:int k, yes=1;至此 fun函數(shù)能正確運(yùn)行。(5) 總結(jié):因?yàn)橐坏?if 語句中的表達(dá)式:n%k=0 的值為 即可被某數(shù)整除,則可以確定 n不是素?cái)?shù),因
34、此即可返回,不必再執(zhí)行函數(shù)其他部分,if子句可改成:if(n%k=0) yes=0; return yes; else yes=1;也可簡化成:if (n%k=0) return 0;else yes=1;又可進(jìn)一步不用變量 yes,并去掉 ,簡化成請參考例 :for( k=2; k=n/2; k+)if(n%k=0) return 0;return 1;7.15【分析與解答】(1) 若用整型變量 c存放余數(shù),則求 a被 b 除后的余數(shù)可用表達(dá)式:。(2) 本題要求編寫函數(shù) mymod用以求 a被 b 除后的余數(shù)即:13c=mymod( a,b );(3) 只要把 a%b作為函數(shù)值返回即可完成
35、操作請參考例 :int mymod(int a, int b) return a%b; (4) 總結(jié):本題在算法上十分簡單,只是要求讀者能夠掌握編寫函數(shù)的基本知識(shí)。7.16【分析與解答】(1) 1 1;只是累加項(xiàng)的符號(hào)交叉變化。因此處理好符號(hào)的變化是完成操作的關(guān)鍵之一。(2) 若函數(shù)名為 n浮點(diǎn)型,為此函數(shù)的首部可以是:double funa( int n )(3) 接著寫函數(shù)體。累加放在一個(gè) for循環(huán)中來完成,若循環(huán)控制變量為 k,可利用循環(huán)控制變量作為累加項(xiàng) t的分母,累加值放在 add中:for( k=1; k=n; k+)t=s*1.0/k;add=add+t;此處,s用作符號(hào)變量,
36、在 1 和-1 之間交叉變化,乘以1.0/k后,t的值也將按要求變化符號(hào)。注意,表達(dá)式 1.0/k不可以寫成 ,因?yàn)槊恳豁?xiàng)的絕對(duì)值必定是小于 1 的小數(shù)。(4) 現(xiàn)在需要確定 s的值。最簡單的可用表達(dá)式:s=-s 來實(shí)現(xiàn)請參考例 5.2),若賦值號(hào)右邊 s中的值為-1,則賦值號(hào)左邊 s中的值就得 1;若賦值號(hào)右邊 s中的值為 1,則賦值號(hào)左邊 s中的值就會(huì)得-1 s上表達(dá)式添加到循環(huán)體中:for( k=1; k=n; k+)s=-s;t=s*1.0/k;add=add+t;(5) 最后注意應(yīng)當(dāng)給各變量賦以適當(dāng)?shù)某踔?,并返回函?shù)值。(6) 請編寫主函數(shù)。當(dāng)傳給形參的值為 10 時(shí),函數(shù)的返回值應(yīng)
37、當(dāng)是:0.645635。(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,分母部分為 k 2,k 的值逐項(xiàng)增 1,由 2 變化到 。因此,算法可以用一個(gè)循環(huán)來實(shí)現(xiàn)。(3) 當(dāng) m的值為 12 時(shí),函數(shù)值應(yīng)是:0.435023。7.18【分析與解答】(1) 若函數(shù)取名為 fu
38、n,按題意,x 作為形參,由調(diào)用函數(shù)傳入,其類型不應(yīng)當(dāng)用整型;表達(dá)式 x 2-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)用語句得14到 y2的值:y2=fun( x+15 );(3) 同樣,若在調(diào)用函數(shù)時(shí),x 和 y3 已正確定義,且 x 已有確定的值,則可用以下函數(shù)調(diào)用語句得到 y3的值:y3=fun( sin(x) ); C 語言提供的庫函數(shù) sin行:#include(4) 參考(2) 和
39、(3) 應(yīng)不難寫出求 y1的語句,請讀者自己完成。(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.832721。(6) 總結(jié): 出函數(shù),就像例 7.1 中求兩數(shù)之和的函數(shù)一樣簡單。 在給定了函數(shù)之后,調(diào)用函數(shù)時(shí),函數(shù)的實(shí)參應(yīng)當(dāng)是一個(gè)與形參類型一致的任意合法的表達(dá)式。例如,可以是常量、算術(shù)表達(dá)式,也可以是函數(shù)等。就像例7.1 中求兩數(shù)之和的 add add( 3,4 );來求 3+4 y add( x*x,y*y);來求 ;當(dāng) 、y有確定值時(shí),可以用add( sin(x+y),cos(x+y);來求 sin(x+y)+
40、cos(x+y),這同樣可以通過add( sin(add(x,y),cos(add(x,y) );來求得。 一、選擇題8.1【參考答案】8.2【參考答案】8.3【參考答案】8.4【參考答案】8.5【參考答案】8.6【參考答案】8.7【參考答案】8.8【參考答案】8.9 【參考答案】8.10【參考答案】【參考答案】8.12【參考答案】二、填空題A)B)B)C)B)B)C)D)B)C)C)C)8.13【參考答案】8.14【參考答案】1107 18.15【參考答案】 char *p, *p=ch, p=&ch; scanf(%c/np,); ch=*p; p=&ch; printf(%c/n,*p)
41、;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類型的形參;另外要把它們的和值與差值,通過形參傳送回去,這就要求有兩個(gè) double類型的形參指針,接受傳送過來的地址,以便通過指針把和值與差值傳送給所指的主函數(shù)中的變量。因此函數(shù)的首部應(yīng)當(dāng)是:15void fun(double a, double b, double *p1, double *p2)這里,、b、p1、p2 是
42、自己取的名。(2) 假設(shè)把 b 的和值傳送給 p1 所指的存儲(chǔ)單元,可用語句:*p1=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; (4) 在主函數(shù)中,若有定義語句:double ,且 、y已賦值,則調(diào)用 fun函數(shù)的語句可以是:。(5) return語句就不可能返回兩個(gè)函數(shù)值。要求讀者能利用形參指針把要求的值間接地傳回調(diào)用函數(shù)。8.18【參考答案】(1) 若函數(shù)名為 maxandmin 3 個(gè)數(shù)假定
43、為 int類型,并需要通過指針指向主函數(shù)中的兩個(gè) int單元中。因此函數(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í)題 。如果把bc中的最大值暫時(shí)放在 max中,把最小值放在min中,可用以下算法找到最大值: 假定 a中的數(shù)最大,把 a賦給 max。 用 b 去和 max比較,若 b 大于 max,則把 b 賦給 ;若不大于 max,則什么也不做。 用 c去和 max比較,若 c大于 max,則把 c賦給
44、max;若不大于 ,則什么也不做。 經(jīng)過以上操作,max中已放入了 、b、c三個(gè)數(shù)中的最大數(shù)。 可模仿以上算法找到最小值:min=a;if(bmin)min=b;if(cmin)min=c;(3) 若最大值已放入 max中,最小值已放入 min 中,則可用以下語句把最大和最小值放入指針 pmax和 pmin 所指的存儲(chǔ)單元中:*pmax=max; *pmin=min;(4) 若主函數(shù)中已把 3 個(gè)數(shù)放入 、z中,要求把最大值放入 m中,把最小值放在 n中,則調(diào)用語句應(yīng)當(dāng)是:(5) 總結(jié):本題要求的算法在第四章應(yīng)當(dāng)已掌握,本題的主要目的是要求讀者掌握如何通過指針把函數(shù)中的多個(gè)結(jié)果傳回主函數(shù)。 一
45、、選擇題9.1【參考答案】 D)9.2【參考答案】 A)9.3【參考答案】 A)9.4【參考答案】 A)9.5【參考答案】 C)9.6【參考答案】 A)9.7【參考答案】 B)169.8【參考答案】 D)9.9【參考答案】 C)9.10【參考答案】 C)【參考答案】 C)9.12【參考答案】 D)9.13【參考答案】 D)9.14【參考答案】 A)9.15【參考答案】 A)9.16【參考答案】 A)9.17【參考答案】 C)9.18【參考答案】 C)二、填空題9.19【參考答案】 9 09.20【參考答案】 69.21【參考答案】 129.22【參考答案】 39.23【參考答案】 27219.
46、24【參考答案】 -850,2,09.25【參考答案】 1k=p 2k9.26【參考答案】 1 (c=getchar() 2 c-三、上機(jī)題9.27【分析與解答】(1) 對(duì)于字符的輸入可參考教材例 6.3 和習(xí)題 9.26 中的 while條件是:等于KG-*3n。(2) 在 while 循環(huán)體中,用 if條件來判斷是否為數(shù)字字符,若是,就使對(duì)應(yīng)的元素增 1;if中的條件表達(dá)式可用 C 的庫函數(shù):isdigit(ch),這時(shí)要在程序前加:#include 行;也可用:chKG-*3=0&chKG-*3=9。(3) 若用 num數(shù)組元素來進(jìn)行統(tǒng)計(jì),當(dāng)ch0”時(shí),使num0增1、當(dāng)ch中是數(shù)字 “
47、1”時(shí),使 1增 1num的下標(biāo)表達(dá)式可用:ch-0。(4) 注意,在定義數(shù)組時(shí),數(shù)組的大小應(yīng)符合使用的要求。在利用數(shù)組元素作為計(jì)數(shù)器時(shí),不要忘記首先應(yīng)該給數(shù)組元素賦 0 值。(5) 總結(jié):通過本題的編程,要求掌握利用數(shù)組元素作為計(jì)數(shù)器的基本算法。9.28【分析與解答】 本題的編程請參考例 9.8。(1) 若有以下 10 個(gè)整數(shù):0 1 2 3 4 5 6 7 8 9要求從第 5 個(gè)元素依次向前移,則移動(dòng)之后的數(shù)列應(yīng)該是:0 1 2 4 5 6 7 8 9第 5 個(gè)元素不是指下標(biāo)為 5 4 的那個(gè)。(2) 完成移動(dòng)后,數(shù)列中的數(shù)據(jù)個(gè)數(shù)減 1。(3) 若進(jìn)行指定操作的函數(shù)名為 ,則函數(shù)的首部可如
48、下:void moves(int *a,int n,int *m)這里 a 用以指向一維數(shù)組的首地址,n 接受開始移動(dòng)的元素的位置,m 指向主函數(shù)中存放元素個(gè)數(shù)的變量,因?yàn)闆]有函數(shù)值返回,因此函數(shù)的類型定義為 。(4) 可用以下 for循環(huán)完成指定的移動(dòng): ) ;17注意,應(yīng)當(dāng)先把第n個(gè)元素下標(biāo)為 移到第 n-1個(gè)元素下標(biāo)為 的位置上,依次從前到后向前移動(dòng)。(5) 完成移動(dòng)之后,應(yīng)使 m所指變量中的值減 1,表示數(shù)列中的數(shù)據(jù)少了一個(gè);這可由于句:來完成。(6) 可設(shè)計(jì)一個(gè)輸出函數(shù),在移動(dòng)前、后調(diào)用此函數(shù)輸出數(shù)組中的數(shù)據(jù),以便驗(yàn)證操作是否正確。若輸出函數(shù)名為:,則函數(shù)首部可寫成:void out
49、arr( int a, int num)形參 a指向待輸出的數(shù)組,num接受數(shù)組中元素的個(gè)數(shù)。輸出操作可由一個(gè) for循環(huán)來完成:for(i=0; inum; ) printf();KG-*3n KG-*3n );退出循環(huán)后的 printf語句使上面的輸出行結(jié)束。(7) 在主函數(shù)中定義所需的數(shù)組和變量。數(shù)組中的值可以在主函數(shù)中輸入,也可定義一個(gè)函數(shù)用于輸入數(shù)據(jù)。n 的值在主函數(shù)中輸入,然后調(diào)用以上函數(shù)。需要注意的是,給 n 輸入的值不能是 1,因?yàn)榈谝粋€(gè)元素下標(biāo)為 再向前移,下標(biāo)就越界了,同時(shí),n 的值也不可大于10,因?yàn)橐阎付ㄖ挥?10 個(gè)元素。(8) 總結(jié): 次調(diào)用,而不應(yīng)重復(fù)地編寫代碼。
50、雖然該函數(shù)中只是一個(gè) for 循環(huán),似乎在主函數(shù)中書寫兩次也不麻煩,但養(yǎng)成良好的模塊化程序設(shè)計(jì)的風(fēng)格卻是十分重要的。 分析以上例子可見,所規(guī)定的操作,實(shí)際上刪除了數(shù)列中的第n-1個(gè)元素,因此可見刪除操作是由移動(dòng)操作來完成的。9.29【分析與解答】(1) 程序要求定義兩個(gè)數(shù)組以便存放原始數(shù)據(jù)和從中選出的所有奇數(shù)。(2) 若把函數(shù)命名為 ,則函數(shù)首部可寫成:void odds(int *a,int an,int *b,int *bn)形參 a 指向存放原始數(shù)據(jù)的數(shù)組,an 存放此數(shù)組中數(shù)據(jù)的個(gè)數(shù);b 指向另一個(gè)數(shù)組,此數(shù)組 bn奇數(shù)的個(gè)數(shù)傳回主函數(shù)。(3) 在 odds函數(shù)中,可通過一個(gè) for循
51、環(huán)選出所有的奇數(shù): )if(a%2) jKG-*3+KG-*3+; 在 for循環(huán)中逐個(gè)引用原始的數(shù)組元素,若元素中的值不能被 2 除盡不為 ,則把它放入 b所指的數(shù)組中;j用作 b 的下標(biāo),每放入一個(gè)奇數(shù)后,j的值加 1;注意,j的初值應(yīng)該置 0。(4) 當(dāng)完成以上操作退出循環(huán)時(shí),因?yàn)樵谘h(huán)內(nèi)最后進(jìn)行了一次 的操作,所以 j 的值就是奇數(shù)的個(gè)數(shù),最后應(yīng)當(dāng)把它賦給*bn,以便通過指針 bn 把奇數(shù)的個(gè)數(shù)傳回主函數(shù)。(5) 程序需要兩次輸出數(shù)組中元素的值,一次是輸出原始數(shù)組中的值,一次是輸出奇數(shù)數(shù)組中的值。因此可以使用題 9.28 中的 outarr函數(shù),進(jìn)行兩次調(diào)用。(6) 在主函數(shù)中應(yīng)當(dāng)定義
52、所需的數(shù)組和變量,可以在主函數(shù)中給數(shù)組元素輸入數(shù)據(jù)。(7) 總結(jié):本題的算法很簡單,要求讀者能夠編寫?yīng)毩⒌哪K,并在函數(shù)之間熟練地傳送數(shù)據(jù)。9.30【分析與解答】(1) 例 9.9 完成了對(duì)整數(shù)由小到大的排序,而本題是對(duì)字符數(shù)組中的元素進(jìn)行由大到小的排序;兩者之間并無大的區(qū)別,只是數(shù)組的類型不同,字符數(shù)組中每個(gè)元素存放一個(gè)字符,字符的大小依據(jù)每個(gè)字符的 ASCII碼值的大小。18(2) 若函數(shù)形參 a 指向主函數(shù)中待排序的數(shù)組,由大到小的排序只需改變內(nèi)循環(huán)中 if 語句的條件表達(dá)式即可:if(ap) p=i;此處 i是內(nèi)循環(huán)的控制變量。(3) 排序前后可以調(diào)用一個(gè)輸出函數(shù),輸出原始數(shù)據(jù)和排序后
53、的數(shù)據(jù),可參考習(xí)題 9.28 的outarr函數(shù),但注意,這里是對(duì)字符數(shù)組進(jìn)行輸出。(4) 總結(jié):讀者可以參考例 9.9,程序基本相同,但在掌握排序算法的基礎(chǔ)上,必須獨(dú)立完成此程序,不要照抄。9.31【分析與解答】(1) 我們把插入操作命名為函數(shù) ,若待插入的數(shù)據(jù)放在形參 x中,指針 a指向主函數(shù)中的數(shù)組,指針 n 指向存放數(shù)組中元素的個(gè)數(shù)變量,因?yàn)椴迦牒螅瑪?shù)組中的數(shù)據(jù)會(huì)增加。函數(shù)的首部如下:void insert(int *a,int x,int *n)(2) 若數(shù)組中原有的有序數(shù)列按由小到大排列如下,共 12 個(gè)數(shù):11 14 17 18 19 20 22 24 26 29 30 33若
54、x中的數(shù)為 21,我們立刻知道應(yīng)插在何處,插入后數(shù)列如下,則插入后變成有 13 個(gè)數(shù):11 14 17 18 19 20 21 22 24 26 29 30 33因此,對(duì)于程序來說應(yīng)當(dāng)做以下 4 件事: 能根據(jù)待插的數(shù)據(jù),按“仍然有序的要求”判斷出插入的位置。 把位置騰出來,以便放入插入的數(shù)據(jù),但原有的數(shù)據(jù)不能缺少。 把 x中的數(shù)放入騰出來的位置中。 使原有數(shù)組中的數(shù)據(jù)個(gè)數(shù)增 1。(3) 現(xiàn)在來做第一個(gè)步驟:確定插入的位置。用變量 j 來放置該位置在數(shù)組中的下標(biāo),以下while循環(huán)將完成此任務(wù):j=0;while(j*n & KG-*3= j;i-) ai+1;(5) 第三個(gè)步驟是把 x放入
55、中:=x;(6) 第四步是使存放數(shù)據(jù)個(gè)數(shù)的變量中的數(shù)增 1:*n =*n 插入過程到此結(jié)束。(7) 可利用習(xí)題 9.28 中的 outarr 函數(shù),在插入前和插入后兩次輸出數(shù)組元素,以判斷操作是否正確。(8) 請編寫主函數(shù),定義所需的數(shù)組和變量,給數(shù)組輸入一組有序數(shù),正確調(diào)用函數(shù)。(9) 請按題目要求至少對(duì)程序運(yùn)行 3 次,判斷程序是否在各種情況下都能得到正確的結(jié)果。(10) 9.32【分析與解答】19(1) 若函數(shù)名為 ,函數(shù)首部如下:void change(int x,int *a, int *n)形參 x 中存放一個(gè)待轉(zhuǎn)換的十進(jìn)制數(shù),指針 a 指向一個(gè)一維數(shù)組,數(shù)組中每一個(gè)元素中存放一個(gè)
56、 0 或 1 代表一位二進(jìn)制數(shù),指針變量 n 指向一個(gè)整型變量,其中存放在一維數(shù)組中二進(jìn)制位的個(gè)數(shù)。(2) 函數(shù)中定義一個(gè)指針變量 ,并把 a所指的數(shù)組的首地址賦給它以便保留。把 x每次被 2除后的余數(shù)放在 a a x的值除 2;重復(fù)此過程,直到 x的值為 0。可用以下的 while循環(huán)來進(jìn)行轉(zhuǎn)換:s=a;while(x) *a=x%2; a +KG-*3+; x=x/2; 退出循環(huán)時(shí),已把轉(zhuǎn)換后的二進(jìn)制數(shù)的每一位上的數(shù)放入主函數(shù)的數(shù)組元素中,但是應(yīng)當(dāng)注意,在 0中放的是二進(jìn)制數(shù)的最低位,最后放入的是最高位。例如,整數(shù) 8 轉(zhuǎn)換成的二進(jìn)制數(shù)為 100,則在 01中存放的是 0,而 2中存放的是
57、 1。(3) 函數(shù)中最后用:*n =a-s;把存放在一維數(shù)組中二進(jìn)制位的個(gè)數(shù)放入 n 所指的變量中。因?yàn)?s已指向主函數(shù)中數(shù)組的第一個(gè)元素下標(biāo)為 ;在循環(huán)中,指針 a不斷后移,最后指向存放二進(jìn)制數(shù)最高位的元素;所以 a-s 的值就是已存入數(shù)據(jù)的元素的個(gè)數(shù)。(4) 在主函數(shù)中輸入待轉(zhuǎn)換的十進(jìn)制數(shù),調(diào)用 change 函數(shù)后輸出數(shù)組元素中的值,注意,因?yàn)樵?0中放的是二進(jìn)制數(shù)的最低位,因此輸出的順序應(yīng)該從 到 09.33【分析與解答】(1) 若函數(shù)名為 getone,形參指針 a指向主函數(shù)中存放指定數(shù)據(jù)的數(shù)組。函數(shù)的首部如下:void getone(int a)(2) 函數(shù)中變量 x 用來存放得到
58、的一個(gè)隨機(jī)數(shù),變量 n 用來存放數(shù)組中已放入的不同的隨機(jī)數(shù)的個(gè)數(shù),變量 i用作下標(biāo)變量。(3) 所有的工作在一個(gè) while循環(huán)中完成:while(n15)當(dāng)不同的隨機(jī)數(shù)的個(gè)數(shù) n的值等于 15 時(shí)退出循環(huán)。(4) 在以上 while循環(huán)中需要進(jìn)行以下 4 項(xiàng)步驟: 得到一個(gè)小于 20 的隨機(jī)整數(shù)。 準(zhǔn)備從下標(biāo)為 0 的元素開始去查找數(shù)組中是否有與 x 相同的數(shù),若沒有,就把 x中的數(shù)加入到數(shù)組中放在最后,若有,就什么也不做。 用以下 while循環(huán)從頭到尾去檢查數(shù)組中是否有與 x值相同的元素:while(in & x ) ;在兩種情況下,退出循環(huán):a. 當(dāng) x不等于 時(shí), ,x再去與下一個(gè)元
59、素進(jìn)行比較,當(dāng)遇到 x等于 時(shí),說明在數(shù)組中已經(jīng)有此數(shù),因此不必再去比較,應(yīng)當(dāng)退出循環(huán)。b. 當(dāng) x不等于 時(shí),i的值不斷增 1;當(dāng) i的值等于 n時(shí),說明 x已與數(shù)組中所有元素都比較過且都不相同,這時(shí)也應(yīng)退出循環(huán)。 如果 i的值等于 n時(shí),數(shù)組中沒有與 x相同的元素,因此需要把新的值放入數(shù)組中,可用以下語句來實(shí)現(xiàn):if(i= n) nKG-*3+KG-*3+; 因?yàn)橐延?的數(shù)據(jù) 放在下 標(biāo)為 0 到 n-1 的元素 中,因 此新的數(shù) 放在 an中, 然后nKG-*3+ KG-*3+; 即數(shù)組中不同數(shù)據(jù)的個(gè)數(shù)增 1。(5) 接著重新循環(huán),再去產(chǎn)生一個(gè)新的隨機(jī)數(shù),重復(fù)以上過程,直到 n的值等于
60、15 時(shí)退出外循環(huán)。這時(shí)在數(shù)組中已放入了 15 個(gè)不同的隨機(jī)整數(shù)。20(6) 請?jiān)谥骱瘮?shù)中定義所需的數(shù)組和變量。調(diào)用 getone 函數(shù)后,可在主函數(shù)中輸出所得的數(shù)據(jù)。(7) 總結(jié): getone函數(shù)的主要部分是查找,沒有找到才進(jìn)行下一步操作。 C 語言提供的庫函數(shù) rand( 每調(diào)用一次產(chǎn)生一個(gè) 0 到 32767 的隨機(jī)整數(shù),因此 rand()%20將得到一個(gè) 0 到 19 的隨機(jī)整數(shù)。9.34【分析與解答】(1) 本題可參考例 。(2) 本題可用 define 命令行定義 N 來代表一個(gè)常量參考 2.2.3 節(jié)??啥x 4 個(gè)獨(dú)立的函數(shù)來實(shí)現(xiàn)所要求的操作。第一個(gè)函數(shù):void getm(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 班級(jí)主題活動(dòng)的選取與組織計(jì)劃
- 促進(jìn)幼兒社交技能發(fā)展的教研活動(dòng)計(jì)劃
- 企業(yè)資源配置的優(yōu)化策略計(jì)劃
- 加強(qiáng)組件安全性審查機(jī)制
- 物業(yè)管理服務(wù)合作意向合同
- 股份制文書操作指南與案例解析
- 證券市場投資咨詢及交易服務(wù)協(xié)議
- 物聯(lián)網(wǎng)智能家居系統(tǒng)解決方案服務(wù)合同
- 物聯(lián)網(wǎng)終端設(shè)備研發(fā)合同
- 中國古代詩詞故事征文
- 永磁直流(汽車)電機(jī)計(jì)算程序
- 中學(xué)學(xué)校2024-2025學(xué)年教師發(fā)展中心工作計(jì)劃
- app 購買合同范例
- 高二上學(xué)期物理(理科)期末試題(含答案)
- 小班期末家長會(huì)-雙向奔赴 共育花開【課件】
- 礦山生態(tài)修復(fù)工程不穩(wěn)定斜坡治理工程設(shè)計(jì)
- 2024年江西省高考物理試卷(含答案解析)
- 風(fēng)機(jī)盤管更換施工方案
- 頸部瘢痕攣縮畸形治療
- 貴州省貴陽市2023-2024學(xué)年五年級(jí)上學(xué)期語文期末試卷(含答案)
- 《hpv與宮頸癌》課件
評(píng)論
0/150
提交評(píng)論