1、本本 章章 内内 容容 循环的概念循环的概念 forfor循环循环 whilewhile循环循环 do-whiledo-while循环循环 breakbreak语句语句 continuecontinue语句语句 多重循环多重循环 go togo to语句语句 假假(0)表达式为真吗表达式为真吗?语句语句真真(非非0)就是重复地执行某些语句的过程。就是重复地执行某些语句的过程。循环:循环:将上式用将上式用C C语言表示。语言表示。s=0;s=0;for(i=1;i=3;)for(i=1;i=3;)s=s+i;s=s+i;i+;i+;重复执行!结果:s=1 结果:s=3最后结果:s=6forfor
2、循环通过循环通过forfor语句实现。语句实现。forfor语句的一般格式为:语句的一般格式为:for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3)语句语句说明说明:表达式表达式1 1用于循环赋初始值,它只能执行一次;用于循环赋初始值,它只能执行一次;表达式表达式2 2是循环条件;是循环条件;表达式表达式3 3用于对循环条件的修改,以使循环能于用于对循环条件的修改,以使循环能于 结束。结束。#include“stdio.h”#include“stdio.h”void main()void main()int s,i;int s,i;s=0;s=0;for(i=1;i
3、=100;i+)for(i=1;i=100;i+)s=s+i;s=s+i;printf(sum=%d,s);printf(sum=%d,s);循环体!结果:sum=5050 (1)(1)可以把表达式可以把表达式1 1改为表达式语句,改为表达式语句,然后移出然后移出forfor语句,放到语句,放到forfor语句之前。语句之前。表达式表达式1 1因此被缺省,但其后的分号不因此被缺省,但其后的分号不能缺省。能缺省。例如:例如:s=0,i=1;s=0,i=1;for(;i=100;i+)for(;i=100;i+)s=s+i;s=s+i;(2)(2)表达式表达式2 2如果缺省如果缺省(但分号不能缺省
4、但分号不能缺省),就相当于表达式就相当于表达式2 2永远为非永远为非0(“0(“真真”),从而,从而循环无终止地进行下去。循环无终止地进行下去。例如:例如:s=0;s=0;for(i=1;i+)for(i=1;i+)s=s+i;s=s+i;(3)(3)可以把表达式可以把表达式3 3改为表达式语句移到改为表达式语句移到循环体的尾部,作为循环体的一部分。循环体的尾部,作为循环体的一部分。例如:例如:s=0;s=0;for(i=1;i=100 for(i=1;i=100;)s=s+i;s=s+i;i+i+;(4)4)可以把与循环控制变量无关的循环可以把与循环控制变量无关的循环初始化操作放入表达式初始
5、化操作放入表达式1 1中,也可以把循中,也可以把循 环体中与循环变量无关的操作放到表达式环体中与循环变量无关的操作放到表达式3 3中。中。例如:例如:for(s=0,i=1;i=100;i+)for(s=0,i=1;i=100;i+)s=s+i;s=s+i;其中,其中,“s=0,i=1”s=0,i=1”是逗号表达式。是逗号表达式。(5)(5)如果循环体中没有任何语句,则应该加如果循环体中没有任何语句,则应该加一个分号。一个分号。例如:例如:s=0;s=0;for(i=1;i=100;s=s+i,i+);for(i=1;i=100;s=s+i,i+);此分号不能少此分号不能少!whilewhil
6、e循环通过循环通过whilewhile语句实现。语句实现。whilewhile语句的一般格式为:语句的一般格式为:while(while(表达式表达式)语句语句whilewhile语句的执行过程为:语句的执行过程为:(1)(1)计算并判断表达式的值。若值为计算并判断表达式的值。若值为0 0,则结束循,则结束循环,退出环,退出whilewhile语句;若值为非语句;若值为非0 0,则执行循,则执行循 环体。环体。(2)(2)转步骤转步骤(1)(1)。#include“stdio.h”#include“stdio.h”void main()void main()int i=3;int i=3;wh
7、ile(i-)while(i-)printf(“%dn”,i);printf(“%dn”,i);#include“stdio.h”#include“stdio.h”void main()void main()int s,i;int s,i;s=0;i=1;s=0;i=1;while(i=100)while(i=100)s=s+i;s=s+i;i+;i+;printf(“Sum=%d”,s);printf(“Sum=%d”,s);结果结果:Sum=5050关键字关键字表达式表达式循环体循环体do-whiledo-while循环通过循环通过do-whiledo-while语句实现。语句实现。do-
8、whiledo-while语句的一般格式为:语句的一般格式为:do do 语句语句 while(while(表达式表达式);do-whiledo-while语句的执行过程为:语句的执行过程为:(1)(1)执行循环体语句。执行循环体语句。(2)(2)计算并判断式表达的值。若值为计算并判断式表达的值。若值为0 0,则结,则结 束循环,退出束循环,退出whilewhile语句;若值为非语句;若值为非0 0,则转步骤则转步骤(1)(1)执行。执行。#include“stdio.h”#include“stdio.h”void main()void main()int s,i;int s,i;s=0;i=
9、1;s=0;i=1;do do s=s+i;s=s+i;i+;i+;while(i=100);while(i=100);printf(“Sum=%d”,s);printf(“Sum=%d”,s);结果结果:Sum=5050Sum=5050 while while语句是先计算并判断表达式的值。语句是先计算并判断表达式的值。若其值为非若其值为非 0 0,则执行循环体;若其值为,则执行循环体;若其值为0 0,则退出循环。,则退出循环。do-whiledo-while语句则首先执行循环体,然语句则首先执行循环体,然后再计算并判断表达式的值。因此,后再计算并判断表达式的值。因此,do-do-whilew
10、hile语句至少要执行一次循环体。语句至少要执行一次循环体。break break语句可以用于两个地方:一个是语句可以用于两个地方:一个是用于用于switchswitch语句中,一个是用于循环语句语句中,一个是用于循环语句 中。中。在循环语句中,在循环语句中,breakbreak语句常与语句常与ifif语句语句配合使用,当条件成立后就跳出循环体,配合使用,当条件成立后就跳出循环体,提前结束循环。提前结束循环。例 如 此循环本是无限循环,因加上了break语句,使程序在输入字符常量!时就终止循环。for(;)for(;)scanf(“%c”,&ch);scanf(“%c”,&ch);if(ch=
11、!)if(ch=!)break break;else else printf(“%c”,ch);printf(“%c”,ch);continue continue语句用于提前结束循环中的语句用于提前结束循环中的一轮循环。当程序执行到一轮循环。当程序执行到continuecontinue语句语句时,就跳过循环中后面还未执行的语句,时,就跳过循环中后面还未执行的语句,回到循环的起始处,继续进行下一轮的循回到循环的起始处,继续进行下一轮的循环。环。continuecontinue语句常与语句常与if if 语句联合起来使语句联合起来使用,以便在满足一定条件时提前结束本轮用,以便在满足一定条件时提前结
12、束本轮循环。循环。s=0;s=0;for(i=1;i=100;i+)for(i=1;i=100;i+)if(!(i%5)if(!(i%5)continue;continue;s+=i;s+=i;printf(SUM=%dprintf(SUM=%dn,s);n,s);当(i%5)等于0条件成立时,执行continue语句,就跳过循环中s+=i;语句,回到循环的起始处,继续进行下一轮的循环多重循环多重循环:嵌套多层循环结构的循环。嵌套多层循环结构的循环。外循环:外循环:处于外层的循环称为外循环。处于外层的循环称为外循环。内循环:内循环:处于内层的循环称为内循环。处于内层的循环称为内循环。#incl
13、ude“stdio.h”#include“stdio.h”void main()void main()int x,y,z,flag=0;int x,y,z,flag=0;for(x=1;x=32;x+)for(x=1;x=32;x+)for(y=1;y=48;y+)for(y=1;y=48;y+)z=100-x-y;z=100-x-y;if(z%3=0&(3 if(z%3=0&(3*x+2x+2*y+z/3=100)y+z/3=100)printf(“hen=%d,cock=%d,chicken=%dn”,x,y,z);printf(“hen=%d,cock=%d,chicken=%dn”,x
14、,y,z);flag=1;flag=1;break;break;if(flag)break;if(flag)break;结果:hen=5 cock=32 chicken=63 外循环内循环 gotogoto语句用于将控制转到标号所指定语句用于将控制转到标号所指定的语句去执行。的语句去执行。它的一般格式为:它的一般格式为:或或:goto :goto 标号;标号;标号:语句标号:语句标号:语句标号:语句goto goto 标号;标号;标号满足标识标号满足标识符定义原则符定义原则 gotogoto语句是违背结构程序设计的语句。语句是违背结构程序设计的语句。它将使程序的结构不清晰。尽可能用它将使程序的
15、结构不清晰。尽可能用breakbreak和和continuecontinue语句代替语句代替goto goto 不能用不能用gotogoto语句从循环的外层跳到循语句从循环的外层跳到循环的内层,否则会导致程序的混乱。环的内层,否则会导致程序的混乱。#include“stdio.h”#include“stdio.h”void main()void main()int x,y,z;int x,y,z;for(x=1;x=32;x+)for(x=1;x=32;x+)for(y=1;y=48;y+)for(y=1;y=48;y+)z=100-x-y;z=100-x-y;if(z%3=0)&(3 if(
16、z%3=0)&(3*x+2x+2*y+z/3=100)y+z/3=100)printf(“hen=%d,cock=%d,chicken=%dn”,x,y,z);printf(“hen=%d,cock=%d,chicken=%dn”,x,y,z);goto laber;goto laber;laber:;laber:;结果:结果:hen=5 cock=32 chicken=63hen=5 cock=32 chicken=63goto语句 forfor语句是一个功能最强的循环语句。语句是一个功能最强的循环语句。forfor语句和语句和whilewhile语句是先判断表达式后再语句是先判断表达式后再
17、执行循环体的循环语句。因此,有可能一执行循环体的循环语句。因此,有可能一次循环体次循环体 也不执行。也不执行。do-whiledo-while循环是先执行循环体后再判循环是先执行循环体后再判断表达式的循环语句,通常用它来完成必断表达式的循环语句,通常用它来完成必须须 至少执行一次循环体的操作。至少执行一次循环体的操作。在多重循环中,外循环变化慢,内循在多重循环中,外循环变化慢,内循环变化快,外循环一次,内循环就要循环环变化快,外循环一次,内循环就要循环几次。几次。breakbreak语句用于从内循环跳到外循环,语句用于从内循环跳到外循环,使循环提前结束。但它只能跳一层循环,使循环提前结束。但它只能跳一层循环,不能跳多层循环。不能跳多层循环。continuecontinue语句用于跳过其后的语句,语句用于跳过其后的语句,使本轮循环提前结束。使本轮循环提前结束。