C語言程序設(shè)計(jì)習(xí)題集_第1頁
C語言程序設(shè)計(jì)習(xí)題集_第2頁
C語言程序設(shè)計(jì)習(xí)題集_第3頁
C語言程序設(shè)計(jì)習(xí)題集_第4頁
C語言程序設(shè)計(jì)習(xí)題集_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、C語言程序設(shè)計(jì)習(xí)題集第1章 C語言概述11 c語言程序的總體結(jié)構(gòu)是怎樣的。 解:一個(gè)完整的c語言程序,是由一個(gè)、且只能由一個(gè)main()函數(shù)(又稱主函數(shù))和若干個(gè)其他函數(shù)結(jié)合而成的,或僅由一個(gè)main()函數(shù)構(gòu)成。12 c語言程序的基本單位是什么?它的結(jié)構(gòu)又如何? 解:函數(shù)是c語言程序的基本模塊單元。 任何函數(shù)(包括主函數(shù)main()都是由函數(shù)說明和函數(shù)體兩部分組成。其一般結(jié)構(gòu)如下: 函數(shù)類型 函數(shù)名(函數(shù)參數(shù)表) 說明語句部分; 執(zhí)行語句部分; 13主函數(shù)main()在程序中的地位如何。程序總是從哪個(gè)函數(shù)開始執(zhí)行,到哪個(gè)函數(shù)執(zhí)行完后結(jié)束? 解:main()函數(shù)的作用相當(dāng)于其他高級(jí)語言中的主程

2、序;其他函數(shù)的作用相當(dāng)于子程序。 一個(gè)c語言程序,總是從main()函數(shù)開始執(zhí)行,而不論其在程序中的位置。當(dāng)主函數(shù)執(zhí)行完畢時(shí),亦即程序執(zhí)行完畢。習(xí)慣上,將主函數(shù)main()放在最前頭。 14 c語言的語句分為哪幾類? 解:按照語句功能或構(gòu)成的不同,可將c語言的語句分為五類。 控制語句、函數(shù)調(diào)用語句、表達(dá)式語句、空語句和復(fù)合語句。15執(zhí)行一個(gè)c語言程序的一般過程是什么?解:運(yùn)行一個(gè)c語言程序的一般過程,如下圖所示。啟動(dòng)TC編輯或修改源程序連接編譯運(yùn)行退出TC(結(jié)束)語法錯(cuò)誤邏輯錯(cuò)誤 1)啟動(dòng)Tc,進(jìn)入Tc集成環(huán)境。 2)編輯(或修改)源程序。 3)編譯。如果編譯成功,則可進(jìn)行下一步操作;否則,返

3、回2)修改源程序,再重新編譯,直至編譯成功。 4)連接。如果連接成功,則可進(jìn)行下一步操作;否則,根據(jù)系統(tǒng)的錯(cuò)誤提示進(jìn)行相應(yīng)修改,再重新連接,直至連接成功。 5)運(yùn)行。通過觀察程序運(yùn)行結(jié)果,驗(yàn)證程序的正確性。 6)退出Tc集成環(huán)境,結(jié)束本次程序運(yùn)行。 16在Tc集成環(huán)境下,下列操作的快捷鍵分別是什么解:存盤:F2;編譯與連接:F9;運(yùn)行:nF9;查看運(yùn)行結(jié)果:Alt+F5。第2章數(shù)據(jù)類型、運(yùn)算符與表達(dá)式2.1 指出下列變量名中,哪些是合法的,哪些是非法的。如果非法,為什么?Int,char,345,ABdf,c&d,string*,_322,alpf_beat,JOHN.smith,3a

4、b解:ABdf,_322,alpf_beat合法,其它的非法Int,char非法是因?yàn)樗鼈兌际荂語言關(guān)鍵字;345,3ab非法是因?yàn)樽兞棵荒芤园⒗當(dāng)?shù)字開頭;c&d,string*,JOHN.smith非法是因?yàn)樽兞棵兄荒苡勺帜?、?shù)字和下劃線組成。2.2 計(jì)算下列表達(dá)式的值(1)a+b%3*(int)(a-b)/4 (設(shè)a=13.6,b=8)(2)(x+y)/2+(int)x%(int)y (設(shè)x=4.5,y=2.5)(3)z*=3+6,z/z=z/2,z+=z-=z*=z (設(shè)z=6)解:(1) 15.600000;(2)3.500000;(3)0。第3章 順序結(jié)構(gòu)程序設(shè)計(jì)3.1

5、 若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765, c1=a,c2=b。想得到以下輸出格式和結(jié)果,請(qǐng)寫出程序(包括定義變量類型和設(shè)計(jì)輸出)。 a=3b=4c=5 x=1.200000,y=2.400000,z=-3.600000 x+y=3.600y+z=-1.20z+x=-2.40 c1=aor97(ASCII) c2=bor98(ASCII) (表示空格,下同)參考源程序如下:main() int a=3,b=4,c=5; long int u=51274,n=128765; float x=1.2,y=2.4,z=3.6; char c1

6、='a',c2='b' printf("a=%2d b=%2d c=%2dn",a,b,c); printf("x=%f,y=%f,z=%fn",x,y,z); printf("x+y=%5.2f y+z=%5.2f z+x=%5.2fn",x+y,y+z,z+x); printf("u=%6ld n=%9ldn",u,n); printf("%s %s %d%sn","c1='a'","or",c1,&qu

7、ot;(ASCII)"); printf("%s %s %d%sn","c2='a'","or",c2,"(ASCII)"); 3.2用scanf下面的函數(shù)輸入數(shù)據(jù),使a=3,b=7,x=8.5,y=71.82, c1=A,c2=a,問在鍵盤上如何輸入? main() int a,b;float x,y;char c1c2; scanf("a=%d_b=%d",&a,&b); scanf("_x=%f_y=%e",&x,&am

8、p;y); scanf("_c1=%c_c2=%c",&c1,&c2); 輸入方法如下:a=3b=7 x=8.5y=71.82 c1=Ac2=a3.2 設(shè)圓半徑r=1.5,圓柱高h(yuǎn)=3,求圓周長(zhǎng)、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求文字說明,取小數(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*

9、3.14*r*r*r/3; Vb=Sa*h; printf("C1=%.2fn",C1); printf("Sa=%.2fnSb=%.2fnVa=%.2fnVb=%.2fn",Sa,Sb,Va,Vb); 3.3輸入一個(gè)華氏溫度,要求輸出攝氏溫度。公式為c=5(F-32)/9,輸出要求有文字說明,取位2小數(shù)。參考源程序如下: main() float F,c; scanf("%f",&F); c=5*(F-32)/9; printf("輸入的華氏溫度為:%.2f,則攝氏溫度為%.2f",f,c);3.4 已知

10、三角形的三邊長(zhǎng),求其面積。解:假設(shè)輸入的三邊能構(gòu)成三角形,三角形的面積公式為: Area= 其中S=(a+b+c)/2。參考源程序如下:#include “math.h”Main() Float a,b,c,s,area;Printf(“請(qǐng)輸入三角形的三邊:”);Scanf(“%f,%f,%f”,&a,&b,&c);S=(a+b+c)/2.0;Area=sqrt(s*(s-a)*(s-b)*(s-c);Printf(“三角形的三邊為:%7.2f, %7.2f, %7.2fn”,a,b,c);Prinft(“三角形的面積為:%7.2fn”,area); 第4章 選擇結(jié)構(gòu)程

11、序設(shè)計(jì)4.1 寫出下面表達(dá)式的值(設(shè)a=1,b=2,c=3,x=4,y=3)(1)a+b>c&&b=c(2)!a<b&&b!=c|x+y<=3(3)a+(b>=x+y)?c-a:y-x(4)!(x=a)&&(y=b)&&0(5)!(a+b)+c-1&&b+c/2(6)a|1+a&&b&&c解:(1)0;(2)1;(3)2;(4)0;(5)1;(6)1。4.2有三個(gè)整數(shù)a、b、c,由鍵盤輸入,輸出其中最大的數(shù)。參考源程序:main() int a,b,c,t;

12、scanf("%d %d %d",&a,&b,&c); if(a>b) if(a>c) t=a; else t=c; else if(b>c) t=b; else t=c; printf("%dn",t); 4.3給出一百分制成績(jī),要求輸出成績(jī)等級(jí)'A'、'B'、'C'、'D'、'E'。90分以上為'A',8089分為'B',7079分為'C',6069分為'D', 60

13、分以下為'E'。參考源程序:main() int number,md;char c1; scanf("%d",&number); md=number/10; switch(md) case 10: case 9: c1='A'break; case 8: c1='B'break; case 7: c1='C'break; case 6: c1='D'break; case 5: case 4: case 3: case 2: case 1: case 0: c1='E'b

14、reak; printf("%cn",c1); 4.4給一個(gè)不多于5位的正整數(shù),要求:求出它是幾位數(shù);分別打印出每一位數(shù)字;按逆順序打印出各位數(shù)字,例如原來為321,應(yīng)輸出123。參考源程序:main() int a,b,c,d,e,n;long m; scanf("%ld",&m); a=0.0001*m;b=10*(0.0001*m-a);c=100*(0.0001*m-a-0.1*b); d=1000*(0.0001*m-a-0.1*b-0.01*c);e=m-10000*a-1000*b-100*c-10*d; if(a!=0) n=5,

15、printf("%d%d,%d,%d,%d,%d%d%d%d%d%dn",n,a,b,c,d,e,e,d,c,b,a); else if(b!=0) n=4,printf("%d %d,%d,%d,%d %d%d%d%dn",n,b,c,d,e,e,d,c,b); else if(c!=0) n=3,printf("%d %d,%d,%d %d%d%dn",n,c,d,e,e,d,c); else if(d!=0) n=2,printf("%d %d,%d %d%dn",n,d,e,e,d); else n=1,p

16、rintf("%d %d %dn",n,e,e); 4.5企業(yè)發(fā)放的獎(jiǎng)金根據(jù)利潤(rùn)提成。利潤(rùn)(I)低于或等于10萬元的,獎(jiǎng)金可提10%;利潤(rùn)高于10萬元,低20萬元(100000<I200000)時(shí),低于10萬元的部分按10%提成,高于1000000元的部分,可提成7.5%;2000000<I4000000,低于20萬元的部分仍按上述方法提成(下同)高于20萬元的部分按5%提成;4000000<I6000000時(shí),高于40萬元的部分按3%提成,6000000<I10000000時(shí),高于60萬元的部分按1.5%提成;I>10000000時(shí),超過10

17、0萬元的部分按1%提成。從鍵盤輸入當(dāng)月利潤(rùn)I,求應(yīng)發(fā)獎(jiǎng)金總數(shù)。 要求:用if語句編程序;用switch語句編程序。 用if語句編程序: main() int a,b,c,d,e;float d1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10; double jj,k;long i; scanf("%ld",&i); k=0.00001*i;a=k-10;b=k-6;c=k-4;d=k-2;e=k-0; if(a<0) a=0; if(b<0) b=0; if(c<0) c=0; if(d<0)

18、d=0; jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6; printf("jj=%.3fn",100000*jj); 用switch語句編程序: main() int a,b,c,d,e,n,x;float d1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10; double jj,k;long i; scanf("%ld",&i); k=0.00001*i;a=k-10;b=k-6;c=k-4;d=k-2;e=k-0;x=k; switch

19、(x) case 0:e=0; case 1:d=0; case 3:c=0; case 5:b=0; case 9:a=0; default:n=0; jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6; printf("jj=%.3fn",100000*jj); 4.6輸入四個(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=

20、t; if(a<c) t=a,a=c,c=t; if(a<d) t=a,a=d,d=t; if(b<c) 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); 4.7有四個(gè)圓塔,圓心分別為(2,2),(-2,2),(-2,-2),(2,-2),圓半徑為1。見下圖。這四個(gè)塔的高度為10米,塔外無建筑物。今輸入任一點(diǎn)的坐標(biāo),求該點(diǎn)的建筑物高度(塔外高度為零)。參考源程序: #include"math.h" ma

21、in() float x,y,n,m,r;int h; scanf("%f,%f",&x,&y); n=fabs(x);m=fabs(y); r=sqrt(n-2)*(n-2)+(m-2)*(m-2); if(r>1) h=0; else h=10; printf("%dn",h); 第5章 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)5.1求n!(n=1->20),(即求1!+2!+3!+4!+5!+20!)參考源程序: main() int n,i=1;long sum=0,s=1; scanf("%d",&n); whi

22、le(i<=n) s=s*i;sum=sum+s;i+; printf("sum=%ldn",sum); 5.2輸入兩個(gè)正整數(shù)m和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("

23、s=%ld,j=%ldn",s,j); 5.3輸入一行字符,分別統(tǒng)計(jì)出其中英文字母、空格、數(shù)字和其他字符的個(gè)數(shù)。參考源程序: #include"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(

24、"i=%d,j=%d,k=%d,l=%dn",i,j,k,l); 5.4求Sn=a+aa+aaa+aaaaa(有n個(gè)a)之值,其中a是一個(gè)數(shù)字。例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。參考源程序: #include"math.h" main() int n,sum=0,i=1,s=2; scanf("%d",&n); while(i<=n) sum=sum+s;s=s+2*pow(10,i);i+; printf("sum=%dn",sum); 5.5打印出所有"

25、;水仙花數(shù)",所謂"水仙花數(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+; 5.6一個(gè)數(shù)如果恰好等于它的因子之和,這個(gè)

26、數(shù)就稱為"完數(shù)"。例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數(shù)"。編程序找出1000之內(nèi)的所有完數(shù),并按下面格式輸出其因子:6itsfactorsare1、2、3參考源程序: main() int m,i,j,s; for(m=6;m<10000;m+) s=1; for(i=2;i<m;i+) if(m%i=0) s=s+i; if(m-s=0) printf("%5d its fastors are 1 ",m);for(j=2;j<m;j+) if(m%j=0) printf("%d

27、",j);printf("n"); 或 main() int m,i,j,s; for(m=6;m<1000;m+) s=m-1; for(i=2;i<m;i+) if(m%i=0) s=s-i; if(s=0) printf("%5d its fastors are 1 ",m);for(j=2;j<m;j+) if(m%j=0) printf("%d ",j);printf("n"); 5.7有一分?jǐn)?shù)序列: 2/1,3/2,5/3,8/5,13/8,21/13求出這個(gè)數(shù)列的前20項(xiàng)之

28、和。參考源程序: main() int i=1,n;double t,x=1,y=2,s,sum=0; scanf("%ld",&n); while(i<=n) s=y/x;sum=sum+s;t=y;y=y+x;x=t;i+; printf("%fn",sum); 5.8一球從100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地時(shí)共經(jīng)過多少米?第10次反彈多高?參考源程序: main() int i,n;double h=100,s=100; scanf("%d",&n); for(i=

29、1;i<=n;i+) h*=0.5;if(i=1) continue;s=2*h+s; printf("h=%f,s=%fn",h,s); 5.9猴子吃桃問題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了一半,還不過癮,又多吃了一個(gè)。第二天早上又將剩下的桃子吃掉一半,又多吃一個(gè)。以后每天早上都吃了前一天剩下的一半零一個(gè)。到第10天早上想再吃時(shí),見只剩下一個(gè)桃子了。求第一天共摘多少桃子。參考源程序: main() int i=1,sum=0; for(;i<=10; i+); sum=2*sum+1; printf("sum=%dn",sum); 5.1

30、0用迭代法求x=。求平方根的迭代公式為: Xn+1=(Xn+1/Xn)/2要求前后兩次求出的得差的絕對(duì)值少于0.00001。參考源程序: #include"math.h" main() float x0,x1,a; scanf("%f",&a); x1=a/2; do x0=x1;x1=(x0+a/x0)/2;while(fabs(x0-x1)>=0.00001); printf("%.3fn",x1); 5.11用二分法求方程在(-10,10)之間的根 2x3-4x2+3x-6=0參考源程序: main() doubl

31、e x1,x2,y1,y2;x1=-10;x2=10; doy1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);while(y1!=0); doy2=2*x2*x2*x2-4*x2*x2+3*x2-6; x2=x2-y2/(6*x2*x2-8*x2+3);while(y2!=0); printf("x1=%.3f,x2=%.3fn",x1,x2); 5.12打印以下圖案 * * * * * * *參考源程序: #include"math.h" main() int i=1,k,l,m; for(

32、;i<=49;i+) k=i%7;l=3-fabs(i-1)/7-3);m=fabs(i-4-7*(i-1)/7); if(k=1) printf("n"); if(m<=l) printf("*"); else printf(" "); printf("n"); 第6章 數(shù)組6.1用篩選法求100以內(nèi)的素?cái)?shù)。參考源程序: main() int i,j,a100; for(i=2;i<100;i+) ai=i; for(j=2;j<=i;j+) if(j<i) if(ai%j=0) b

33、reak; if(ai-j=0) printf("%5d",ai); printf("n"); 或 #include"math.h" main() static int i,j,k,a98; for(i=2;i<100;i+) ai=i;k=sqrt(i); for(j=2;j<=ai;j+) if(j<k) if(ai%j=0) break; if(j>=k+1) printf("%5d",ai); printf("n"); 6.2求一個(gè)矩陣對(duì)角線元素之和。解:以3*3

34、矩陣為例,參考源程序如下: main() int i=0,j=0,a33,s1,s2; for(i=0;i<3;i+) for(j=0;j<3;j+) scanf("%d",&aij); s1=a00+a11+a22; s2=a02+a11+a20; printf("s1=%d,s2=%dn",s1,s2); 6.3一個(gè)已按從小到大的順序排好的數(shù)組,今輸入一個(gè)數(shù)要求按原來排序的規(guī)律將它插入數(shù)組中。解:我們以一個(gè)10元素的數(shù)組為例,參考源程序如下: main() static int a10=1,7,8,17,23,24,59,62,1

35、01;int i,j,t; scanf("%d",&a9); for(i=9;i>0;i-) if(ai<ai-1) t=ai-1;ai-1=ai;ai=t; for(i=0;i<10;i+)printf("%5d",ai);printf("n"); 6.4將一個(gè)數(shù)組的值按逆序重新存放,例如,原來順序?yàn)椋?,6,5,4,1。要求改為:1,4,5,6,8。參考源程序: main() int i,b10; for(i=0;i<10;i+) scanf("%d",&bi); for

36、(i=9;i>-1;i-) printf("%5d",bi); printf("n");6.5 打印出以下楊輝三角形(要求打印出10行)。 1 11 121 1331 14641 15101051 參考源程序:main() static int m,n,k,b1515; b01=1; for(m=1;m<15;m+) for(n=1;n<=m;n+) bmn=bm-1n-1+bm-1n; printf("%-5d",bmn);printf("n"); 6.6找出一個(gè)二位數(shù)組中的鞍點(diǎn),即該位置上的元

37、素在該行上最大,在該列上最小,也可能沒有鞍點(diǎn)。參考源程序:#define N 10#define M 10main()int I,j,m,n,flag1,flag2,aNM,max,maxj;/*輸入二維數(shù)組array1*/printf(“輸入二維數(shù)組的行數(shù):”);scanf(“%d”,&n);printf(“輸入二維數(shù)組的列數(shù):”);scanf(“%d”,&m);printf(“輸入二維數(shù)組:n”);for(i=0;i<n;i+) for(j=0;j<m;j+) prinf(“請(qǐng)輸入a%2d%2d:”,I,j); scanf(“%d”,&aij); pri

38、ntf(“n”);/*輸出數(shù)組*/prinf(“二維數(shù)組為:n”);for(i=0;i<n;i+) for(j=0;j<m;j+) printf(“%dt”,aij); printf(“n”); /*尋找鞍點(diǎn)*/flag2=0; /*flag2作為數(shù)組中是否有鞍點(diǎn)的標(biāo)志*/for(i=0;i<n;i+) max=ai0; for(j=0;j<m;j+) if(aij>max) max=aij; maxj=j; for(k=0,flag1=1;k<n&&flag1;k+)/*flag1作為行中的最大值是否就是鞍點(diǎn)的標(biāo)志*/ if(max>

39、akmaxjj)/*判斷行中的最大值是否也是列中的是大值*/ flag1=0; if(flag1) printf(“n第%d行第%d列的%d是鞍點(diǎn)n”,j,maxj,max); flag2=0; if(!flag2) printf(“n無鞍點(diǎn)!n”); 6.7 從鍵盤上輸入多個(gè)字符,編程統(tǒng)計(jì)其中字母、空格、數(shù)字及其他字符的個(gè)數(shù)。參考源程序:#include “stdio.h”Main() char str40;int alphabet=0,digit=0,space=0,other=0,i=0;printf(“請(qǐng)輸入一串字符:n”);gets(str);while(stri!=o) if(A&

40、lt;=stri)&&(stri<=Z)|&&(a<=stri)&&(stri<=z) +alphabet; else if(stri= ) +space; else if(stri<=9)&&(stri>=0) +digit; else +other; Printf(“其中有%d個(gè)字母,%d個(gè)空格,%d個(gè)數(shù)字,%d個(gè)其他字符!”,alphabet,space,digit,other);6.8 有n個(gè)學(xué)生,學(xué)習(xí)m門課程,已知所有學(xué)生全部課程的成績(jī),要求輸出每門課程最高分的學(xué)生學(xué)號(hào)、課程代號(hào)和成績(jī)。參考

41、源程序:#define N 50#define m 20main()char aN10;float scoreNM,max_score;int n,m,i,j,studid;/*輸入學(xué)生的學(xué)號(hào)和各門課程的成績(jī)*/printf(“請(qǐng)輸入學(xué)生數(shù)n和課程數(shù)m;”);scanf(“%d,%d”,&n,&m);for(i=1;i<=n;i+) printf(“請(qǐng)輸入第%d位學(xué)生的學(xué)號(hào):”,i); scanf(“%s”,ai); printf(“請(qǐng)按課程順序輸入成績(jī):”); for(j=1;j<=m;j+) scanf(“%f”,&scoreij); /*找出每門課程最

42、高的學(xué)生學(xué)號(hào)、課程代號(hào)和成績(jī)并輸出*/For(j=1;j<=m;j+) studid=1;max_score=score1j;for(i=1;i<=n;i+) if(scoreij> max_score) max_score=scoreij; studid=i; Printf(“第%d門課程最高分的學(xué)生學(xué)號(hào)是:%s,成績(jī)?yōu)椋?.2fn”,j,astudid,max_score); 第7章 函數(shù)7.1 寫出函數(shù)定義的一般形式,并說明各部分的意義。解:(略)7.2 函數(shù)調(diào)用有哪幾種形式,各自有什么特點(diǎn)?解:在C語言中,可以用以下幾種方式調(diào)用函數(shù):(1) 函數(shù)表達(dá)式。函數(shù)作為表達(dá)式

43、的一項(xiàng),出現(xiàn)在表達(dá)式中,以函數(shù)返回值參與表達(dá)式的運(yùn)算。這種方式要求函數(shù)是有返回值的。(2) 函數(shù)語句。C語言中的函數(shù)可以只進(jìn)行某些操作而不返回函數(shù)值,這時(shí)的函數(shù)調(diào)用作為一各獨(dú)立的語句。(3) 函數(shù)實(shí)參。函數(shù)作為另一個(gè)函數(shù)調(diào)用的實(shí)際參數(shù)出現(xiàn)。這種情況是把該函數(shù)的返回值作為實(shí)參進(jìn)行傳送,因此要求該函數(shù)必須是有返回值的。7.3寫兩個(gè)函數(shù),分別求兩個(gè)整數(shù)的最大公約數(shù)和最小公倍數(shù),用主函數(shù)調(diào)用這兩個(gè)函數(shù),并輸出結(jié)果兩個(gè)整數(shù)由鍵盤輸入。解:參考源程序: int maxyueshu(int m,int n) int m,n; int i=1,t; for(;i<=m&&i<=n;

44、i+) if(m%i=0&&n%i=0) t=i; return(t); int minbeishu(int m,int n) int m,n; int j; if(m>=n) j=m; else j=n; for(;!(j%m=0&&j%n=0);j+); return j; main() int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(

45、a,b); printf("max=%d,min=%dn",max,min); 7.4求方程ax2+bx+c=0的根,用三個(gè)函數(shù)分別求當(dāng)b2-4ac>0、b2-4ac=0和b2-4ac<0時(shí)的根,并輸出結(jié)果。從主函數(shù)輸入a、b、c的值。 解:參考源程序:#include"math.h"/* 求b2-4ac>0時(shí)的根*/ float yishigen(float m,float n,float k) float m,n,k; float x1,x2; x1=(-n+sqrt(k)/(2*m); x2=(-n-sqrt(k)/(2*m);

46、printf("two shigen is x1=%.3f and x2=%.3fn",x1,x2); /* 求b2-4ac=0時(shí)的根*/ float denggen(float m,folat n) float m,n; float x; x1=x2=-n/(2*m); printf("denggen is x=%.3fn",x); /* 求b2-4ac<0時(shí)的根*/ float xugen(float m,float n,float k) float m,n,k; float x,y; x=-n/(2*m); y=sqrt(-k)/(2*m);

47、 printf("two xugen is x1=%.3f+%.3fi and x2=%.3f-%.3fin",x,y,x,y); main() float a,b,c,q; printf("input a b c is "); scanf("%f,%f,%f",&a,&b,&c); printf("n"); q=b*b-4*a*c; if(q>0) yishigen(a,b,q); else if(q=0) denggen(a,b); else xugen(a,b,q); 7.5寫一

48、個(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) break; 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

49、 是素?cái)?shù)!n"); else printf("a 不是素?cái)?shù)!n"); printf("%5d",yi); printf("n"); 7.6編一個(gè)函數(shù)fun(char *s)把字符串中的內(nèi)容逆置。例如:字符串中原有的內(nèi)容為:gfedcba,則調(diào)用該函數(shù)后,串中的內(nèi)容為:abcdefg。解:程序分析:該題的算法是先分別找出字符串的兩頭,然后同時(shí)逐一往中間移動(dòng),每移動(dòng)一次都進(jìn)行兩字符的位置對(duì)換,直到中間字符(用s+i<s+n-1-i來控制)。由于s+i中一個(gè)地址,因此要注意把它的內(nèi)容取出再進(jìn)行換位。即先進(jìn)行取內(nèi)容運(yùn)算*)參考源程序:#include <string.h>#include <stdio.h>#define N 81fun(char *s) int i=0,t,n=strlen(s);for(;s+i<s+n-1-i;i+)t=*(s+i);*(s+i)=*(s+n-1-i);*(s+n-1-i)=t;main() char aN;clrscr();printf("Enter a string:"); gets(a);printf("The original string is:");puts(a);fun(a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論