C程序设计实例教程课件作者金林樵第4章节程序控制

上传人:E**** 文档编号:89086442 上传时间:2019-05-17 格式:PPT 页数:81 大小:1.42MB
返回 下载 相关 举报
C程序设计实例教程课件作者金林樵第4章节程序控制_第1页
第1页 / 共81页
C程序设计实例教程课件作者金林樵第4章节程序控制_第2页
第2页 / 共81页
C程序设计实例教程课件作者金林樵第4章节程序控制_第3页
第3页 / 共81页
C程序设计实例教程课件作者金林樵第4章节程序控制_第4页
第4页 / 共81页
C程序设计实例教程课件作者金林樵第4章节程序控制_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《C程序设计实例教程课件作者金林樵第4章节程序控制》由会员分享,可在线阅读,更多相关《C程序设计实例教程课件作者金林樵第4章节程序控制(81页珍藏版)》请在金锄头文库上搜索。

1、通常,程序的执行不总是顺序执行的,而是需要根据功能进行必要的控制,而控制的条件则主要是由关系表达式和逻辑表达式决定的。这些条件设置的是否正确,程序控制是否正确,将直接影响程序运行的结果。本章将讨论关系表达式和逻辑表达式,并在此基础上结合实例介绍两种程序控制方法选择和循环,第4章程序控制,4.1 程序控制概述 4.2 关系表达式和逻辑表达式 4.3 分支结构程序设计 4.4 循环结构程序设计 4.5 控制转移 4.6 学生成绩管理系统程序流程的控制,目录,4.1程序控制概述,一个C程序通常由若干条语句组成,显然,这些语句的执行顺序将极大地影响程序执行的正确性。从总体上看,整个程序的执行是顺序的,

2、总是从main函数开始执行,并在main函数中结束。但是在某些局部代码里,程序的执行可能就不是顺序的了,而是由一些相关条件进行控制。例如,对某个学生的百分制成绩进行等级划分时就需要对其成绩进行条件判断,只有成绩大于等于90分时才算优秀,否则当成绩大于等于80分时算良好,等等。这时,程序的运行将会受到成绩这一条件的限制,只执行满足条件的代码,而滤过不满足条件的代码,这就构成了条件选择;而如果需要对全班同学的成绩进行等级划分时,就需要对每一位同学的成绩按上述划分规则进行处理,此时这些处理语句将会重复执行多次,这就构成了循环。 在C语言中,有一组相关的控制语句,用以实现选择与循环: 选择控制语句:

3、if、switch、case。 循环控制语句: for、while、dowhile。 转移控制语句: break、continue、goto。 这几个语句将在本章后面的几节中进行详细介绍。,4.2关系表达式和逻辑表达式,对程序执行流程的控制,通常是由一定的条件决定的,这些条件主要由关系表达式或逻辑表达式或它们的组合来表示。 4.2.1 关系运算符和关系表达式 在程序中经常需要比较两个量的大小关系,以决定程序下一步的执行。例如前面说的,对学生成绩进行等级划分,当成绩X 90 时,等级 = 优。此时,就需要对成绩进行比较,即判断X 是否大于等于90。 在C语言中,这种比较运算也称为关系运算,其运算

4、结果只能是“真”(即“条件满足”)或“假”(即“条件不满足”)。而具体的运算规则由关系运算符表示,C语言中提供了如下6种关系运算符,如表4-1所示。,说明: 1、关系运算符都是双目运算符,其结合性均为左结合。 2、表中上面两行的4个关系运算符(、=)的优先级相同,下面一行的2个关系运算符(=、!=)的优先级也相同,但是前4种要高于后2种。 3、关系运算符的优先级低于算术运算符,但是高于逻辑运算符。 用关系运算符将两个表达式(可以是算术表达式、赋值表达式或字符表达式等)连接起来的式子,称为关系表达式。例如,下面都是合法的关系表达式: a b , x y +3 , c 4 由于关系运算的结果是一个

5、逻辑值(“真”或“假”),因此关系表达式的结果也只能是一个逻辑值。在C语言中,以1代表“真”,以0代表“假”。 假设:int a = 4, b = 3 , c = 2; 则: a b + c 的值为“真”,即表达式的值为1。 b = c 的值为“假”,即表达式的值为0。,a b c 的值为“假”,即表达式的值为0。这是因为按照优先级和结合性,先执行a b,该表达式的运算结果是1,再执行1 c,因此整个表达式的值就为0。 b = a c 的值为“假”,即表达式的值为0。这是因为按照优先级,先执行 a b,该表达式的运算结果是0,再执行b = 0,则整个表达式的值就为0。,4.2.2逻辑运算符和逻

6、辑表达式,有时,需要用多个条件对程序的运行进行控制,例如当学生的成绩X处于70分到79分之间时,认为其对应的等级为中等,用数学表达式可以表示为:79 X 70。但是根据关系表达式的运算规则,即使学生成绩X = 75,该表达式的值仍为0(即“假”)。因此,编程时需要把其拆分为两个关系表达式:X 79 和 X 70。这时,就需要用逻辑运算符来连接这两个关系表达式,使其作为一个整体来处理。 C语言中提供了如下4种逻辑运算符,如表4-2所示。,说明: 图4-1 运算符的优先级 运算符 ! 是单目运算符,具有右结合性。 运算符 & 和 | 都是双目运算符,其结合性均为左结合。 运算符 ! 的优先级高于算

7、术运算符。 运算符 & 的优先级低于关系运算符。 运算符 | 的优先级低于运算符 & ,但是高于赋值运算符。 算术运算符、关系运算符、逻辑运算符和赋值运算符的优先级关系如图4-1所示。 参与逻辑运算的必须是逻辑量(“真”或“假”),因此运算结果也必定是逻辑量。结合表4-2中各运算符的含义,可以得到如表4-3所示的逻辑运算真值表。 此真值表的含义为:当给定a和b的逻辑值时,可求出相应的 ! a、! b、a & b和a | b 表达式的值。从表中可以看到:当 a 和 b 同为“真”时,逻辑与(&)的结果才为“真”;否则当有一个为“假”时,结果就为“假”。与之相反的是,只要a 和 b 中有一个为“真

8、”,逻辑或(|)的结果就为“真”,否则即为“假”。 用逻辑运算符将关系表达式或逻辑量连接起来的式子,称为逻辑表达式。例如,下面都是合法的逻辑表达式:a b & b c , b = = c | d 0 。,如前所述,逻辑表达式的值必定是一个逻辑量(“真”或“假”),而且在C语言中,以1代表“真”,以0代表“假”。但是,在进行具体逻辑运算时,可能参与逻辑运算的分量并不是完全意义上的逻辑量(即0或1),例如:逻辑表达式5 & 3 | !2 中的每个分量都不是0或1。此时,C语言中规定:以“0”代表“假”,以“非0”代表“真”。因此,逻辑表达式5 & 3 | !2 等同于逻辑表达式1 & 1 | !1

9、,于是运算结果为 1(“真”)。 在C语言的逻辑运算中,有两个重要的逻辑短路原则: 对于形如 a & b 的逻辑运算,当 a 为“假”(0)时,该表达式的值即为0(“假”),而不需要再对b 进行判断; 对于形如 a | b 的逻辑运算,当 a 为“真”(非0)时,该表达式的值即为1(“真”),也不需要再对b 进行判断。,关于这两个原则的证明,请读者结合表4-3的逻辑运算真值表自行推导,此处不再赘述。因此,对于逻辑表达式:( x = a 1 )|( y = b 1 的值为“真”,依据短路原则,分量 y = b c 不再需要进行运算,因此y的值仍为0,而不是1)。,4.3分支结构程序设计,4.3.

10、1 if语句 if语句可以根据给定的条件是否满足(“真”或“假”),来执行相应的操作。其特点是二选一,即只能选择条件“真”时的操作或条件“假”时的操作。 【例4-1】 求任意一个数的绝对值。 分析:假设这个数为m ,显然如果 m 0 成立,则其绝对值Abs等于m ,反之则为-m。此时用一次比较即可求出绝对值,用流程图可表示为如图4-2(a)所示的形式。,如果,对该流程进行修改,在判断条件 m 0 成立前即让Abs等于m,并将条件改为m 0 ,则流程图可表示为如图4-2(b)所示的形式。 图4-2所示的流程,正好对应C语言中的2种标准形式的if语句。其中,图4-2(a)对应于双分支形式,图4-2

11、(b)对应于单分支形式。 C语言中提供了3种标准形式的if语句。 1、单分支形式(if形式) 语法形式: if( 表达式 ) 语句组; 其语义是:如果表达式的值为“真”,则执行其后的语句组(也可能是一个语句),否则不执行该语句组。其流程可表示为图4-3(a)所示的一般形式。,下面是【例4-1】使用if语句的单分支形式时的代码。 void main() int m, Abs; scanf( “%d“, ,其语义是:如果表达式的值为真,则执行语句组1(也可能是一条语句), 否则执行语句组2。其流程可表示为图4-3(b)所示的一般形式。 下面是【例4-1】使用if语句的双分支形式的代码。 void

12、main() int m, Abs; scanf(“%d“, 执行情况如下: 2 2的绝对值为:2,【例4-2】 求三个数中的最大数 分析:假设这三个数分别为a、b 和c 。首先求a和b两个数的最大值,记为Max。显然如果 a b 成立,则最大值Max即为a ,反之则为b。此时用一次双分支的比较即可求出前二个数的最大值。然后再求Max 和c的最大值,显然当Max b ) /* 求a, b的最大值Max */ Max = a; else Max = b; if( Max c ) /* 求Max, c的最大值Max */ Max = c; printf(“%d,%d,%d的最大数为:%d“, a,

13、 b, c, Max ); 执行情况如下: 2 5 8 2, 5, 8的最大数为:8,【例4-3】 对学生的成绩(百分制)进行等级划分:当成绩大于等于90分时为优秀;当成绩大于等于80分且小于90分时为良好;当成绩大于等于70分且小于80分时为中等;当成绩大于等于60分且小于70分时为及格;当成绩小于60分时为不及格。 分析:因为等级划分为五个层次,因此需要比较四次,即需使用4个if语句。除优秀的条件外,其他等级的条件已排除了上一层的条件,例如:当成绩不在优秀等级时,该成绩必定是小于90分的,因此在判断是否良好等级时,可将条件简略为大于等于80分(忽略了小于90分的条件)。其流程图如图4-5所

14、示.,从图4-5所示的流程图中,可以看到:除优秀等级的判断外,其他等级的判断都是在上一个条件判断的“假”分支(即else分支)中进行的,而且每一个条件判断都是双分支的,称其为完全多分支判断。在C语言中,针对此种情况,特别定义了一种多分支的if语句标准形式。 3、多分支形式(if-else-if形式) 语法形式: if(表达式1) 语句组1; else if(表达式2) 语句组2; else if(表达式n-1) 语句组n-1; ,else 语句组n; 其语义是:依次判断表达式的值,当出现某个表达式的值为“真”时,则执行其对应的语句组,然后跳到该if语句之后继续执行程序;如果所有的表达式均为“假

15、”,则执行最后else分支中的语句组n,然后继续执行后续程序。其流程可表示为图4-6所示的一般形式。,下面是【例4-3】使用if语句的多分支形式时的代码。 void main() int score; scanf( “%d“, 执行情况如下: 75 等级 = 中等 if语句除了有3种标准形式外,还允许有嵌套形式,即在if语句的某个语句组中又存在其他if语句的情况。,4、if语句的嵌套形式 定义:如果 if 语句的任一分支中又包含有任何形式的其他 if 语句,则称其为嵌套的if语句。显然,if语句的多分支形式也是一种特殊的嵌套形式,因为其每一个if语句的else分支中又包含一个if语句。 对于嵌

16、套形式的if语句,最容易犯的错误是if与else的配对问题。假设有如下代码: void main() int a, b, c; if( x 0 ) if( y 1 ) z = 3; else z = 1; 由于C语言中规定:else总是与离它最近的上一个if 配对。因此,代码中的else将和if(y 1)中的if配对;而从上述代码的缩进排列格式看,程序员是希望else与if(x 0)进行配对的。但是,缩进只是为了便于更好的阅读,C程序在编译时并不考虑缩进,此时就会产生逻辑错误,从而导致最终的运行结果出现错误。 为此,笔者强烈建议读者严格按照本章前面所述的格式来书写代码,即在if语句的每个分支都使用复合语句的形式来书写代码。无论语句组中包含几条语句,都将代码写在一对“ ”中,这

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号