资源预览内容
第1页 / 共34页
第2页 / 共34页
第3页 / 共34页
第4页 / 共34页
第5页 / 共34页
第6页 / 共34页
第7页 / 共34页
第8页 / 共34页
第9页 / 共34页
第10页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第5章 选择结构程序设计,5.1 C程序中语句的分类,语言程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语言中的语句可以分为以下5类:,表达式语句 由表达式加上分号“;”组成。其一般形式为:表达式;,函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);,while (getchar( ) != n ) ; 本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。,空语句 只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。,说明: (1) “”后不加分号 (2) 语法上和单一语句相同 (3) 复合语句可嵌套 (4) 复合语句内定义的变量只能在复合语句内使用。,复合语句 用 括起来的一组语句。, int a = 2, b = 3, c; c = a + b; printf (“c = %dn“, c); ,一般形式为: 数据说明部分; 执行语句部分; ,#include void main ( ) int x = 10, y = 20, z; z = x + y; int z; z = x * y; printf (“z = %dn“, z); /输出复合语句中z的值 printf (“z = %dn“, z); /输出复合语句外z的值 ,输出结果: z = 200 z = 30,控制语句 用来实现一定的控制功能的语句称为控制语句 。C语言用控制语句来实现选择结构和循环结构。语言有九种控制语句。可分成以下三类:,5.2 关系运算符、逻辑运算符、条件运算符,1. 关系运算符和关系表达式,关系运算符,关系表达式,用关系运算符连接起来的式子称为关系表达式。 关系表达式的一般形式为:表达式 关系运算符 表达式,例:a + b c d x 3 / 2 a + 1 c i 5 * j = k + 1,注意: C语言用0表示假,非0表示真。 一个关系表达式的值不是0就是1,0表示假,1表示真。,关系运算符的优先级,例如: c a + b 等价于: a b != c 等价于: a = b c 等价于: a 2 b | c 等价于:,c (a + b),(a b) != c,a = (b c),a = (b c),(a 2) (c + d),(a & (4 b) | c,已知:a = 1; b = 2; c = 3; 问:d = a != c = a b c;的值?,答:d 的值为1。 等价于:d = (a != c) = (a b) c);,例:int a = 3, b = 2, c = 1, d, f; a b (a b) = c b + c b f = a b c,/表达式值1,/表达式值1,/表达式值0,/d = 1,/f = 0,关系运算注意:,例 若a = 0; b = 0.5; x = 0.3; 则 a = x = b的值为,0,例 5 2 7 8在C中是 允许的,值为,0,例 int i = 1, j = 7, a; a = i + (j % 4 != 0); 则a =,2,例 a0 结果为 A100 结果为,1,0,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,2. 逻辑运算符和逻辑表达式,逻辑运算符,逻辑运算真值表,例如: a b & x y 等价于: a = b | x = y 等价于: !a | a b 等价于: !a b 等价于: c = a | b 等价于: a | 7 & b & 8 等价于: a 2 & b 1 等价于:,2. 逻辑运算符和逻辑表达式,逻辑表达式,用逻辑运算符连接起来的式子称为逻辑表达式。 逻辑表达式的一般形式为:表达式 逻辑运算符 表达式,例:a 10 | x -10、!x & !y,逻辑运算符的优先级,(a = x) & (x = b),(a b) & (x y),(a = b) | (x = y),(!a) | (a b),(!a) b,c = (a | b),(a | 7) & (b & 8),(a 2) & (b 1),已知:a = 4; b = 5; 问:c = b 3 的值?,答:c 的值为1。 等价于:c = (b 3) ,例: a = 4; b = 5; !a a & b a | b !a | b 4 & 0 | 2 5 3 & 2 | 8 4 - !0 c & d,/值为0,/值为1,/值为1,/值为1,/值为1,/值为1,/值为1,逻辑运算注意:,逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,例 a (m = a b) & (n = c d),/结果:m = 0, n = 1,条件运算符可嵌套 如 x 0 ? 1 : (x 0 ? -1 : 0) 优先级: 13,3. 条件运算符与表达式 一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);,例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c=z)?c-a+A:c,结合方向:自右向左 如 a b ? a : c d ? c : d a b ? a : (c d ? c : d) expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b /x=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xy ,值为1.5,例:小写字母转盘。 #include #include int main ( ) char ch, ch1, ch2; /变量定义 ch = getchar ( ); /读取一字符 putchar (n); /换行 ch1 = ch = a ? z : ch - 1; /求前驱字符 ch2 = ch = z ? a : ch + 1; /求后继字符 printf (“ch1 = %c, ch2 = %cn“, ch1, ch2); /显示结果 ,输出结果(假设输入为w) : ch1 = v, ch2 = x,运算符总结:,总体上讲,单目运算符都是同等优先级的,具有右结合性,并且优先级比双目运算符和三目运算符都高。 三目运算符的优先级比双目运算符要低,但高于赋值运算符和逗号运算符。 逗号运算符的优先级最低,其次是赋值运算符。 只有单目运算符、赋值运算符和条件运算符具有右结合性,其它运算符都是左结合性。 双目运算符中,算术运算符的优先级最高,逻辑运算符的优先级最低。,到现在为止,我们已经学习了30多个运算符。掌握它们的优先级关系特别重要。优先级的记忆规则:,5.3 选择结构的程序设计,1. if语句,简单if语句形式,if (表达式) 语句;,格式:,执行流程:,例如:下面的程序段是输入两个整数,输出其中的大数。 int a, b, max; printf (“input two numbers: “); scanf (“%d%d“, ,if_else形式,if (表达式) 语句1; else 语句2;,格式:,执行流程:,例如:下面的程序段同样是输出两个整数中的最大数。 int a, b; printf (“input two numbers: “); scanf (“%d%d“, ,1. if语句,if_else_if形式,if(表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else 语句n;,格式:,执行流程:,例如:下面的程序段是判断输入字符的种类。 char c; printf (“Enter a character: “); c = getchar ( ); if (c = 0 ,if语句注意事项,(1) if语句后面的表达式必须用括号括起来 。 (2) 表达式通常是逻辑表达式或关系表达式,但也可以是其它任何表达式,如赋值表达式等,甚至也可以是一个变量。只要表达式非零时,表达式的值就为真,否则就是假。 (3) 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。但要注意的是在之后不能再加分号。 (4) 在if语句中,如果表达式是一个判断两个数是否相等的关系表达式,要当心不要将=写成了赋值运算符=。,if (a = 5) 语句; /表达式的值永远为非0, 所以其后的语句总是要执行的 if (b) 语句; /等价于if (b != 0) 语句;,运行结果:x = 0,运行结果:x != 0,if语句嵌套: 一般形式:,语言规定,在缺省 时,else总是和它上面离它最近的未配对的if配对,运行结果:a = 0,运行结果:a = 1,if_else 配对原则,例: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:加 ,2. switch语句(开关分支语句) 一般形式:,switch ( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; ,执行过程:,使用switch语句注意事项,(1) switch后面的“表达式”,可以是int、char和枚举型中的一种,但不可为浮点型。,float a, b = 4.0; scanf (“%f“, ,int a, b = 4; scanf (“%d“, ,使用switch语句注意事项,(2) case后面语句(组)可加 也可以不加 ,但一般不加 。 (3) 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象。,switch ( i ) case 1: b = b + 1; break; / 可加可不加 case 2: b = b - 1; break; ,使用switch语句注意事项,(4) 每个case后面必须是“常量表达式”,表达式中不能包含变量。,例:按成绩分成A、B、C、D、E、F几个等级。 char score; printf (“Enter Score: “); scanf (“%d“, ,使用switch语句注意事项,(5) case后面的“常量表达式”仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。,#include void main ( ) char ch; ch = getch ( ); switch ( ch ) cas
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号