《第五章 循环结构.ppt》由会员分享,可在线阅读,更多相关《第五章 循环结构.ppt(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5章 循环结构本章学习目标本章学习目标本章学习目标本章学习目标在程序设计中对在程序设计中对在程序设计中对在程序设计中对a a于那些需要重复执行的操作应该采用循环结构于那些需要重复执行的操作应该采用循环结构于那些需要重复执行的操作应该采用循环结构于那些需要重复执行的操作应该采用循环结构完成。利用循环结构处理各类重复操作既简单又方便,循环结完成。利用循环结构处理各类重复操作既简单又方便,循环结完成。利用循环结构处理各类重复操作既简单又方便,循环结完成。利用循环结构处理各类重复操作既简单又方便,循环结构又称重复结构。在构又称重复结构。在构又称重复结构。在构又称重复结构。在C C语言中有三种可以构成
2、循环的循环语句,语言中有三种可以构成循环的循环语句,语言中有三种可以构成循环的循环语句,语言中有三种可以构成循环的循环语句,本章将一一进行介绍。通过本章的学习,读者应该掌握以下内本章将一一进行介绍。通过本章的学习,读者应该掌握以下内本章将一一进行介绍。通过本章的学习,读者应该掌握以下内本章将一一进行介绍。通过本章的学习,读者应该掌握以下内容:容:容:容:n nwhilewhile语句和用语句和用语句和用语句和用whilewhile语句构成的循环结构语句构成的循环结构语句构成的循环结构语句构成的循环结构n ndo-whiledo-while语句和用语句和用语句和用语句和用do-whiledo-w
3、hile语句构成的循环结构语句构成的循环结构语句构成的循环结构语句构成的循环结构n nforfor语句和用语句和用语句和用语句和用forfor语句构成的循环结构语句构成的循环结构语句构成的循环结构语句构成的循环结构n n循环结构的嵌套循环结构的嵌套循环结构的嵌套循环结构的嵌套n nbreakbreak和和和和continuecontinue语句在循环体中的作用语句在循环体中的作用语句在循环体中的作用语句在循环体中的作用5.1 while语句和用while语句构成的循环结构5.1.15.1.1相关知识相关知识相关知识相关知识循环是一种对同一程序段有规律的重复,被重复执行循环是一种对同一程序段有规
4、律的重复,被重复执行循环是一种对同一程序段有规律的重复,被重复执行循环是一种对同一程序段有规律的重复,被重复执行的部分叫循环体。循环的执行要满足一定的条件(循环条的部分叫循环体。循环的执行要满足一定的条件(循环条的部分叫循环体。循环的执行要满足一定的条件(循环条的部分叫循环体。循环的执行要满足一定的条件(循环条件),循环的终止要达到一定的条件(终止条件)。在程件),循环的终止要达到一定的条件(终止条件)。在程件),循环的终止要达到一定的条件(终止条件)。在程件),循环的终止要达到一定的条件(终止条件)。在程序设计中要注意循环不能永远运行,必须能退出循环。循序设计中要注意循环不能永远运行,必须能
5、退出循环。循序设计中要注意循环不能永远运行,必须能退出循环。循序设计中要注意循环不能永远运行,必须能退出循环。循环结构的特点是:循环体执行与否及其执行次数必须视其环结构的特点是:循环体执行与否及其执行次数必须视其环结构的特点是:循环体执行与否及其执行次数必须视其环结构的特点是:循环体执行与否及其执行次数必须视其类型与条件而定,且必须能在适当的时机退出循环。类型与条件而定,且必须能在适当的时机退出循环。类型与条件而定,且必须能在适当的时机退出循环。类型与条件而定,且必须能在适当的时机退出循环。C C语言提供了语言提供了语言提供了语言提供了whilewhile、do-whiledo-while、f
6、orfor三种语句实现三种语句实现三种语句实现三种语句实现循环,其中循环,其中循环,其中循环,其中whilewhile循环是当型循环,先判断循环条件,再循环是当型循环,先判断循环条件,再循环是当型循环,先判断循环条件,再循环是当型循环,先判断循环条件,再根据条件决定是否执行循环体,执行循环体的最少次数为根据条件决定是否执行循环体,执行循环体的最少次数为根据条件决定是否执行循环体,执行循环体的最少次数为根据条件决定是否执行循环体,执行循环体的最少次数为0 0。5.1.25.1.2程序范例程序范例程序范例程序范例1 1范例一范例一范例一范例一程序程序程序程序5-15-1:求:求:求:求1+2+3+
7、1001+2+3+100的值。的值。的值。的值。这是一个求这是一个求这是一个求这是一个求100100个数的累加和问题。加数从个数的累加和问题。加数从个数的累加和问题。加数从个数的累加和问题。加数从1 1变化到变化到变化到变化到100100,可以看到加数是有规律变化的,后一个加数比前一,可以看到加数是有规律变化的,后一个加数比前一,可以看到加数是有规律变化的,后一个加数比前一,可以看到加数是有规律变化的,后一个加数比前一个加数增个加数增个加数增个加数增1 1,第一个加数为,第一个加数为,第一个加数为,第一个加数为1 1,最后一个加数为,最后一个加数为,最后一个加数为,最后一个加数为100100;
8、因此;因此;因此;因此可以在循环体中使用一个整型变量可以在循环体中使用一个整型变量可以在循环体中使用一个整型变量可以在循环体中使用一个整型变量i i,每循环一次使,每循环一次使,每循环一次使,每循环一次使i i增增增增1 1,一直循环到一直循环到一直循环到一直循环到i i的值超过的值超过的值超过的值超过100100,用这个办法就解决了所需的加,用这个办法就解决了所需的加,用这个办法就解决了所需的加,用这个办法就解决了所需的加数问题;但是要特别注意的是变量数问题;但是要特别注意的是变量数问题;但是要特别注意的是变量数问题;但是要特别注意的是变量i i需要有一个正确的初需要有一个正确的初需要有一个
9、正确的初需要有一个正确的初值,这里初值应当设为值,这里初值应当设为值,这里初值应当设为值,这里初值应当设为0 0。下一个要解决的是求累加和。设用一个变量下一个要解决的是求累加和。设用一个变量下一个要解决的是求累加和。设用一个变量下一个要解决的是求累加和。设用一个变量sumsum存放存放存放存放这这这这100100个数的和值,可以先求个数的和值,可以先求个数的和值,可以先求个数的和值,可以先求0+10+1的和并将其放在的和并将其放在的和并将其放在的和并将其放在sumsum中,然后把中,然后把中,然后把中,然后把sumsum中的数加上中的数加上中的数加上中的数加上2 2再存放在再存放在再存放在再存
10、放在sumsum中,依次类推,这和人们的心算过程没有什么区别,中,依次类推,这和人们的心算过程没有什么区别,中,依次类推,这和人们的心算过程没有什么区别,中,依次类推,这和人们的心算过程没有什么区别,sumsum代表着人们脑中累加的那个和数,不同的是心算过程代表着人们脑中累加的那个和数,不同的是心算过程代表着人们脑中累加的那个和数,不同的是心算过程代表着人们脑中累加的那个和数,不同的是心算过程由人们自己控制。在这里,由人们自己控制。在这里,由人们自己控制。在这里,由人们自己控制。在这里,sumsum累加的过程要放在循环中,累加的过程要放在循环中,累加的过程要放在循环中,累加的过程要放在循环中,
11、由计算机判断所加的数是否已经超过由计算机判断所加的数是否已经超过由计算机判断所加的数是否已经超过由计算机判断所加的数是否已经超过100100,加数则放在变,加数则放在变,加数则放在变,加数则放在变量量量量i i中,并在循环过程中每一次增中,并在循环过程中每一次增中,并在循环过程中每一次增中,并在循环过程中每一次增1 1。以下就是求累加和的典型算法。以下就是求累加和的典型算法。以下就是求累加和的典型算法。以下就是求累加和的典型算法。main()main()intinti,sumi,sum;i=1;i=1;sum=0;sum=0;/*sum/*sum的初值为的初值为的初值为的初值为0*/0*/wh
12、ile(iwhile(i=100)=100)/*/*当当当当i i小于或等于小于或等于小于或等于小于或等于100100时时时时执行循环体执行循环体执行循环体执行循环体*/sum=sum=sum+isum+i;i+;i+;/*/*在循环体中累加在循环体中累加在循环体中累加在循环体中累加一次,一次,一次,一次,i i增增增增1*/1*/printf(sumprintf(sum=%=%dn,sumdn,sum););程序运行后的输出结果:程序运行后的输出结果:程序运行后的输出结果:程序运行后的输出结果:sum=5050sum=5050注意:注意:注意:注意:(1 1)如果在第一次进入循环时,)如果在
13、第一次进入循环时,)如果在第一次进入循环时,)如果在第一次进入循环时,whilewhile后圆括号内表后圆括号内表后圆括号内表后圆括号内表达式的值为达式的值为达式的值为达式的值为0 0,循环一次也不执行。在本程序中,如果,循环一次也不执行。在本程序中,如果,循环一次也不执行。在本程序中,如果,循环一次也不执行。在本程序中,如果i i的的的的初值大于初值大于初值大于初值大于100100,将使表达式,将使表达式,将使表达式,将使表达式i=100i100i100时,循环时,循环时,循环时,循环结束。如果没有结束。如果没有结束。如果没有结束。如果没有i+i+这条语句,则这条语句,则这条语句,则这条语句
14、,则i i的值始终不变,循环的值始终不变,循环的值始终不变,循环的值始终不变,循环将无限进行。将无限进行。将无限进行。将无限进行。(3 3)在循环体中,语句的先后位置必须符合逻辑,)在循环体中,语句的先后位置必须符合逻辑,)在循环体中,语句的先后位置必须符合逻辑,)在循环体中,语句的先后位置必须符合逻辑,否则将会影响运算结果,例如,若将上例中的否则将会影响运算结果,例如,若将上例中的否则将会影响运算结果,例如,若将上例中的否则将会影响运算结果,例如,若将上例中的whilewhile循环循环循环循环体改写成:体改写成:体改写成:体改写成:while(i=100)while(i=1e-4)=1e-
15、4)pi=pi=pi+tpi+t;n+=2.0;n+=2.0;s=-s;s=-s;/*/*改变符号改变符号改变符号改变符号*/t=t=s/ns/n;pi=pi=pipi*4;*4;printf(piprintf(pi=%=%fn,pifn,pi););程序执行后输出以下结果:程序执行后输出以下结果:程序执行后输出以下结果:程序执行后输出以下结果:pi=3.141397pi=3.1413975.1.35.1.3知识归纳知识归纳知识归纳知识归纳1 1whilewhile循环的一般形式循环的一般形式循环的一般形式循环的一般形式由由由由whilewhile语句构成的循环也称语句构成的循环也称语句构成的
16、循环也称语句构成的循环也称“当当当当”循环,循环,循环,循环,whilewhile循循循循环的一般形式如下:环的一般形式如下:环的一般形式如下:环的一般形式如下:while(while(表达式表达式表达式表达式)循环体循环体循环体循环体例如:例如:例如:例如:while(i0)printf(*);i+while(i0)printf(*);i+说明:说明:说明:说明:(1 1)whilewhile是是是是C C语言的关键字。语言的关键字。语言的关键字。语言的关键字。(2 2)whilewhile后一对圆括号中的表达式,可以是后一对圆括号中的表达式,可以是后一对圆括号中的表达式,可以是后一对圆括号
17、中的表达式,可以是C C语语语语言中任意合法的表达式,由它来控制循环体是否执行。言中任意合法的表达式,由它来控制循环体是否执行。言中任意合法的表达式,由它来控制循环体是否执行。言中任意合法的表达式,由它来控制循环体是否执行。3 3)在语法上,要求循环体可以是一条简单可执行语句;)在语法上,要求循环体可以是一条简单可执行语句;)在语法上,要求循环体可以是一条简单可执行语句;)在语法上,要求循环体可以是一条简单可执行语句;若循环体内需要多个语句,应该用大括号括起来,组成复若循环体内需要多个语句,应该用大括号括起来,组成复若循环体内需要多个语句,应该用大括号括起来,组成复若循环体内需要多个语句,应该
18、用大括号括起来,组成复合语句。合语句。合语句。合语句。2 2whilewhile循环的执行过程循环的执行过程循环的执行过程循环的执行过程(1 1)计算)计算)计算)计算whilewhile后一对圆括号中表达式的值。当值为后一对圆括号中表达式的值。当值为后一对圆括号中表达式的值。当值为后一对圆括号中表达式的值。当值为非零时,执行步骤(非零时,执行步骤(非零时,执行步骤(非零时,执行步骤(2 2);当值为零时,执行步骤();当值为零时,执行步骤();当值为零时,执行步骤();当值为零时,执行步骤(4 4)。)。)。)。(2 2)执行循环体中语句。)执行循环体中语句。)执行循环体中语句。)执行循环体
19、中语句。(3 3)转去执行步骤()转去执行步骤()转去执行步骤()转去执行步骤(1 1)。)。)。)。(4 4)退出)退出)退出)退出whilewhile循环。循环。循环。循环。由以上叙述可知,由以上叙述可知,由以上叙述可知,由以上叙述可知,whilewhile后一对圆括号中表达式的值后一对圆括号中表达式的值后一对圆括号中表达式的值后一对圆括号中表达式的值决定了循环体是否执行,因此,进入决定了循环体是否执行,因此,进入决定了循环体是否执行,因此,进入决定了循环体是否执行,因此,进入whilewhile循环后,一定循环后,一定循环后,一定循环后,一定要有能使此表达式的值变为要有能使此表达式的值变
20、为要有能使此表达式的值变为要有能使此表达式的值变为0 0的操作,否则,循环将会无的操作,否则,循环将会无的操作,否则,循环将会无的操作,否则,循环将会无限制地进行下去。限制地进行下去。限制地进行下去。限制地进行下去。请注意,不要把由请注意,不要把由请注意,不要把由请注意,不要把由if if语句构成的选择结构与由语句构成的选择结构与由语句构成的选择结构与由语句构成的选择结构与由whilewhile语语语语句构成的循环结构混同起来。若句构成的循环结构混同起来。若句构成的循环结构混同起来。若句构成的循环结构混同起来。若if if后条件表达式的值为非后条件表达式的值为非后条件表达式的值为非后条件表达式
21、的值为非零时,其后的零时,其后的零时,其后的零时,其后的if if子句只执行一次;而子句只执行一次;而子句只执行一次;而子句只执行一次;而whilewhile语句后条件表语句后条件表语句后条件表语句后条件表达式的值为非零时,其后的循环体中的语句将重复执行,达式的值为非零时,其后的循环体中的语句将重复执行,达式的值为非零时,其后的循环体中的语句将重复执行,达式的值为非零时,其后的循环体中的语句将重复执行,而且在设计循环时,通常应在循环体内改变条件表达式中而且在设计循环时,通常应在循环体内改变条件表达式中而且在设计循环时,通常应在循环体内改变条件表达式中而且在设计循环时,通常应在循环体内改变条件表
22、达式中有关变量的值,使条件表达式的值最终变成有关变量的值,使条件表达式的值最终变成有关变量的值,使条件表达式的值最终变成有关变量的值,使条件表达式的值最终变成0 0,以便能及,以便能及,以便能及,以便能及时退出循环。时退出循环。时退出循环。时退出循环。5.1.45.1.4实例验证实例验证实例验证实例验证程序程序程序程序5-35-3:求输入的某个数是否为素数。若是,输出:求输入的某个数是否为素数。若是,输出:求输入的某个数是否为素数。若是,输出:求输入的某个数是否为素数。若是,输出YESYES,若不是,输出,若不是,输出,若不是,输出,若不是,输出NONO。素数是指那些大于素数是指那些大于素数是
23、指那些大于素数是指那些大于1 1,且除了,且除了,且除了,且除了1 1和它本身以外不能被其和它本身以外不能被其和它本身以外不能被其和它本身以外不能被其他任何数整除的数。如他任何数整除的数。如他任何数整除的数。如他任何数整除的数。如2 2、3 3、5 5、7 7、1111、都是素数;都是素数;都是素数;都是素数;4 4、6 6、8 8、9 9、则不是素数。则不是素数。则不是素数。则不是素数。为了判断某数为了判断某数为了判断某数为了判断某数x x是否为素数,最简单的方法是用是否为素数,最简单的方法是用是否为素数,最简单的方法是用是否为素数,最简单的方法是用2 2、3 3、4 4、x-1x-1,这些
24、数逐个去除,这些数逐个去除,这些数逐个去除,这些数逐个去除x x,看能否除尽,只要能被其,看能否除尽,只要能被其,看能否除尽,只要能被其,看能否除尽,只要能被其中某一个数除尽,中某一个数除尽,中某一个数除尽,中某一个数除尽,x x就不是素数;否则,若不能被任何一就不是素数;否则,若不能被任何一就不是素数;否则,若不能被任何一就不是素数;否则,若不能被任何一个数除尽,个数除尽,个数除尽,个数除尽,x x就是素数。就是素数。就是素数。就是素数。实际上只要试除到,就已经可以说明实际上只要试除到,就已经可以说明实际上只要试除到,就已经可以说明实际上只要试除到,就已经可以说明x x是否为素数了。是否为素
25、数了。是否为素数了。是否为素数了。这是因为如果小于等于的数都不能除尽这是因为如果小于等于的数都不能除尽这是因为如果小于等于的数都不能除尽这是因为如果小于等于的数都不能除尽x x,则大于的数也,则大于的数也,则大于的数也,则大于的数也不可能除尽不可能除尽不可能除尽不可能除尽x x。试除到,可以减少循环次数,提高程序的。试除到,可以减少循环次数,提高程序的。试除到,可以减少循环次数,提高程序的。试除到,可以减少循环次数,提高程序的运行效率。运行效率。运行效率。运行效率。程序代码如下:程序代码如下:程序代码如下:程序代码如下:#include#includemath.hmath.h main()ma
26、in()intinti,x,yes,a;i,x,yes,a;printf(Enterprintf(Enterintegernumber:);integernumber:);scanfscanf(%(%d,&xd,&x););yes=1;yes=1;i=2;i=2;a=(a=(int)sqrtint)sqrt(double)x);(double)x);while(yes&i=a)while(yes&i2x2时,进入循环,若时,进入循环,若时,进入循环,若时,进入循环,若x x为为为为素数,素数,素数,素数,yesyes的值不变,仍为的值不变,仍为的值不变,仍为的值不变,仍为1 1,若,若,若,若
27、x x能被能被能被能被2 2的某个数整除,的某个数整除,的某个数整除,的某个数整除,则则则则x x不是素数,使不是素数,使不是素数,使不是素数,使yesyes的值变为的值变为的值变为的值变为0 0,并且立即退出循环。退,并且立即退出循环。退,并且立即退出循环。退,并且立即退出循环。退出循环后,出循环后,出循环后,出循环后,if if的语句判断的语句判断的语句判断的语句判断yesyes的值为的值为的值为的值为1 1时,输出时,输出时,输出时,输出YESYES,否则,否则,否则,否则输出输出输出输出NONO。3 3)利用迭代公式再求出一个新的)利用迭代公式再求出一个新的)利用迭代公式再求出一个新的
28、)利用迭代公式再求出一个新的x1x1值,也就是用新的值,也就是用新的值,也就是用新的值,也就是用新的x0 x0又又又又求出了一个新的平方根值求出了一个新的平方根值求出了一个新的平方根值求出了一个新的平方根值x1x1,此值将更趋近真正的平方根,此值将更趋近真正的平方根,此值将更趋近真正的平方根,此值将更趋近真正的平方根值。值。值。值。(4 4)比较前后两次所求的平方根值)比较前后两次所求的平方根值)比较前后两次所求的平方根值)比较前后两次所求的平方根值x0 x0和和和和x1x1,若它们之间的,若它们之间的,若它们之间的,若它们之间的误差小于或等于指定的误差小于或等于指定的误差小于或等于指定的误差
29、小于或等于指定的10-510-5,则认为,则认为,则认为,则认为x1x1就是就是就是就是a a的平方根值,的平方根值,的平方根值,的平方根值,去执行步骤(去执行步骤(去执行步骤(去执行步骤(5 5);若它们之间的误差大于);若它们之间的误差大于);若它们之间的误差大于);若它们之间的误差大于10-510-5,则再转,则再转,则再转,则再转去执行步骤(去执行步骤(去执行步骤(去执行步骤(2 2),即继续循环进行迭代。),即继续循环进行迭代。),即继续循环进行迭代。),即继续循环进行迭代。(5 5)输出)输出)输出)输出a a的平方根值的平方根值的平方根值的平方根值 程序如下:程序如下:程序如下:
30、程序如下:#include#includemath.hmath.h main()main()floata,x0,x1;floata,x0,x1;printfprintf(Inputa:);(Inputa:);scanf(%f,&ascanf(%f,&a););if(aif(a0)1e-5);while(fabs(x0-x1)1e-5);printf(sqrt(%fprintf(sqrt(%f)=%fn,a,x1);)=%fn,a,x1);执行以上程序,给执行以上程序,给执行以上程序,给执行以上程序,给a a输入输入输入输入2 2时,将输出以下结果:时,将输出以下结果:时,将输出以下结果:时,将
31、输出以下结果:sqrt(2.000000)=1.414214sqrt(2.000000)=1.4142145.2.35.2.3知识归纳知识归纳知识归纳知识归纳1 1do-whiledo-while语句构成的循环结构语句构成的循环结构语句构成的循环结构语句构成的循环结构do-whiledo-while循环结构的形式如下:循环结构的形式如下:循环结构的形式如下:循环结构的形式如下:dodo循环体循环体循环体循环体whilewhile(表达式);(表达式);(表达式);(表达式);例如:例如:例如:例如:dodo i+;i+;s+=i;s+=i;while(i10);while(i10);说明:说明
32、:说明:说明:(1 1)dodo是是是是C C语言的关键字,必须和语言的关键字,必须和语言的关键字,必须和语言的关键字,必须和whilewhile联合使用。联合使用。联合使用。联合使用。(2 2)do-whiledo-while循环由循环由循环由循环由dodo开始,至开始,至开始,至开始,至whilewhile结束;必须注意的结束;必须注意的结束;必须注意的结束;必须注意的是:是:是:是:while(while(表达式表达式表达式表达式)后的后的后的后的“;”不可丢,它表示不可丢,它表示不可丢,它表示不可丢,它表示do-whiledo-while语句的结束。语句的结束。语句的结束。语句的结束。
33、(3 3)whilewhile后一对圆括号中的表达式可以是后一对圆括号中的表达式可以是后一对圆括号中的表达式可以是后一对圆括号中的表达式可以是C C语言中任意合语言中任意合语言中任意合语言中任意合法的表达式,由它控制循环是否执行。法的表达式,由它控制循环是否执行。法的表达式,由它控制循环是否执行。法的表达式,由它控制循环是否执行。(4 4)按语法,在)按语法,在)按语法,在)按语法,在dodo和和和和whilewhile之间的循环体只能是一条可执之间的循环体只能是一条可执之间的循环体只能是一条可执之间的循环体只能是一条可执行语句;若循环体内需要多个语句,应该用大括号括起来,行语句;若循环体内需
34、要多个语句,应该用大括号括起来,行语句;若循环体内需要多个语句,应该用大括号括起来,行语句;若循环体内需要多个语句,应该用大括号括起来,组成复合语句。组成复合语句。组成复合语句。组成复合语句。2 2do-whiledo-while循环的执行过程循环的执行过程循环的执行过程循环的执行过程(1 1)执行)执行)执行)执行dodo后面循环体中的语句。后面循环体中的语句。后面循环体中的语句。后面循环体中的语句。(2 2)计算)计算)计算)计算whilewhile后一对圆括号中表达式的值。当值为非零时,后一对圆括号中表达式的值。当值为非零时,后一对圆括号中表达式的值。当值为非零时,后一对圆括号中表达式的
35、值。当值为非零时,转去执行步骤(转去执行步骤(转去执行步骤(转去执行步骤(1 1);当值为零时,执行步骤();当值为零时,执行步骤();当值为零时,执行步骤();当值为零时,执行步骤(3 3)。)。)。)。(3 3)退出)退出)退出)退出do-whiledo-while循环。循环。循环。循环。由由由由do-whiledo-while构成的循环与构成的循环与构成的循环与构成的循环与whilewhile循环十分相似,它们之间的循环十分相似,它们之间的循环十分相似,它们之间的循环十分相似,它们之间的重要区别是:重要区别是:重要区别是:重要区别是:whilewhile循环控制出现在循环体之前,只有当循
36、环控制出现在循环体之前,只有当循环控制出现在循环体之前,只有当循环控制出现在循环体之前,只有当whilewhile后面表达式的值为非零时,才可能执行循环体;在后面表达式的值为非零时,才可能执行循环体;在后面表达式的值为非零时,才可能执行循环体;在后面表达式的值为非零时,才可能执行循环体;在do-whiledo-while构成的循环中,总是先执行一次循环体,然后构成的循环中,总是先执行一次循环体,然后构成的循环中,总是先执行一次循环体,然后构成的循环中,总是先执行一次循环体,然后再求表达式的值,因此,无论表达式的值是零还是非零,再求表达式的值,因此,无论表达式的值是零还是非零,再求表达式的值,因
37、此,无论表达式的值是零还是非零,再求表达式的值,因此,无论表达式的值是零还是非零,循环体至少执行一次。循环体至少执行一次。循环体至少执行一次。循环体至少执行一次。和和和和whilewhile循环一样,在循环一样,在循环一样,在循环一样,在do-whiledo-while循环体中,一定要有循环体中,一定要有循环体中,一定要有循环体中,一定要有能使能使能使能使whilewhile后表达式的值变为后表达式的值变为后表达式的值变为后表达式的值变为0 0的操作,否则,循环将会的操作,否则,循环将会的操作,否则,循环将会的操作,否则,循环将会无限制地进行下去。无限制地进行下去。无限制地进行下去。无限制地进
38、行下去。5.2.45.2.4实例验证实例验证实例验证实例验证程序程序程序程序5-55-5:从输入的若干个大于零的正整数中选出最大:从输入的若干个大于零的正整数中选出最大:从输入的若干个大于零的正整数中选出最大:从输入的若干个大于零的正整数中选出最大值。用值。用值。用值。用-1-1结束输入。结束输入。结束输入。结束输入。在程序的第一个在程序的第一个在程序的第一个在程序的第一个 do-whiledo-while循环中,要求输入一个大于循环中,要求输入一个大于循环中,要求输入一个大于循环中,要求输入一个大于零的数或输入一个零的数或输入一个零的数或输入一个零的数或输入一个-1-1放入放入放入放入x x
39、中,不满足此条件时,循环继中,不满足此条件时,循环继中,不满足此条件时,循环继中,不满足此条件时,循环继续不断要求输入一个数,直到满足条件为止。退出续不断要求输入一个数,直到满足条件为止。退出续不断要求输入一个数,直到满足条件为止。退出续不断要求输入一个数,直到满足条件为止。退出do-do-whilewhile循环后,若循环后,若循环后,若循环后,若x x中的数为中的数为中的数为中的数为-1-1,不进入下面的,不进入下面的,不进入下面的,不进入下面的whilewhile循环,循环,循环,循环,程序运行结束。若程序运行结束。若程序运行结束。若程序运行结束。若x x中的数不是中的数不是中的数不是中
40、的数不是-1-1,进入下面的,进入下面的,进入下面的,进入下面的whilewhile循循循循环。程序中用变量环。程序中用变量环。程序中用变量环。程序中用变量maxmax存放最大值。在存放最大值。在存放最大值。在存放最大值。在whilewhile循环中每给循环中每给循环中每给循环中每给变量变量变量变量x x读入一个值,就去读入一个值,就去读入一个值,就去读入一个值,就去 断它是否大于断它是否大于断它是否大于断它是否大于0 0并且大于并且大于并且大于并且大于maxmax,若是,则用新的,若是,则用新的,若是,则用新的,若是,则用新的x x值替值替值替值替换换换换maxmax原来的值,否则什么也不做
41、;如此循环,直到读入原来的值,否则什么也不做;如此循环,直到读入原来的值,否则什么也不做;如此循环,直到读入原来的值,否则什么也不做;如此循环,直到读入结束标志(结束标志(结束标志(结束标志(-1-1)为止。最后输出所求得的最大数。)为止。最后输出所求得的最大数。)为止。最后输出所求得的最大数。)为止。最后输出所求得的最大数。程序代码如下:程序代码如下:程序代码如下:程序代码如下:main()main()intintx,max,i;x,max,i;printf(Enterprintf(Enterx(-1toend):);x(-1toend):);dodoscanf(%d,&xscanf(%d,
42、&x););while(xwhile(x0&x!=-1);0&xmax)max=x;0&xmax)max=x;/*max/*max始终始终始终始终存放到目前为止大于零的最大值存放到目前为止大于零的最大值存放到目前为止大于零的最大值存放到目前为止大于零的最大值*/if(maxif(max!=-1)!=-1)printf(maxprintf(max=%=%dn,maxdn,max););当输入以下数据时:当输入以下数据时:当输入以下数据时:当输入以下数据时:4 46 68 81212-9-956561 12 2-1-1输出结果如下:输出结果如下:输出结果如下:输出结果如下:max=56max=56
43、5.3 for语句和用for语句构成的循环结构5.3.15.3.1相关知识相关知识相关知识相关知识forfor语句结构简洁,使用方便,由语句结构简洁,使用方便,由语句结构简洁,使用方便,由语句结构简洁,使用方便,由forfor语句构成的循环语句构成的循环语句构成的循环语句构成的循环按指定的次数执行循环体,它在循环体中使用一个循环变按指定的次数执行循环体,它在循环体中使用一个循环变按指定的次数执行循环体,它在循环体中使用一个循环变按指定的次数执行循环体,它在循环体中使用一个循环变量,每重复一次后,循环变量的值会自动增加或减少。量,每重复一次后,循环变量的值会自动增加或减少。量,每重复一次后,循环
44、变量的值会自动增加或减少。量,每重复一次后,循环变量的值会自动增加或减少。5.3.25.3.2程序范例程序范例程序范例程序范例1 1范例一范例一范例一范例一程序程序程序程序5-65-6:请编写一个程序,计算半径为:请编写一个程序,计算半径为:请编写一个程序,计算半径为:请编写一个程序,计算半径为0.50.5、1.51.5、2.52.5、3.53.5、4.54.5、5.5mm5.5mm时的圆面积。时的圆面积。时的圆面积。时的圆面积。本例要求计算本例要求计算本例要求计算本例要求计算6 6个不同半径的圆面积,且半径值的变个不同半径的圆面积,且半径值的变个不同半径的圆面积,且半径值的变个不同半径的圆面
45、积,且半径值的变化是有化是有化是有化是有规律的,从规律的,从规律的,从规律的,从0.5mm0.5mm开始按增开始按增开始按增开始按增1mm1mm的规律递增,可直接用半的规律递增,可直接用半的规律递增,可直接用半的规律递增,可直接用半径径径径r r作为作为作为作为forfor循环控制变量,每循环一次使循环控制变量,每循环一次使循环控制变量,每循环一次使循环控制变量,每循环一次使r r增增增增1 1,直到,直到,直到,直到r r大于大于大于大于5.55.5为止。程序代码如下:为止。程序代码如下:为止。程序代码如下:为止。程序代码如下:main()main()floatfloatr,sr,s;con
46、stfloatPi=3.14159;constfloatPi=3.14159;for(rfor(r=0.5;r6.0;r+)=0.5;r6.0;r+)s=Pi*r*r;s=Pi*r*r;printf(rprintf(r=%fs=%=%fs=%fn,rfn,r,s);,s);程序定义了一个不可变的变量程序定义了一个不可变的变量程序定义了一个不可变的变量程序定义了一个不可变的变量PiPi,它的值是,它的值是,它的值是,它的值是3.141593.14159;变量;变量;变量;变量r r既用作循环控制变量又是半径的值,它的值同既用作循环控制变量又是半径的值,它的值同既用作循环控制变量又是半径的值,它的
47、值同既用作循环控制变量又是半径的值,它的值同0.50.5变化到变化到变化到变化到5.55.5,循环体共执行,循环体共执行,循环体共执行,循环体共执行6 6次,当次,当次,当次,当r r增到增到增到增到6.56.5时,条件表达时,条件表达时,条件表达时,条件表达式式式式r6.0r6.0的值为的值为的值为的值为0 0,从而退出循环。,从而退出循环。,从而退出循环。,从而退出循环。forfor循环的循环体是用花括号括起来的复合语句,其中循环的循环体是用花括号括起来的复合语句,其中循环的循环体是用花括号括起来的复合语句,其中循环的循环体是用花括号括起来的复合语句,其中包含两条语句,通过赋值语句把求出的
48、圆面积值放在变量包含两条语句,通过赋值语句把求出的圆面积值放在变量包含两条语句,通过赋值语句把求出的圆面积值放在变量包含两条语句,通过赋值语句把求出的圆面积值放在变量s s中,然后输出中,然后输出中,然后输出中,然后输出r r和和和和s s的值。的值。的值。的值。2 2范例二范例二范例二范例二程序程序程序程序5-75-7:求:求:求:求n n!,即计算!,即计算!,即计算!,即计算123n123n的值。的值。的值。的值。程序代码如下:程序代码如下:程序代码如下:程序代码如下:main()main()intinti,s,n;i,s,n;/*/*变量变量变量变量s s放放放放置连乘的积置连乘的积置
49、连乘的积置连乘的积*/s=1;s=1;/*/*注意:注意:注意:注意:s s的初值的初值的初值的初值为为为为1*/1*/printf(Enterprintf(Entern:);n:);scanf(%d,&nscanf(%d,&n););/*/*给给给给n n读入读入读入读入值,值,值,值,n n表示最后一个因子的值表示最后一个因子的值表示最后一个因子的值表示最后一个因子的值*/for(ifor(i=1;i=n;i+)=1;i=n;i+)/*/*用用用用n n作为作为作为作为循环的终值循环的终值循环的终值循环的终值*/s=s*i;s=s*i;printf(sprintf(s=%=%dn,sdn,
50、s););以上程序是连乘算法的典型例题,与累加一样,连乘以上程序是连乘算法的典型例题,与累加一样,连乘以上程序是连乘算法的典型例题,与累加一样,连乘以上程序是连乘算法的典型例题,与累加一样,连乘也是程序设计的基本算法之一。程序中也是程序设计的基本算法之一。程序中也是程序设计的基本算法之一。程序中也是程序设计的基本算法之一。程序中i i从从从从1 1变化到变化到变化到变化到n n,每,每,每,每次增次增次增次增1 1。循环体内的表达式。循环体内的表达式。循环体内的表达式。循环体内的表达式s=s*is=s*i用来进行连乘。用来进行连乘。用来进行连乘。用来进行连乘。在连乘算法中,存放连乘积的变量也必