《第5章循环结构程序设计语句.ppt》由会员分享,可在线阅读,更多相关《第5章循环结构程序设计语句.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、5 5第5章循环结构的程序设计循环结构的程序设计第第5章章 循环结构的程序设计循环结构的程序设计一、内容提要一、内容提要5.1 while语句和语句和do-while语句(格式、示例、注意)语句(格式、示例、注意)5.2 for语句(格式、示例、注意)语句(格式、示例、注意)5.3 循环的嵌套循环的嵌套5.4 continue与与break语句语句5.5循环程序设计举例循环程序设计举例二、重点与难点二、重点与难点1、三种循环的执行过程及区别三种循环的执行过程及区别2、break 语句与语句与continue 语句的区别语句的区别 在人们所要处理的问题中常常遇到需要在人们所要处理的问题中常常遇到
2、需要反复执行某一操作的情况。这就需要用到循反复执行某一操作的情况。这就需要用到循环控制。许多应用程序都包含循环。顺序结环控制。许多应用程序都包含循环。顺序结构、选择结构和循环结构是结构化程序设计构、选择结构和循环结构是结构化程序设计的的3种基本结构,是各种复杂程序的基本构种基本结构,是各种复杂程序的基本构造单元。因此程序设计者必须熟练掌握循环造单元。因此程序设计者必须熟练掌握循环结构的概念及使用方法。结构的概念及使用方法。while语句的一般形式如下:语句的一般形式如下:while(表达式表达式)语句语句其作用是:其作用是:当指定的条件为真当指定的条件为真(表达式为非表达式为非0)时,执行时,
3、执行while语句中的内嵌语句。其流程语句中的内嵌语句。其流程图见图图见图5-1。其特点是:先判断表达式,后执。其特点是:先判断表达式,后执行语句。行语句。while循环称为当型循环循环称为当型循环。图5-15.1.1 用while语句构成循环例例5.1 求求1+2+3+100。用流程图表示算法,见图用流程图表示算法,见图5-2。#include using namespace std;int main()int i=1,sum=0;while(i=100)sum=sum+i;i+;coutsum=sumendl;运行结果为运行结果为sum=5050图5-2需要注意:需要注意:(1)循环体如果
4、包含一个以上的语句,应该用花括循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。如果不加花括号,号括起来,以复合语句形式出现。如果不加花括号,则则while语句的范围只到语句的范围只到while后面第一个分号处。后面第一个分号处。(2)在循环体中应有使循环趋向于结束的语句。在循环体中应有使循环趋向于结束的语句。do-while语句的特点是先执行循环体,然后判断循语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为环条件是否成立。其一般形式为do 语句语句 while(表达式表达式)它是这样执行的:先执行一次指定的语句它是这样执行的:先执行一次指定的语句(即循环即
5、循环体体),然后判别表达式,当表达式的值为非零,然后判别表达式,当表达式的值为非零(“真真”)时,返回重新执行循环体语句,如此反复,直时,返回重新执行循环体语句,如此反复,直到表达式的值等于到表达式的值等于0为止,此时循环结束。可以用为止,此时循环结束。可以用图图5-3表示其流程。表示其流程。5.1.2 do-while语句 图5-3 图5-4例例5.2 用用do-while语句求语句求1+2+3+100。先画出流程图,见上图先画出流程图,见上图5-4。#include using namespace std;int main()int i=1,sum=0;do sum=sum+i;i+;wh
6、ile(i=100);coutsum=sumendl;return 0;运行结果与例运行结果与例5.1相同。相同。可以看到:对同一个问题可以用可以看到:对同一个问题可以用while语句处理,也语句处理,也可以用可以用dowhile语句处理。语句处理。dowhile语句结构可语句结构可以转换成以转换成while结构。结构。二者区别二者区别C+中的中的for语句使用最为广泛和灵活,不仅可以用语句使用最为广泛和灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可数不确定而只给出循环结束条件的情况,它完全可
7、以代替以代替while语句。语句。for语句的一般格式为语句的一般格式为for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句它的执行过程如下:它的执行过程如下:(1)先求解表达式先求解表达式1。(2)求解表达式求解表达式2,若其值为真,若其值为真(值为非值为非0),则执行,则执行for语句中指定的内嵌语句,然后执行下面第语句中指定的内嵌语句,然后执行下面第(3)步。步。若为假若为假(值为值为0),则结束循环,转到第,则结束循环,转到第(5)步。步。5.2 for语句(3)求解表达式求解表达式3。(4)转回上面第转回上面第(2)步骤继续执行。步骤继续执行。(5)循环结束,执行循环
8、结束,执行for语句下面的一个语句。语句下面的一个语句。可以用图可以用图5-5来表示来表示for语句的执行过程。语句的执行过程。图5-5for语句最简单的形式也是最容易理解的格式如下:语句最简单的形式也是最容易理解的格式如下:for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值)语句语句 例如例如for(i=1;i=100;i+)sum=sum+i;它的执行过程与图它的执行过程与图5-2完全一样。它相当于以下语句:完全一样。它相当于以下语句:i=1;while(i=100)sum=sum+i;i+;显然,用显然,用for语句简单、方便。语句简单、方便。for语句
9、的使用有许多技巧,可以使程序精炼简洁。语句的使用有许多技巧,可以使程序精炼简洁。说明:说明:(1)for语句的一般格式中的语句的一般格式中的“表达式表达式1”可以省略,可以省略,此时应在此时应在for语句之前给循环变量赋初值。语句之前给循环变量赋初值。(2)如果表达式如果表达式2省略,即不判断循环条件,循环无省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式终止地进行下去。也就是认为表达式2始终为真。始终为真。(3)表达式表达式3也可以省略,但此时程序设计者应另外也可以省略,但此时程序设计者应另外设法保证循环能正常结束。设法保证循环能正常结束。(4)可以省略表达式可以省略表达式1和
10、表达式和表达式3,只有表达式,只有表达式2,即,即只给循环条件。只给循环条件。(5)3个表达式都可省略。个表达式都可省略。(6)表达式表达式1可以是设置循环变量初值的赋值表达式,可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。也可以是与循环变量无关的其他表达式。(7)表达式一般是关系表达式表达式一般是关系表达式(如如i=100)或逻辑表或逻辑表达式达式(如如ab&xy),但也可以是数值表达式或字但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。符表达式,只要其值为非零,就执行循环体。C+中的中的for语句比其他语言中的循环语句功能强得语句比其他语言中的循环
11、语句功能强得多。可以把循环体和一些与循环控制无关的操作也多。可以把循环体和一些与循环控制无关的操作也作为表达式作为表达式1或表达式或表达式3出现,这样程序可以短小简出现,这样程序可以短小简洁。但过分地利用这一特点会使洁。但过分地利用这一特点会使for语句显得杂乱,语句显得杂乱,可读性降低,建议不要把与循环控制无关的内容放可读性降低,建议不要把与循环控制无关的内容放到到for语句中。语句中。(1)3种循环都可以用来处理同一问题,一般情况下种循环都可以用来处理同一问题,一般情况下它们可以互相代替。它们可以互相代替。(2)while和和do-while循环,是在循环,是在while后面指定循环后面指
12、定循环条件的,在循环体中应包含使循环趋于结束的语句条件的,在循环体中应包含使循环趋于结束的语句(如如i+,或或i=i+1等等)。for循环可以在表达式循环可以在表达式3中包含使循环趋于结束的中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式操作,甚至可以将循环体中的操作全部放到表达式3中。因此中。因此for语句的功能更强,凡用语句的功能更强,凡用while循环能完循环能完成的,用成的,用for循环都能实现。循环都能实现。(3)用用while和和do-while循环时,循环变量初始化的循环时,循环变量初始化的操作应在操作应在while和和do-while语句之前完成。而语句之前完
13、成。而for语句语句可以在表达式可以在表达式1中实现循环变量的初始化。中实现循环变量的初始化。几种循环的比较几种循环的比较一个循环体内又包含另一个完整的循环结构,称为一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。是多层循环。3种循环种循环(while循环、循环、dowhile循环和循环和for循环循环)可可以互相嵌套。例如,下面几种都是合法的形式:以互相嵌套。例如,下面几种都是合法的形式:(1)while()while()5.3 循环的嵌套(2)do dowhile();while();(3)fo
14、r(;)for(;)(4)while()dowhile();(5)for(;)while()(6)do for(;)while();在在4.3节中已经介绍过用节中已经介绍过用break语句可以使流语句可以使流程跳出程跳出switch结构,继续执行结构,继续执行switch语句下面语句下面的一个语句。实际上,的一个语句。实际上,break语句还可以用语句还可以用于循环体内。于循环体内。break语句的一般格式为语句的一般格式为break;其作用为使流程从循环体内跳出循环体,即其作用为使流程从循环体内跳出循环体,即提前结束循环,接着执行循环体下面的语句。提前结束循环,接着执行循环体下面的语句。br
15、eak语句只能用于循环语句和语句只能用于循环语句和switch语句内,语句内,不能单独使用或用于其他语句中。不能单独使用或用于其他语句中。5.4 break语句和语句和continue语句语句continue语句的一般格式为语句的一般格式为continue;其作用为结束本次循环,即跳过循环体中下面尚未其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。执行的语句,接着进行下一次是否执行循环的判定。continue语句和语句和break语句的区别是:语句的区别是:continue语句语句只结束本次循环,而不是终止整个循环的执行。而只结束本次循环,而不是终止整
16、个循环的执行。而break语句则是结束整个循环过程,不再判断执行语句则是结束整个循环过程,不再判断执行循环的条件是否成立。如果有以下两个循环结构:循环的条件是否成立。如果有以下两个循环结构:(1)while(表达式表达式1)if(表达式表达式2)break;(2)while(表达式表达式1)if(表达式表达式2)continue;程序程序(1)的流程图如图的流程图如图5-18所示,而程序所示,而程序(2)的流程的流程如图如图5-19所示。请注意图所示。请注意图5-18和图和图5-19中当中当“表达表达式式2”为真时流程的转向。为真时流程的转向。图5-18 图5-19例例5.5 用下面公式求用下
17、面公式求的近似值。的近似值。/41-1/3+1/5-1/7+直到直到最后一项的绝对值小于最后一项的绝对值小于10-7为止。为止。根据给定的算法很容易编写程序如下:根据给定的算法很容易编写程序如下:#include#include#include using namespace std;int main()int s=1;double n=1,t=1,pi=0;while(fabs(t)1e-7)pi=pi+t;n=n+2;5.5 编写循环结构的程序编写循环结构的程序 s=-s;t=s/n;pi=pi*4;coutpi=setiosflags(ios fixed)setprecision(6)p
18、iendl;return 0;运行结果为运行结果为pi=3.141592注意:注意:不要把不要把n定义为整型变量,否则在执行定义为整型变量,否则在执行“t=s/n;”时,时,得到得到t的值为的值为0(原因是两个整数相除原因是两个整数相除)。例例5.6 求求Fibonacci数列前数列前40个数。这个数列有如下特点:第个数。这个数列有如下特点:第1、2个数为个数为1、1。从第。从第3个数开始,每个数是其前面两个数个数开始,每个数是其前面两个数之和。即之和。即F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n3)这是一个有趣的古典数学问题:有一对兔子,从出生后第这是一个有趣的古
19、典数学问题:有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第个月起每个月都生一对兔子。小兔子长到第3个月后每个月个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?数为多少?可以列表看出兔子数的规律。可以列表看出兔子数的规律。根据给出的每月兔子总数的关系,可编写程序如下:根据给出的每月兔子总数的关系,可编写程序如下:#include#include using namespace std;int main()long f1,f2;int i;f1=f2=1;for(i=1;i=20;i+)coutsetw(12
20、)f1setw(12)f2;if(i%2=0)coutendl;/每输出完每输出完4个数后换行,使每行输出个数后换行,使每行输出4个数个数 f1=f1+f2;/左边的左边的f1代表第代表第3个数,是第个数,是第1、2个数之和个数之和 f2=f2+f1;/左边的左边的f2代表第代表第4个数,是第个数,是第2、3个数之和个数之和 return 0;例5.8找出找出100200间的全部素数。间的全部素数。#include#include#include using namespace std;int main()int m,k,i,n=0;bool prime;/定义布尔变量定义布尔变量prime
21、for(m=101;m=200;m=m+2)/判别判别m是否为素数,是否为素数,m由由101变化到变化到200,增量为,增量为2 prime=true;/循环开始时设循环开始时设prime为真,即先认为为真,即先认为m为素数为素数k=int(sqrt(m);/用用k代表根号代表根号m的整数部分的整数部分 for(i=2;i=k;i+)/此循环作用是将此循环作用是将m被被2根号根号m除,检查是否能除,检查是否能整除整除if(m%i=0)/如果能整除,表示如果能整除,表示m不是素数不是素数 prime=false;/使使prime变为假变为假break;/终止执行本循环终止执行本循环 if(prime)/如果如果m为素数为素数 coutsetw(5)m;/输出素数输出素数m,字段宽度为字段宽度为5 n=n+1;/n用来累计输出素数的个数用来累计输出素数的个数 if(n%10=0)coutendl;/输出输出10个数后换行个数后换行 coutendl;/最后执行一次换行最后执行一次换行 return 0;
限制150内