第六章 循环结构程序设计
运行结果:奇数之和为250000 偶数之和为249500 思考:在此题中为何选用for循环进行控制?用while循环或dowhile循环是否也可以? 6-7 计算π,计算公式π/4=1-1/3+1/5-1/7+…直到最后一项的 绝对值小于为止。 解:#include<stdio.h> #include<math.h> void main() { int s=1; float n=1.0,t=1,pi=0; while(t>1e-6) { pi=pi+t*s; n=n+2; s=-s; t=1/n; } pi=pi*4; printf("pi=%f\n",pi); } 运行结果:pi=3.141594 思考:在此题中为何不选用for循环进行控制,而选用while 循环呢? 6-8编写程序,求任意两个整数之间的所有素数。 解:#include<stdio.h> #include"math.h" void main() { int n,m,i,j,k,p=0; printf("请输入两个整数m,n(m<n):");
scanf("%d,%d",&m,&n); for(i=m;i<=n;i++); { k=sqrt(n); for(j=2;j<=k;j++) if(i%j==0) break; if(j>=k+1) {printf("%d",i);p=p+1;} if(p%10==0)printf("\n"); } printf("\n"); } 思考:此题中若输入的两个整数m,n分别为13,100时,13这 个素数是否被输出,为什么? 6-9 编写程序,求任意两个整数之间的所有能被3、4、5同 时整除的数。 解:#include<stdio.h> void main() { int n,m,i; printf("请输入两个整数m,n(m<n):"); scanf("%d,%d",&m,&n); for(i=m;i<n;i++)
{ char c; int d=0,s=0; printf("请输入字符(当输入时结束):"); while ((c=getchar())!='$') { if(c>='0'&&c<='9')s++; if(c==' ') d++ ; } printf("数字字符出现的次数为%d\n",s); printf("空格字符出现的次数为%d\n",d); } 若输入字符:12 345 abcd 678 xyz$ 则运行结果为:数字字符出现的次数为8 空格字符出现的次数为4 思考:此题中的循环次数是如何控制的?有何特点? 6-6编写程序,求1000以内的奇数之和及偶数之和。 解:#include<stdio.h> void main() {long n=0,m=0; int i; for(i=1;i<1000;i++) {if(i%2==0) n=n+i; else m=m+i; } printf("奇数之和为%ld\n",m); printf("偶数之和为%ld\n",n); }
{
int i, a=0; for(i=1;i<=5;i++) {do {i++; a++; } while(i<3); } i++; printf("a=%d,i=%d",a,i);
} 答:a=3,i=7 思考:在for循环中嵌套着do-while循环,那么do-while循环中 对i的修改会对for循环产生影响吗? 6-4编写程序,用1000个单词”computer”填充屏幕,每行60个 . 解:#include<stdio.h> void main() { int i; for(i=1;i<=1000;i++) { printf("computer."); if(i%60==0)printf("\n"); } } 思考:在for循环中,”if(i%60==0)printf(“\n”);”语句的 作用是什么?没有此语句将会是什么状况? 6-5输入一行字符(以$结束),统计其中的数字字符、空格字符 出现的次数。 解: #include<stdio.h> void main()
注:1000以内的完数有6=1+2+3,28=1+2+4+7+14,496=1+2+4+8+16+31+62+124+248.
6-12 编写程序,以上三角形式输出九九乘法表。 解:#include<stdio.h> void main() { int j, i; printf("%4c", '*'); for(i=1;i<=9;i++) { for(j=1;j<=9;j++) printf("%4d",i*j); printf("\n"); }
if((i%3==0)&&(i%4==0)&&(i%5==0)) //或写为if(i%60==0)
printf("%d\n",i); 思考:如果要分析输出,每行输出5个数,应该怎么修改程 序? 6-10 编写程序,求1000至9999之间的回文数.回文数是指正读 与反读都一样的数,如1221ห้องสมุดไป่ตู้ 解:#include<stdio.h> void main()
t=a ; a=a+b ; b=t ; } printf("sum=%f\n",sum); } 运行结果 : sum = 32.660259 思考 :此题中没有输出各项的值,请问如何实现这一要求? 6-17 编写程序,求满足下式的数字A,B,C的值 。 A B C + B C C  ̄ ̄ ̄ ̄ ̄ 2 3 4 解 : #include<stdio.h> void main() { int a,b,c,e,i,j,k,t,bw,jw,jw1,jw2; printf("请输入计算式的期望结果值(1xxx):"); scanf("%d",&e); c=e%10; e/=10 ; b=e%10; e/=10 ; a=e%10; e/=10 ; for(i=0;i<10;i++) { t = i+i ; bw=t%10 ;jw1=t/10 ; if(bw==c) {
printf("请输入整数n:"); scanf("%d", &n); for(i=1;i<=n;i++) { t=t*i; sum=sum+t ; } printf("总和=%ld\n",sum); } 6-14 编写程序,求1!+2!+…+n!小于1000的项数n。 解:#include <stdio.h> void main() { int sum=0,t=1; int n=0; do { n=n+1; t=t*n; sum=sum+t; }while(sum<1000); printf(“项数为%d\n”,n-1); } 运行结果:项数为6 思考:此题为何要选用do-while循环结构?最后输出变量的值 为何要减1?另请改为while循环实现。 6-15 某门课程有n个同学参加考试,编写程序计算这门课程的最 高分、最低分及平均分。 解 :#include<stdio.h> void main() {
{ int n, i,j; for(i=1000;i<=9999;i=i+1000) { for(j=0;j<=9;j++) {n=i+j*100+j*10+i/1000; printf("%d",n); } printf("\n"); } } 运行结果:1001 1111 1221 1331 1441 1551 1661 1771 1881 1991 2002 2112 2222 2332 2442 2552 2662 2772 2882 2992 3003 3113 3223 3333 3443 3553 3663 3773 3883 3993 4004 4114 4224 4334 4444 4554 4664 4774 4884 4994 5005 5115 5225 5335 5445 5555 5665 5775 5885 5995 6006 6116 6226 6336 6446 6556 6666 6776 6886 6996 7007 7117 7227 7337 7447 7557 7667 7777 7887 7997 8008 8118 8228 8338 8448 8558 8668 8888 8888 8998 9009 9119 9229 9339 9449 9559 9669 9999 9999 9999 思考:在此题中,内、外循环各起什么作用?是否可以交换? 如果用if语句设计程序,数据的各位数(个位、十位、百位、千
6-1.比较while语句、do–while语句和for语句的异同。 答:(1)while语句、do-while语句用于条件循环,for语句用 于计数循环。 (2)while语句、for语句是先判断循环条件,后执行循环 体,如果循环条件一开始就不成立,则循环体一次也不被执行;而 do-while语句是是先执行循环体,后判断循环条件,所以循环体至 少被执行一次。 (3)知道循环的次数可选用for语句实现循环,不知道循环的次 数可选用while语句或do-while语句实现循环. (4)一般而言,三种循环语句可等价实现. 6-2 仔细阅读下面的程序,指出程序的运行结果. #include<stdio.h> void main() { int i; for(i=0;++i;i<5) { if(i==3) {printf("%d\n",++i); break; } printf("%d\n",++i); } } 答:2 4 思考:语句“for(“i=0;++i;i<5”)在编译时为何会给出语法警 告错误?当将其改为“for(i=0;i<5;++i)”时,运行结果又将如何? 6-3 仔细阅读下面的语的程序,指出程序的运行结果。 #include"stdio.h" void main()