C语言程序设计习题3.docx
《C语言程序设计习题3.docx》由会员分享,可在线阅读,更多相关《C语言程序设计习题3.docx(25页珍藏版)》请在冰点文库上搜索。
C语言程序设计习题3
习题3参考解答
1.什么是算法?
常用描述算法的工具有哪些?
解:
所谓算法,就是计算机解决某一个问题的具体方法和步骤。
常用描述算法的工具有流程图、N-S图。
2.试用流程图表示求3个数中的最大数的算法。
解:
流程图如图1-1所示。
图1-1求3个数中的最大数的流程图
3.什么是结构化程序设计?
它的主要内容是什么?
解:
结构化程序设计(structuredprogramming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。
它的主要观点是采用自顶向下、逐步求精的程序设计方法;使用3种基本控制结构构造程序,任何程序都可由顺序、选择、循环这3种基本控制结构构造。
4.从键盘输入3个整数,按照从小到大的顺序输出。
解:
#include
intmain()
{
inta,b,c,temp;
scanf("%d,%d,%d",&a,&b,&c);
if(a>b){temp=a;a=b;b=temp;}
if(a>c){temp=a;a=c;c=temp;}
if(b>c){temp=b;b=c;c=temp;}
printf("%d,%d,%d\n",a,b,c);
return0;
}
程序运行情况如下:
12,8,29↙
8,12,29
5.输入一个华氏温度F,要求输出摄氏温度C。
公式为
要求要有文字说明,取两位小数。
解:
#include
intmain()
{
floatf,c;
printf("请输入一个华氏温度:
\n");
scanf("%f",&f);
c=5*(f-32)/9;
printf("%.2f\n",c);
return0;
}
程序运行情况如下:
请输入一个华氏温度:
36↙
2.22
6.输入一个三位整数,要求输出它的百位数、十位数和个位数。
解:
#include
intmain()
{
intnum;/*num表示一个三位整数*/
inta,b,c;/*a,b,c分别表示百位、十位和个位上的数字*/
scanf("%d",&num);
a=num/100;
b=(num-a*100)/10;
c=num-a*100-b*10;
printf("%d,%d,%d\n",a,b,c);
return0;
}
程序运行情况如下:
123↙
1,2,3
7.小红有面值1分的硬币638枚,可以兑换成几元几角剩余几分?
说明:
100枚1分的硬币可以兑换成1元,10枚1分的硬币可以兑换成1角。
兑换原则是面额从大到小。
解:
#include
intmain()
{
inta=638;
intyuan;
intjiao;
intfen,temp;
yuan=a/100;
temp=a%100;
jiao=temp/10;
fen=temp%10;
printf("1元的数量:
%d\n",yuan);
printf("1角的数量:
%d\n",jiao);
printf("1分的数量:
%d\n",fen);
return0;
}
程序运行结果如下:
1元的数量:
6
1角的数量:
3
1分的数量:
8
8.设圆柱的半径为2.5,圆柱的高为4,求圆柱的体积。
用scanf函数输入数据,printf函数输出计算结果,输出时要求有文字说明,取两位小数。
解:
#include
#definePI3.1415926
intmain()
{
floatr,h,v;
printf("Pleaseinputr,h:
");
scanf("%f,%f",&r,&h);
v=PI*r*r*h;
printf("半径为:
%.2f,高为:
%.2f的圆柱体体积为:
%.2f\n",r,h,v);
return0;
}
程序运行情况如下:
Pleaseinputr,h:
2.5,4↙
半径为:
2.50,高为:
4.00的圆柱体体积为:
78.54
9.输入三角形的三边,计算三角形的面积。
要求:
对输入的3个边长进行判断,如果能构成三角形,则计算三角形的面积;否则,则显示“构不成三角形!
”信息。
解:
#include
#include
intmain()
{
inta,b,c;
floats,area;
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
s=(float)(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积为:
%.2f\n",area);
}
else
printf("边长分别为%d、%d、%d的三边构不成三角形!
\n",a,b,c);
return0;
}
程序运行情况如下:
3,4,6↙
面积为:
5.33
3,6,12↙
边长分别为3、6、12的三边构不成三角形!
10.设计一个C语言程序,求5个数中的最大数和最小数。
解:
#include
intmain()
{
inta,b,c,d,e,max,min;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
max=min=a;
if(b>max)max=b;
if(bif(c>max)max=c;
if(cif(d>max)max=d;
if(dif(e>max)max=e;
if(eprintf("max:
%d,min:
%d\n",max,min);
return0;
}
程序运行情况如下:
25689↙
max:
9,min:
2
11.判断输入的字符属于哪一类字符:
大写字母、小写字母、数字还是其他字符。
解:
#include
intmain()
{
charch;
scanf("%c",&ch);
if(ch>=48&&ch<=57)
printf("该字符为数字!
");
elseif(ch>=65&&ch<=91)
printf("该字符为大写字母!
");
elseif(ch>=97&&ch<=122)
printf("该字符为小写字母!
");
else
printf("该字符为其他字符!
");
return0;
}
程序运行情况如下:
2↙
该字符为数字!
12.用if语句和switch语句分别编写程序,实现以下功能:
从键盘输入数字1,2,3,4,分别显示Excellent,Good,Pass,Fail。
输入其他字符时显示Error。
解:
/*用if语句编写程序*/
#include
intmain()
{
charch;
scanf("%c",&ch);
if(ch=='1')
printf("Excellent\n");
elseif(ch=='2')
printf("Good\n");
elseif(ch=='3')
printf("Pass\n");
elseif(ch=='4')
printf("Fail\n");
else
printf("Error\n");
return0;
}
程序运行情况如下:
1↙
Excellent
/*用switch语句编写程序*/
#include
intmain()
{
charch;
scanf("%c",&ch);
switch(ch)
{
case'1':
printf("Excellent\n");break;
case'2':
printf("Good\n");break;
case'3':
printf("Pass\n");break;
case'4':
printf("Fail\n");break;
default:
printf("Error\n");
}
}
程序运行情况如下:
1↙
Excellent
13.假设国家对个人收入所得税是按这样的标准进行的:
起征点是2000元,2000~3000元为5%,3000~5000元为15%,5000~10000元为20%,10000元以上为30%。
编程输入工资,计算实际工资所得及税金。
解:
#include
intmain()
{
intgz;
floatsj;
scanf("%d",&gz);
if(gz<2000)
{
printf("不需要纳税!
\n");
return;
}
elseif(gz<3000)
sj=gz*0.05;
elseif(gz<5000)
sj=gz*0.15;
elseif(gz<10000)
sj=gz*0.2;
else
sj=gz*0.3;
printf("工资为:
%d,税金为:
%.2f\n",gz,sj);
return0;
}
程序运行情况如下:
1500↙
不需要纳税!
2800↙
工资为:
2800,税金为:
140.00
4500↙
工资为:
4500,税金为:
675.00
8500↙
工资为:
8500,税金为:
1700.00
20000↙
工资为:
20000,税金为:
6000.00
14.求方程ax2+bx+c=0的根。
说明:
当b2-4ac>0时,有两个不等的实根;当b2-4ac=0时,有两个相等的实根;当b2-4ac<0时,有两个虚根。
解:
#include
#include
intmain()
{
inta,b,c;
doubledelt,x1,x2;
scanf("%d%d%d",&a,&b,&c);
delt=b*b-4*a*c;
if(delt==0)
{
printf("该方程有两个相等的实根!
");
x1=x2=-(double)b/(2*a);
printf("%.2f,%.2f\n",x1,x2);
}
else
if(delt>=0)
{
x1=(-b+sqrt(delt))/(2*a);
x2=(-b-sqrt(delt))/(2*a);
printf("%.2f,%.2f\n",x1,x2);
}
else
printf("该方程无实根!
\n");
}
程序运行情况如下:
345↙
该方程无实根!
462↙
-0.50,-1.00
441↙
该方程有两个相等的实根!
-0.50,-0.50
15.从1~100中找出能被5或7整除的数。
解:
#include
intmain()
{
inti;
for(i=1;i<=100;i++)
{
if(i%5==0||i%7==0)
printf("%5d",i);
}
return0;
}
程序运行结果如下:
5571014152021252830354042454950
555660636570757780848590919598100
16.计算sum=1+11+111+1111+11111。
解:
#include
intmain()
{
inti,t=0,s=0;
for(i=1;i<=5;i++)
{
t=t*10+1;
printf("%d\n",t);
s=s+t;
}
printf("%d",s);
return0;
}
程序运行结果如下:
1
11
111
1111
11111
12345
17.输入两个正整数m和n,求出它们的最大公约数和最小公倍数。
解:
#include
intmain()
{
intm,n,t,gcd,gcm;
inta,b;
scanf("%d%d",&m,&n);
t=m%n;
a=m;b=n;
while(t!
=0)
{
m=n;
n=t;
t=m%n;
}
gcd=n;
gcm=a*b/gcd;
printf("%d和%d的最大公约数为:
%d,最小公倍数为:
%d\n",a,b,gcd,gcm);
return0;
}
程序运行情况如下:
2515↙
25和15的最大公约数为:
5,最小公倍数为:
75
18.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
解:
#include
intmain()
{
charch;
intm=0;
intk=0;
intn=0;
intt=0;
ch=getchar();
while(ch!
='\n')
{
if(ch==32)
k++;
elseif(ch>=48&&ch<=57)
n++;
elseif(ch>=65&&ch<=90||ch>=97&&ch<=122)
m++;
else
t++;
ch=getchar();
}
printf("字母的个数为:
%d\n",m);
printf("空格的个数为:
%d\n",k);
printf("数字的个数为:
%d\n",n);
printf("其他字符的个数为:
%d\n",t);
return0;
}
程序运行情况如下:
123abcdefghyyyy;;;;;…11166@#%↙
字母的个数为:
12
空格的个数为:
2
数字的个数为:
8
其他字符的个数为:
11
19.从键盘输入10个学生的成绩,试统计出他们的成绩总和及平均值。
解:
#include
intmain()
{
floatcj,sum=0,aver;
inti;
for(i=1;i<=10;i++)
{
scanf("%f",&cj);
sum=sum+cj;
}
aver=sum/10;
printf("sum=%.2f,aver=%.2f",sum,aver);
return0;
}
程序运行情况如下:
68757456787581767585↙
sum=743.00,aver=74.30
20.猴子吃桃问题。
猴子第一天摘下了若干桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第4天早上想要再吃时,只剩下一个桃子了。
求第一天猴子共摘了多少桃子。
解:
#include
intmain()
{
intn=1;
inti;
for(i=9;i>=1;i--)
{
n=2*(n+1);
printf("%d\n",n);
}
return0;
}
程序运行结果如下:
4
10
22
46
94
190
382
766
1534
21.打印出所有的“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如,153就是一个水仙花数,因为153=13+53+33
解:
#include
intmain()
{
inti,bw,sw,gw;
printf("水仙花数是:
");
for(i=100;i<999;i++)
{
bw=i/100;
sw=(i-bw*100)/10;
gw=i-bw*100-sw*10;
if(i==bw*bw*bw+sw*sw*sw+gw*gw*gw)
printf("%5d",i);
}
printf("\n");
return0;
}
程序运行结果如下:
水仙花数是:
153370371407
22.用泰勒级数求e的近似值,直到最后一项小于10-6为止。
e=1+1/1!
+1/2!
+1/3!
+…+1/n!
解:
#include
intmain()
{
inti=1;
longf=1;
doublet=1,e=1;
while(t>=1e-6)
{
e=e+t;
i=i+1;
f=f*i;
t=(double)1/f;
}
printf("%.3lf\n",e);
return0;
}
程序运行结果如下:
2.718
23.输入一个整数,分解各位数字。
例如,输入“1298”,输出“8-9-2-1-”。
请编写一个C语言程序解决该问题。
解:
#include
intmain()
{
intnum,n1,n2;
scanf("%d",&num);
n2=num;
while(n2!
=0)
{
n1=n2%10;
n2=n2/10;
printf("%d-",n1);
}
printf("\n");
return0;
}
程序运行情况如下:
1298↙
8-9-2-1-
24.有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
解:
#include
intmain()
{
inti;
floatf,s=0;
floatf1=1;
floatf2=1;
for(i=1;i<=20;i++)
{
f=f1+f2;
f1=f2;
f2=f;
s=s+f2/f1;
}
printf("分数序列之和为:
%f",s);
return0;
}
程序运行结果如下:
分数序列之和为:
32.660259
25.打印出以下图案。
*
***
*****
*******
*****
***
*
解:
#include
intmain()
{
inti,j;
for(i=1;i<=4;i++)
{
for(j=1;j<20-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
{
printf("*");
}
printf("\n");
}
for(i=3;i>=1;i--)
{
for(j=1;j<20-i;j++)
printf("");
for(j=1;j<=2*i-1;j++)
{
printf("*");
}
printf("\n");
}
return0;
}
26.百马百担问题:
有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问用大马、中马、小马各多少匹?
请设计解决该问题的C语言程序。
解:
#include
intmain()
{
intdm;
for(dm=0;dm<=33;dm++)
{
intzm;
for(zm=0;zm<=50;zm++)
{
intxm;
xm=100-dm-zm;
if(3*dm+2*zm+xm/2==100)printf("%d,%d,%d\n",dm,zm,xm);
}
}
return0;
}
程序运行结果如下:
1,32,67
2,30,68
4,27,69
5,25,70
7,22,71
8,20,72
10,17,73
11,15,74
13,12,75
14,10,76
16,7,77
17,5,78
19,2,79
20,0,80
27.计算1~10十个整数的阶乘和,即计算1!
+2!
+3!
+…+9!
+10!
解:
#include
intmain()
{
inti,j;
longfact,sum=0;
for(i=1;i<=10;i++)
{
fact=1;
for(j=1;j<=i;j++)
{
fact=fact*j;
}
sum=sum+fact;
}
printf("sum:
%ld\n",sum);
return0;
}
程序运行结果如下:
sum:
4037913