资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,C+,程序设计基础,2011,*,第,4,章,C+,的流程控制语句,第,4,章,C+,的流程控制语句,熟练掌握,C+,各种流程控制语句的阅读与编写,分支控制语句:,if-else,语句,多分支控制语句:,switch,语句,三种循环语句:,for,循环、,while,循环和,do-while,循环语句,跳转语句:,break,、,continue,、,goto,语句和,exit,、,abort,函数,本章学习目标,C+,程序设计基础,2011,1,预备知识,算法及其表示,针对要解决的问题安排的一系列特定的计算机操作,即是解决问题的,算法,。,算法包括:计算机执行的操作;计算机执行操作的顺序。,算法的表示:,先用伪码或流程图表示,并逐步完善;,再用计算机语言实现,形成能解决问题的程序。,C+,程序设计基础,2011,2,伪码,用类似计算机语言的分句格式,以自然语言描述算法。,好处:便于掌握和使用,可以帮助编程者构思、完善算法,且很容易转换为用计算机语言实现的程序。,C+,程序设计基础,2011,3,流程图,用专用的图形符号的组合表示算法或程序,也可以表示部分程序。,好处:可以直观地表示算法和程序的执行程序。,C+,程序设计基础,2011,4,开始框和结束框:表示流程的开始和结束,执行框:表示计算、输入、输出等操作,判断框:表示判定条件,根据给定的条件决定执行几条路径中的某一条,流程线:表示程序流程的方向,联系框:用于流程图的转接处,将流程图连接起来,在连接点处的圆内标以相同数字表示程序的同一点,C+,程序设计基础,2011,5,例:,某班有,45,名学生参加一门课程的考试,从键盘输入每名学生的成绩,如果高于,60,,则显示器输出为,Passed,;否则,输出,Failed,。此外,还要统计全班考试的平均成绩。,C+,程序设计基础,2011,6,伪码表示,开始;,定义并初始化变量,grade,total(0),average,num(30),i;,i=0;,只要循环控制变量,i,小于,num;,输入一个成绩,grade,;,如果,grade60,输出“,Passed”,;,否则,输出“,Failed”,;,把,grade,加到,total,;,i,增加,1;,平均值,average,total/num,;,输出,average,;,结束,C+,程序设计基础,2011,7,流程图,顺序结构,选择结构,循环结构,C+,程序设计基础,2011,8,C+,程序的基本结构:,顺序结构,按从上到下的顺序依次执行各个语句,选择结构,根据不同的条件作出不同的选择,从而执行不同的语句,循环结构,对程序中某些语句重复执行多次,4.1 C+,语言的语句和程序结构,C+,程序设计基础,2011,9,+,语言的语句可以分为以下六大类,:,1,、说明语句,在,C+,中,把完成数据结构的定义和描述、对变量的定义性说明都作为说明语句。,2,、控制语句,完成一定控制功能的语句,即有可能改变程序执行顺序的语句。,3,、函数调用语句,在一次函数的调用后加上一个分号所构成的语句。,C+,程序设计基础,2011,10,4、表达式语句,在任意表达式之后加上一个分号,就构成一个表达式语句。,5、空语句,只由一个分号所构成的语句,主要用于指明被转向的控制点或在特殊情况下作为循环语句的循环体。,6,、复合语句(也称为块语句),用花括号,把一个或多个语句括起来后所构成的一个语句,称为复合语句。,C+,把它作为一个语句来处理。,C+,程序设计基础,2011,11,if,条件语句,根据给定的条件,决定执行两个分支中的某一个分支。,switch,开关语句,多选择语句,根据给定的条件,从多个分支语句序列中选择执行一个分支的语句序列,如同一个“单刀多掷开关”。,4.2,选择结构语句,C+,程序设计基础,2011,12,4.2.1 if,选择语句,基本语法形式,if(,表达式,),语句,1,;,else,语句,2,;,/*,其中,语句,1,和语句,2,可以是单条语句,也可以是复合语句,复合语句是用大括号括起来的一组相关语句,即语句块。*,/,C+,程序设计基础,2011,13,根据具体的选择问题,,if,语句的形式主要有:,没有,else,分支;,双分支;,多分支;,If,语句的嵌套。,没有,else,分支,语句形式:,if(,表达式,),语句;,/*,用于有条件地执行特定操作,即如果表达式为真,则执行下面的选择体语句,(,或语句块,),;否则,跳过此语句,(,或语句块,),,执行,if,语句机构下面的其它语句。*,/,C+,程序设计基础,2011,14,/*,如果考试成绩为,60,分以上,则输出提示“通过”;否则,不处理。*,/,表达式,选择体语句,(,或语句块,),表达式为真,表达式为假,if(grade,=60),cout,“,通过”,y),cout,x;,else,cout,=90),cout,=80),cout,=70),cout,=60),cout,“D”;,else,cout,“F”;,/*,编写多分支程序时要注意分支的顺序,。,*,/,C+,程序设计基础,2011,20,4.if,语句的嵌套,if(,表达式,1),if(,表达式,2),语句,1;,else,语句,2;,else,if(,表达式,3),语句,3;,else,语句,4;,内嵌,if,内嵌,if,C+,程序设计基础,2011,21,C+,程序设计基础,2011,22,每个,if,可能与一个,else,相匹配,也可能不与,else,相匹配;但每一个,else,都必须与一个,if,相匹配。,else,与,if,的配对规则是:从最内层开始,else,总是与其前面,最近的,未曾匹配的且为可见的,if,配对。,建议嵌套层数不超过,5,层。,C+,程序设计基础,2011,23,B)b=1;,if(a=0),if(a,=0),b=0,;,else b=-1;,例,A)b=1;,if(a=0),if(a,=0),b=0,;,else b=-1;,=,0,1,0,0,0,1,a,a,a,b,-,=,0,1,0,0,0,1,a,a,a,b,C+,程序设计基础,2011,24,代码,1,if(,条件,1),if(,条件,2),语句,1;,else,if(,条件,3),语句,2;,else,语句,3;,代码,2,if(,条件,1),if(,条件,2),语句,1;,else,if(,条件,3),语句,2;,else,语句,3;,代码,3,if(,条件,1),if(,条件,2),语句,1;,else,if(,条件,3),语句,2;,else,语句,3;,C+,程序设计基础,2011,25,解决嵌套问题,就是把内嵌的,if,语句放入一对花括号中,使结构清晰,增强代码的可读性。,C+,程序设计基础,2011,26,4.2.2 switch,选择语句,switch,语句是开关语句,也称为多选择语句。它可以根据给定的条件,从多个分支语句序列中选择执行一个分支的语句序列。,一般格式:,switch(),case,常量表达式,1:,语句序列,1,break;,case,常量表达式,2:,语句,2;,break;,.,case,常量表达式,n:,语句,n;,break;,default:,语句,n+1;,/*,其中,,可以是任一符合,C+,语法规则的表达式,但表达式的值只能是,字符型或整型,;,只能是由常量所组成的表达式,其值也只能是,字符型常量或整型常量,且要与表达式的值的类型相同,。*,/,C+,程序设计基础,2011,27,switch,语句的执行过程是这样的:首先计算,表达式,的值,然后,其结果值依次与每一个常量表达式的值进行匹配。如果匹配成功,则执行该常量表达式后的语句系列。当遇到,break,时,则立即结束,switch,语句的执行,否则,顺序执行到花括号中的最后一条语句。,default,情形是可选的,如果没有常量表达式的值与,表达式,的值匹配,则执行,default,后的语句系列。,C+,程序设计基础,2011,28,当需要进行一系列的判定时,,if,语句显得很臃肿。,if(grade,=90),cout,=80),cout,=70),cout,=60),cout,“D”;,else,cout,“F”;,C+,程序设计基础,2011,29,switch(grade/10),case 10:,case 9:,cout,A;,break;,case 8:,cout,B;,break;,case 7:,cout,C;,break;,case 6:,cout,D;,break;,default:,cout,E;,break;,注意:,default,的位置可在任何地方,但按惯例都放在后面,若干个入口可共用一段代码,匹配某个常量后,执行相应的语句,直到,switch,语句的结束或遇到,break,语句,break,语句:在,switch,中的作用是结束,switch,按编程序惯例,在最后一个分支后也加上,break;,C+,程序设计基础,2011,30,例,:,计算并输出正弦函数在,02,之间的函数值,间隔为,/8,。,cout,sin(,/8,),endl,;,cout,sin(2*,/8,),endl,;,cout,sin(3*,/8,),endl,;,cout,sin(4*,/8,),endl,;,cout,sin(5*,/8,),endl,;,cout,sin(6*,/8,),endl,;,cout,sin(7*,/8,),endl,;,cout,sin(8*,/8,),endl,;,4.3,循环结构语句,C+,程序设计基础,2011,31,在实际编程中,常常会遇到以下一些情况:,实现某些操作,(,语句,),的多次执行,执行过程中,只是其中的某些变量的值发生变化,而且是按照一定的规律变化的;,在某一条件成立时,重复执行某些操作。,解决办法:,采用循环语句结构,既能解决重复执行的问题,又能使程序结构简练。,C+,程序设计基础,2011,32,循环语句结构的主要部分:,循环控制条件,决定循环的执行次数,一般为有限循环,即控制循环操作是否执行的条件,以表达式的形式给定,循环体,由需要重复执行的操作,(,语句,),构成,循环控制变量,用来记录循环体执行的次数,C+,程序设计基础,2011,33,实现一定条件下的重复操作,格式:,while(,表达式,),循环体语句,;,亦称为,当型结构,4.3.1 while,语句,C+,程序设计基础,2011,34,例:计算,1n,个整数平方和的均值。,#include,void main(),int,k(1),sum(0),n;,cout,n;,while(k,0),mean=sum/n;,else,mean=0;,cout,1,n,个整数平方和的均值,mean,endl,;,C+,程序设计基础,2011,35,注意:,编程技巧利用循环结构实现迭代求和时,表示和的变量的初值必须赋为,0,。,循环体如果多于一句,必须采用复合语句形式,否则只执行循环体的第一句。,一般,while,语句的循环控制变量在,while,语句之前被赋值,并在循环体内被修改,使循环语句能正常结束。循环结构的循环体内应该有使循环趋于结束的语句,即修改循环控制变量的语句。,如果,while,语句的条件一开始就不满足,则循环体语句就一次也不执行。,C+,程序设计基础,2011,36,也是实现一定条件下的重复操作,格式:,do,循环体语句,;,while(,表达式,),;,亦称为,直到型结构,while,后面的分号,4.3.2 do-while,语句,C+,程序设计基础,2011,37,例:计算,1n,个整数平方和的均值。,#include,void main(),int,k(1),sum(0),n,,,mean;,cout,n;,do,sum=,sum+k,*k;,k+;,while(k,0),mean=sum/n;,else,mean=0;,cout,1,n,个整数平方和的均值,mean,endl,;,C+,程序设计基础,2011,38,while,先判断后执行;,do-while,先执行后判断;,即,while,语句的循环体有可能一次也不执行,而,do-while,语句的循环体至少要执行一次。,C+,程序设计基础,2011,39,格式:,for(,表达式,1;,表达式,2;,表达式,3),循环体语句,;,4.3.2 for,语句,for(,循环控制变量赋初值,;,循环条件,;,修改循环控制变量值,),循环体语句,;,表达式,1;while(,表达式,2),语句,;,表达式,3;,C+,程序设计基础,2011,40,for,循环语句使用灵活,可以有多种变化形式:,3,个表达式的任何一个或几个都可以不写,但是“,;”,不能省略;,省略“表达式,1”,,意味着循环控制变量赋初值的语句放在,for,语句之前完成;,省略“表达式,2”,,意味着,for,语句变成无限循环(死循环),很少使用,但可以在循环体内用,break,语句来结束循环;,省略“表达式,3”,,就要采用其它方式来控制循环变量,例如,可以通过循环体内的语句来改变循环变量的值;,C+,程序设计基础,2011,41,同时省略“表达式,1”,和“表达式,3”,,,for,语句就等同于,while,语句了;,表达式,1,和表达式,3,都可以是逗号语句,如:,for(sum,=0,k=1;k=10;k+),sum=,sum+k,*k;,注意:,这些形式虽然反映了,for,语句的灵活性,但是程序的可读性差了。一般还是应该使用完整的,for,语句形式。,C+,程序设计基础,2011,42,例:计算,1,到,10,的阶乘。,#include,void main(),int,n=0;/,循环变量的初始化,unsigned long factorial(1);,for(;+n,=10;)/,表达式,2,也完成了表达式,3,的功能,factorial*=n;,cout,n!=factorial,endl,;,防止变量为随机数或,0,所以要在循环开始前赋确定值,C+,程序设计基础,2011,43,三种循环语句的比较:,for,和,while,语句都是先判断循环条件,后执行循环体;,do-while,语句是先执行循环体,再判断循环条件;,for,语句适用于解决循环次数确定的问题。,C+,程序设计基础,2011,44,循环结构嵌套是指一个循环结构的循环体内又包含另一个循环语句的结构,使用循环嵌套可以构成多重循环结构。,循环嵌套既可以是某一种循环语句的嵌套,也可以是,while,,,do-while,和,for,三种循环语句的相互嵌套。,此外,循环结构和选择结构也可以相互嵌套,是指循环结构的循环体包括选择结构,或是选择结构的任意一个分支包含循环结构。,C+,程序设计基础,2011,45,例:编写程序打印下列菱形图案。菱形的行数可由键盘输入。,*,*,*,*,*,*,*,分析:这是显示一个二维图形,每一个位置上所需要的信息包括行号、列号、字符,其中行号、列号控制显示的位置,字符为要显示的内容。处理二维的问题一般用两层循环实现比较直观。,*,*,*,*,*,*,*,*,*,*,*,*,*,*,C+,程序设计基础,2011,46,设计:用外层循环控制行,内层循环控制每一行中的每一个位置(列的位置)。,外层循环的循环控制变量取值是从第一行到最后一行;,内层循环的要根据图形的变化分别确定输出空格和星号的循环次数。,C+,程序设计基础,2011,47,循环语句与条件语句的嵌套,例:计算,100-200,之间的全部素数。,条件语句:判断某一个数是否为素数;,循环语句:处理所有的数的判断。,C+,程序设计基础,2011,48,注意:,嵌套的循环不能出现交叉;,分清内外层次,不要随便在内层修改外层的循环控制变量。,C+,程序设计基础,2011,49,控制执行语句执行到该类语句时,它要改变程序的执行顺序,不依次执行紧跟的语句,而跳到另一个语句处接着执行。,即:实现一定条件下控制流程的改变。,4.4,控制执行顺序的语句,C+,程序设计基础,2011,50,4.4.1 break,语句,只用于循环结构的循环体中或,switch,语句结构的各个分支中。,用于循环结构,是使流程从循环体跳出去,去执行循环结构后面的语句;,用于,switch,语句,是使各个分支语句执行之后,流程能正确结束,switch,语句的执行,转到,switch,语句结构的后面语句。,语法形式:,break;,C+,程序设计基础,2011,51,例:计算半径从,1,到,10,且面积小于,100,的圆面积。,分析:由于不能预先知道面积小于,100,的圆的半径是多少,只能在循环体内来判断,一旦发现圆面积大于,100,就用,break,语句跳出循环。,C+,程序设计基础,2011,52,4.4.2 continue,语句,多用于循环结构的循环体中,与,if-else,语句配合使用,实现当满足一定条件是,提前结束本次循环(即跳过该语句之后的循环体的其它语句),并根据循环控制条件是否满足来决定是否进行下一轮的循环。,语法形式:,continue;,C+,程序设计基础,2011,53,当用于,while,和,do-while,循环语句中,,continue,语句使控制直接转到条件表达式,判断循环是否继续;,在,for,语句中,,continue,语句使控制转去执行修改循环控制变量语句,再去判断是否还继续执行循环。,C+,程序设计基础,2011,54,例:计算级数,S,1+1/3+1/5+1/7+,的前,100,项之和。,分析:计算以,1-200,之间的奇数为每一项分母的级数之和,C+,程序设计基础,2011,55,#include,void main(),double sum(0);,int,x;,for(x,=1;x=200;x+),if(x%2=0)/x,为偶数,continue,;,sum+=1.0/x;,cout,sum=sum,endl,;,/*x%2,运算,当,x,为偶数时,,if,语句的条件为真,执行,continue,语句,提前结束此次循环体语句的执行,转去执行,x+,,不执行,sum+=1.0/x,;当,x,为奇数时,,if,条件为假,不执行,continue,语句,向下执行,sum+=1.0/x,语句。*,/,C+,程序设计基础,2011,56,break,和,continue,的区别:,continue,语句只结束本次循环,而不是终止整个循环的执行;,break,语句结束本次循环,不再进行条件判断。,C+,程序设计基础,2011,57,C+,程序设计基础,2011,58,例,:,用户从键盘输入若干整数,计算并输出其中正整数的平均值,结束输入的标志是用户输入,0,。,C+,程序设计基础,2011,59,使程序执行分支转移到被称为“标号”(,label,)的目的地。,goto,语句格式:,goto,标号定义格式:,标号名(标识符):,注意:现代程序设计方法主张尽可能地限制,goto,语句的使用,可使用,if,if-else,和,while,这样地结构来代替它,增强代码的可读性。,4.4.3,goto,语句和标号,C+,程序设计基础,2011,60,标号的定义可在,goto,前也可在后,但标号不能定义在本函数外,不能从分程序外转到块分程序内,而只能从分程序内转到分程序外。,a1:,;,goto,a1,;,goto,kk,;,kk,:,;,kk,:,;,goto,kk,;,C+,程序设计基础,2011,61,4.4.4 exit(),和,abort(),函数,两者都是,C+,的库函数,功能都是终止程序的执行,将控制返回给操作系统。,前者用于正常终止程序的执行,后者用于异常终止程序的执行。,当使用这两个函数中的任一函数时,都应该包含头文件。,#include,C+,程序设计基础,2011,62,exit(),函数,函数的格式为:,exit,(,);,其中表达式的值只能是整型数。,通常把表达式的值作为终止程序执行的原因。执行该函数时,将无条件地终止程序的执行而不管该函数处于程序中的什么地方,并将控制返回给操作系统。通常表达式的取值为一个常数:用,0,表示正常退出,而用其它的整数值作为异常退出。,C+,程序设计基础,2011,63,abort,()格式为:,函数的格式为:,abort,();,即调用该函数时,在括号内不能有任何参数。在执行该函数时,系统不做结束程序前的收尾工作,直接终止程序的执行。,两者差异,:,exit,在结束程序前要做一系列的结束工作,比如关闭文件等,,abort,无此功能。,C+,程序设计基础,2011,64,4.4,程序举例,例,1.,求,1+2!+3!+.+20!,的和,程序分析:此程序只是把累加变成了累乘。,C+,程序设计基础,2011,65,例,2.,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:,153,是一个“水仙花数”,因为,153=1,3,5,3,3,3,。,程序分析:,利用,if,语句判断某个具体的数是否为“水仙花数”,利用,for,循环控制,100-999,个数,每个数分解出个位,十位,百位。,C+,程序设计基础,2011,66,例,3.,猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第,10,天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。,程序分析:采取逆向思维的方法,从后往前推断。第一天的桃子数是第,2,天桃子数加,1,后的,2,倍。,C+,程序设计基础,2011,67,本章要点,选择结构语句,循环结构语句,C+,程序设计基础,2011,68,
展开阅读全文