c语言第五章 答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.3输入两个正整数m和n,求其最大公共约数和最小公倍数。
解:用"辗转相除取余"法求之。
参考程序如下:
#include <stdio.h>
int main()
{ int p,r,n,m,temp;
printf("请输入两个正整数n,m:");
scanf("%d%d,",&n,&m);
p=n*m;
r=m%n;
while(r!=0) //转辗求余法,直到余数为0时结束
{ m=n;
n=r;
r=m%n;
} //跳出while循环后n即为最大公约数
printf("它们的最大公约数为:%d\n",n);
printf("它们的最小公倍数为:%d\n",p/n);
return 0;
}
运行结果如下:
5.4 输入一行字符,分别统计出其中英文字符、空格、数字和其他字符的个数。
解:“一行字符”以回车符'\n'为结束标记,其中用if~else构成多分支选择对输入字符进行归类。
参考程序如下:
#include <stdio.h>
int main()
{ char c;
int letters=0,space=0,digit=0,other=0; //计数器需置零
printf("请输入一行字符:\n");
while((c=getchar())!='\n') //直到输入为回车符结束
{ //根据当前接收的字符逐一判断是什么字符
if (c>='a' && c<='z' || c>='A' && c<='Z')
letters++;
else if (c==' ') space++;
else if (c>='0' && c<='9') digit++;
else other++;
}
printf("字母数:%d\n空格数:%d\n数字数:%d\n其它字符数:%d\n",letters,space,digit,other);
}
运行结果如下:
5.5 求sn=a+aa+aaa+...+aa...a之值,其中a是一个数字。
aa...a是由n个a组成的数,n由键盘输入。
解:参考程序如下:
#include <stdio.h>
int main()
{ int a,n,i,s=0,t=0;
printf("请输入a和n的值:");
scanf("%d%d",&a,&n);
for(i=1;i<=n;i++)
{ t=t*10+a; /*赋值后的t为i个a组成数的值*/
s=s+t; /*赋值后的s为多项式前i项之和*/
}
printf("a+aa+aaa+...=%d\n",s);
return 0;
}
运行结果:
5.6求1!+2!+3!+ (20)
解:参考程序如下:
#include <stdio.h>
int main()
{ double s=0,t=1;
int n;
for (n=1;n<=20;n++)
{ t=t*n;
s=s+t;
}
printf("1!+2!+...+20!=%22.15e\n",s);
}
运行结果:
5.7求∑
∑∑===++10
1
50
1
2
100
1
1k k k k
k
k 解:参考程序如下: #include <stdio.h> int main()
{ double s,s1,s2,s3; int i; s1=s2=s3=0;//累加器需置零 for(i=1;i<=100;i++) s1=s1+i; for(i=1;i<=50;i++) s2=s2+i*i; for(i=1;i<=10;i++) s3=s3+1.0/i; s=s1+s2+s3; printf("s=%g\n",s); return 0; }
5.8 输出所有的“水仙花数”。
解:参考程序如下: #include <stdio.h> int main() { int i,j,k,n; printf("所有的水仙花数是: \n"); for (n=100;n<1000;n++) //逐一判断每一个三位数 { i=n/100; //求当前三位数n 的百位 j=n/10%10; //求当前三位数n 的十位 k=n%10; //求当前三位数n 的个位 if (n==i*i*i + j*j*j + k*k*k) //判断是否是水仙花数,是就输出 printf("%d ",n); }
printf("\n"); return 0; }
5.11 一球从100m的高度自由落下,每次落地后反跳回原高度的一半,再落下。
求它在第10次落地时,共经过多少m?第10次反弹多高?
解:参考程序如下:
#include <stdio.h>
int main()
{ double sn=100,hn=sn/2;
int n;
for (n=2;n<=10;n++)
{ sn=sn+2*hn; /*第n次落地时共经过的米数*/
hn=hn/2; /*第n次反跳高度*/
}
printf("第10次落地时共经过%f米\n",sn);
printf("第10次反弹%f米\n",hn);
return 0;
}
运行结果:
5.12猴子吃桃问题。
解:参考程序如下:
#include <stdio.h>
int main()
{ int day,x1,x2; //x1----表示头一天的桃子数
day=9;
x2=1; //此时x2是第十天的桃子数。
while(day>0)
{ x1=(x2+1)*2; /*第1天的桃子数是第2天桃子数加1后的2倍.*/
x2=x1;
day--;
}
printf("total=%d\n",x1);
return 0;
}
运行结果:
5.16 输出以下图案:
*
***
*****
*******
*****
***
*
解:参考程序一:
# include <stdio.h>
# inlcude <math.h>
void main()
{ int i,j,k;
for(i=1;i<=7;i++)
{ for(j=1;j<=abs(4-i);j++)
putchar(' ');
for(k=1;k<=7-abs(4-i)*2;k++)
putchar('*');
putchar('\n');
}
}
参考程序二:
#include <stdio.h>
int main()
{ int i,j,k;
for (i=0;i<=3;i++) //输出上面4行
{ for (j=0;j<=2-i;j++)
printf(" ");
for (k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for (i=0;i<=2;i++) //输出下面3行
{ for (j=0;j<=i;j++)
printf(" ");
for (k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
return 0;
}
运行结果:
补充题:
1. 设计一个程序要求输入两个整数x和n,计算x的n次方。
解:参考程序如下:
#include <stdio.h>
void main()
{ float x,p=1;//p是累乘变量,初值设为1
int n;
printf("Please input x,n:");
scanf("%f%d",&x,&n);
while(n>0) //循环n次,每次累乘一个x到p中
{ p=p*x;
n--;
}
printf("The result is: %g\n",p);
}
输出结果:
2.输出9*9乘法表。
解:参考程序如下:
# include <stdio.h>
void main()
{ int i,j;
for(i=1;i<=9;i++) //i表示行,循环9次,输出9行
{ for(j=1;j<=i;j++) //j从1到i,即内循环执行i次,即输出i个等式printf("%d*%d=%d ",i,j,i*j);
printf("\n"); //输出i个等式后,就换行
}
}运行结果:。