C语言程序设计(第三版)习题库答案(共26页).doc

上传人:飞****2 文档编号:14071367 上传时间:2022-05-02 格式:DOC 页数:26 大小:113.50KB
返回 下载 相关 举报
C语言程序设计(第三版)习题库答案(共26页).doc_第1页
第1页 / 共26页
C语言程序设计(第三版)习题库答案(共26页).doc_第2页
第2页 / 共26页
点击查看更多>>
资源描述

《C语言程序设计(第三版)习题库答案(共26页).doc》由会员分享,可在线阅读,更多相关《C语言程序设计(第三版)习题库答案(共26页).doc(26页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、精选优质文档-倾情为你奉上C语言程序设计(第三版)习题库1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include main()float r,h,C1,Sa,Sb,Va,Vb; scanf(_”%f”_,&r); scanf(”%d”,_&h_);; C1=2*3.14*r; Sa=3.14*r*r; Sb=4*Sa; Va=4*3.14*r*r*r/3; Vb=Sa*h; printf(_”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2

2、f”,Cl,Sa,Sb,Va,Vb);2、输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include main()float F,c; scanf(%f,&F); _c=5*(F-32)/9_; printf(c=%.2f,c); 3、有一函数: 写一程序,输入x值,输出y值。 #include main()int x,y; printf(输入x:); scanf(%d,&x); if(x1) /* x1 */ y=x; printf(x=%3d, y=x=%dn,x,y); else if (_x10_) /* 1x-10 */ _

3、y=2*x-1_; printf(x=%3d, y=2*x-1=%dn,x,y); else /* x10 */ y=3*x-11; printf(x=%3d, y=3*x-11=%dn,x# include stdio.hmain() int x,y; scanf(%d,&x); if(x=1 & x10) y=2*x-1; else y=3*x-11; printf(%d,y);# include stdio.hmain() int x,y; scanf(%d,&x); if(x=1 & x10) y=2*x-1; else y=3*x-11; printf(%dn,y);# includ

4、e stdio.hmain() int x,y; scanf(%d,&x); if(x=1 & x10) y=2*x-1; else y=3*x-11; printf(%d,y);scanf(%d,&x); if(x=1 & x10) y=2*x-1; else y=3*x-11; # include stdio.hmain() int x,y; scanf(%d,&x); if(x=1 & x10) y=2*x-1; else y=3*x-11; printf(%d,y);,y); 4、给定一个不多于5位的正整数,要求: 求它是几位数;按逆序打印出各位数字。例如原数为321,应输出123。

5、#include main() long int num,m=0; int i=0; scanf(%ld,&num); while(num0) i+; /*统计长度*/m=m*10+num%10; num =num/10;printf(数字长度为:%d,i); printf(逆序数字为:%dn,m); 5、以下程序实现的功能:求三个数的最大值#includemain() int a,b,c,max; scanf(%d %d %d,&a,&b,&c); if(ab) if(ac) max=a; else max=c; else if(bc) max=b; else max=c; printf(m

6、ax= %d,max);#include main() int x,y,z,t=0; scanf(%d %d %d,&x,&y,&z); if(xy) t=y;y=x;x=t; if(xz) t=z;z=x;x=t; if(yz) t=z;z=y;y=t; printf(%dn,z); 6、输入两个正整数m和n,求其最大公约数和最小公倍数。 /*枚举法*/#includemain() long m,n,i=1,j,s; scanf(%ld,%ld,&m,&n); for(;i=m&i=n)j=m; else j=n; for(;!(j%m=0&j%n=0);j+); printf(s=%ld,

7、j=%ldn,s,j); #include main()int a,b,k,temp,i,p;scanf(%d,%d,&a,&b); if(ab) temp=b; else temp=a; for(i=2;i=temp;i+) if(a%i=0 & b%i=0) k=i; printf(%dn,k); p=a*b/k; printf(%dn,p); /*辗转相除*/#includemain()int m,n,k,j,p,r=1;scanf(%d,%d,&m,&n);k= mn?m:n;j= mn? n:m;dor=k%j; k=j;j=r; while(r!=0);printf(%d,%d,k

8、,m*n/k);/*反复减法*/#includemain()int m,n,k,j,p,r=1;scanf(%d,%d,&m,&n);k= mn? m:n;j= mn?n:m;dop=k-j; if(jp) k=j; j=p; else k=p; while(p!=0);printf(%d,%d,k,m*n/k);7、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #includestdio.h main() char c;int i=0,j=0,k=0,l=0; while(c=getchar()!=n) if(c=A&c=a&c=0&c=9) j+; /数字统计else

9、 if(c= ) k+; /空格统计else l+; printf(i=%d,j=%d,k=%d,l=%dn,i,j,k,l); 8、求Sn=a+aa+aaa+aaaaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。 #include main() int a,n; long b=0,sum=0; scanf(“%d %d”,&a,&n); for (i=1;i=n;i+) b = b*10+a; sum =sum+b; printf (“%ld”,sum);9、打印出所有水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该本

10、身。例如:153是一个水仙花数,因为153=13+53+33。 【程序1】#includemain()int i,m,n,k;for(i=100;i1000;i+)m=_i%10_; n=_ i/10%10_; k=i/100; if(_m*m*m+n*n*n+k*k*k=i_) printf(%5d,i);【程序2】#includemain()int i,a,n,s;for (i=100;i0) a=_n%10_; s+=a*a*a; n /=_10_; if (_s=i_) printf(“%d”,i);10、一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1、2、3,而

11、6=1+2+3,因此6是完数。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6itsfactorsare1、2、3 #include main() int a,i,m; for (a =1; a=1000;a+) for (_i=1,m=0_; i = a/2;i+) if (!(a%i) _m+=i_; if (m=a) printf(“%4d”,a); 11、利用:p/4=1-1/3+1/5-1/7+.级数求p的值,直到最后一项的绝对值小于10-6为止。求绝对值的函数为fabs()。#_include_#includemain() int i=1,flag=1; double

12、 sum=0.0,s; do s=_1.0/(2*i-1)_; sum+=s*flag; i+; _flag=-flag_; while(_fabs(s)1e-6_);/*/printf(pi=%f,_4*sum_);11、有一分数序列:2/1,3/2,5/3, 求出这个数列的前20项之和。 #include#define N 20main() int i=1;double x=1,y=2, sum=0; while(_i=20_) sum=sum+_y/x_;y = _x+y_;x = _y-x_;i+; printf(%fn,sum);12、一球从100米高度自由下落,每次落地后返回原高度

13、的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?#include main() int i,n=10;double h=100,s=100; for(i=2;i=n;i+) h*=_0.5_; s=_s+h*2_; printf(s=%f,h=%fn,s,h); 13、猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。 #include #define N 10main() int i=1,su

14、m=1; while(i+N)sum=_(sum+1)*2_; printf(sum=%dn,sum); 14、用迭代法求 。求平方根的迭代公式为: 要求前后两次求出的得差的绝对值少于0.00001。 #include #include main() float x0,x1,a; scanf(%f,&a); x1=a/2; do x0=x1;x1=_(x0+a/x0)/2_; while(_x11e-5_); printf(%gn,x1); 15、用牛顿迭代法求方程在1.5附近的根。 #include #include _#define f(x) 2*x*x*x-4*x*x+3*x-6 mai

15、n() double x,y;x=_1.5_; doy = f(x); x = x - y/(6*x*x-8*x+3); while(fabs(y)1e-6); printf(x=%.3fn,x); 16、用二分法求方程在(-10,10)之间的根 #include #include #define f(x) 2x*x*x-4*x*x+3*x-6main() double x1=-10,x2=10,x,y;do x=(x1+x2)/2; y=f(x); if(y1e-6);printf(x=%gn,x); 17、以下程序的功能是:输入一个百分制成绩,输出一个五级制成绩等级。例如 输入75,输出

16、C。请完成填空#includemain() int score; scanf(_%d_,&score); switch(_score/10_) case 1:case 2:case 3:case 4:case 5: printf(“grade En”); _break_; case 6: printf(“grade Dn”);break;case 7: printf(“grade Cn”);break;case 8: printf(“grade Bn”);break;case 9: printf(“grade An”);break; _default_:printf(Error input!n

17、); 18、该程序功能:对x=1,2,.,10,求f(x)=x*x-5*x+sin(x)的最大值。#include #include #define f(x) x*x-5*x+sin(x)void main() int x; float max; _max=f(1)_; for(x=2;x=10;x+) _if(maxf(x) max=f(x)_; printf(%fn,max);19、程序功能:输入整数a和b的值,若a2+b2大于100,则输出a2+b2百位以上的数字,否则输出两数之和。#includemain()int a,b,s; scanf(%d%d,&a,&b); s=_a*a+b*

18、b_; if(s100) printf(%d,_s/100_); else printf(%d,_a+b_);20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,以下程序统计卖完所需的天数。#include main() int day,x1,x2; day=0;x1=1020; while(_x10_) x2=_x1/2-2_; x1=x2; day+ printf(“day=%d”,day);21、找出整数的所有因子#include main()int i,x;scanf(“%d”,&x);i=1;for ( ; _i=x/2_;) if (x%i=0) printf(

19、%d”,i); i+;22、统计用数字0-9可以组成多少个各位上的数字没有重复的3位偶数。#include main() int n=0,i,j,k; for (i = 1;i = 9;i+) for (k = 0;k = 8; _k+=2_) if (k != i) for (j = 0;j = 9;j+) if (_j!=i&j!=k_) n+;printf(“n=%dn”,n);23、用100元换成1、2、5元的所有兑换方案。#include main() int i,j,k,l=0; for (i = 0; i=20;i+) for (j =0; j=50; j+) k= _(100-

20、i-2*j)/5_; if (_i+j*2+k*5=100_) printf(“%2d %2d %2d”,i,j,k); l = l + 1; if (l%5=0) printf(“n”); 24、输出1-100之间满足每位数的乘积大于每位数的和的数#include main() int n,k=1,s=0,m; for (n=1; n0_) k *=m%10; s+=m%10; _m/=10_; if (ks) printf(“%d”,n);25、从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能的方案。#include main() int i,j,k; for

21、 (i=0;i=3;i+) for (_j=1_; j=0_) printf(“%3d %3d %3dn”,i,j,k); 26、以下程序的功能是:判断一个四位数是否满足这样的条件:它的9倍刚好是它的反序数。反序数是指整数各个位上的数字逆序所形成的整数。请完成程序的填空。#includemain()int i,a,b,c,d,m;for(i=1000;i+) a=_i%10_; b=i/10%10; c=i/100%10; d=i/1000; m=_a*1000+b*100+c*10+d_; if(_m=i*9_) _break_; printf(i=%d,i);27、以下程序完成两整数的交换

22、。#include main() int a,b; printf(“请依次输入a,b的值:”); scanf(“%d,%d”, _&a,&b_); a=a+b; _b=a-b_; _a=a-b_; printf(“交换后:a=%d,b=%d”,a,b);28、以下程序的功能是判断输入的年份是否为闰年,若是则输出”yes”,否则输出”No”。#include main() int year; scanf(“%d”,&year); if (_year%400=0|year%4=0&year%100!=0_) printf(“yes”); else printf(“No”);29、以下程序利用冒泡排

23、序法对输入的10个数进行排序。#include #define N 10void main() int aN; int i,j,t; printf(input 10 numbers :n); for (i=0;iN;i+) scanf(%d,_&ai_); printf(n); for(j=0;jN-1;j+) for(i=0;iai+1_) t=ai; ai=ai+1; ai+1=t; printf(the sorted numbers :n); for(i=0;iN;i+) printf(%d ,ai); printf(n);30、用筛法求100之内的素数。筛法素数的思想是:1、取最小的数

24、2,并声明它是素数,同时筛去它及它的倍数。2、取未筛去数中最小的数,并声明它是素数,同时筛去它及它的倍数。3、重复步骤2至筛中无数,得到所有的素数。#include #define M 100 / 范围 #define N (M+1)/2) / 奇数的个数void main( ) int i,j,aN; a0 = 2; for(i=1;iN-1;i+) /* 初始数组实现第一步筛选 */ ai = 2*i+1; for(i=1;iN-1;i+) /* 第二步筛选 */ if(_ai!=0_) for(j=i+1;jN;j+) if(_aj%ai=0_) /* 倍数时置零筛去 */ aj=0;

25、printf(nThe primer are 2-%d:n,M); for(i=0,j=0;iN;i+) /* 显示得到素数 */ if(_ai!=0_) printf(%5d,ai); if(+j)%10=0) /* 十个数换行 */ printf(n); getch();31、用选择法对10个整数从小到大排序。 #include #define N 10main() int aN,i,j,k,t; for (i=0;iN;i+) scanf(“%d”,&ai); for (i=0;iN-1;i+) k=_i_; for(j=i+1;jN;j+) if(ajak_) t=ak; ak=ai;

26、ai=t; for(i=0;iN;i+) printf(“%d”,ai);32、求一个NN矩阵主对角线元素、次对角线之和。#define N 3#include main() int i=0,j=0,aNN,s1=0,s2=0; for(i=0;iN;i+) for(j=0;jN;j+) scanf(%d,&aij); for(i=0;iN;i+) for(j=0;jN;j+) if(_i=j_) s1+=aij; /主对角线 if(_i+j=N-1_) s2+=aij; /次对角线 printf(s1=%d,s2=%dn,s1,s2);33、已有一个已排好的数组今输入一个数要求按原来排序的规

27、律将它插入数组中。#define N 10#include main() int i,t,aN=1,7,8,17,23,24,59,62,101; scanf(%d,&t); for(i=N-2;i0;i-) if(tai) _ai=ai-1_; else break;ai+1= _t_;for(i=0;i10;i+) printf(%5d,ai); 34、将一个数组的值按逆序重新存放,例如,原来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。 #include #define N 11main() int i,aN,tmp; for(i=0;iN;i+) scanf(%d,&ai)

28、; for(i=0; _iN/2_;i+) tmp=ai; ai= _aN-i-1_; _aN-i-1_=tmp;for(i=0;iN;i+)printf(%5d,ai); 35、打印“魔方阵”,所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为 8 1 6 3 5 7 4 9 2 要求打印出由1n2的自然数构成的魔方阵。 #define N 3#include main( ) int i,j,k,aNN;/* 初始化魔方阵置为0,作为有无数字的判断*/for(i=0;iN;i+) for(j=0;jN;j+) aij= _0_;j=N/2;a0j=1; /*

29、存放第一个数字 */* 存放2n*n */for(k=2;k=N*N;k+) i-; / 数存放前一数行数减1、列数加1 _j+=1_;if (i N-1) /到达右上角的位置 i=i+2; j-; else if(iN-1) j=0; /上一数的列数为n-1时,下一数的列数为0 if(_aij!=0_) /若下一数的位置上已经有数字, /则下一数存到上一个数行数加1的位置 i=(i+2)%N; j=(j -1 + N)%N; aij= _k_; / 填数for(i=0;iN;i+) /输出魔方阵 printf( ); for(j=0;jN;j+) printf(%4d,aij); print

30、f(nn);36、找出一个二位数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。 #include #define M 5#define N 4main() int aMN,i,j,x,y,k,max,min;/x,y分别是用来记录鞍点的位置 int flag=0; /用于指示是否存在鞍点for(i=0;iM;i+)for(j=0;jN;j+)scanf(%d,&aij);for(i=0;iM;i+)max=ai0; y=0; /先默认第一个数是最大值for(k=1;kN;k+)if(maxaik) y=k; _max=aik_; min=aiy; x=i; /先默认第

31、一个数是最小值 for(k=0;kaky) x=k; _min=aky_; if(_i=k_) printf(a%d%d=%d 是鞍点n,x,y,axy);flag=1; if (flag =0) printf(“不存在鞍点n”);37、有个15数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数组中第几个元素的值。如果该数不在数组中,则打印出无此数 #include #define N 15main() int low,high,mid,x; int aN=1,4,9,13,21,34,55,89,144,233,377,570,671,703,812; low=0,hig

32、h=N-1; scanf(%d,&x); do mid=_(low+high)/2_; if(amid=x) break; else if(amidx) low=_mid+1_; else high=_mid-1_; while(low=high); if(low=high) printf(x is the %dth numbern,mid+1);else printf(x not exist in the arrayn);38、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。#include void main() char string81; int i,num=0,word=0

33、; char c; gets(string); for (i=0;(c=stringi) _!=0_;i+) if(c= ) word=0; else if(word=0) word=_1_; num+; printf(There are %d words in the line.n,num); 39、输出10行的杨辉三角形。11 11 2 11 3 3 1#include #define N 10main() int i,n,k,aN=1; printf(“%5dn”,a0); for(i=1;i=1;j-) aj= _aj+aj-1_; for(j=0; _j=i_;j+) printf(“%5d”,aj); printf(“n”); 40、以下程序的功能是:从键盘输入一个整数n(n10)和n个整数,存入数组a中,先依次输出各个数组元素的值,然后找出最大值,并输出。#includemain() int a10,n,i,j, _max_ ; printf(输入 n=); scanf(%d,&n); printf(输入各数组元素:); for(i=0;in;i+)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com