1、C+程序设计新世纪应用型高等教育教材编审委员会 组编主编 罗烨 李秉璋第二版新世纪应用型高等教育软件专业系列规划教材第2章 程序的控制结构2.1 算法的概念与表示方法31.1.1 程序设计语言(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构。在程序中要指定数据的类型和数据的组织形式,即数据结构。(2)对操作的描述。即即操作步骤,也就是算法操作步骤,也就是算法。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。作为数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。作为程序设计程序设计人员,必须认真考虑并设计合适的数据结构和操作步骤。著名
2、的计算机科学家人员,必须认真考虑并设计合适的数据结构和操作步骤。著名的计算机科学家Ni-kiklaus Wirth提出了一个公式来描述程序、数据结构和算法的关系提出了一个公式来描述程序、数据结构和算法的关系:2.1 算法的概念与表示方法42.1.1 算法的概念算法就是解决问题的步骤序列。算法算法具有以下几个特征具有以下几个特征:(1)可行性。可行性。(2)确定性。确定性。(3)有穷性。有穷性。(4)可输人可输人/输出数据。输出数据。2.1 算法的概念与表示方法52.1.2 算法的表示算法的表示方法有很多种,常用的算法表示方法有算法的表示方法有很多种,常用的算法表示方法有:自然语言、流程图、伪代
3、码等。自然语言、流程图、伪代码等。其中流程图其中流程图和伪代码是程序设计人员常用的两种算法表示方法。和伪代码是程序设计人员常用的两种算法表示方法。流程图流程图是算法图形化的表示。用一些图框表示各种操作,用箭头表示算法流程,比是算法图形化的表示。用一些图框表示各种操作,用箭头表示算法流程,比较直观,易于理解较直观,易于理解。2.1 算法的概念与表示方法62.1.3 程序的三种基本结构流程图流程图中的中的A、B、C代表一条指令或一个指令组,指令组是一个整体,在整个算法代表一条指令或一个指令组,指令组是一个整体,在整个算法中中呈现呈现一条指令的特点,要么都执行,要么都不执行。一条指令的特点,要么都执
4、行,要么都不执行。P代表判断条件代表判断条件。2.1 算法的概念与表示方法72.1.3 程序的三种基本结构1.顺序结构顺序结构顺序顺序结构是算法中最简单的结构,其特点是按照算法书写顺序依次执行结构是算法中最简单的结构,其特点是按照算法书写顺序依次执行。2.分支结构分支结构分支结构的特点是根据条件判断选择执行路径。分支结构的特点是根据条件判断选择执行路径。3.循环结构循环结构循环循环结构用于实现重复性动作。根据算法的结构用于实现重复性动作。根据算法的有穷有穷性,循环必须在一定条件下进行,性,循环必须在一定条件下进行,无条件必然会无条件必然会导致导致无穷循环无穷循环。2.2 分支结构82.2.1
5、if语句if语句的基本格式为语句的基本格式为:if语句语句1语句语句也称为条件语句,其功能是根据也称为条件语句,其功能是根据if后表达式的值,确定程序的执行流程后表达式的值,确定程序的执行流程:是是执行,执行,还是执行语句还是执行语句202.2 分支结构92.2.2 if语句的嵌套嵌套嵌套if语句的语法格式为语句的语法格式为:if语句还有另外一种嵌套形式,语法格式为语句还有另外一种嵌套形式,语法格式为:2.2 分支结构1011嵌套嵌套if语句实现了多分支选择。语句实现了多分支选择。此外此外C+还提供了一个还提供了一个switch语句,又称为开关语句,又称为开关语句语句,也可以实现多分支选择。它
6、根据条件从多个分支语句序列中选择一个作为执行人日也可以实现多分支选择。它根据条件从多个分支语句序列中选择一个作为执行人日。语法。语法格式为格式为:2.2.3 switch语句2.2 分支结构2.3 循环结构12while语句实现当型循环。语法格式为语句实现当型循环。语法格式为:2.3.1 while语句其中其中,表达式可以,表达式可以是是C+中的任意类型表达中的任意类型表达式,表达式的值式,表达式的值非非0(为真为真)时,就执行时,就执行循环体循环体语句。语句。循环体语句可以是单语句,也可以是复合语句。循环体语句可以是单语句,也可以是复合语句。while循环的执行流程如图循环的执行流程如图2-
7、5所所示。示。2.3 循环结构13do-while循环语句属于直到型循环结构,语法格式为循环语句属于直到型循环结构,语法格式为:2.3.2 do-while W句2.3 循环结构14for循环语句的语法格式为循环语句的语法格式为:2.3.3 for语句2.3 循环结构15分支分支结构可以嵌套使用,循环结构也可以嵌套使用,形成嵌套循环。分支结构和循结构可以嵌套使用,循环结构也可以嵌套使用,形成嵌套循环。分支结构和循环环结构结构还可以相互嵌套,形成一个复杂的程序结构,解决较为复杂的问题还可以相互嵌套,形成一个复杂的程序结构,解决较为复杂的问题。C+规定,循规定,循环的环的嵌套嵌套只能呈包含结构,即
8、外循环包含内循环,不能呈交叉结构。因此图只能呈包含结构,即外循环包含内循环,不能呈交叉结构。因此图2-8中中(a)和和(b)为为合法的合法的循环结构,通常把外层循环简称为外循环,里层循环简称为内循环。循环结构,通常把外层循环简称为外循环,里层循环简称为内循环。(c)是错误的是错误的循环循环结构。结构。2.3.4 循环的嵌套2.4 转向语句161.break语句break语句只能用在语句只能用在switch语句和循环语句中。语句和循环语句中。break语句在循环语句中用来立即语句在循环语句中用来立即终止终止循环。循环。需要需要注意的是,在嵌套循环中,注意的是,在嵌套循环中,break语句终止的是
9、其所在的那一层循环,如外层语句终止的是其所在的那一层循环,如外层还还有循环有循环仍要继续执行仍要继续执行。2.continue语句continue语句只能用在循环语句中,用来终止本次循环,即跳过本层循环体中尚未语句只能用在循环语句中,用来终止本次循环,即跳过本层循环体中尚未执执行的行的语句,继续下次循环语句,继续下次循环。2.4 转向语句173.goto语句goto语句格式为语句格式为:goto语句的功能是将程序无条件转移到语句的功能是将程序无条件转移到“语句标号语句标号”处执行。语句标号是用来表示处执行。语句标号是用来表示语句语句的标识符,放在语句最前面,并用胃号与语句分开。的标识符,放在语
10、句最前面,并用胃号与语句分开。结构化程序结构化程序设计方法主张限制使用设计方法主张限制使用goto语句。因为语句。因为goto语句不符合结构化程序语句不符合结构化程序设计的设计的准则,无条件转移使程序结构无规律,可读性较差准则,无条件转移使程序结构无规律,可读性较差。2.5 常用算法的应用实例181.枚举法枚举法枚举法也称为穷举法,基本思想是在有限范围内列举所有可能的结果,找出其中符也称为穷举法,基本思想是在有限范围内列举所有可能的结果,找出其中符合合要求要求的解。枚举法适合求解的问题是的解。枚举法适合求解的问题是:可能的答案是有限个且答案是可知的,但又难以可能的答案是有限个且答案是可知的,但
11、又难以用用解析法解析法描述。这种算法通常用循环结构来完成描述。这种算法通常用循环结构来完成。2.递推法递推法递推法是通过问题的一个或多个已知解,用同样的方法逐个推算出其他解,递推法是通过问题的一个或多个已知解,用同样的方法逐个推算出其他解,递推法常用来常用来求解数列问题、近似计算问题等。求解数列问题、近似计算问题等。2.6 枚举类型191.枚举类型的定义枚举类型的定义格式为枚举类型的定义格式为:其中其中,关键字,关键字enum指明其后的标识符是枚举类型的名字,枚举常量表中列出指明其后的标识符是枚举类型的名字,枚举常量表中列出了了 该类型变量该类型变量所有的取值。各枚举常量之间以所有的取值。各枚
12、举常量之间以“,”间隔间隔。2.6 枚举类型202.枚举类型变量的定义定义了枚举类型,就可以定义枚举类型的变量定义了枚举类型,就可以定义枚举类型的变量。(1)先定义类型再定义变量,如先定义类型再定义变量,如:enum weekdaySun,Mon,Tuc,Wcd,Thu,Fri,Sat;weekday wdl=Mon,wd27;(2)定义枚举类型的同时定义变量,如定义枚举类型的同时定义变量,如:enum gender Male,Female perl,pert=Male;/定义定义pcr2时并初始化时并初始化(3)匿名枚举类型匿名枚举类型:enum枚举常量列表枚举常量列表枚举变量列表枚举变量列
13、表;cnumSun,Mon,Tuc,Wcd,Thu,Fri,Sat wd 1,wd2;2.6 枚举类型213.枚举类型变量的运算枚举枚举类型可以参与的运算有限,一般只能进行赋值和关系运算。其关系运算本质是类型可以参与的运算有限,一般只能进行赋值和关系运算。其关系运算本质是按其按其指定的整数值比较,但必须是同类型枚举常量或变量比较指定的整数值比较,但必须是同类型枚举常量或变量比较。4.枚举类型的应用定义定义枚举类型的目的是增加程序的可读性。另外就是限制变量的取值范围。枚举枚举类型的目的是增加程序的可读性。另外就是限制变量的取值范围。枚举类类型最型最常见也是最有意义的用处之一就是用来描述状态量。常见也是最有意义的用处之一就是用来描述状态量。THANKS