版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、问题问题1 1:求:求1+2+3+1+2+3+100=?+100=?问题问题2:2: 在许多问题中需要用到循环控制。循环结构是在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构构、选择结构共同作为各种复杂程序的基本构造单元。造单元。四种循环结构:四种循环结构: ifgoto while dowhile for三种循环方式:当型循环、直到型循环三种循环方式:当型循环、直到型循环 、步、步 长型循环长型循环结构形式:结构形式: 语句标号语句标号:if (表达式)(表达式) 语句语句/语句组
2、语句组 goto 语句标号语句标号;kk: if(ab) a=a-2; goto kk; 此结构构成的是此结构构成的是“当型当型”循环。循环。 goto语句为无条件转向语句 一般形式 goto 语句标号; 语句标号用标识符表示,它的命名规则与变量名相同,标号通常用大小字母。 例如: goto LABEL_1; 合法; goto 123; 不合法.KK: if(ab) a=a-2; goto KK; 结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差. 一般来说,goto 可以有两种用途:(1) 与if语句一起构成循环结构;(2) 从循环体中跳转到循环体
3、外。 但是这种用法不符合结构化原则,一般不宜采用,只有在不得已时(例如能大大提高效率)才使用.n goto语句是从汇编语言中发展而来,但使用goto容易造成混乱。n 现代观点认为,混乱根源不在goto,而在标号 任何程序都可以不用goto就实现其功能 但在某些情况下,使用goto可以让程序更清晰n初学C语言,编程中不要使用goto语句例例6.1 用用if语句和语句和goto语句构成循环,求语句构成循环,求1到到100的和的和#include stdio.hvoid main()int i,sum=0;i=1;LOOP: if (i=100) sum=sum+i; i+; goto LOOP;
4、printf(%dn,sum);这里用的是这里用的是“当型当型”循环循环结构,当满足结构,当满足“i=100” i=100” 时时执行花括弧内的循环体。执行花括弧内的循环体。 结构形式:结构形式:while(表达式(表达式1) 工作过程: step 1、判断表达式1 的值是否非0, step 2、非0,执行语句块1,再返回step 1 step 3、直到表达式值为0时,执行语句块2特点: 先判断,后执行 例例6.2 求求1到到100的和的和1001nn运行结果:运行结果:50505050#include void main()int i,sum=0;i=1;while(i=100)sum=su
5、m+i;i+;printf(%dn,sum);(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。 注意:(1) 循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。 (2) 在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循环永不结束。 1-100的奇数为:的奇数为:1,3,5,7,9,-97,99 定义变量定义变量i=1; 循环控制条件:循环控制条件:i=100 循环规律循环规律i=i+2;#include stdio.hvoid main() int i=1; while(i=1
6、00) printf(%d t,i); i+=2; 例:读程序例:读程序,回答问题回答问题循环次数为:循环次数为: ,执行后结果为:执行后结果为:#include stdio.hint main() int k=2; while ( k !=0 ) printf ( %d n, k); k-; printf(n); #include stdio.hint main() int y=10; while ( y- ); printf(n y=%d, y); 小结小结:(1)循环体如果包含多个语句,应用)循环体如果包含多个语句,应用“ ”括括 起,否则起,否则while的范围仅到它之后第一个的范围仅
7、到它之后第一个 分号处分号处(2)循环体中一定有对于循环控制变量的操作循环体中一定有对于循环控制变量的操作(3)while构成的是构成的是“当型当型”循环。循环。三、三、dowhile循环循环工作过程:step 1、执行语句/语句组。 step 2、判断表达式值, 当为非0时,重复 执行语句/语句组, step 3、直到表达式的值为0时循环结束。特点: 先执行,后判断 do 语句块1;while (表达式);语句块2;结构形式:结构形式:这个分号可这个分号可不要忘了哦不要忘了哦工作过程工作过程例例6.3 求求1到到100的和的和#include int main()int i, sum=0;i
8、=1;dosum=sum+i;i+;while(i=100);printf(%dn,sum);#include stdio.hmain() int sum= 0,i; puts (输入一个数输入一个数); scanf( %d,&i); do sum=sum+i; i+; while (i=10); printf ( “ nsum=%d n ,sum); printf (“i=%d ,i); 例:比较下面程序段例:比较下面程序段, 当输入值为当输入值为 11时,执行结果有何时,执行结果有何不同:不同:(1)#include stdio.hmain() int sum = 0,i; put
9、s (输入一个数输入一个数); scanf ( %d, &i); while (i = 10) sum =sum+i; i+; printf (nsum=%d n ,sum); printf (“i=%d ,i); (2) 比较结果:当比较结果:当 i10 时,两程序运行结果不同。时,两程序运行结果不同。 while() 一开始就一开始就条件不成立,条件不成立,会跳过循环,向下执会跳过循环,向下执行行 do while() 会执行一次循环体,会执行一次循环体,再进行比较再进行比较,条件不条件不成立,再成立,再跳出循环,向下执行。跳出循环,向下执行。whilewhile语句和用语句和用d
10、o-whiledo-while语句的比较语句的比较: : 在一般情况下,用在一般情况下,用whilewhile语句和用语句和用do-whiledo-while语语句处理同一问题时,若二者的循环体部分是一句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。样的,它们的结果也一样。 但如果但如果whilewhile后面的表达式一开始就为假后面的表达式一开始就为假(0(0值值) )时时,两种循环的结果是不同的。两种循环的结果是不同的。 for循环又称为循环又称为步长型步长型或或计数器型计数器型循环常用于固循环常用于固定(已知)次数循环情况。定(已知)次数循环情况。 可替代可替代while
11、循环完成不固定(未知)次数循环情循环完成不固定(未知)次数循环情况的处理。况的处理。四、四、For 循环循环语法:语法:for(表达式表达式1;表达式表达式2;表达式表达式3) 语句语句;意义:for(循环变量赋初值;循环条件;循环变量增值)for语句的执行过程: (1) 先计算表达式1。 (2) 计算表达式2,若其值为真(非0),则执 行for语句中指定的内嵌语句,然后执行 第(3)步。若为假(0),则结束循环, 转到第(5)步。 (3) 求解表达式3。 (4) 转回上面第(2)步骤继续执行。 (5) 循环结束,执行for语句下面的一个语句 表达式表达式2?执行语句语句非非0值为值为0执行f
12、or循环之后的语句执行表达式3执行表达式执行表达式1表达式表达式2?执行语句语句非非0值为值为0执行for循环之后的语句执行表达式3执行表达式执行表达式1循环初始条件循环初始条件循环控制条件循环控制条件循环体循环体 for语句等价于下列语句:表达式1;while (表达式2) 语句; 表达式3; forfor语句最简单的应用形式也就是最易理解的形式如下:语句最简单的应用形式也就是最易理解的形式如下: for(for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值) ) 例: for(i=1;i=100;i+) sum=sum+i; 相当于以下语句: i=1; wh
13、ile(i=100) sum=sum+i;i+; 显然,用for语句简单、方便。 (1) for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如 for( ;i=100; i+) sum=sum+i; 执行时,跳过“求解表达式1”这一步,其他不变。(2) 表达式2可以省略,默认表达式2始终为真,循环无终止地进行下去。例如:for( i=1; ; i+ ) sum=sum+i; 如果表达式2空缺。它相当于: for(i=1; 1; i+) sum=sum+i原则上表达式原则上表达式2不可省略,若省略需要在循环体不可省略,若
14、省略需要在循环体中用其它手段(中用其它手段(break、goto等)结束循环等)结束循环 。(3) (3) 表达式表达式3 3也可以省略,但此时程序设计者应另外设也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:法保证循环能正常结束。如: for(i=1; i=100; ) sum=sum+i; i+; i+ i+的操作不放在的操作不放在forfor语句的表达式语句的表达式3 3的位置处,而的位置处,而作为循环体的一部分,效果是一样的,都能使循环作为循环体的一部分,效果是一样的,都能使循环正常结束。正常结束。 (4) (4) 可以省略表达式可以省略表达式1 1和表达式和表达式3 3
15、,只有表达式,只有表达式2 2,即只,即只给循环条件。如:给循环条件。如: for( ;i=100; ) while(i=100) sum=sum+i; 相当于相当于 sum=sum+i; i+; i+; 在这种情况下,完全等同于在这种情况下,完全等同于whilewhile语句。语句。 可见可见forfor语句比语句比whilewhile语句功能强,除了可以给出循环条语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自动增值等。件外,还可以赋初值,使循环变量自动增值等。(5) 3(5) 3个表达式都可省略,如:个表达式都可省略,如: for(for( ; ; ; ; ) ) 语句语句
16、; ; 相当于相当于 while(1) while(1) 语句语句; ; 即不设初值,不判断条件即不设初值,不判断条件( (认为表达式认为表达式2 2为真值为真值) ),ForFor中循环变量不改变。无终止地执行循环体。中循环变量不改变。无终止地执行循环体。 (6) (6) 表达式表达式1 1可以是设置循环变量初值的赋值表达式,可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。如也可以是与循环变量无关的其他表达式。如: : for (sum=0; i=100; i+) sum=sum+i; 表达式表达式3 3 也可以是与循环控制无关的任意表达式。也可以是与循环控制无关的任
17、意表达式。 表达式表达式1 1和表达式和表达式3 3可以是一个简单的表达式,也可以可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:逗号间隔。如: for( sum=0, i=1; i=100; i+) sum=sum+i;或或 for(i=0, j=100; i=j; i+, j- ) k=i+j; 表达式表达式1 1和表达式和表达式3 3都是逗号表达式,各包含两个赋值都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值表达式,即同时设两个初值,使两个变量增值. . 在逗号表达式内按自
18、左至右顺序求解,整个在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为最右边的表达式的值。逗号表达式的值为最右边的表达式的值。如如: : for(i=1; i=100; i+,i+) sum=sum+i;相当于相当于 for( i=1; i=100; i=i+2) sum=sum+i; (7) (7) 表达式表达式2 2一般是关系表达式一般是关系表达式( (如如i=100)i=100)或逻辑表达或逻辑表达式式 ( (如如ab & xy)ab & xy),但也可以是数值表达式或字符,但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。表达式,只要其值为非零,就执行
19、循环体。 for(i=0; (c=getchar()!=n; i+=c); 在表达式在表达式2 2中先从终端接收一个字符赋给中先从终端接收一个字符赋给c c,然后判断此赋值表达式的值,然后判断此赋值表达式的值是否不等于是否不等于n(n(换行符换行符) ),如果不等于,如果不等于nn,就执行循环体。,就执行循环体。此此forfor语句的循环体为空语句,把本来要在循环体内处理的内容放语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式在表达式3 3中,作用是一样的。可见中,作用是一样的。可见forfor语句功能强,可以在表达式中完语句功能强,可以在表达式中完成本来应在循环体内完成的操作成本
20、来应在循环体内完成的操作。 for( ; (c=for( ; (c=getchargetchar()!=n;)()!=n;) printfprintf(%(%c,cc,c);); forfor语句中只有表达式语句中只有表达式2 2,而无表达式,而无表达式1 1和表达式和表达式3 3。 其作用是每读入一个字符后立即输出该字符,直到输入其作用是每读入一个字符后立即输出该字符,直到输入一个一个“换行换行”为止。请注意,从终端键盘向计算机输入时,为止。请注意,从终端键盘向计算机输入时,是在按是在按EnterEnter键以后才将一批数据一起送到内存缓冲区中去的键以后才将一批数据一起送到内存缓冲区中去的。
21、注意注意: : forfor语句可以把循环体和一些与循环控制语句可以把循环体和一些与循环控制无关的操作也作为表达式无关的操作也作为表达式1 1或表达式或表达式3 3出现,这出现,这样程序可以短小简洁。但过分地利用这一特点样程序可以短小简洁。但过分地利用这一特点会使会使forfor语句显得杂乱,可读性降低,最好语句显得杂乱,可读性降低,最好不要不要把与循环控制无关的内容放到把与循环控制无关的内容放到forfor语句中语句中。 在在for和和while语句之后一般语句之后一般没有没有分号分号 有分号表示循环体就是分号之前的内容,即循环有分号表示循环体就是分号之前的内容,即循环体不存在体不存在 例:
22、例: while (i 100); /如果如果i初值初值100,死循环,死循环 i+; 例:例: for (i = 0; i 100; i+);printf(“%d”, i);/ i=100从键盘中输入一组数字,编程对负数求和。从键盘中输入一组数字,编程对负数求和。方法二:固定次数循环(方法二:固定次数循环(for)方法一:不固定次数循环(方法一:不固定次数循环(while/do-while )#include stdio.h main() int i; float x,sum; printf (请输入任意实数请输入任意实数n); for(i=1;i=6; i+) scanf (%f,&
23、;x); if (x 0.0) sum+=x; printf ( n sum=%f ,sum); #include stdio.h main() float x,sum; printf (请输入任意实数,输入请输入任意实数,输入0则结束则结束n); for ( x =1; x!= 0; scanf( %f,&x) ) if (x 0.0 ) sum += x; printf ( nsum=%f ,sum);(1)(1)四种循环都可以用来处理同一问题,一般情四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用况下它们可以互相代替。但一般不提倡用gotogoto型循环
24、。型循环。(2)(2)在在whilewhile循环和循环和do-whiledo-while循环中,只在循环中,只在whilewhile后面的括号内指定循环条件,因此为了使循环后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结能正常结束,应在循环体中包含使循环趋于结束的语句束的语句( (如如i+i+,或,或i=i+1i=i+1等等) )。 for for循环可以在表达式循环可以在表达式3 3中包含使循环趋于中包含使循环趋于结束的操作,甚至可以将循环体中的操作全结束的操作,甚至可以将循环体中的操作全部放到表达式部放到表达式3 3中。因此中。因此forfor语句的功能更
25、强语句的功能更强,凡用,凡用whilewhile循环能完成的,用循环能完成的,用forfor循环都能循环都能实现。实现。 (3)(3)用用whilewhile和和do-whiledo-while循环时,循环变量初始循环时,循环变量初始化的操作应在化的操作应在whilewhile和和do-whiledo-while语句之前完成语句之前完成。而。而forfor语句可以在表达式语句可以在表达式1 1中实现循环变量中实现循环变量的初始化。的初始化。n如果循环次数已知,用如果循环次数已知,用forn如果循环次数未知,用如果循环次数未知,用whilen如果循环体至少要执行一次,用如果循环体至少要执行一次,
26、用do-whilen只是思路,不是定律只是思路,不是定律 永远不会退出的循环为死循环永远不会退出的循环为死循环 for (;) while (1) do while (1); 除非确实需要死循环,否则不要使用这样的形式。它除非确实需要死循环,否则不要使用这样的形式。它们使循环的中止条件变得不明朗们使循环的中止条件变得不明朗 一般情况下,要极力避免死循环一般情况下,要极力避免死循环 绝大多数程序不需要死循环。如果出现,往往都是绝大多数程序不需要死循环。如果出现,往往都是bug 时间过长的循环会造成时间过长的循环会造成“假死假死”现象,也要考虑解决现象,也要考虑解决一个循环体内又包含另一个完整的循
27、环结构一个循环体内又包含另一个完整的循环结构 称为循环的嵌套。内嵌的循环中还可以嵌套称为循环的嵌套。内嵌的循环中还可以嵌套 循环,这就是多层循环。循环,这就是多层循环。 三种循环三种循环(while(while循环、循环、do-whiledo-while循环和循环和forfor循循 环环) )都可以互相嵌套。都可以互相嵌套。 下面几种都是合法的形式:下面几种都是合法的形式:(1) while( ) (2) do (3) for(;) while( ) do for(;) while( ); while( ); (4) while( ) (5) for(;) (6) do do while( )
28、 for(;) while( ) while( ) 嵌套循环执行过程:嵌套循环执行过程: 先执行外层循环进入内层循环;先执行外层循环进入内层循环; 内层循环终止之后,接着执行外层循环;内层循环终止之后,接着执行外层循环; 再由外层循环进入内层循环中;再由外层循环进入内层循环中; 当外层循环全部终止时,程序结束。当外层循环全部终止时,程序结束。for(i=0;i2;i+) for (j=0; j2; j+) printf(“*”); #include stdio.h void main() int i,j;for(i=0;i2;i+) printf(n外外n); for (j=0; j2; j+
29、) printf(内内t); 使用多层循环应注意:使用多层循环应注意: 1、内层循环必须完全包含在外层循环中,、内层循环必须完全包含在外层循环中,不得交叉不得交叉。 2、并列循环、并列循环可以使用可以使用相同的循环变量相同的循环变量 嵌套时内、嵌套时内、 外循环外循环不能使用不能使用相同的循环变量相同的循环变量 (1) for(i=0;) for(i=0;) (2)for(i=0;) for(i=0;) 转移控制语句转移控制语句break和和continue语句语句break语句的作用:循环体中使用语句的作用:循环体中使用break语句语句可以提前结束本循环体的可以提前结束本循环体的全部后续循
30、环。全部后续循环。Continue语句的作用:循环体中使用语句的作用:循环体中使用continue语句可以提前结束语句可以提前结束本次循环,不执本次循环,不执行本次循环的后续语句,立刻开始下一循环行本次循环的后续语句,立刻开始下一循环。n对对for、while、do-while循环进行内部手术循环进行内部手术6.5.1 break6.5.1 break语句语句 breakbreak语句可以用来从循环体内跳出循环体,语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句即提前结束循环,接着执行循环下面的语句 一般形式:一般形式: break;break;注意注意: :break
31、break语句不能用于循环语句和语句不能用于循环语句和switchswitch语语句之外的任何其他语句中。句之外的任何其他语句中。 例例: float pi=3.14159;for(r=1;r100) break; printf(r=%f,area=%fn,r,area); 程序的作用是计算程序的作用是计算r=1r=1到到r=10r=10时的圆面积,直到时的圆面积,直到面积面积areaarea大于大于100100为止。从上面的为止。从上面的forfor循环可以循环可以看到:当看到:当area100area100时,执行时,执行breakbreak语句,提前结语句,提前结束循环,即不再继续执行其
32、余的几次循环束循环,即不再继续执行其余的几次循环。5.8.2 continue5.8.2 continue语句语句 作用为结束本次循环,即跳过循环体中下面作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行尚未执行的语句,接着进行下一次是否执行循环的判定循环的判定. .一般形式:一般形式: continue;continue;continue语句和break语句的区别 continue语句只结束本次循环,而不是终止整个循环的执行。 while(表达式1) for if(表达式2) continue; continue语句和break语句的区别 break语句则是结束整个
33、循环过程,不再判断执行循环的条件是否成立。 while(表达式1) for if(表达式2) break; 例例6.5 把把100200之间的不能被之间的不能被3整除的数输出。整除的数输出。1001nn当当n n能被能被3 3整除时整除时,执行,执行continuecontinue语句语句,结束本次循环,结束本次循环( (即跳即跳过过printfprintf函数语句函数语句) ),只有只有n n不能被不能被3 3整除时才整除时才执行执行printfprintf函数。函数。思考:如果将思考:如果将continuecontinue换成换成breakbreak结果如何?结果如何?#include i
34、nt main() int n; for (n=100; n=200; n+) if (n%3=0) continue; printf(%d ,n); 说明:说明:1、break语句可用于语句可用于switch语句结构中语句结构中 也可用于循环中。也可用于循环中。2、continue语句只可用于循环中。语句只可用于循环中。3、在循环嵌套中、在循环嵌套中break与与continue都只都只 影响包含它的那层循环影响包含它的那层循环n break和和continue少用为妙少用为妙 采用采用while while 编程编程打印九九乘法表,结果如下打印九九乘法表,结果如下图图 第第一行可以从一行可以从1循环至循环至9,可用,可用t分隔。分隔。 第二行直接第二行直接用用 printf()打印打印 - 九九乘法表可以用两层的循环九九乘法表可以用两层的循环,要用两个变量要用两个变量 外层外层为为1 - 9, 内层从内层从 1 至至 n , 计算计算、打印出内层与外层数据的乘积。、打印出内层与外层数据的乘积。 #include stdio.hvoid main() int i=1,k; while (i10) printf(%dt,i+); printf(n-n); i=1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河北邯郸市中医院选聘23人备考题库及完整答案详解
- 2026山东大学生命科学学院徐芳课题组科研助理招聘1人备考题库含完整答案详解【必刷】
- 2026新疆第四师总医院春季招聘88人备考题库含答案详解【夺分金卷】
- 2026湖南长沙市芙蓉区招聘中小学教师41人备考题库【考试直接用】附答案详解
- 2026河南郑外集团郑开学校附中教师招聘1人备考题库含答案详解【黄金题型】
- 2026江苏南通市第一人民医院招聘备案制工作人员102人备考题库带答案详解(巩固)
- 2026河北承德县招聘公益性岗位人员16人备考题库附参考答案详解(夺分金卷)
- 2026浙江宁波市医疗中心医院招聘编外人员1人备考题库含完整答案详解【典优】
- 2026湖南长沙市芙蓉区招聘中学骨干教师10人备考题库带答案详解(巩固)
- 2026上半年北京事业单位统考市统计局招聘1人备考题库附答案详解(考试直接用)
- GB/T 42706.1-2023电子元器件半导体器件长期贮存第1部分:总则
- 传染病学教学课件:登革热
- 综合实践活动劳动与技术八年级下册教案
- TCSAE 178-2021 电动汽车高压连接器技术条件
- GB/T 17780.5-2012纺织机械安全要求第5部分:机织和针织准备机械
- FZ/T 73001-2016袜子
- 远景变桨控制系统介绍及典型故障案例讲解
- 试验8家鸽解剖课件
- 洪湖姓氏志-黎氏的迁徙分布
- 《小小鞋店》 教学课件
- 全绝缘铜管母线安装方案
评论
0/150
提交评论