《C语言程序设计》(江宝钏著)实验四答案
4.5 实验四 循环结构程序设计 一、实验目的与要求 1. 熟练掌握用 while 语句,do-while 语句实现循环的方法。 2. 熟练掌握用 for 语句实现循环的方法。 3. 对循环语句的三种形式进行分析、比较,以掌握各种形式的共同之处与其特点。 4. 掌握循环结构的嵌套,掌握 break 语句和 continue 语句在循环体中的作用。 5. 实验 4 学时 二、实验内容 1. 程序验证题与改错题 (1)程序验证 从键盘输入一个整数,在屏幕上将其逆序数输入,例如输入 8193,输出 3918。 #includestdio.h void main() { int x,number; printf(“请输入一个整数:“); scanf(“%d“,x); do{ x=number%10; number=number/10; printf(“%d“, x); }while(number!=0); printf(“\n“); } 答: #includestdio.h void main() { int x,number; printf(“请输入一个整数:“); scanf(“%d“,number); do{ x=number%10; number=number/10; printf(“%d“, x); }while(number!=0); printf(“\n“); } 如果输入的是一个负整数,程序应该如何改? 答: #includestdio.h #includemath.h void main() { int x,number; printf(“请输入一个整数:“); scanf(“%d“,number); if(number0) { printf(“-“); number=fabs(number); } do{ x=number%10; number=number/10; printf(“%d“, x); }while(number!=0); printf(“\n“); } (2)程序改错 计算表达式 1+2!+3!+…10!的值,改正下面程序中的多处错误。 源程序(有错误的程序) #includestdi0.h void main(void) { int sum1,sum2, i,j; for(i=1;i10;i++) for(j=1,j=i,i++) sum1*=j; sum1+=sum2; printf(“%d “,sum1); } 答: #includestdio.h void main() { int sum1=1,sum2=0,i,j; for(i=1;i10;i++) { for(j=1;j=i;j++) sum1*=j; sum2+=sum1; } printf(“%d“,sum2); } 3.一般编程题 编程题 1 用三种循环结构(while 语句、do-while 语句、for 语句) ,求 1000 以内奇数的和。 答: #includestdio.h void main() { int n=1000,i=1,j=1,k,sum1=0,sum2=0,sum3=0; while(i=n) { sum1+=i; i++; i++; } printf(“while 语句求得奇数和为 :%d\n“,sum1); do{ sum2+=j; j++; j++; }while(j=n); printf(“do-while 语句求得奇数和为 :%d\n“,sum2); for(k=1;k=n;k++) { sum3+=k; k++; } printf(“for 语句求得奇数和为 :%d\n“,sum3); } 编程题 2 输入一个正整数 n,计算 5 1 3 1 1 的前 n 项之和,输出时保留 6 位小数。 输入输出示例1: Enter n:5 sum = 1.787302 输入输出示例2: Enter n:23 sum = 2.549541 答: #includestdio.h void main() { int n,i=1; double a,sum1=0; printf(“Enter n:“); scanf(“%d“,n); while(i=n) { a=(2*i-1); sum1+=1/a; i++; } printf(“sum=%lf\n“,sum1); } 编程题 3 编写程序求 a+aa+aaa+……+aa……a,a 是一个数字,有 n 个 a,实际的 n 和 a 值由键盘 输入,输出格式如下示例(此时 a 是 3,n 是 5) 。 3+33+333+3333+33333=37035 提示:将 a 乘上 10 倍并加上 a,变成 aa,再将 aa 乘上 10 倍并加上 a,变成 aaa,依次 类推,在变化的同时将 a,aa,aaa 进行累加 答: #includestdio.h #includemath.h void main() { int a,n,i,sum2=0,sum1=0; scanf(“%d %d“,a,n); for(i=0;in-1;i++) { sum1+=a*(int)pow(10,i); sum2+=sum1; printf(“%d+“,sum1); } sum1+=a*(int)pow(10,i); sum2+=sum1; printf(“%d=“,sum1); printf(“%d\n“,sum2); }编程题 4 统计从键盘输入的一行字符中的英文字母的个数。 答: #includestdio.h void main() { char ch; int i=0; while((ch=getchar())!= \n ) { if(ch= a ch= z ||ch= A ch= Z ) i++; } printf(“有%d 个英文字母\n“,i); } 4.较难编程题 编程题 1 输出 1-999 之间的所有同构数。 (同构数:一个数出现在它的平方数的右端,这个数就 称为同构数,如 5 出现在 25 的右端,5 是同构数,25 出现在 625 右端,25 也是同构数。 答: #includestdio.h #includemath.h void main() { int n=1000,k=100,m=10,i,a,b; for(i=10;in;i++) { if(i==k) m=k; a=i%m; b=(int)pow(a,2); if(b==i) printf(“%d “,i); } printf(“\n“); } 编程题 2 如下程序利用 c 语言的数学函数库,求解 sinx 的近似值, 根据高等数学的公式,sinx =x-x3/3!+x5/5!-.(-1)k-1*x2k-1/(2k-1)!+. ,直到最后一项的绝对值小于 1e-7 为止。请阅读此程 序, 并根据 cosx =1-x2/2!+x4/4!-.(-1)k*x2k/(2k)!+., 实现计算 cosx 的程序代码。 (exph4_1.cpp) 答: #includestdio.h #includemath.h void main() { d