版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、程序設(shè)計(jì)基礎(chǔ)習(xí)題參考答案【習(xí)題1 基本概念】一、簡(jiǎn)答題(在課本中尋找答案,略)1.1 C程序的基本結(jié)構(gòu)包括哪些內(nèi)容?1.2 如何定義標(biāo)識(shí)符?1.3 輸入格式、輸出格式的組成包括哪些內(nèi)容?1.4 C語(yǔ)言函數(shù)分為哪兩類(lèi)?1.5 計(jì)算表達(dá)式的值應(yīng)該考慮哪些方面?1.6 上機(jī)調(diào)試程序的步驟如何?1.7 常量與變量的區(qū)別?1.8 C語(yǔ)言中的標(biāo)識(shí)符的定義規(guī)則?1.9 變量為什么要“先定義,后使用”?1.10 字符常量'a'與字符串常量"a"有何區(qū)別?1.11 大小寫(xiě)字母轉(zhuǎn)換的規(guī)則是什么?1.12 變量的具有哪三種屬性?二、單項(xiàng)選擇題1.13C語(yǔ)言中,int型數(shù)據(jù)在內(nèi)存中
2、的存儲(chǔ)形式是(D)。A)ASCII碼 B)原碼 C)反碼 D)補(bǔ)碼1.14下面四個(gè)選項(xiàng)中,均是不合法的用戶(hù)標(biāo)識(shí)符的選項(xiàng)是(C)。)BA 、x_0、do)float、1a0、_Y)x-y、goto、123)_123、tmp、CHAR1.15下列選項(xiàng)中不正確的常數(shù)的選項(xiàng)是(D)。)0x12F )-1.23E-2 )12.0 )03881.16下面正確的字符常量是(B)。)"a" )'' )"n" )"376"1.17下面正確的字符串常量是(C)。)'a' )'376' )"n&qu
3、ot; )3761.18表達(dá)式'A'+4*25.0-'b'的正確結(jié)果是(B)。)67 )67.0 )不確定 )67L1.19執(zhí)行printf("%x",100);后的輸出結(jié)果是(C)。)100 )0x100 )0X64 )641.20int型的-1在內(nèi)存中的存儲(chǔ)形式是(A)。)1111 1111 1111 1111)0000 0000 0000 0001)1111 1111 1111 1110)1000 0000 0000 00011.21存儲(chǔ)字符串"'abc376"需要的字節(jié)數(shù)是(D)。)11 )13 )6 )7
4、三、判斷并改錯(cuò)1.22 C程序執(zhí)行的入口是main()函數(shù),所以main函數(shù)必須放在程序的開(kāi)頭。錯(cuò)誤:main函數(shù)可以放在程序的任何位置。并不限定在程序的開(kāi)頭。1.23 定義一個(gè)函數(shù)包括數(shù)據(jù)說(shuō)明部分和執(zhí)行語(yǔ)句部分,兩者可以交叉出現(xiàn)。錯(cuò)誤:不可以交叉出現(xiàn),數(shù)據(jù)說(shuō)明部分在執(zhí)行語(yǔ)句部分的前面。1.24 編輯與編譯不是一回事。錯(cuò)誤:不是一回事。編輯完成源程序的輸入和修改;編譯是對(duì)源程序進(jìn)行語(yǔ)法檢查,如果無(wú)語(yǔ)法錯(cuò)誤,則生成目標(biāo)程序。1.25 scanf("%d,%d",&x,&y);的正確輸入格式:3,4<回車(chē)>。正確1.26 注釋內(nèi)容太多會(huì)影響程序的執(zhí)行
5、效率。 錯(cuò)誤:不會(huì)影響程序的執(zhí)行效率。因?yàn)樵诰幾g時(shí),編譯系統(tǒng)將注釋內(nèi)容刪除或用空格代替,所以注釋內(nèi)容不會(huì)編譯到目標(biāo)程序中。1.27 所有的數(shù)學(xué)公式可以直接出現(xiàn)在源程序中。錯(cuò)誤:數(shù)學(xué)公式需要轉(zhuǎn)換成C語(yǔ)言能夠接受的公式才能出現(xiàn)在源程序中。四、編程題1.28 在屏幕上輸出自己名字的拼音。提示:中文名字叫“張三”,對(duì)應(yīng)的拼音為“Zhang San”,輸出用printf()函數(shù)。1.29 輸入圓的半徑,求圓的周長(zhǎng),并將結(jié)果保留兩位小數(shù)輸出到屏幕上。提示:定義圓的半徑r,圓的周長(zhǎng):2*3.14*r,輸出結(jié)果保留2位小數(shù)可以用%.2f26【習(xí)題2 運(yùn)算符與表達(dá)式】一、計(jì)算題2.1 2.8+7%3*11%2/
6、4 (答案:2.8)2.2 5/2+5.0/2+7%6 (答案:5.5)2.3 a=12,a*=2+3 (答案:a=60)2.4 a=3,b=4,c=5,a+b>c&&b= =c (答案:0)2.5 3>5?3:5<8?25:40 (答案:25)2.6 設(shè)a=1,b=2,c=3,d=4,m=n=1,有表達(dá)式(m=a>b)&&(n=c>d),計(jì)算表達(dá)式后m,n的值?(答案:m=0,n=1)2.7設(shè)int b=7;float a=2.5,c=4.7;求下面表達(dá)式的值。 a+(int)(b/2*(int)(a+c)/2)%4 (答案:4.
7、5)二、單項(xiàng)選擇題2.8若有代數(shù)式,則不正確的C語(yǔ)言表達(dá)式是(C)。A)x/b/c*y*8 B)8*x*y/b/c C)8*x*y/b*c D)x*y/c/b*82.9有如下類(lèi)型說(shuō)明:int k,a,b;unsigned long w=8;double x=2.9則以下不符合C語(yǔ)言語(yǔ)法的表達(dá)式是(A)。)x%(-3) )w*=-2)k=(a=6,b=4,a-b) )a*=a+=a-=(b=4)*(a=3)2.10有如下類(lèi)型說(shuō)明: float n; int m; 則以下能實(shí)現(xiàn)將n中的數(shù)值保留小數(shù)點(diǎn)后兩位,第三位四舍五入的表達(dá)式是(B)。)n=(n*100+0.5)/100.0 )m=n*100+
8、0.5,n=m/100.0)n=n*100+0.5/100.0 )n=(n/100+0.5)*100.02.11設(shè)k=7,x=12;則下列表達(dá)式值為3的是(D)。)x%=(k%=5) )x%=(k-k%5))x%=k-k%5 )(x%=k)-(k%=5)2.12已知m=48,ch='a',n=0;則表達(dá)式(m>=n&&ch<'b'&&!n)的值是(B)。)0 )1 )真 )非02.13下面哪個(gè)式子在b為奇數(shù)時(shí)結(jié)果為假(C)。)a%2=1 )!(a%2=0) )?。╝%2) )a%22.13執(zhí)行printf("
9、%f",(x=3,y=5,x>y?1:1.5);后的輸出結(jié)果是(D)。)語(yǔ)法錯(cuò)誤 )1 )1.5 )1.5000002.14能表示條件0x100的表達(dá)式是(D)。)0<=x<=100 )x>=0,x<=100)0x100 )x>=0&&x<=1002.15判斷char型變量ch為數(shù)字的正確表達(dá)式是(B)。)ch>="0"&&ch<="9" )ch>='0'&&ch<='9')'0'ch
10、'9' )ch>='0'|ch<='9'三、編程題(應(yīng)用條件運(yùn)算)2.16 輸入一個(gè)整型成績(jī)x,如果大于等于60分,輸出“pass”,否則輸出“fail”。提示:printf("%s",x>60?"pass":"fail");2.17輸入一個(gè)年份y,如果是閏年,輸出“y is a leap year”,否則輸出“y is not a leap year.”提示:printf("%d is %s",y%4=0&&y%100!=0|y%4
11、00=0?"a leap year.":"not a leap year.");2.18輸入三條邊a,b,c,如果它們能構(gòu)成一個(gè)三角形,輸出“Yes”,否則輸出“No”。提示:printf("%s",a+b>c&&a+c>b&&b+c>a?"Yes":"No");2.19輸入三個(gè)數(shù)x,y,z,按從小到大的輸出結(jié)果。提示:分別用max0,min0代表最大、最小值,mid0表示中間值。max0=(x>y?x:y)>z?(x>y?x:
12、y):z;max0=(x<y?x:y)<z?(x<y?x:y):z;mid0=x+y+z-max0-min0;2.20輸入一個(gè)平面上的點(diǎn)坐標(biāo),判斷它是否落在圓心(0,0),半徑為1的圓內(nèi),如果在圓內(nèi),輸出“Yes”,否則輸出“No”。提示:分別用x,y代表平面上一個(gè)點(diǎn)。printf("%s",x*x+y*y<=0?"Yes":"No");2.21 自增、自減運(yùn)算符的用法與運(yùn)算規(guī)則示例。2.22 計(jì)算下列表達(dá)式。 (1) (2)提示:模仿例2.272.23 字母的大小寫(xiě)轉(zhuǎn)換。2.24 計(jì)算圓柱體的體積V=r2h,
13、其中=3.14159。提示:模仿2.272.25 輸入兩個(gè)整數(shù),輸出其中最大者。提示:模仿P292.26 輸入三個(gè)整數(shù),輸出其中最小者。提示: min(min(a,b),c); 2.27 設(shè)圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng)、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求文字說(shuō)明,取小數(shù)點(diǎn)后兩位數(shù)字。請(qǐng)編程序。 參考源程序: main() float r,h,C1,Sa,Sb,Va,Vb; scanf("%f,%f",&r,&h); C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*
14、3.14*r*r*r/3; Vb=Sa*h; printf("C1=%.2fn",C1); printf("Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn",Sa,Sb,Va,Vb); 【習(xí)題3 控制流】3.1編程實(shí)現(xiàn),輸入一個(gè)整數(shù),判斷它是否為偶數(shù),并顯示相應(yīng)的信息。提示:x代表輸入的整數(shù),if(x%2=0) printf("neven");else printf("nodd");3.2 編程實(shí)現(xiàn),輸入一個(gè)平面上的點(diǎn),判斷它是否落在單位圓上,并顯示相應(yīng)的信息。提示:x,y代表平面坐標(biāo),if(x*
15、x+y*y=1) printf("nYes");else printf("nNo");3.3 編程實(shí)現(xiàn),輸入一個(gè)成績(jī)等級(jí)(A-E),顯示相應(yīng)的百分制成績(jī)段。 A: 90-100 B: 80-89 C: 70-79 D: 60-69 E: <60提示:char grade; if(grade='A') printf("n90-100"); else if(grade='B') printf("n80-89"); .3.4 寫(xiě)出下面程序的運(yùn)行結(jié)果: #include<stdi
16、o.h> main() int a=-1,b=1,c=5; switch(a>0) case 1:switch(b-2<0) case 1:printf("&");break; case 2:printf("*");break; case 0:switch(c= =5) case 0:printf("!");break; case 1:printf("#");break; default:printf("%"); default:printf("")
17、;運(yùn)行結(jié)果:.5 將以下語(yǔ)句改寫(xiě)成switch語(yǔ)句。 if(t>0)&&(t<=10) if(t>=3)&&(t<=6) x=2; else if(t>1)|(t>8) x=3; else x=1; else x=0;提示:int t; if(t<=0|t>10) c=0; else c=t;switch(t) case 0: x=0;break; case 1: case 2: x=3; case 3:case 4:case 5: case 6: x=2; case 7:case 8: case 9
18、: x=3; case 10: x=2; 3.7 編程實(shí)現(xiàn)一個(gè)具有簡(jiǎn)單四則運(yùn)算功能的計(jì)算器。提示:參照例4.18,隨機(jī)產(chǎn)生3個(gè)數(shù),其中一個(gè)數(shù)用來(lái)判斷是哪種運(yùn)算。3.8 編程實(shí)現(xiàn),輸入一行字符,將其中的數(shù)字字符對(duì)應(yīng)的整數(shù)值加起來(lái)并輸出結(jié)果。如: a45b8&*3 則是4+5+8+3,結(jié)果為20。提示:char c; int sum=0;while(c=getchar()!='n') if(c>='0'&&c<='9') sum=sum+c-'0'3.9 編程實(shí)現(xiàn),求的值。提示:先計(jì)算n!,再在計(jì)算
19、階乘的外面套上一層循環(huán)。注意:20!是一個(gè)很大的值,float s=1;int i;例如:計(jì)算6?。篺or(i=1;i<=6;i+) s=s*i;3.10 編程實(shí)現(xiàn),找出1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子: 6 its factors are 1,2,3, 所謂“完數(shù)”是指一個(gè)數(shù)如果恰好等于它的因子之和,因子是指能夠整除該數(shù)的數(shù)。提示:先判斷數(shù)是否為完數(shù),如果是再考慮輸出因子。以6為例輸出因子: for(i=1;i<6;i+) if(6%i=0) printf("%d,",i);3.11 編程實(shí)現(xiàn),計(jì)算序列的前20項(xiàng)之和, ,.提示:這是一個(gè)累加式,
20、每項(xiàng)是一個(gè)分式,用a、b分別表示分子、分母。注意:如果a、b都是整數(shù),則是整除。float sum=0,a=2,b=1; int i;for(i-1;i<=20;i+)sum=sum+a/b;a=a+b;b=a-b; 3.12 編程實(shí)現(xiàn),求Sn=a+aa+aaa+.+aa.a之值,其中a是一個(gè)數(shù)字。如:2+22+222+2222+22222(此時(shí)n=5),n,a由鍵盤(pán)輸入。提示:這是一個(gè)累加式,后1項(xiàng)可以由前一項(xiàng)表示,譬如:第2項(xiàng)可以由第1項(xiàng)表示: 第1項(xiàng) t=a; 第2項(xiàng):t=t*10+a;3.13 編程實(shí)現(xiàn),把從鍵盤(pán)輸入的金額數(shù)(以圓為單位)按人民幣面額劃分,然后顯示支付該金額的各種
21、面額人民幣的數(shù)量。提示:譬如:123.58元可以表示100元:1張;20元:1張;2元:1張;1元:1張;5角:1張;5分:1枚;2分:1枚;1分:1枚。為了簡(jiǎn)單可以只完成整數(shù)部分轉(zhuǎn)換,即輸入的金額數(shù)為整數(shù)。3.14 編程實(shí)現(xiàn),使用循環(huán)結(jié)構(gòu)打印以下圖案。 * * * * * * * * * * * * * * * * * * * * * * * * *提示:輸出時(shí),本圖案要按向上三角形和向下三角形進(jìn)行輸出。每行輸出中包括空格輸出,*號(hào)輸出。輸出空格和*號(hào)個(gè)數(shù)要與行循環(huán)控制變量關(guān)聯(lián)起來(lái)。3.15 編程實(shí)現(xiàn),以菜單方式實(shí)現(xiàn)猜數(shù)游戲系統(tǒng)。(功能自己設(shè)定)提示:模仿例4.14和例4.18完成。功能可以
22、包括猜數(shù)范圍,人數(shù)等設(shè)置。3.16 編程實(shí)現(xiàn),以菜單方式實(shí)現(xiàn)四則運(yùn)算輔助教學(xué)系統(tǒng)。提示:隨機(jī)產(chǎn)生兩個(gè)操作數(shù)和運(yùn)算符+、-、*、/,由使用者輸入一個(gè)數(shù),判斷計(jì)算結(jié)果與輸入的數(shù)是否相等,如果相等,表示正確,否則是錯(cuò)誤的。3.17 輸入四個(gè)整數(shù),要求按大小順序輸出。 參考源程序:main() int a,b,c,d,t;scanf("%d,%d,%d,%d",&a,&b,&c,&d); if(a<b) t=a,a=b,b=t; if(a<c) t=a,a=c,c=t; if(a<d) t=a,a=d,d=t; if(b<c)
23、 t=b,b=c,c=t; if(b<d) t=b,b=d,d=t; if(c<d) t=c,c=d,d=t; printf("%d,%d,%d,%dn",a,b,c,d); 3.18 求n!(n=1->20),(即求1!+2!+3!+4!+5!+20!)參考源程序: main() int n,i=1;long sum=0,s=1; scanf("%d",&n); while(i<=n) s=s*i;sum=sum+s;i+; printf("sum=%ldn",sum); 3.19 輸入兩個(gè)正整數(shù)m和
24、n,求其最大公約數(shù)和最小公倍數(shù)。 main() long m,n,i=1,j,s; scanf("%ld,%ld",&m,&n); for(;i<=m&&i<=n;i+) if(m%i=0&&n%i=0) s=i; if(m>=n) j=m; else j=n; for(;!(j%m=0&&j%n=0);j+); printf("s=%ld,j=%ldn",s,j); 3.20 輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。參考源程序: #include
25、"stdio.h" main() char c;int i=0,j=0,k=0,l=0; while(c=getchar()!='n') if(c>=65&&c<=90|c>=97&&c<=122) i+; else if(c>=48&&c<=57) j+; else if(c=32) k+; else l+; printf("i=%d,j=%d,k=%d,l=%dn",i,j,k,l); 3.21 打印出所有"水仙花數(shù)",所謂&quo
26、t;水仙花數(shù)"是指一個(gè)三位數(shù),其各位數(shù)字立方和等于該本身。例如:153是一個(gè)水仙花數(shù),因?yàn)?53=13+53+33。參考源程序: #include"math.h" main() int x=100,a,b,c; while(x>=100&&x<1000) a=0.01*x;b=10*(0.01*x-a);c=x-100*a-10*b; if(x=(pow(a,3)+pow(b,3)+pow(c,3) printf("%5d",x);x+; 3.22 猴子吃桃問(wèn)題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過(guò)癮,又多
27、吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見(jiàn)只剩下一個(gè)桃子了。求第一天共摘多少桃子。參考源程序: main() int i=1,sum=0; for(;i<=10; i+) sum=2*sum+1; printf("sum=%dn",sum); 3.23 打印以下圖案 * * * * * * *參考源程序: #include"math.h" main() int i=1,k,l,m; for(;i<=49;i+) k=i%7;l=3-fabs(i-1)/7-3);
28、m=fabs(i-4-7*(i-1)/7); if(k=1)printf("n"); if(m<=l) printf("*"); else printf(" "); printf("n"); 3.24 古典問(wèn)題:有一對(duì)兔子,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一對(duì)兔子,假如兔子都不死,問(wèn)每個(gè)月的兔子總數(shù)為多少?1.程序分析:兔子的規(guī)律為數(shù)列1,1,2,3,5,8,13,21.2.程序源代碼:main()long f1,f2;int i;f1=f2=1;for(i=1;i<
29、=20;i+) printf("%12ld %12ld",f1,f2);if(i%2=0) printf("n");/*控制輸出,每行四個(gè)*/f1=f1+f2; /*前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/f2=f1+f2; /*前兩個(gè)月加起來(lái)賦值給第三個(gè)月*/【習(xí)題4 函數(shù)與程序結(jié)構(gòu)】一、 填空題4.1 C語(yǔ)言程序執(zhí)行的開(kāi)始處是 main函數(shù) 。4.2 C程序中的一個(gè)函數(shù)由兩部分組成,即 聲明部分 和 執(zhí)行部分 。4.3為了保證被調(diào)用函數(shù)不返回任何值,其函數(shù)定義的類(lèi)型應(yīng)為 void 。4.4若一個(gè)局部變量的存儲(chǔ)類(lèi)型是static,則該變量的值在 程序執(zhí)行完成
30、時(shí)被釋放。4.5預(yù)處理命令#include的作用是 文件包含 。4.6定義一個(gè)宏,功能是判斷兩個(gè)數(shù)是否相等,相等為1,不等為0。 #define EQU(a,b) (a)=(b)?1:0 4.7 變量的存儲(chǔ)類(lèi)別有 自動(dòng)型 、 靜態(tài)型 、 寄存器型 、和 外部類(lèi)型 共4種,它們分別用 auto 、 static 、 register 、 extern 標(biāo)識(shí)。二、 選擇題4.8下述函數(shù)定義形式正確的是(C)。A. int f(int x; int y)B. int f(int x,y)C. int f(int x, int y)D. int f(x,y: int)4.9 關(guān)于函數(shù)參數(shù),說(shuō)法正確的是
31、(A)。A. 實(shí)參與其對(duì)應(yīng)的形參各自占用獨(dú)立的內(nèi)存單元B. 實(shí)參與其對(duì)應(yīng)的形參共同占用一個(gè)內(nèi)存單元C. 只有當(dāng)實(shí)參和形參同名時(shí)才占用同一個(gè)內(nèi)存單元D. 形參是虛擬的,不占用內(nèi)存單元4.10 用數(shù)組名作為函數(shù)的實(shí)參時(shí),傳遞給形參的是(A)。A. 數(shù)組的首地址B. 數(shù)組的第1個(gè)元素C. 數(shù)組中的全部元素D. 數(shù)組的元素個(gè)數(shù)4.11復(fù)合語(yǔ)句中定義的變量的作用范圍是(D)。A. 整個(gè)源文件B. 整個(gè)函數(shù)C. 整個(gè)程序D. 所定義的復(fù)合語(yǔ)句4.12一個(gè)函數(shù)的返回值由( D)確定。 A. return語(yǔ)句中的表達(dá)式B. 調(diào)用函數(shù)的類(lèi)型C. 系統(tǒng)默認(rèn)的類(lèi)型D. 被調(diào)用函數(shù)的類(lèi)型4.13在一個(gè)C源文件中,若要
32、定義一個(gè)只允許本源文件所有函數(shù)使用的全局變量,其他文件中不允許使用,則該變量需要使用的存儲(chǔ)類(lèi)別是(D)。A. autoB. registerC. externD. static三、 判斷題4.14若定義的函數(shù)沒(méi)有參數(shù),則函數(shù)名后的圓括號(hào)可以省略。(´)4.15函數(shù)的函數(shù)體可以是空語(yǔ)句(Ö)。4.16只有main函數(shù)才能調(diào)用其他函數(shù)。(Ö)4.17return語(yǔ)句中表達(dá)式的類(lèi)型必須與函數(shù)定義的類(lèi)型一致。(´)4.18函數(shù)的實(shí)參和形參可以是相同的名字。(Ö)4.19函數(shù)調(diào)用中,形參與實(shí)參的類(lèi)型和個(gè)數(shù)必須保持一致。(Ö)4.20外部類(lèi)型的變
33、量只能定義一次,但可在不同地方聲明多次。(Ö)4.21外部類(lèi)型的變量作用范圍大,編程中應(yīng)多用外部變量。(´)4.22預(yù)處理命令行必須以開(kāi)頭,且最后要用分號(hào)結(jié)尾。(´)4.23宏命令的處理占用編譯時(shí)間,而不占用運(yùn)行時(shí)間。(Ö)四、 看程序?qū)懡Y(jié)果 4.24int fun(int n)int f=1; f = f*n*2; return(f);main() int i,j; for(i=1; i<=5; i+) printf("%dt", fun(i);程序運(yùn)行結(jié)果:2 4 6 8 104.25int x1=30, x2=40;mai
34、n()int x3=10,x4=20; sub(x3,x4); sub(x2,x1); printf("x1=%d,x2=%d,x3=%d,x4=%d", x1,x2,x3,x4);sub(int x,int y)int x1=x; x=y; y=x1;程序運(yùn)行結(jié)果:x1=30,x2=40,x3=10,x4=204.26#define A 4#define B(x) A*x/2main()float c, a = 4.5; c=B(a); printf("c=%5.1f", c);程序運(yùn)行結(jié)果:c= 9.0五、 編程題4.25寫(xiě)兩個(gè)函數(shù),分別求兩個(gè)整數(shù)的
35、最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個(gè)函數(shù),并輸出結(jié)果。兩個(gè)整數(shù)由鍵盤(pán)輸入。提示:最大公約數(shù)可以采用“輾轉(zhuǎn)相除法”,最小公倍數(shù)將兩數(shù)乘積除于最大公約數(shù)?!拜氜D(zhuǎn)相除法”:設(shè)兩個(gè)數(shù)分別用m,n表示且m>n,臨時(shí)變量t,t=m%n;m=n;n=t;直到n等于0。4.26有3´3的矩陣A和3´2的矩陣B,編制一個(gè)函數(shù),求C=AX´B。提示:參照習(xí)題5.17,A,B,C三個(gè)數(shù)組作為函數(shù)參數(shù)。 4.27編寫(xiě)一函數(shù),使輸入的一個(gè)字符串按反序存放,在主函數(shù)中輸入輸出字符串。提示:一維字符數(shù)組用來(lái)存放字符串,并且將它傳遞到函數(shù),在函數(shù)中通過(guò)元素值交換來(lái)完成反序存放。 4.
36、28編制一個(gè)函數(shù),由參數(shù)傳入一個(gè)字符串,統(tǒng)計(jì)此字串中字母、數(shù)字、和其他字符的個(gè)數(shù),在主函數(shù)中輸入字符串并顯示統(tǒng)計(jì)結(jié)果。提示:參照例題6.10。 4.29 定義一個(gè)宏,實(shí)現(xiàn)將兩個(gè)數(shù)互換,并寫(xiě)出程序,輸入兩個(gè)數(shù)作為使用參數(shù),并顯示結(jié)果。提示:帶參數(shù)宏,swap(a,b,t).4.30編寫(xiě)以下函數(shù):輸入職工的姓名和職工號(hào);按職工號(hào)由小到大排序,姓名順序也隨之調(diào)整;輸入一個(gè)職工號(hào),用折半法找出該職工的姓名,從主函數(shù)輸入要查找的職工號(hào),輸出該職工姓名。提示:定義一個(gè)二維數(shù)組來(lái)存放職工信息;用數(shù)組名作函數(shù)的參數(shù)傳遞;通過(guò)“起泡算法”或“選擇算法”;折半查找法先決條件是數(shù)據(jù)已經(jīng)有序。4.31用函數(shù)實(shí)現(xiàn)牛頓迭
37、代法求一元三次方程的根。解:牛頓迭代法的公式是:x=x0-f(x)/f(x),設(shè)迭代誤差小于10-5時(shí)結(jié)束。參考源程序:#include <math.h>float solut(float a,float b,float c,float d) float x=1,x0,f,f1; do x0=x; f=(a*x0+b)*x0+c)*x0+d; f1=(3*a*x0+2*b)*x0+c; x=x0-f/f1;while(fabs(x-x0)>=1e-5); return(x); main() float a,b,c,d; printf(“請(qǐng)輸入一元三次方程的系數(shù)a,b,c,c:
38、n”); scanf(“%f,%f,%f,%f”,&a,&b,&c,&d); printf(“一元三次方程為:%5.2fx3+%5.2fx2+%5.2fx+%5.2f=0n”,a,b,c,d); printf(“該方程的根為:x=%7.2fn”,solut(a,b,c,d); 4.32 寫(xiě)一個(gè)判斷素?cái)?shù)的函數(shù),在主函數(shù)輸入一個(gè)整數(shù),輸出是否是素?cái)?shù)的消息。解:參考源程序:/*是素?cái)?shù)返回1,否則返回0*/ int sushuis(int m) int m; int i=2,t; for(;i<=m;i+) if(m%i=0&&i<m) br
39、eak; if(m-i=0) t=1; else t=0; return t; main() int a,s; printf("enter number is: n"); scanf("%d",&a); s=sushuis(a); if(s=1) printf("a 是素?cái)?shù)!n"); else printf("a 不是素?cái)?shù)!n"); printf("%5d",yi); printf("n"); 4.33 利用遞歸函數(shù)調(diào)用方式,將所輸入的5個(gè)字符,以相反順序打印出來(lái)。1
40、.程序分析:2.程序源代碼:#include "stdio.h"main()int i=5;void palin(int n);printf("40:");palin(i);printf("n");void palin(int n)char next;if(n<=1) next=getchar();printf("n0:");putchar(next); else next=getchar();palin(n-1);putchar(next); 4.34 在5*5格的棋盤(pán)上從點(diǎn)出發(fā), 按日字跳馬, 要求不重復(fù)
41、地跳經(jīng)所有方格。 求出所有跳馬方案。參考程序:#include"stdio.h"int map1212, status1212,kp;int c82=2,1,2,-1,1,2,1,-2, -2,1,-2,-1,-1,2,-1,-2;void prt(int a12) /* 打印棋盤(pán)狀態(tài) */int i,j,i2,j2; printf("n"); for (i=2;i<=9;i+) for (j=2;j<=9;j+) printf("%4d",aij); printf("n"); void status2
42、(void) /* 計(jì)算棋盤(pán)各點(diǎn)條件數(shù) */ int i,j,k,i2,j2,kz; for(i=0;i<12;i+) for(j=0;j<12;j+) statusij=100; for(i=2;i<=9;i+) for(j=2;j<=9;j+) kz=0; for (k=0;k<=7;k+) i2=i+ck0;j2=j+ck1; if (mapi2j2<50) kz+; statusij=kz; prt(status); void sort1(int b1,int b2) /* 對(duì)8個(gè)可能的方向按條件數(shù)排序 */int i,j,mini,t; /*b1記
43、錄狀態(tài)值(升序),b2記錄排序后的下標(biāo) */ for (i=0;i<7;i+) mini=i; for (j=i+1;j<=7;j+) if (b1j<b1mini) mini=j; t=b1i;b1i=b1mini;b1mini=t; t=b2i;b2i=b2mini;b2mini=t; void init1(void) /* 初始化 */int i,j,k; for(i=0;i<12;i+) for(j=0;j<12;j+) mapij=100; for(i=2;i<=9;i+) for(j=2;j<=9;j+) mapij=0; status2(
44、);void search(int i2,int j2) /* 利用遞歸回溯進(jìn)行搜索 */ int b18,b28,i,i3,j3; kp+; if(kp=65) prt(map); exit(0); for(i=0;i<=7;i+) b2i=i; b1i=statusi2+ci0j2+ci1; sort1(b1,b2); for(i=0;i<=7;i+) i3=i2+cb2i0; j3=j2+cb2i1; if (mapi3j3=0) mapi3j3=kp; search(i3,j3); mapi3j3=0; kp-; main()init1();map52=1; kp=1;se
45、arch(5,2);【習(xí)題5 指針與數(shù)組】一、 填空題5.1 若有定義int a35;則排列在數(shù)組中的第9個(gè)元素是( a13 )。5.2 strlen("How are youn")的值是( 12 )。5.3 C語(yǔ)言中字符串結(jié)束的標(biāo)志是( '0' )。5.4 寫(xiě)出一個(gè)名為s的單精度實(shí)型一維數(shù)組,長(zhǎng)度是6,所有元素初值均為0,其數(shù)組定義語(yǔ)句是(float s6=0; )。5.5 strcmp("how","How")的值是(32 或>0 )。5.6語(yǔ)句int a,*p=&a;的含義是(定義整型變量a,和整型
46、指針變量p,并且p指向變量a。) 5.7定義語(yǔ)句int *f(); 和int (*f)();的含義分別是(int *f();表示函數(shù)返回一個(gè)整型指針;int (*f)( );表示f是函數(shù)指針,指向整型函數(shù))二、 選擇題5.8 若有int s4=1,2,3,4;,則ss0+2*s2-s3的值是( D ) A.1B.2C.3D.45.9 對(duì)數(shù)組的描述正確的是( B )。 A數(shù)組一旦定義其大小是固定的,但數(shù)組元素的類(lèi)型可以不同。 B數(shù)組一旦定義其大小是固定的,但數(shù)組元素的類(lèi)型必須相同。 C數(shù)組一旦定義其大小是可變的,但數(shù)組元素的類(lèi)型可以不同。 D數(shù)組一旦定義其大小是可變的,但數(shù)組元素的類(lèi)型必須相同。
47、5.10 對(duì)字符串"Boy"進(jìn)行完整賦值的操作是( B )。 Achar s3 = 'B','o','y' B. char s = "Boy" Cchar s3 = "Boy"D.char s3; s="Boy"5.11 在c語(yǔ)言中引用數(shù)組元素時(shí),其數(shù)組下標(biāo)的數(shù)據(jù)類(lèi)型允許是( C)。 A整型常量 B.整型表達(dá)式 C整型常量或整型表達(dá)式D.任何類(lèi)型的表達(dá)式5.12 對(duì)以下說(shuō)明語(yǔ)句的正確理解是( B )。 int a10=6,7,8,9,10; A將5個(gè)初值依次賦給a1至
48、a5 B將5個(gè)初值依次賦給a0至a4 C將5個(gè)初值依次賦給a6至a10 D因?yàn)閿?shù)組長(zhǎng)度與初值的個(gè)數(shù)不相同,所以此語(yǔ)句不正確三、看程序?qū)懡Y(jié)果5.13main() int a5=1,2,3,4,5; int *p=&a1; printf("%d",p2); 輸出結(jié)果:45.14 main() char a="I love China!" char *p=a; p=p+2; printf("%s",p); 輸出結(jié)果:love China!5.15 main() int a34=1,2,3,4,5,6,7,8,9,10,11,12;
49、int (*pa)4=a; pa+; printf("%d",*(*(pa+1)+2);輸出結(jié)果:115.16 main() char *str="zhao","qian","sun","li" int i; for (i=0;i<4;i+) printf("%c",stri0); 輸出結(jié)果:zqsl5.17 void sub(int x,int y,int *z) *z=y-x; main() int a,b,c;sub(10,5,&a); sub(7,a,&
50、amp;b); sub(a,b,&c); printf("%4d,%4d,%4dn",a,b,c); 輸出結(jié)果: -5, -12, -75.18 #include <stdio.h> fun(char *s) char *p=s; while (*p) p+; return(p-s);main() char *str="abcd" int i; i=fun(str); printf("%d",i);輸出結(jié)果:45.19main()int a33 = 1,0,2, 2,2,0,2, c33,i,j; for(i=0;
51、 i<3; i+) for(j=0; j<3; j+) cij = aaijaji; printf("%5d",cij);printf("n");運(yùn)行結(jié)果為: 2 2 0 0 0 2 2 0 1 5.20 當(dāng)運(yùn)行以下程序時(shí),從鍵盤(pán)輸入:Ah2MA A3ha,請(qǐng)寫(xiě)出輸出結(jié)果。main() char s80, c='a' int i=0; scanf("%s",s); while(si+!='0') if(si = c) si=si-32; else if(si=c-32) si=si+32;
52、puts(s); 運(yùn)行結(jié)果為:aH2Ma a3hA四、編程題5.21 用數(shù)組方法定義一個(gè)矩陣,求其轉(zhuǎn)置矩陣。提示:已知a32,轉(zhuǎn)置后的結(jié)果存放在b23; 則bji=aij;5.22 從鍵盤(pán)輸入9個(gè)不同的整數(shù),組成三行三列的二元數(shù)組,找出每一列中的最大元素,并輸出其行、列下標(biāo)。提示:已知a33,max,row,col分別用來(lái)存放一列的最大值,行下標(biāo)和列下標(biāo)。5.23 利用一個(gè)二維數(shù)組,打印出以下楊輝三角形,要求打印出10行。11112113311464115101051 提示:定義一個(gè)10行10列的二維數(shù)組,并且通過(guò)兩重循環(huán)對(duì)第1列所有元素賦值1,主對(duì)角線(xiàn)也賦值。根據(jù)aij=ai-1j+ai-1j-1求出其它元素的值。5.16 從鍵盤(pán)上輸入一串字符(長(zhǎng)度小于50個(gè)字符),找出其中最前面的一個(gè)X和最后面的一個(gè)X之間的子串,并輸出子串的長(zhǎng)度。提示:定義一個(gè)長(zhǎng)度為81的字符數(shù)組,從左邊查找第一字符'X'的下標(biāo),從右邊查找第一個(gè)字符'X'的下標(biāo)。5.24 矩陣A
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)電一體化領(lǐng)域創(chuàng)新創(chuàng)業(yè)方案
- 工程造價(jià)專(zhuān)業(yè)合同(2篇)
- 西寧-PEP-2024年小學(xué)4年級(jí)下冊(cè)英語(yǔ)第5單元期中試卷
- 節(jié)日聚會(huì)就餐協(xié)議書(shū)
- 情景體驗(yàn)式教學(xué)模式在小學(xué)英語(yǔ)教學(xué)中的實(shí)踐分析
- 學(xué)生協(xié)議書(shū)(2篇)
- 智能化高標(biāo)準(zhǔn)農(nóng)田整平施工方案
- 金融機(jī)構(gòu)疫情防控專(zhuān)項(xiàng)應(yīng)急預(yù)案
- 重慶2024年02版小學(xué)五年級(jí)上冊(cè)英語(yǔ)第一單元真題試卷
- 護(hù)理學(xué)專(zhuān)業(yè)實(shí)習(xí)生管理制度
- 2024至2030年中國(guó)差旅管理行業(yè)市場(chǎng)發(fā)展監(jiān)測(cè)及投資前景展望報(bào)告
- 2024-2030年中國(guó)富含蛋白質(zhì)的營(yíng)養(yǎng)棒行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 前程無(wú)憂(yōu)行測(cè)題庫(kù)
- 2024年步步高高考英語(yǔ)大一輪復(fù)習(xí)(新人教版)基礎(chǔ)知識(shí)默寫(xiě)本必修第一冊(cè)含答案
- 《一只窩囊的大老虎》名師教案(第二課時(shí))
- 高中生心理健康教育課教案(15篇)
- 公司隱私保護(hù)管理制度
- 2023-2024學(xué)年全國(guó)初中八年級(jí)上政治人教版期中考卷(含答案解析)
- 公園綠化保潔管理制度方案(2篇)
- 2024年高考數(shù)學(xué)(理科)全國(guó)3卷(精校版)
- 中國(guó)新聞事業(yè)史 知到智慧樹(shù)網(wǎng)課答案
評(píng)論
0/150
提交評(píng)論