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
南京师范大学
地图学与地理信息系统 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