Upload
camden-wright
View
49
Download
4
Embed Size (px)
DESCRIPTION
第六章 循环控制. 循环型程序设计. 辅助控制语句. 程序举例. 概述 C 语言可实现循环的语句: 用 goto 和 if 构成循环 while 语句 do ~ while 语句 for 语句. 6.1 循环型程序设计. goto 语句及用 goto 构成循环 goto 语句一般格式:. goto 语句标号 ; ….….. 标号:语句 ;. 功能:无条件转移语句 说明 ( 语句标号 ) : 不能用整数作标号; 只能出现在 goto 所在函数内,且唯一; 只能加在可执行语句前面; 限制使用 goto 语句; - PowerPoint PPT Presentation
Citation preview
第 6 章 循环结构
循环型程序设计
辅助控制语句
第六章 循环控制
程序举例
第 6 章 循环结构
– 概述C 语言可实现循环的语句:
用 goto 和 if 构成循环while 语句do ~ while 语句for 语句
§6.1 循环型程序设计
第 6 章 循环结构
功能:无条件转移语句说明 (语句标号 ):
不能用整数作标号;只能出现在 goto 所在函数内 ,且唯一;只能加在可执行语句前面;限制使用 goto 语句;
(1) 与 if 语句一起构成循环结构。 (2) 从循环体中跳转到循环体外。
goto 语句及用 goto 构成循环•goto 语句一般格式:
goto 语句标号; ….…..标号:语句;
第 6 章 循环结构
goto 可以跳过若干个末被执行的语句去执行
goto 也可以跳过若干个已被执行的语句去重复执行某些语句
第 6 章 循环结构
例 用 if 和 goto 语句构成循环,求
#include <stdio.h>main(){ int i,sum=0; i=1;loop: if(i<=100) { sum+=i;
i++; goto loop;
} printf("%d",sum);}
sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050
循环初值
循环终值循环变量增值
循环条件
循环体
第 6 章 循环结构
while 语句一般形式:
while( 表达式 ) 循环体语句;
执行流程:
expr
循环体
假 (0)
真 ( 非 0)
while
第 6 章 循环结构
说明:循环体有可能一次也不执行;循环体可为任意类型语句;循环体如果包含一个以上的语句,应该用 {}:下列情况,退出 while 循环;
条件表达式不成立(为零);循环体内遇 break,return,goto;
循环体中一般有使循环趋向结束的语句,也有无限循环, 如 while(1) 循环体 ;
特点:先判断表达式,后执行循环体
第 6 章 循环结构
例 用 while 循环求
#include <stdio.h>main(){ int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf("%d",sum);}
循环初值
循环终值循环变量增值
循环条件
循环体
第 6 章 循环结构
例 显示 1~10 的平方
#include <stdio.h>main(){ int i=1; while(i<=10) { printf("%d*%d=%d\n",i,i,i*i); i++; }}
运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100
第 6 章 循环结构
do~while 语句一般形式:
do 循环体语句; while( 表达式 );
执行流程: do
循环体
expr
假 (0)
真 ( 非 0)while
第 6 章 循环结构
特点:先执行循环体,后判断表达式说明:
至少执行一次循环体do~while 可转化成 while 结构
expr
循环体
假 (0)
真 ( 非 0)
循环体While 循环
第 6 章 循环结构
例 用 do~while 循环求
#include <stdio.h>main(){ int i,sum=0; i=1; do { sum+=i;
i++; }while(i<=100); printf("%d",sum);}
第 6 章 循环结构 while 和 do~while 比较
#include <stdio.h>main(){ int i,sum=0; scanf("%d",&i); do { sum+=i;
i++; }while(i<=10); printf(“sum=%d",sum);}
#include <stdio.h>main(){ int i,sum=0; scanf("%d",&i); while(i<=10) { sum+=i;
i++; } printf(" sum= %d",sum);}
运行结果: 1 sum= 55
运行结果: 1 sum= 55运行结果: 11 sum=0
运行结果: 11 sum= 11
结论:当 while 后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,两者结果不相同。
第 6 章 循环结构 for 语句
一般形式 for([expr1] ;[ expr2] ;[ expr3]) 循环体语句;
执行流程:
expr2
循环体
假 (0)
真 ( 非 0)
for
expr1
expr3
第 6 章 循环结构 for 语句一般应用形式:
for( 循环变量赋初值;循环条件;循环变量增值 ){
循环体语句;}
说明:for 语句中 expr1, expr2 ,expr3 类型任意,都可省略,
但他们之间分号;不可省无限循环 : for(;;)for 语句可以转换成 while 结构
expr1;while(expr2){
循环体语句;expr3;
}
例 用 for 循环求
#include <stdio.h>main(){ int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf("%d",sum);}
第 6 章 循环结构
例: #include<stdio.h> main( ) { int i=0; for(i=0;i<10;i++) putchar(‘a’+i); }
运行结果均为: abcdefghij
例: #include<stdio.h> main( ) { int i=0; for(;i<10;i++) putchar(‘a’+i); }
例: #include<stdio.h> main( ) { int i=0; for(;i<10;) putchar(‘a’+(i++)); }
例: #include<stdio.h> main( ) { int i=0; for(;i<10;putchar(‘a’+i),i++) ; }
第 6 章 循环结构
#include<stdio.h>main(){ int i,j,k; for(i=0,j=100;i<=j;i++,j--) { k=i+j;
printf("%d+%d=%d\n",i,j,k); }}
第 6 章 循环结构
#include<stdio.h>main(){ char c; for(;(c=getchar())!='\n';) printf("%c ",c);}
#include <stdio.h>main(){ int i,c; for(i=0;(c=getchar())!='\n';i+=3)
printf("%c ",i+c);}
输出字符,以回车换行结束。
第 6 章 循环结构 循环的嵌套
三种循环可互相嵌套 ,层数不限外层循环可包含两个以上内循环 ,但不能相互交叉嵌套循环的执行流程
(1) while() { …… while() { …… } …... }
(2) do { …… do { …… }while( ); …... }while( );
(3) while() { …… do { …… }while( ); ……. }
(4) for( ; ;) { …… do { …… }while(); …… while() { …… } …...}
内循环
外循环
内循环嵌套循环的跳转禁止:
从外层跳入内层跳入同层的另一循环
第 6 章 循环结构 例 循环嵌套,输出九九表
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
9 18 27 36 45 54 63 72 81
……………..
i
j#include <stdio.h>main(){ int i,j; for(i=1;i<10;i++) printf("%4d",i); printf("\n---------------------------------------\n"); for(i=1;i<10;i++) for(j=1;j<10;j++)
printf((j= =9)?"%4d\n":"%4d",i*j);}
第 6 章 循环结构 for(i=1;i<10;i++) for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j); i<10
printf
假 (0)
真 ( 非 0)
i=1
j++
j=1
j<10真 ( 非 0
)
假 (0)
i++
外循环
内循环
返回
第 6 章 循环结构
§ 6.2 辅助控制语句– break 语句
• 功能:在循环语句和 switch 语句中 , 终止并跳出循环体,即提前结束循环,接着执行循环下面的语句。
• 说明:– break 只能终止并跳出最近一层的结构– break 不能用于循环语句和 switch 语句之外的任
何其它语句之中。
第 6 章 循环结构
expr
……
break;
……
假 (0)
真 ( 非 0)
whiledo
……
break;
…...
expr
假 (0)
真 ( 非 0)while
第 6 章 循环结构
expr2
……
break;
…...
假 (0)
真 ( 非 0)
for
expr1
expr3
switch
expr
语句组 1
break;
语句组 2
break;
语句组 n
break;
语句组
break;
…...
const 1 const 2 const n default
case
第 6 章 循环结构
例 break 举例:输出圆面积,面积大于 100 时停止
#define PI 3.14159main(){ int r; float area; for(r=1;r<=10;r++) { area=PI*r*r; if(area>100)
break; printf("r=%d,area=%.2f\n",r,area); }}
第 6 章 循环结构 continue 语句
功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中
expr
……
continue;
……
假 (0)
真 ( 非 0)
while
真 ( 非 0)
do
……
continue;
…...
expr
假 (0)
while
expr2
……
continue;
…...
假 (0)
真 ( 非 0)
for
expr1
expr3
第 6 章 循环结构
例:输出 100 ~ 200 之间的不能被 3 整除的数
#include <stdio.h>main(){ int n; for(n=100;n<=200;n++) { if(n%3= =0) continue; printf("%d ",n); }}
返回
第 6 章 循环结构 §6.3 程序举例
t=1,pi=0,n=1.0,s=1
当 |t|1e-6
pi=pi+t
n=n+2
s=-s
t=s/n
pi=pi*4
输出 pi
分子: 1 , -1 , 1 , -1…分母: 1 , 3 , 5 , 7 , ...
While((fabs(t))>1e-6) { pi=pi+t; n=n+2; /n 为分母 s=-s; /s 为分子 t=s/n; }
第 6 章 循环结构
例 求 Fibonacci 数列: 1 , 1 , 2 , 3 , 5 , 8 ,……的前 40 个数
f1=1,f2=1
for i=1 to 20
输出 f1,f2
f1=f1+f2f2=f2+f1
15
34233
15971094675025
5142293524578
24157817
18
55377
258417711
121393832040
570288739088169
21389
6104181
28657196418
13462699227465
63245986
321
144987
676546368
3178112178309
14930352102334155
for(i=1;i<=20;i++) { printf(“%12ld %12ld”,f1,f2); if(i%2= =0) printf(“\n”); f1=f1+f2; f2=f2+f1;}
第 6 章 循环结构
例:译密码(取与其相隔三个字母的那个字母)例如: Hello,world!译成密码: Lipps,asvph!
返回
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); }