第06章 循环控制

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

break语句
例3 求100~200间的全部素数并打印
for(n=101; n<=199; n++) { k= sqrt( n ); for(i=2; i<=k; i++) if(n%i==0) break; if(i>k) printf(“%d \n”,n); }
continue语句
例3 从键盘输入10个数,打印其中能
for(s=0,i=1;i<=100;i++) s=0;
不推荐
例题2
求10!
s=1;
for(i=1; i<=10; i++)
递增
s=s*i; s=1;
for(i=10; i>=1; i--)
递减
s=s*i;
· ·+ n! 例题3 求1 + 2! + 3! + ·
main( ) { float s, t; int i, n; printf(“Input n:”); scanf(“%d”, &n);
先判断,后执行 可能一次都不执 行循环体
当表达式为真
先执行,后判断 至少执行一次循 环体
循环体
直到表达式为假
循环体
例题1
1+ 1 + 1 +· · ·+ 1
3 5 99
float n, s; n=1.0; s=0.0; while (n<=99.0) { s=s+1.0/n; n=n+2.0; }
超过100,则停止。
int r; float s; for(r=1; r<=10; r++) { s=3.14*r*r; if(s>100) goto L; break; } L: printf(“s=%f \n”,s);
break语句
用途小结
用于switch语句:
跳出switch结构余下的部分
例题4 —— Fibonacci数列
F1=1, F2=1, Fn = Fn-1 + Fn-2 (n≥3)
1 ↓ 1 ↓ 2 ↓
F1 + F2 → F
F1 = F2
F1 + F2 → F
↑ 1 ↑ 2
F2 = F
F = F1 + F 2
↑ 3
例题4 —— Fibonacci数列
long int F1, F2, F; F1=1; F2=1; F=F1+F2; printf(“1, 1, 2, ”); for(i=4; i<=20; i++) { F1=F2; F2=F; F=F1+F2; printf(“ %ld ”,F); }
(x+1)*2→x
猴子吃桃问题
main( ) { int day, x=1;
for(day=9; day>=1; day--) x=(x+1)*2; }
猴子吃桃问题
main( ) main( ) { int x=1, day=9; { int x=1, day=0; while(day>=1) while(day<=8) { x=(x+1)*2; { x=(x+1)*2; day--; day++; } } printf(“x=%d”,x); printf(“x=%d”,x); } }
合并
循环的嵌套
例题3
1 + 2! + 3! + · · ·+ 20! 改进 m=1; sum=0; n=1; while (m<=20) n!=1*2*3*· · · * n { n=n*m; sum=sum+n; n!=n*(n-1)! m++; }
for语句
一般的格式:
for( 表达式1; 表达式2; 表达式3 ) { 循环体 }
“循环”例题
译密码。为使电文保密,往往按一定
规律将其转换成密码。将字母A变成E,
a变成e,W变成A,X变成B,Y变成C,
Z变成D。非字母字符不变。如
“China!”转换成为“Glmre!”
译密码
分析:
A B C D E · · ·W X Y Z ? ? · · ·a b c · · ·z old + 4 → new new -26 → new one
在while或for结构中使用最终值或使用 运算符<=有助于避免“丢一错误”
例题4
有一对兔子,从出生后第3个月起每个
月都生一对兔子。小兔子长到第2个月 后每个月又生一对兔子。假设所有兔子 都不死,问每个月的兔子总数为多少?
1 1 2 3 5 8 13 ···
递推数列 Fibonacci数列(菲布拉系数)
例题3
1 + 2! + 3! + · · ·+20!
求 m! 求和
n=1; s=1; while (n<=m) { s=s*n; n++; }
m=1; sum=0; while (m<=20) { sum=sum+m! m++; }
例题3
m=1; sum=0; while (m<=20) { n=1; s=1; while (n<=m) { s=s*n; n++; } sum=sum+s; m++; }
被3整除的数
for(i=1; i<=10; i++) L: { scanf(“%d”,&n); if(n%3 !=0) goto L; continue; printf(“%d \n”,n); }
continue语句
用途小结
用于循环体:
提前结束本次循环,并继续执
行下一次循环
“循环”例题
猴子吃桃问题。猴子第一天摘下若干个
第七章
数组
例题4 —— Fibonacci数列
long int F1=1, F2=0, F; for(i=1; i<=20; i++) { F=F1+F2; F1=F2; F2=F; printf(“ %ld ”,F); if(i%4==0) printf(“\n”); }
break语句
例1 计算半径1~10的圆面积,若面积
死循环 Ctrl + Break
例题1
求1 + 2 + 3 + · · ·+ 100
s=0; { s=s+i; }
{ s=s+i; }
s=0; i=1; s=s+i; for(i=1;i<=100;) { s=s+i; i++; }
for(i=1;i<=100;i++) for(; i<=100;i++)
桃子,当即吃了一半,还不过瘾,又多
吃了一个。第二天早上又将剩下的桃子
吃掉一半,又多吃了一个。以后每天早
上都吃了前一天剩下的一半零一个。到
第10天早上想再吃时,就只剩一个桃子
了。求第一天共摘了多少桃子?
猴子吃桃问题
分析:
天 10 9 8 ··· 1
个数 x=1 (x+1)*2→x (x+1)*2→x
初值(表达式)
判断 / 条件
增(减)量
for语句
执行过程
语句
非0
for ( 表1; 表2; 表3 ) { 循环体 } 语句
为0
for语句
语句 表达式1 表达式2
N Y
执行过程
循环体
表达式3
语句
for语句
灵活的格式:
for( 表达式1 ; 表达式2 ; 表达式3 ) { 循环体 } for( ; ; ) ;
用于循环体: 及早地跳出循环
breaBiblioteka Baidu语句
例2 判断一个数是否是素数并打印 #include <math.h> main() { int n, k, i; scanf(“%d”,&n); k= sqrt( n ); for(i=2; i<=k; i++) if(n%i==0) break; if(i>k) printf(“%d是素数\n”,n); }
goto语句
main( ) { int i=1, s=0; L: s=s+i; i++; if (i>=1) goto L; printf(“s=%d\n”,s); }
while语句——当型循环
格式:
while (表达式)
{ 循环体 }
语句
N
while ( i<=100 ) { s=s+i; i++; } printf(“s=%d\n”,s);
表达式
Y
循环体
语句
do-while语句——直到型循环
格式:
do { 循环体 } while (表达式) ;
语句
循环体
Y
do
{ s=s+i; i++; } while ( i<=100 ); printf(“s=%d\n”,s);
表达式
N
语句
比较while和do-while
while do-while
计数器控制的循环需要:
计数器的名字和初始值 每次循环中用来修改计数器的±值
测试技术及最终值的条件
goto语句
开始
i←1 s←0 s←s+i i←i+1
i>100
Y N
结束
main() { int i=1, s=0; L: s=s+i; i++; if (i<=100) goto L; printf(“s=%d\n”,s); }
float s=0.0; int n=1; while (n<=99) { s=s+1.0/n; n=n+2; }
例题2
1- 1 + 1 - 1 + 1 · · ·- 1
2 3 4 5 100
float s=0.0; int n=1, t=1; while (n<=100) { s=s+t*(1.0/n); t=-t; n++; }
译密码
#include <stdio.h>
main() { char c; while( ( c=getchar() ) !=„\n‟ ) { if( (c>=„a‟ && c<=„z‟) || (c>=„A‟ && c<=„Z‟) ) { c=c+4; if( c>‟Z‟ && c<=„Z‟+4 || c>‟z‟) c=c-26; } printf(“%c”,c); }
t=1; s=0; for(i=1; i<=n; i++) { t=t*i; s=s+i; }
printf(“1+2!+3!+ · · ·+%d!=%f”, n, s);
}
丢一错误(off-by-one error)
求10!
使用不正确的关 系运算符或使用 s=1; for(i=1;i < <= 10;i++) 的循环计数器最 s=s*i; 终值不正确
第六章
循环控制
循环概述
循环是在循环条件仍然为真时计算
机反复执行的一组指令
分类:
计数器控制的循环,定数循环 (definite repetition) 标记控制的循环,不定数循环 (infinite repetition)
循环概述
使用标记值控制循环的情况:
事先不知道准确的循环次数 循环体中包含每次循环都要获取数据 的语句
相关文档
最新文档