C语言程序设计第三版习题库答案.docx
- 文档编号:30446144
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:46
- 大小:42.25KB
C语言程序设计第三版习题库答案.docx
《C语言程序设计第三版习题库答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第三版习题库答案.docx(46页珍藏版)》请在冰豆网上搜索。
C语言程序设计第三版习题库答案
C语言程序设计(第三版)习题库
1、设圆半径r=1、5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
#include <stdio、h>
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=%、2f”,Cl,Sa,Sb,Va,Vb);
}
2、输入一个华氏温度,要求输出摄氏温度。
公式为 c=5(F-32)/9
输出要求有文字说明,取位2小数。
#include
main(){
floatF,c;
scanf("%f",&F);
____c=5*(F-32)/9______;
printf(”c=%、2f",c);
}
3、有一函数:
写一程序,输入x值,输出y值。
#include main(){ intx,y; printf("输入x: ”); scanf("%d”,&x); if(x<1) { /*x<1*/ y=x; printf(”x=%3d,y=x=%d\n”,x,y); }elseif(____x〈10_______){ /*1≤x—10*/ _____y=2*x—1_______; printf("x=%3d,y=2*x—1=%d\n",x,y); } else{ /* x≥10*/ y=3*x-11; printf(”x=%3d, y=3*x-11=%d\n",x#include"stdio、h" main() { int x,y; scanf(”%d”,&x); if(x<1) {y=x;} elseif(x>=1 &&x<10) ﻩ{y=2*x—1;} else { y=3*x-11;} printf(”%d”,y); }# include ”stdio、h" main() { int x,y; scanf(”%d",&x); if(x〈1) ﻩ{ y=x;} elseif(x>=1&& x〈10) { y=2*x-1;} else ﻩ{ y=3*x-11;} printf(”%d\n",y); }#include”stdio、h" main() { int x,y; scanf("%d",&x); if(x〈1) { y=x;} elseif(x>=1 &&x〈10) { y=2*x-1;} else ﻩ{y=3*x—11;} printf(”%d",y); }scanf("%d”,&x); if(x〈1) {y=x;} elseif(x〉=1&& x〈10) {y=2*x—1;} else ﻩ{y=3*x-11;}#include"stdio、h" main() { intx,y; scanf(”%d”,&x); if(x<1) y=x; else if(x〉=1&&x<10) y=2*x-1; else ﻩy=3*x-11; printf(”%d”,y); },y); } } 4、给定一个不多于5位得正整数,要求: ①求它就是几位数;②按逆序打印出各位数字。 例如原数为321,应输出123。 #include main(){ longint num,m=0; int i=0; scanf(”%ld",&num); while(num>0){ i++; /*统计长度*/ m=m*10+num%10; num =num/10; } printf("数字长度为: %d",i); printf("逆序数字为: %d\n",m); } 5、以下程序实现得功能: 求三个数得最大值 #include<stdio、h> main(){ ﻩinta,b,c,max; ﻩscanf("%d%d %d”,&a,&b,&c); ﻩif(a>b){ if(a>c) max=a; ﻩelse max=c; }else{ ﻩif(b>c) max=b; ﻩelse ﻩmax=c; ﻩ} printf("max= %d",max); } #include main(){ int x,y,z,t=0; ﻩscanf(”%d%d%d",&x,&y,&z); if(x>y) ﻩ{t=y;y=x;x=t;} if(x>z) {t=z;z=x;x=t;} ﻩ if(y>z) ﻩ{t=z;z=y;y=t;} printf(”%d\n",z); } 6、输入两个正整数m与n,求其最大公约数与最小公倍数。 /*枚举法*/ #include<stdio、h〉 main(){ longm,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; elsej=n; for(;! (j%m==0&&j%n==0);j++); printf("s=%ld,j=%ld\n",s,j); } #include〈stdio、h〉 main(){ inta,b,k,temp,i,p; ﻩscanf(”%d,%d",&a,&b); if(a>b) ﻩtemp=b; ﻩelse ﻩtemp=a; for(i=2;i<=temp;i++) ﻩ{if(a%i==0&&b%i==0) k=i; ﻩ } printf(”%d\n",k); p=a*b/k; printf(”%d\n”,p); } /*辗转相除*/ #include〈stdio、h〉 main(){ intm,n,k,j,p,r=1; scanf("%d,%d”,&m,&n); k=m>n? m: n; j=m>n? n: m; do{ r=k%j; k=j; j=r; }while(r! =0); printf(”%d,%d”,k,m*n/k); } /*反复减法*/ #include<stdio、h〉 main(){ intm,n,k,j,p,r=1; scanf(”%d,%d”,&m,&n); k=m>n? m: n; j=m〉n? n: m; do{ p=k-j; if(j>p){k=j;j=p;} elsek=p; }while(p! =0); printf("%d,%d",k,m*n/k); } 7、输入一行字符,分别统计出其中英文字母、空格、数字与其她字符得个数。 #include"stdio、h” main(){ charc;inti=0,j=0,k=0,l=0; while((c=getchar())! =’\n'){ if(c>=’A'&&c<=’Z’||c>=’a’&&c<=’z’) i++; //英文字母统计 elseif(c>=’0’&&c<=’9’) j++;//数字统计 elseif(c==’ ’) k++;//空格统计 elsel++; } printf("i=%d,j=%d,k=%d,l=%d\n”,i,j,k,l); } 8、求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a就是一个数字。 例如: 2+22+222+2222+22222(n=5),n由键盘输入。 #include<stdio、h> main(){ inta,n; longb=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、打印出所有"水仙花数",所谓"水仙花数"就是指一个三位数,其各位数字立方与等于该本身。 例如: 153就是一个水仙花数,因为153=13+53+33。 【程序1】 #include〈stdio、h> main(){ int i,m,n,k; for(i=100;i<1000;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】 #include〈stdio、h> main(){ inti,a,n,s; for(i=100;i<=999;i++){ n=i;s=0; while(n>0){ a=__n%10__; s+=a*a*a; n/=__10__; } if(__s==i__)printf(“%d”,i); } 10、一个数如果恰好等于它得因子之与,这个数就称为"完数".例如,6得因子为1、2、3,而6=1+2+3,因此6就是"完数"。 编程序找出1000之内得所有完数,并按下面格式输出其因子: 6 its factorsare 1、2、3 #include〈stdio、h〉 main(){ inta,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、利用: π/4=1-1/3+1/5-1/7+…、级数求π得值,直到最后一项得绝对值小于10-6为止。 求绝对值得函数为fabs(). #__include #include<math、h〉 main(){ inti=1,flag=1; doublesum=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<stdio、h> #defineN20 main(){ inti=1; doublex=1,y=2, sum=0; while(__i〈=20__){ sum=sum+__y/x__; y = ___x+y__; x = __y-x__; i++; } printf("%f\n”,sum); } 12、一球从100米高度自由下落,每次落地后返回原高度得一半,再落下。 求它在第10次落地时共经过多少米? 第10次反弹多高? #include 〈stdio、h〉 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=%f\n",s,h); } 13、猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下得桃子吃掉一半,又多吃一个.以后每天早上都吃了前一天剩下得一半零一个.到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘多少桃子. #include <stdio、h> #defineN10 main(){ inti=1,sum=1; while(i++<N) sum=__(sum+1)*2__; printf("sum=%d\n”,sum); } 14、用迭代法求.求平方根得迭代公式为: 要求前后两次求出得得差得绝对值少于0、00001. #include #include〈math、h> main(){ floatx0,x1,a; scanf("%f”,&a); x1=a/2; do{ x0=x1; x1=__(x0+a/x0)/2__; }while(__x1>1e-5__); printf("%g\n",x1); } 15、用牛顿迭代法求方程在1、5附近得根。 #include<stdio、h〉 #include__<math、h〉__ #definef(x) 2*x*x*x-4*x*x+3*x-6 main(){ doublex,y;x=__1、5__; do{ y =f(x); x=x—y/(6*x*x-8*x+3); }while(fabs(y)〉1e—6); printf(”x=%、3f\n",x); } 16、用二分法求方程在(—10,10)之间得根 #include #include #definef(x) 2x*x*x-4*x*x+3*x—6 main(){ doublex1=-10,x2=10,x,y; do{ x=(x1+x2)/2; y=f(x); if(y<0)x1=x; elsex2=x; }while(fabs(y)>1e-6); printf("x=%g\n",x); } 17、以下程序得功能就是: 输入一个百分制成绩,输出一个五级制成绩等级。 例如输入75,输出C。 请完成填空 #include〈stdio、h〉 main(){ int score; scanf("__%d__”,&score); switch(__score/10__){ ﻩcase1: case2: case3: case4: case 5: printf(“gradeE\n”);___break__; case6: printf(“gradeD\n”);break; ﻩcase7: printf(“gradeC\n”);break; ﻩcase8: printf(“gradeB\n”);break; case9: printf(“grade A\n”);break; __default__: printf("Errorinput! \n”); } } 18、该程序功能: 对x=1,2,、、、,10,求f(x)=x*x-5*x+sin(x)得最大值. #include<stdio、h> #include〈math、h〉 #definef(x) x*x-5*x+sin(x) voidmain(){ int x; floatmax; __max=f (1)__; for(x=2;x<=10;x++) ﻩ __if(max printf("%f\n",max); } 19、程序功能: 输入整数a与b得值,若a2+b2大于100,则输出a2+b2百位以上得数字,否则输出两数之与. #include〈stdio、h> main(){ inta,b,s; scanf("%d%d”,&a,&b); s=__a*a+b*b__; if(s〉100) printf(”%d”,__s/100__); else printf(”%d”,___a+b__); } 20、有1020个西瓜,第一天卖一半多两个,以后每天卖剩下得一半多两个,以下程序统计卖完所需得天数。 #include main(){ intday,x1,x2; day=0;x1=1020; while(__x1〉0__){ x2=__x1/2-2__; x1=x2;day++} printf(“day=%d”,day); } 21、找出整数得所有因子 #include main(){ inti,x; scanf(“%d",&x); i=1; for( ;__i<=x/2__;){ if(x%i==0)printf(%d”,i); i++; } } 22、统计用数字0-9可以组成多少个各位上得数字没有重复得3位偶数. #include main(){ intn=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=%d\n",n); } 23、用100元换成1、2、5元得所有兑换方案. #include 〈stdio、h〉 main() { inti,j,k,l=0; for(i=0;i<=20;i++) for (j =0;j〈=50;j++){ k=__(100-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() { intn,k=1,s=0,m; for (n=1;n<=100; n++) { k=1;s=0; __m=n__; while(__m>0__) { k*=m%10; s+=m%10; ___m/=10__; } if(k>s)printf(“%d”,n); } 25、从3个红球、5个白球、6个黑球中任意取出8个球,且其中必须有白球,输出所有可能得方案。 #include main(){ int i,j,k; for(i=0;i〈=3;i++) for(__j=1__;j〈=5;j++){ k=8 – i– j; if (__k〉=0__) printf(“%3d%3d%3d\n”,i,j,k); } } 26、以下程序得功能就是: 判断一个四位数就是否满足这样得条件: 它得9倍刚好就是它得反序数.反序数就是指整数各个位上得数字逆序所形成得整数。 请完成程序得填空。 #include main(){ ﻩinti,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、以下程序完成两整数得交换。 #include〈stdio、h〉 main(){ inta,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〈stdio、h〉 main(){ int year ; scanf(“%d”,&year); if(__year%400==0||year%4==0&&year%100! =0__)printf(“yes"); else printf(“No”); } 29、以下程序利用冒泡排序法对输入得10个数进行排序。 #include<stdio、h> #define N10 voidmain(){ int a[N]; inti,j,t; printf(″input10numbers: \n″); for (i=0;i<N;i++) scanf("%d”,__&a[i]__); printf("\n”); for(j=0;j〈N-1;j++) for(i=0;i<__N—j-1__;i++) if(__a[i]>a[i+1]__) { t=a[i];a[i]=a[i+1]; a[i+1]=t; } printf(″thesortednumbers: \n″); for(i=0;i〈N;i++) printf(″%d ″,a[i]); printf(″\n″); } 30、用筛法求100之内得素数。 筛法素数得思想就是: 1、取最小得数2,并声明它就是素数,同时筛去它及它得倍数。 2、取未筛去数中最小得数,并声明它就是素数,同时筛去它及它得倍数.3、重复步骤2至筛中无数,得到所有得素数. #include #defineM 100//范围 #defineN((M+1)/2) //奇数得个数 void main(){ inti,j,a[N];ﻫ a[0]= 2;ﻫ for(i=1;i a[i]=2*i+1;ﻫ for(i=1;i<N-1;i++) /*第二步筛选 */
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第三 习题 答案