C程序设计
南京师范大学
地图学与地理信息系统 04级
专业选修课
主讲教师, 汪闽
5.2 goto 语句
5.3 while 语句
5.1 概述
5.4 do while语句
第五章 循环结构程序设计
5.5 for 语句
5.6 循环辅助语句
C语言可实现循环的语句:
?用 goto 和 if 构成循环
?while 语句
?do ~ while 语句
?for 语句
5.1 概述
?功能:无条件转移语句
?说明:
?不能用整数作标号
?标签只能出现在 goto所在函数内,且唯一
?标签只能加在可执行语句前面
?限制使用 goto语句
5.2 goto 语句
goto语句及用 goto构成循环
goto语句一般格式:
goto 语句标号 ;
….…..
标号:语句 ;
/*ch5_1.c*/
#include <stdio.h>
main()
{ int i,sum=0;
i=1;
loop,if(i<=100)
{ sum+=i;
i++;
goto loop;
}
printf("%d",sum);
}
sum=0+1
sum==1+2=3
sum=3+3=6
sum=6+4
……
sum=4950+100=5050
循环初值
循环终值循环变量增值
循环条件
循环体
例 用 if 和 goto语句构成循环
?一般形式,
while(表达式 )
循环体语句;
?执行流程,
expr
循环体
假 (0)
真 (非 0)
while
5.3 while语句
?特点:先判断表达式,后执行循环体
?说明:
?循环体有可能一次也不执行
?循环体可为任意类型语句
?下列情况,退出 while循环
?条件表达式不成立(为零)
?循环体内遇 break,return,goto
?无限循环, while(1)
循环体 ;
while语句特点和说明
用 while循环求
/*ch5_2.c*/
#include <stdio.h>
main()
{ int i,sum=0;
i=1;
while(i<=100)
{ sum=sum+i;
i++;
}
printf("%d",sum);
}
循环初值
循环终值循环变量增值
循环条件
循环体
例子
/*ch5_21.c*/
#include <stdio.h>
main()
{ int i=1;
while(i<=10)
{ printf("%d*%d=%d\n",i,i,i*i);
i++;
}
}
运行结果:
1*1=1
2*2=4
3*3=9
4*4=16
5*5=25
6*6=36
7*7=49
8*8=64
9*9=81
10*10=100
例 显示 1~10的平方
?一般形式,do
循环体语句;
while(表达式 );
?执行流程,
do
循环体
expr
假 (0)
真 (非 0) while
5.4 do~while语句
?特点:先执行循环体,后判断表达式
?说明:
?至少执行一次循环体
?do~while可转化成 while结构
expr
循环体
假 (0)
真 (非 0)
循环体
While循环
do~while语句特点和说明
?一般形式:
for([expr1] ;[ expr2] ;[ expr3])
循环体语句;
?执行流程,
expr2
循环体
假 (0)
真 (非 0)
for
expr1
expr3
5.5 for语句
for(循环变量赋初值;循环条件;循环变量增值 )
{
循环体语句;
}
说明:
?for语句中 expr1,expr2,expr3 类型任意,都可省略,但
分号;不可省
?无限循环, for(;;)
?for语句可以转换成 while结构
expr1;
while(expr2)
{
循环体语句;
expr3;
}
for语句一般应用形式
例, #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++);
}
例子
?三种循环可互相嵌套,层数不限
?外层循环可包含两个以上内循环,但不能相互交叉
?嵌套循环的执行流程
(1) while()
{ ……
while()
{ ……
}
…...
}
(2) do
{ ……
do
{ ……
}while( );
…...
}while( );
(3) while()
{ ……
do
{ ……
}while( );
…….
}
(4) for( ; ;)
{ ……
do
{ ……
}while();
……
while()
{ ……
}
…...
}
内循环
外循环
内循环
?嵌套循环的跳转
禁止:
?从外层跳入内层
?跳入同层的另一循环
?向上跳转
循环的嵌套
i<10
printf
假 (0)
真 (非 0)
i=1
j++
j=1
j<10
真 (非 0)
假 (0)
i++
for(i=1;i<10;i++)
for(j=1;j<10;j++)
printf((j==9)?"%4d\n":"%4d",i*j);
外循环
内循环
循环的嵌套(图解)
5.6 辅助控制语句
– break语句
? 功能:在循环语句和 switch语句中,终止并跳出循
环体或开关体
? 说明:
– break只能终止并跳出最近一层的结构
– break不能用于循环语句和 switch语句之外的
任何其它语句之中
… 辅助控制语句(图解 1)
expr
……
break;
……
假 (0)
真 (非 0)
while do
……
break;
…...
expr
假 (0)
真 (非 0) while
expr2
……
break;
…...
假 (0)
真 (非 0)
for
expr1
expr3
switch
expr
语句组 1
break;
语句组 2
break;
语句组 n
break;
语句组
break;
…...
const 1 const 2 const n default
case
… 辅助控制语句(图解 2)
?功能:结束本次循环,跳过 循环体 尚未执行的语
句,进行下一次是否执行循环体的判断
?仅用于循环语句中
expr
……
continue;
……
假 (0)
真 (非 0)
while
真 (非 0)
do
……
continue;
…...
expr
假 (0)
while
expr2
……
continue;
…...
假 (0)
真 (非 0)
for
expr1
expr3
continue语句
continue语句的一个实例
int i=0;int n=0;
while(i<10)
{
n++;
if(i>5) continue;
i++;
}
printf(“i=%d,n=%d\n”,i,n);
分析上述例子的运行效果 !
本章实例分析
(1) p120 习题 6.4
(2) p120 习题 6.12
(3) p120 习题 6.15