C语言复习习题 3.docx
- 文档编号:24071578
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:65
- 大小:47.35KB
C语言复习习题 3.docx
《C语言复习习题 3.docx》由会员分享,可在线阅读,更多相关《C语言复习习题 3.docx(65页珍藏版)》请在冰豆网上搜索。
C语言复习习题3
C语言习题集
第4章顺序结构程序设计
4.4若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=‘a’,c2=‘b’。
想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
a=□3□□b=□4□□c=□5
x=1.200000,y=2.400000,z=-3.600000
x+y=□3.600□□y+z=-1.20□□z+x=-2.40
c1=ˊaˊ□or□97(ASCII)
c2=ˊbˊ□or□98(ASCII)
(□表示空格,下同)
参考源程序如下:
main()
{inta=3,b=4,c=5;
longintu=51274,n=128765;
floatx=1.2,y=2.4,z=3.6;
charc1='a',c2='b';
printf("a=%2db=%2dc=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y=%5.2fy+z=%5.2fz+x=%5.2f\n",x+y,y+z,z+x);
printf("u=%6ldn=%9ld\n",u,n);
printf("%s%s%d%s\n","c1='a'","or",c1,"(ASCII)");
printf("%s%s%d%s\n","c2='a'","or",c2,"(ASCII)");
}
4.6用scanf下面的函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=ˊAˊ,c2=ˊaˊ,问在键盘上如何输入?
main()
{
inta,b;floatx,y;charc1c2;
scanf("a=%d_b=%d",&a,&b);
scanf("_x=%f_y=%e",&x,&y);
scanf("_c1=%c_c2=%c",&c1,&c2);
}
输入方法如下:
a=3□b=7
□x=8.5□y=71.82
□c1=A□c2=a
4.8设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。
请编程序。
参考源程序:
main()
{floatr,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*3.14*r*r*r/3;
Vb=Sa*h;
printf("C1=%.2f\n",C1);
printf("Sa=%.2f\nSb=%.2f\nVa=%.2f\nVb=%.2f\n",Sa,Sb,Va,Vb);
}
4.9输入一个华氏温度,要求输出摄氏温度。
公式为c=5(F-32)/9,输出要求有文字说明,取位2小数。
参考源程序如下:
main()
{floatF,c;
scanf("%f",&F);
c=5*(F-32)/9;
printf("输入的华氏温度为:
%.2f,则摄氏温度为%.2f",f,c);
}
3.4已知三角形的三边长,求其面积。
解:
假设输入的三边能构成三角形,三角形的面积公式为:
Area=
其中S=(a+b+c)/2。
参考源程序如下:
#include“math.h”
Main()
{
Floata,b,c,s,area;
Printf(“请输入三角形的三边:
”);
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.2f\n”,a,b,c);
Prinft(“三角形的面积为:
%7.2f\n”,area);
}
第5章选择结构程序设计
5.3写出下面表达式的值(设a=1,b=2,c=3,x=4,y=3)
(1)a+b>c&&b==c
(2)!
a
=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。
5.4有三个整数a、b、c,由键盘输入,输出其中最大的数。
参考源程序:
main()
{inta,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
if(a>c)t=a;
elset=c;
elseif(b>c)t=b;
elset=c;
printf("%d\n",t);
}
5.6给出一百分制成绩,要求输出成绩等级'A'、'B'、'C'、'D'、'E'。
90分以上为'A',80~89分为'B',70~79分为'C',60~69分为'D',60分以下为'E'。
参考源程序:
main()
{intnumber,md;charc1;
scanf("%d",&number);
md=number/10;
switch(md)
{
case10:
case9:
c1='A';break;
case8:
c1='B';break;
case7:
c1='C';break;
case6:
c1='D';break;
case5:
case4:
case3:
case2:
case1:
case0:
c1='E';break;
}
printf("%c\n",c1);
}
5.7给一个不多于5位的正整数,要求:
①求出它是几位数;②分别打印出每一位数字;③按逆顺序打印出各位数字,例如原来为321,应输出123。
参考源程序:
main()
{inta,b,c,d,e,n;longm;
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,printf("%d%d,%d,%d,%d,%d%d%d%d%d%d\n",n,a,b,c,d,e,e,d,c,b,a);
elseif(b!
=0)n=4,printf("%d%d,%d,%d,%d%d%d%d%d\n",n,b,c,d,e,e,d,c,b);
elseif(c!
=0)n=3,printf("%d%d,%d,%d%d%d%d\n",n,c,d,e,e,d,c);
elseif(d!
=0)n=2,printf("%d%d,%d%d%d\n",n,d,e,e,d);
elsen=1,printf("%d%d%d\n",n,e,e);
}
5.8企业发放的奖金根据利润提成。
利润(I)低于或等于10万元的,奖金可提10%;利润高于10万元,低20万元(10000010000000时,超过100万元的部分按1%提成。
从键盘输入当月利润I,求应发奖金总数。
要求:
⑴用if语句编程序;⑵用switch语句编程序。
⑴用if语句编程序:
main()
{inta,b,c,d,e;floatd1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10;
doublejj,k;longi;
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)d=0;
jj=a*d1+(b-a)*d2+(c-b)*d3+(d-c)*d4+(e-d)*d5+(k-e)*d6;
printf("jj=%.3f\n",100000*jj);
}
⑵用switch语句编程序:
main()
{inta,b,c,d,e,n,x;
floatd1=0.01,d2=0.015,d3=0.03,d4=0.05,d5=0.075,d6=0.10;
doublejj,k;longi;
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(x)
{case0:
e=0;
case1:
d=0;
case3:
c=0;
case5:
b=0;
case9:
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=%.3f\n",100000*jj);
}
5.9输入四个整数,要求按大小顺序输出。
参考源程序:
main()
{inta,b,c,d,t;scanf("%d,%d,%d,%d",&a,&b,&c,&d);
if(a
if(a if(a if(b if(b if(c printf("%d,%d,%d,%d\n",a,b,c,d); } 5.10有四个圆塔,圆心分别为(2,2),(-2,2),(-2,-2),(2,-2),圆半径为1。 见下图。 这四个塔的高度为10米,塔外无建筑物。 今输入任一点的坐标,求该点的建筑物高度(塔外高度为零)。 参考源程序: #include"math.h" main() {floatx,y,n,m,r;inth; 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; elseh=10; printf("%d\n",h); } 第6章循环结构程序设计 6.1输入两个正整数m和n,求其最大公约数和最小公倍数。 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); } 6.2输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 参考源程序: #include"stdio.h" main() {charc;inti=0,j=0,k=0,l=0; while((c=getchar())! ='\n') {if(c>=65&&c<=90||c>=97&&c<=122)i++; elseif(c>=48&&c<=57)j++; elseif(c==32)k++; elsel++; } printf("i=%d,j=%d,k=%d,l=%d\n",i,j,k,l); } 6.3求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。 例如: 2+22+222+2222+22222(n=5),n由键盘输入。 参考源程序: #include"math.h" main() {intn,sum=0,i=1,s=2; scanf("%d",&n); while(i<=n) {sum=sum+s;s=s+2*pow(10,i);i++;} printf("sum=%d\n",sum); } 6.4求∑n! (n=1->20),(即求1! +2! +3! +4! +5! +…+20! ) 参考源程序: main() {intn,i=1;longsum=0,s=1; scanf("%d",&n); while(i<=n) {s=s*i;sum=sum+s;i++;} printf("sum=%ld\n",sum); } 6.5求 6.6打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如: 153是一个水仙花数,因为153=1^3+5^3+3^3。 参考源程序: #include"math.h" main() {intx=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++; } } 6.7一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1、2、3 参考源程序: main() {intm,i,j,s; for(m=6;m<10000;m++) {s=1; for(i=2;i if(m%i==0)s=s+i; if(m-s==0) {printf("%5ditsfastorsare1",m);for(j=2;j printf("%d",j);printf("\n");} } } 或 main() {intm,i,j,s; for(m=6;m<1000;m++) {s=m-1; for(i=2;i if(m%i==0)s=s-i; if(s==0) {printf("%5ditsfastorsare1",m);for(j=2;j printf("%d",j);printf("\n");} } } 6.8有一分数序列: 2/1,3/2,5/3,8/5,13/8,21/13… 求出这个数列的前20项之和。 参考源程序: main() {inti=1,n;doublet,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("%f\n",sum); } 6.9一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。 求它在第10次落地时共经过多少米? 第10次反弹多高? 参考源程序: main() {inti,n;doubleh=100,s=100; scanf("%d",&n); for(i=1;i<=n;i++) {h*=0.5; if(i==1)continue;s=2*h+s; } printf("h=%f,s=%f\n",h,s); } 6.10猴子吃桃问题。 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。 以后每天早上都吃了前一天剩下的一半零一个。 到第10天早上想再吃时,见只剩下一个桃子了。 求第一天共摘多少桃子。 参考源程序: main() {inti=1,sum=0; for(;i<=10;i++);sum=2*sum+1; printf("sum=%d\n",sum); } 6.11用迭代法求x=。 求平方根的迭代公式为: Xn+1=(Xn+1/Xn)/2 要求前后两次求出的得差的绝对值少于0.00001。 参考源程序: #include"math.h" main() {floatx0,x1,a; scanf("%f",&a); x1=a/2; do {x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)>=0.00001); printf("%.3f\n",x1); } 6.12用二分法求方程在(-10,10)之间的根 2x3-4x2+3x-6=0 参考源程序: main() {doublex1,x2,y1,y2;x1=-10;x2=10; do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6; x1=x1-y1/(6*x1*x1-8*x1+3);}while(y1! =0); do{y2=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=%.3f\n",x1,x2); } 6.13打印以下图案 * *** ***** ******* ***** *** * 参考源程序: #include"math.h" main() {inti=1,k,l,m; for(;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("*"); elseprintf("");} printf("\n"); } 第7章数组 71用筛选法求100以内的素数。 参考源程序: main() {inti,j,a[100]; for(i=2;i<100;i++) {a[i]=i; for(j=2;j<=i;j++) {if(j if(a[i]-j==0)printf("%5d",a[i]);} } printf("\n"); } 或 #include"math.h" main() {staticinti,j,k,a[98]; for(i=2;i<100;i++) {a[i]=i;k=sqrt(i); for(j=2;j<=a[i];j++) if(j if(j>=k+1)printf("%5d",a[i]); } printf("\n"); } 7.3求一个矩阵对角线元素之和。 解: 以3*3矩阵为例,参考源程序如下: main() {inti=0,j=0,a[3][3],s1,s2; for(i=0;i<3;i++) for(j=0;j<3;j++)scanf("%d",&a[i][j]); s1=a[0][0]+a[1][1]+a[2][2]; s2=a[0][2]+a[1][1]+a[2][0]; printf("s1=%d,s2=%d\n",s1,s2); } 7.4一个已按从小到大的顺序排好的数组,今输入一个数要求按原来排序的规律将它插入数组中。 解: 我们以一个10元素的数组为例,参考源程序如下: main() {staticinta[10]={1,7,8,17,23,24,59,62,101}; inti,j,t; scanf("%d",&a[9]); for(i=9;i>0;i--)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言复习习题 语言 复习 习题