第5章 循环结构程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序2: main() int i=1, s; for (s=0; i<101; i++) s+=i; printf(“sum%d\n”, s); }
程序3: main() int i=1, s=0; for (; i<101;) s+=i++; printf(“sum%d\n”, s); }
程序4: main() int i=1, s=0; for (; i<101; s+=i++); printf(“sum%d\n”, s); }
应用题3:求出100以内的所有素数 main() {int k,m; for(m=3;m<100;m=m+1); {for(k=2;k<m;k++) if (m%k==0) break; if(k==m) printf(“%d is a prime number”,m); } )
应用题4:求m,n 的最大公约数 main() {int m,n,r; m%n=r scanf(“%d%d”,&m,&n); 24 16 8 m1=m;n1=n; 16 8 0 r=m%n; while (r!=0) {m=n;n=r;r=m%n;}
题5: 用矩形法求一元函数f(x)=ln(x+1)+x/2,在区间 [1,5]上的积分近似值S,保留2位小数 方法一: main() {float a=1,b=5,x,sum=0,h.n=100,d1,d2; H=(b-a)/n; For(x=a;x<b;x+=h) {d1= log(x+1)+x/2; d2= log(x+h+1)+(x+h)/2; sum+=d1+d2;} printf(“%f\n”,sum*h/2); }
应用题10:输出图形
A ABC ABCDE ABCDEFG
程序; main() {int k1,k2; clrscr(); for(k1=1;k1<10;k1++) { for(k2=1;k2<40-k1;k2++) printf(" "); for(k2=0;k2<2*k1-1;k2++) printf("%c",65+k2); printf("\n"); } }
5.1.2 while格式 while <表达式> { <循环体>; } 例: 计算s=1+2+3+……+100 main() {int i, s=0; while (i<101) { s=s+i; i=i+1; } printf(“s=%d\n”,s);}
例: 计算s=1+2+3+……+100 main() {int i, s=0; do { s=s+i; i=i+1; } while (i<101); printf(“s=%d\n”,s);}
程序5: main() int i=100, s=0; for (; i ; i--) s+=i ; printf(“sum%d\n”, s); }
例1:求S=1+2+3+……+100 n!=1*2*3*……*n S=1+3+5……+99 S=1+1/2+1/3+……+1/100 S=1-2+3+……+(-1)nn S=1-1/2+1/3+……+(-1)n/n S=12+22+32+……+1002 S=1/12+1/22+1/32+……+1/1002 S=12-22+32-……+(-1)n 1002
应用题6:2000年人口13亿,年增长0.5%, 多少年后达到或超过20亿? main() {int n=0; float f=13,e=0.005; while (f<20) {f=f*(1+e); n=n+1;} printf(“%d\n”,n); }
应用题7: 元买百鸡。公鸡5元一只,母鸡3元一 只,小鸡1元两只。问100元买鸡多少只(穷举 法)。 main() {int cock,hen,chick; for(cock=1;cock<21;cock++) for(hen=1;hen<34;hen++) {chick=100-cock-hen; if(cock*5+hen*3+chick/2==100) printf(“%5d%5d%5d\n”,cock,hen,chick); } }
5.1.4 for() 格式 for(<表达式1>;<表达式2>;<表达式3>) { <循环体>; } 说明:1. <表达式1>决定了循环的初值, <表达式2>决定循 环的条件, <表达式3>决定循环的增量。<表达式1>在循环 中只执行一次。<表达式2>,<表达式3>在循环中每次都要执 行一次。 例:求S=1+2+3+……+100 程序1: main() { int i, s=0; for (i=1; i<101; i++) s+=i; printf(“sum%d\n”, s); }
printf(“m=%-5dn=%-5dr=%-5d\n”,m1,n1,n);
}
应用题5:求Fibonaccii(斐波那契)数列中前20项 中每一项(递推法) 0,1,1,2,4,7,13,…… a b c d 程序: 0 1 1 2 main() 1 1 2 4 {int a=0,b=1,c=1,d; 1 2 4 7 for(k=1;k<18;k++); 2 4 7 13 {d=a+b+c; printf(“%5d”,d); a=b;b=c;c=d; }
9 9 18 27 36 45 54 63 72 81
main() {int k,i,j; printf(“ “); for(k=1;k<10;k++) printf(“%5d”,k); printf(“\n\n”); for(k=1;k<10;k++) {printf(“%-5d”,k); for(j=1;j<10;j++) printf(“%-5d”,k*j); printf(“\n”);} }
应用题8:用矩形法求定积分: a (a=0, b=pi/2)

b
sin xdx
h=(b-a)/n Area1=f(x1)*h
for(x=a;x<b;x=x+h)
s=s+f(x)*h;
a b
程序: #include "math.h" main() {float a,b,x,h,s=0; scanf("%f%f",&a,&b); h=(b-a)/1000; for(x=a;x<b;x=x+h) s=s+(sin(x)+sin(x+h))*h/2; printf("area=%f\n",s); }
题12:找出1000以内的水仙花数。三位数的立方 和等于自身(13+53+33=153) 程序: main() {int a,b,c, k1,k2; for(a=0;a<10;a++) for(b=0;b<10;b++) for(c=0;c<10;c++) { k1=a*a*a+b*b*b+c*c*c; k2=a*100+b*10+c; if(k1==k2) printf(“%d\n”,k2); } }
题14: 用牛顿迭代法求 a ,a从1-10的平方根。 方程: x2-a=0,迭代式: xn+1=(xn+a/xn)/2
#include “math.h” main() =x a2 a=x {float a,x0,x1; f(x)= x2-a=0 for(a=1;a<11;a++) f’(x0)=2x0 {x1=a; f’(x0)=f(x0- 0)/(x1-x0) do xn+1=(xn+a/xn)/2 {x0=x1;x1=(x0+a/x0)/2;} while (fabs(x1-x0)>0.0001); printf(“%f\n”,x1);} }
题13:求 s=a+aa+aaa+…+aaa…a (a=2,8个a) main() {int a,n;scanf(“%d%d”,&a,&n); I k s long k=a,s=0; 1 a for(i=1;i<=n;i++) 2 aa {s+=k; 3 aaa k=k*10+a; } 8 aaa…a printf(“%ld\n”,s); }
应用题11: 用牛顿切线法求方程2x3-4x2+3x6=0在1.5附近的根。 f(x)=2x3-4x2+3x-6
f’(x0)=(f(x0)-0)/(x1-x0)
x1=x0-f(x0)/f’(x0)
x1
x0
程序: #include “math.h” main() {float x0,x1=1.5, f1,f2; do {x0=x1; f1=2*x0*x0*x0-4*x0*x0+3*x0-6; f2=6*x0*x0-8*x0+3; x1=x0-f1/f2;} while(fabs(x1-x0)>1e-3); printf(“%f”,x1); } x=2.33333
第5章 循环结构程序设计
5.1 四种循环格式 5.1.1 goto 格式 <标示符: > if <表达式> { <循环体>; goto <标示符;> } 例: 计算s=1+2+3+……+100 main() {int i, s=0; loop: if (i<101) { s=s+i; i=i+1; goto loop;} printf(“s=%d\n”,s);}
5.2 多层循环 例:分别计算 2!,3!,4!,……,10! 方法一:(双层循环) main() {int I,j; for (i=2;i<11;i++) { long int f=1; for(j=1;j<=i; j++) f=f*j; printf(“s=%ld\n”,f);} }
应用举例1: 输出九九乘法表 1 2 3 4 5 6 Байду номын сангаас 8 9 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18
S=Σk!=1+2!+3!+……+n! 直到最后一项大于1e+5 e=1+1/1!+1/2!+1/3!+……+1/n! 直到最后一项小于 0.00001 s=1-1/2!+1/3!+……+(-)(n+1)/n! 最后一项小于1e-5 s=1+x+x/2!+x/3!+……+x/n! 最后一项小于1e-5 s=1-x+x/2!-x/3!+…+(-)(n+1)x/n! 最后一项小于1e-5 π/4=1-1/3+1/5-1/7+…… 求π,最后一项小于1e-5 ex=1+x/1!+x2/2!+x3/3!+……+xn/n! 直到最后一项小 于0.00001
应用举例2:判断m是否是素数。 方法一、 main() m=17 {int k,m; 被2~16除 scanf(“%d”,&m); 除不尽为素数 for(k=2;k<m;k++) if (m%k==0) break; if(k==m) printf(“%d is a prime number”,m); }
作业: 教材 实习报告
春天、阳光、空气、鲜花、明天
题4: 用矩形法求一元函数f(x)=ln(x+1)+x/2,在区间 [1,5]上的积分近似值S,保留2位小数 main() {float a=1,b=5,x,sum=0,h.n=100; H=(b-a)/n; For(x=a;x<b;x+=h) sum+=log(x+1)+x/2; printf(“%f\n”,sum*h); }
5.1.5 可以用break命令中断一层for循环. 例: 计算s=1+3+5+……+n直到最后一项大于99止. main() {int i, s=0; for (i=1; ;i=i+2) { if (i>99) break; s=s+i; } printf(“s=%d\n”,s); }
6. 可以用continue命令中断当前一次循环。 例: 计算s=1=3+5+……+99 main() {int i, s=0; for (i=1;i<100;i++) { if (i%2==0) continue; s=s+i; } printf(“s=%d\n”,s);}
应用题9:根据以下算术式,求A、B、C、D ABCD -C D C _________ ABC
程序: main() {int a,b,c,d,k1,k2; for(a=1;a<10;a++) for(b=0;b<10;b++) for(c=1;c<10;c++) for(d=0;d<10;d++) { k1=a*1000+b*100+c*10+d; k2=c*100+d*10+c+a*100+b*10+c; if(k1==k2) printf(“%d%d%d%d”,a,b,c,d);} }
相关文档
最新文档