循环结构

文档属性

名称 循环结构
格式 zip
文件大小 72.7KB
资源类型 教案
版本资源 通用版
科目 信息技术(信息科技)
更新时间 2010-09-16 19:28:00

图片预览

文档简介

(共32张PPT)
第4章 循环结构
本章要点:
4.1 while语句
4.2 do-while语句
4.3 for语句
4.4 循环结构的嵌套
4.5 break语句和continue语句
4.1.1 while循环的一般形式
由while语句构成的循环也称“当”循环,While语句的一般形式为:
While(表达式)
  循环语句;
以下是几点说明:
1.while是C语言的关键字。
2.while后的表达式,可以是C语言中任意合法的表达式,通常为关系表达式或逻辑表达式,但也可以是其他运算表达式。当表达式的值为零时,表示条件为假;非零时,表示条件为真。
3.循环体可以是一条简单可执行语句,也可以是复合语句。
4.如果第一次计算时表达式的值就为0,则循环语句一次也不被执行,流程直接跳过While语句,执行下一条语句。
 ※重点提示:while型循环语句中循环体的执行次数可以从0到无穷。若第一次计算表达式的值为0,则循环体执行0次;若表达式恒为真,则陷入死循环。
4.1.2 while循环的执行过程
while循环的执行过程是:
计算while后表达式的值,
当值为非零时,执行循环体中的语句;
当值为零时,退出while循环。
例如:计算1+2+3+…+100。
main()
{ int i,sum=0;
i=1;
while(i<=100)
{
sum+=i;
i++;
}
printf("d\n",sum);}
程序运行结果为:5050
(1)循环语句中“sum+=i”相当于“sum=sum+i”,建议读者采用前一种写法,因为它不仅比后一种写法编码短,而且更能体现C语言的特色。
(2)注意,在循环体中应有使循环趋于结束的语句。
例如,本例中的“i++;”,每循环一次i的值就增加1,当i>100时,循环条件就不满足,循环到此结束。如果无此语句,则i的值一直不变,循环永不结束,这就称为“死循环”。在程序设计中,是不允许死循环出现的。
※重点提示:在循环体中应有使循环趋于结束的语句。在程序设计中,是不允许死循环出现的。
第二节 do-while语句
一、do-while语句的一般形式
do{
循环语句;
}
while(表达式);
以下是几点说明:
1.do是C语言的关键字,必须和while联合使用。
2.在while(表达式)后的分号“;”不可丢,它表示do-while语句的结束。
3.while后括号中的表达式可以是任意合法的表达式,由它来控制循环是否执行。
4.do-while之间的循环体可以是一条可执行语句也可以是由“{}”构成的符合语句。
二、 do-while循环的执行过程
  do-while语句的执行过程是:
(1)先执行一次指定的循环语句。
(2)然后判断表达式的值,若为真(非0),重复(1),否则跳出循环。
 do while语句的特点是:先执行语句,后判断表达式的值。故do While语句又称“直到型”循环结构。由于是先执行后判断,因此do while语句的循环语句至少被执行一次。
 注意:while圆括号后面有一个分号“;”,书写时不能丢。
例如:用do while循环结构来计算1+2+3+…+100。
例4.3:
main()
{ int i,n=0;
i=0;
do
{
i++;
++i;
}
while(n!=0);
printf(“%d",i);
}
※重点提示:do-while语句先执行语句,后判断表达式的值。故do-while语句又称“直到型”循环结构。由于是先执行后判断,因此do-while语句的循环语句至少被执行一次。
第三节 for语句
一、for语句的一般形式
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
  循环语句;
以下是几点说明:
1.表达式1一般为循环变量赋初值;表达式2一般为关系表达式或逻辑表达式,用于执行循环的条件判定;表达式3一般为赋值表达式或自增、自减表达式,用于修改循环变量的值。
2. for是C语言中的关键字。
3. 循环体语句如果只有一个,可以不加花括号;如果循环体语句超过一个,则必须用花括号括起来组成符合语句。
4. 圆括号内的三个表达式基本可以缺省,但是“;”不能省。循环体语句可以由一个空语句组成,表示不做任何动作。
二、for循环执行过程
for语句的执行过程是:
① 先计算表达式1的值。
② 再计算表达式2的值,若其值为真,则执行循环体一次;否则跳转第⑤步。
③ 然后计算表达式3的值。
④ 转回上面第②步。
⑤ 结束循环,执行for语句下面一个语句。
三、有关for语句的说明
(1)圆括号中的表达式1往往是对与循环有关的变量赋初值;表达式2类似于while语句中圆括号内的表达式,控制循环;表达式3通常是循环变量的自增,自减操作以保证不会进入死循环。
(2)for循环的一般形式可以改写为等价的while循环。
表达式1;
while(表达式2)
{
循环体语句;
表达式3;
}
(3)for语句的一般形式中的“表达式1”可以省略,即:
for(;表达式2;表达式3)
   循环语句;
但注意省略表达式1时,其后的分号不能省略。此时,应在for语句之前给循环变量赋初值。
(4)如果省略表达式2,即:
for(表达式1;;表达式3)
   循环语句;
则表示表达式2的值始终为真,循环将无终止地进行下去。
例如:
for(i=1;;i++)
printf("%d",i);
将无限循环输出1,2,3,4,5,6,……
(5)如果省略表达式3,即:
for(表达式1;表达式2;)
   循环语句;
此时,也将产生一个无穷循环。因此,程序设计者应另外设法保证循环能正常结束,可以将循环变量的修改部分(即表达式3)放在循环语句中控制。例如:for(i=1;i<=100;)
{ sum+=i;
i++;
}
上述for语句中没有表达式3,而是将表达式3(i++)放在循环语句中,作用相同,都能使用循环正常结束。注意表达式2后面的分号不能省略。
(6)也可以同时省略表达式1和表达式3,即:
for(;表达式2;)
   循环语句;
也即省略了循环的初值和循环变量的修改部分,此时完全等价于while语句。
(7)同时省略表达式1、表达式2和表达式3,即:
for(;;)
   循环语句;
相当于赋循环变量的初值,循环控制条件始终为真,不修改循环变量,故循环将无终止地进行下去。
(8)在for语句中,表达式1和表达式3不仅可以使用简单表达式,也可以使用逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。在逗号表达式内按自左至右求解,整个表达式的值为其中最右边的表达式的值。例如:
for(i=1;i<=100;i++,sum=sum+i)
相当于
for(i=1;i<=100;i++)
   sum=sum+i;
(9)在for语句中,表达式一般为关系表达式或逻辑表达式,但也可以是其他表达式(如字符表达式、数值表达式)。
(10)for语句的循环语句可以是空语句。
例子:for(i=1;i<=1000;i++);
注意以上语句最后的分号不能省略,它代表一个空语句。
例如:用for循环结构来计算1+2+3+…+100。
main()
{
int i,sum=0;
for(i=1;i<=100;i++)
sum+=i;
printf("%d\n",sum);
}
程序运行结果为:5050
 ※重点提示:for语句中的表达式可以部分或全部省略,但两个分号不能省略,且三个表达式均省略时,循环将会无限制执行,而形成死循环。因此,编写程序时,在for后面的一对圆括号内,应只含有能对循环进行控制的表达式,其它的操作尽量放在循环体内完成。
第四节 循环结构的嵌套
1.循环嵌套的形式
  在一个循环体内又完整地包含了另一个循环,称为循环嵌套。循环的嵌套可以是多层,但每一层循环在逻辑上必须是完整的。例如以下几种形式的二重嵌套。
2.关于循环嵌套的几点说明
(1)使用嵌套时,应注意一个循环结构应完整地嵌套在另一个循环体内,不允许循环体间交叉。例如以下循环结构是不正确的:
while()
{…
do
{…}
}
while();
(2)除了上述二重嵌套外,还可以有三重嵌套、四重嵌套等多层嵌套。
(3)嵌套的外循环和内循环的循环控制变量不得同名,但并列的内、外循环允许有同名的循环控制变量。例如以下为合法的循环结构:
for(j=1;j<=10;j++)
{ …
for(i=1;i<=10;i++)
{…}
  for(i=1;i<=10;i++)
{…}
  …
}
3.循环嵌套程序举例
利用双层for循环结构打印出9×9乘法表。
main()
{
int i,j;
for(i=1;i<10;i++)
printf("%5d",i);
printf("\n");
for(i=1;i<=46;i++)
printf("-");
printf("\n");
for(i=1;i<10;i++)
{
for(j=1;j<=9;j++)
printf("%5d",i*j);
printf("\n");
}
}
程序运行结果为:
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
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
第五节 break语句和continue语句
一、break语句
在第四章中我们介绍过,使用break语句可以使流程跳出switch语句体,在循环结构中,也可以使用break语句使流程跳出本层循环体,从而提前结束本层循环。
  break语句的一般形式为:
 break;
关于break语句有以下几点说明:
(1)break语句不能用于循环语句和switch语句之外的任何其他语句中。
(2)break语句只能用于循环体内,不能用在循环语句上。如for(i=1;i<10;break,i++)是不正确的。
(3)break语句只能跳出一层循环,即从当前循环层中跳出。如果要跳出多层循环,可使用goto语句。
例如:设计一个程序,求能同时满足除以3余1、除以5余3、除以7余5、除以9余7的最小正整数。
main()
{
int i;
for(i=1;;i++)
if(i%3= =1&&i%5= =3&&i%7= =5&&i%9= =7)
break;
printf("%d\n",i);
}
程序运行结果为:313
由于此题无法确定循环的条件和循环次数,因此应采用无限循环配以break语句的方法。
※重点提示:当break语句出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,当break语句出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环。
二、continue语句
1.continue语句的一般形式
continue语句的作用是结束本次循环,即不再执行循环体中continue语句之后的语句,而是跳转到循环的开始处,进行下一次是否执行循环的判定。
它的一般形式为:
continue;
2.关于continue语句的几点说明
(1)continue语句只是结束循环结构中的本次循环,并非跳出整个循环过程。具体说:对while和do~while语句,遇continue语句后,转向执行while之后圆括号内的条件表达式的判断;对for语句,遇continue语句后,转向执行表达式3。
(2)执行continue语句并没有使整个循环终止。
(3)continue语句与break语句有本质的区别:continue语句只是结束本次循环,而不终止整个循环的执行;而break语句的作用则是强制终止整个循环过程。
三、continue语句与break语句的区别
例如:打印出数字0~10,但跳过(即不输出)数字5。
main()
{
int i;
for(i=0;i<=10;i++)
{
if(i==5)
continue;
printf("%5d",i);
}
}
程序运行结果为:
0 1 2 3 4 6 7 8 9 10
如果在本例中将第7行的“continue;”语句,改为“break;”语句,则输出结果为:
  0 1 2 3 4
  可以清楚地看出break语句是终止整个循环过程,它与continue语句作用是截然不同的。
 ※重点提示:当break语句出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,当break语句出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环。
同课章节目录