《第5章循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第5章循环结构程序设计.ppt(31页珍藏版)》请在优知文库上搜索。
1、5.1 循环结构的控制语句循环结构的控制语句5.2 循环的嵌套循环的嵌套5.3 break语句和语句和continue语句语句5.4 应用举例应用举例5.1.1 while循环语句循环语句1.什么是什么是while循环循环while即当即当的时候,的时候,也就是当满足条件时就循环执行指定的代码。也就是当满足条件时就循环执行指定的代码。2while 语句的形式:语句的形式:while(表达式)表达式)循环体;循环体;计算机首先判断表达式中的值,若值非计算机首先判断表达式中的值,若值非0,则执行循环体中的语,则执行循环体中的语句,一旦语句执行完毕,表达式中的值将会被重新计算,如果还句,一旦语句执行
2、完毕,表达式中的值将会被重新计算,如果还是为非是为非0,语句将会再次执行,这样一直重复下去,直至表达式,语句将会再次执行,这样一直重复下去,直至表达式中的值为中的值为0为止。其具体执行流程如图为止。其具体执行流程如图5-1所示。所示。表达式表达式非非00语句语句3说明说明1)while循环的特点是:先判断表达式,后执行语句循环的特点是:先判断表达式,后执行语句。2)表达式同)表达式同if语句后的表达式一样,可以是任何类型语句后的表达式一样,可以是任何类型的表达式。的表达式。3)while循环常用于循环次数不固定,根据是否满足循环常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。某个
3、条件决定循环与否的情况。4循环体中的语句多于一句时,用一对循环体中的语句多于一句时,用一对 括起。括起。【例例5-1】用用while循环语句求循环语句求100以内所有奇数的累计和。以内所有奇数的累计和。分析分析:此题可以用:此题可以用“1+3+99”来求解,但显然很繁琐来求解,但显然很繁琐。现在换个思路来考虑:。现在换个思路来考虑:首先设置一个累计器首先设置一个累计器sum,其初值为,其初值为0,反复利用,反复利用sum=sum+i来计算(来计算(i依次取依次取1、3、99),编程只),编程只要采取以下要采取以下3个步骤即可:个步骤即可:(1)将)将i的初值置为的初值置为1;(2)每执行)每执
4、行1次次“sum=sum+i”后,后,i增增2;(3)当)当i增到大于增到大于99时,停止计算。此时时,停止计算。此时sum的值就是的值就是100以内所有奇数的累计和。以内所有奇数的累计和。#include main()int i=1,sum=0;while(i=99)sum=sum+i;i=i+2;printf(sum=%dn,sum);运行结果:运行结果:sum=2500不能少不能少复合语句复合语句5.1.2 dowhile循环语句循环语句1.什么是什么是dowhiledowhile循环循环do-whiledo-while语句常称为语句常称为“直到型直到型”循环语句,其特点是循环语句,其特
5、点是先执行一次循环体的操作,然后再判断条件是否满足。先执行一次循环体的操作,然后再判断条件是否满足。2 2dowhile dowhile 语句的形式:语句的形式:do do 循环体;循环体;while(while(表达式表达式););计算机首先执行循环体中的语句,然后判断表达式中计算机首先执行循环体中的语句,然后判断表达式中的值,若值非的值,若值非0 0,则语句将会再次执行,这样一直重复,则语句将会再次执行,这样一直重复下去,直至表达式中的值为下去,直至表达式中的值为0 0为止。其具体执行流程如为止。其具体执行流程如图图5-25-2所示。所示。表达式表达式非非00循环体语句循环体语句3说明说明
6、1)while循环结构是先判断后执行;循环结构是先判断后执行;dowhile循环结构是先执行后判断。当初始循环结构是先执行后判断。当初始情况不满足循环条件时,情况不满足循环条件时,while循环一次都不会循环一次都不会执行,而执行,而dowhile循环不管任何情况都至少循环不管任何情况都至少执行一次。因而,当第一次条件为真时,执行一次。因而,当第一次条件为真时,while、dowhile等价;第一次条件为假时,二者不等价;第一次条件为假时,二者不同。同。2)dowhile循环结构表达式后面有分号,循环结构表达式后面有分号,while循环结构表达式后面没有分号,编程时一循环结构表达式后面没有分号
7、,编程时一定要注意。定要注意。【例【例5-2】用】用dowhile循环语句编程求循环语句编程求123.10的累乘积。的累乘积。分析分析:首先设置一个累乘器:首先设置一个累乘器m,其初值为,其初值为1,反复利用,反复利用m=mi来计算(来计算(i依次取依次取1、2、10),编程只要),编程只要采取以下采取以下3个步骤即可:个步骤即可:(1)将)将i的初值置为的初值置为1;(2)每执行)每执行1次次“m=mi”后,后,i增增1;(3)当)当i增到大于增到大于10时,停止计算。此时时,停止计算。此时m的值就是的值就是123.10的累乘积。的累乘积。源程序:源程序:#includemain()int
8、i=1;long m=1;do m=m*i;i+;while(i=10);printf(%ldn,m);运行结果:3628800必须赋值为必须赋值为1后面的分号不可少后面的分号不可少5.1.3 for循环语句循环语句1.什么是什么是for循环循环for循环也是循环也是C语言中一种处理循环的编程结构,语言中一种处理循环的编程结构,for语句使语句使用最为灵活,它完全可以取代用最为灵活,它完全可以取代 while 语句,应用在循环次语句,应用在循环次数已知的场合尤为方便。数已知的场合尤为方便。2for语句的形式:语句的形式:for(表达式表达式1;表达式;表达式2;表达式;表达式3)循环体循环体;
9、具体来说,具体来说,for语句的执行过程如下:语句的执行过程如下:(1)先求解表达式)先求解表达式1;(2)求解表达式)求解表达式2,若为,若为0(假),则结束循环,(假),则结束循环,并转到(并转到(5););(3)若表达式)若表达式2为非为非0(真),则执行循环体,(真),则执行循环体,然后求解循环表达式然后求解循环表达式3;(4)转回()转回(2););(5)执行)执行for语句下面的一个语句。语句下面的一个语句。其具体执行流程如图其具体执行流程如图5-3所示:所示:3说明说明1)for语句最简单的应用形式也是最容易理解的形式如语句最简单的应用形式也是最容易理解的形式如下:下:for(循
10、环变量赋初值;循环条件;循环变量增量循环变量赋初值;循环条件;循环变量增量)循环循环体体;2)三个表达式都允许省略,但要注意省略表达式后,)三个表达式都允许省略,但要注意省略表达式后,分号间隔符不能省略。例如:分号间隔符不能省略。例如:for(;)表示不设初值,(;)表示不设初值,不判断条件(始终认为表达式不判断条件(始终认为表达式2为真),循环变量不变为真),循环变量不变化,无终止执行循环体的语句。化,无终止执行循环体的语句。3)while、dowhile和和for语句可以用来处理同一问语句可以用来处理同一问题,一般情况下它们可以互相代替。题,一般情况下它们可以互相代替。【例例5-3】用用f
11、or语句求语句求1-3+5-7+-99。分析分析:原题就是计算:原题就是计算1+(-3)+5+(-7)+(-99)的累计和,还是一个连加的累计和,还是一个连加问题。加数符号的交叉变化,可在程序中增问题。加数符号的交叉变化,可在程序中增加一个符号控制变量加一个符号控制变量j,j的初值设置为的初值设置为1,并,并在每次循环中对在每次循环中对j都乘以负都乘以负1,用,用j改变相加项改变相加项的正、负。的正、负。源程序:源程序:#include main()int i,j,sum=0;j=1;for(i=1;i=99;i+=2)sum=sum+i*j;j=j*-1;printf(1-3+5-7+-99
12、=%dn,sum);运行结果:运行结果:1-3+5-7+-99=-50由此例可见,在循环次数已知的场合下,for语句将循环体所用的控制都放在循环顶部统一表示,显得更简洁和直观。j的初值设置为的初值设置为1在每次循环中对在每次循环中对j都乘以负都乘以负11.什么是循环的嵌套什么是循环的嵌套一个循环体内又包含另一个完整的循环结构,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多重循环。上述三种循环(环,这就是多重循环。上述三种循环(while循环循环,do-while循环和循环和for循环)语句之间可以循环)语句之
13、间可以相互嵌套使用。相互嵌套使用。2循环嵌套的形式:循环嵌套的形式:例如,下面几种都是合法的嵌套形式:例如,下面几种都是合法的嵌套形式:(1)while()while()(2)while()do while();(3)do while()while();(4)for()for()3说明说明在循环嵌套时,外循环必须完全包含内循环,即不在循环嵌套时,外循环必须完全包含内循环,即不允许循环的交叉嵌套。允许循环的交叉嵌套。【例例5-4】百钱买百鸡,公鸡百钱买百鸡,公鸡5元一只,母鸡元一只,母鸡3元一元一只,小鸡只,小鸡1元三只;一百元钱买一百只鸡,且公鸡、元三只;一百元钱买一百只鸡,且公鸡、母鸡、小鸡
14、都要有,编程求解所有购鸡方案。母鸡、小鸡都要有,编程求解所有购鸡方案。分析分析:设公鸡、母鸡、小鸡各为:设公鸡、母鸡、小鸡各为i、j、k,列出方程,列出方程为:为:i+j+k=100 3i+2j+1/3*k=100三个未知数,两个方程,此题有若干个组解。计算三个未知数,两个方程,此题有若干个组解。计算机求解此类问题,采用试凑法机求解此类问题,采用试凑法(也称枚举法也称枚举法)来实现,来实现,即将可能出现的各种情况一一罗列测试,判断是否即将可能出现的各种情况一一罗列测试,判断是否是问题真正的解。此题可以采用二重循环,列举出是问题真正的解。此题可以采用二重循环,列举出该问题所有可能的解进行筛选。该
15、问题所有可能的解进行筛选。源程序:源程序:#include void main()int i,j,k,n=0;for(i=1;i=20;i+)for(j=1;j=1;x-)if(x%7=0)break;printf(x=%dn,x);运行结果:x=98若能被若能被7整除,整除,提前结束循环提前结束循环5.3.2 continue语句1.什么是continue语句continue语句也是改变程序控制流的语句,其作用是:结束当前正在执行的这一次循环(for、while、dowhile),接着执行下一次循环。即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。2continue语句的形式
16、:continue;例如:while(表达式1)语句A if(表达式2)continue;语句B其执行过程如图5-5所示:3说明1)continue语句只用在for、while、do-while等循环语句中,常与if条件语句一起使用。2)continue语句和break语句的区别是:continue语句只结束本次的循环,并不跳出循环,转而去判断是否执行下一次循环;而break语句则是终止整个循环的执行,不再进行条件判断。【例5-6】使用continue语句,输出100以内能被7整除的所有整数。分析:首先设置变量x,其初值为1,利用循环对1100的每一个数进行测试,如该数不能被7整除(x%7!=0),则由continue语句转去下一次循环。只有当该数能被7整除(x%7=0),才能执行后面的printf语句,输出能被7整除的数。源程序:#include main()int x;for(x=1;x=100;x+)if(x%7!=0)continue;printf(%d ,x);运行结果:7 14 21 28 35 42 49 56 63 70 77 84 91 98若能被若能被7整除,整除,