




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 选择结构程序设计第4章 选择结构程序设计v本章要点本章要点条件表达式条件表达式if语句语句switch语句语句选择结构程序设计选择结构程序设计第4章 选择结构程序设计v4.1 关系运算符和关系表达式关系运算符和关系表达式v4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式v4.3 条件语句条件语句v4.4 多分支语句多分支语句v4.5 程序设计举例程序设计举例4.1 关系运算符与关系表达式v关系运算符关系运算符 大于大于 =大于等于大于等于 小于小于 c-6, (a=3)=b关系表达式的值关系表达式的值逻辑值逻辑值v关系成立,即为关系成立,即为“逻辑真逻辑真”,用整数,用整数“1”表
2、示表示v关系不成立,即为关系不成立,即为“逻辑假逻辑假”,用整数,用整数“0”表示表示例如:例如:3bc; j=(a=b); k=(a=b); printf(%d, %d, %dn, i, j, k);运行结果:运行结果: 注意:与数学表达式的区别注意:与数学表达式的区别注意:注意:“=”和和“=”的区的区别别例例 5278在在C中是允许的,中是允许的, 值为值为例例 int i=1, j=7, a; a=i+(j%4!=0); 则则a=例例 a0 结果为结果为 A100 结果为结果为02104.2 逻辑运算符和逻辑表达式v逻辑运算符逻辑运算符!逻辑非(单目)逻辑非(单目)&逻辑与(双
3、目)逻辑与(双目)|逻辑或(双目)逻辑或(双目)结合方向:结合方向:v& 和和 |:自左向右:自左向右v!:自右向左,仅对其右边的操作数进行逻辑求反:自右向左,仅对其右边的操作数进行逻辑求反运算。运算。高高低低4.2 逻辑运算符和逻辑表达式v逻辑表达式逻辑表达式逻辑表达式是指用逻辑运算符将逻辑表达式是指用逻辑运算符将1个或多个表达个或多个表达式连接起来,进行逻辑运算的式子。式连接起来,进行逻辑运算的式子。在在C语言中,可以用逻辑表达式表示多个条件的语言中,可以用逻辑表达式表示多个条件的组合。组合。例如例如:(a+b) & (c=0)4.2 逻辑运算符和逻辑表达式v逻辑表达式逻辑
4、表达式逻辑运算对象的逻辑值有两种:逻辑运算对象的逻辑值有两种:v逻辑假,以逻辑假,以“0”表示表示v逻辑真,以逻辑真,以“非非0”表示表示逻辑运算的结果仅有两种:逻辑运算的结果仅有两种:v逻辑假,以逻辑假,以“0”表示表示v逻辑真,以逻辑真,以“1”表示表示逻辑运算符真值表逻辑运算符真值表ab!a!ba&ba|b110011100101011001001100例如:例如: 已知:已知:a=0; b=4; a=0; b=4; 求以下表达式的值求以下表达式的值 (1 1)!a !a (2 2)!b !b (3 3)a&(b-2)a&(b-2) (4 4)(a+2)|(b-4
5、)(a+2)|(b-4)答案:答案: (1 1)1 1 (2 2)0 0 (3 3)0 0 (4 4)1 14.2 逻辑运算符和逻辑表达式v逻辑运算符的优先级逻辑运算符的优先级! 算术运算符算术运算符 关系运算符关系运算符 & | 赋值运算符赋值运算符例如:设有例如:设有int a=10, b=20, c=30; 执行执行a=-b=a|a+b!=c后,后,a和和b的值是多少的值是多少? a =(-b=0-xx=0)表达式可以使用逻辑运算符连接关系表达式表达式可以使用逻辑运算符连接关系表达式例如:例如:if (ab)&(b=c)表达式还可以是一般表达式,甚至可以是常量或表达式还可
6、以是一般表达式,甚至可以是常量或变量变量例如:例如:if (x=1)v【例【例4.2】输入整数】输入整数x的值,输出其绝对值。的值,输出其绝对值。#include main() int x; scanf(%d, &x); if (x0) x = -x; printf(|x|=%dn, x);v【例【例4.3】输入整数】输入整数a, b的值,按从小到大的顺序的值,按从小到大的顺序输出这两个数。输出这两个数。#include main() int a, b, temp; scanf(%d,%d, &a, &b); if (ab) temp = a; a = b; b = t
7、emp; printf(%d, %dn, a,b);复合语句复合语句双分支if语句v格式:格式:if (表达式表达式) 语句语句1;else 语句语句2;下一条语句下一条语句;v功能:功能: 首先计算表达式的值,若表达式的值为首先计算表达式的值,若表达式的值为“真真”(非(非0),则执行语句),则执行语句1;否则,执行语句;否则,执行语句2。然后。然后再执行下一条语句。再执行下一条语句。v【例【例4.4】输入整数】输入整数x,y的值,输出这两个数中的的值,输出这两个数中的最大值。最大值。#include main() int x, y, max; scanf(%d,%d, &x, &a
8、mp;y); if (xy) printf(max=%dn, x); else printf(max=%dn, y);v【例【例4.5】阅读程序,分析运行结果。】阅读程序,分析运行结果。#include stdio.hmain() int a=30,b=20,x; if (ab) x=a; printf(%dn,a); else x=b; printf(%dn,b);运行结果:运行结果:3020多分支if语句v格式:格式:if (表达式表达式1)语句语句1;else if (表达式表达式2)语句语句2;else if (表达式表达式n)语句语句n;else 语句语句n+1;下一条语句下一条语句
9、;v【例【例4.6】将输入的百分制成绩转换为】将输入的百分制成绩转换为5分制的成分制的成绩,并输出。百分制与绩,并输出。百分制与5分制成绩的对应关系如分制成绩的对应关系如下表所示。下表所示。百分制百分制5分制分制9010058089470793606920591main() int score, s5; scanf(%d, &score); if (score=90)&(score= 80) s5 = 4; else if (score = 70) s5 = 3; else if (score = 60) s5 = 2; else s5 = 1; printf(%dn, s5)
10、; if (表达式表达式1) if (表达式表达式2)语句语句1; else 语句语句2;else语句语句3;if (表达式表达式1) & (表达式表达式2) 语句语句1;if (表达式表达式1) & (!表达式表达式2) 语句语句2;if (!表达式表达式1)语句语句3;if语句的嵌套 这里的这里的else 到底与哪个到底与哪个 if 结合呢?因为这时有结合呢?因为这时有两种可能,这就产生了所谓的二义性。两种可能,这就产生了所谓的二义性。 C语言规定:语言规定:else 与离它与离它最近最近的未曾配对的的未曾配对的 if 配对。配对。 if (表达式表达式1) if (表达式
11、表达式2) 语句语句1; else 语句语句2;if语句的嵌套v【例【例4.7】阅读程序,分析运行结果,注意】阅读程序,分析运行结果,注意else的的配对问题。配对问题。#include main() int x=2, y=-1, z=2; if (xy) if (y0) z=0; else z+=1; printf(z = %dn,z);运行结果:运行结果:z = 3内嵌内嵌if语句语句v【例【例4.8】计算函数:】计算函数:y = 1(x0)0(x=0)-1(x=0) if (x0) y=1; else y=0; else y=-1; printf(x=%d, y=%dn, x, y);m
12、ain() int x, y; scanf(%d, &x); if (x0) y=1; else if (x=0) y=0; else y=-1; printf(x=%d, y=%dn, x, y);条件运算符(? :)v条件运算符是条件运算符是C语言中唯一的一个三目运算语言中唯一的一个三目运算符。符。v格式:格式:变量变量 = 表达式表达式1 ? 表达式表达式2 : 表达式表达式3v功能:功能: 首先判断表达式首先判断表达式1的值,如果表达式的值,如果表达式1的值为的值为“真真”,则将表达式,则将表达式2的值赋给变量,否则,将的值赋给变量,否则,将表达式表达式3的值赋给变量。的值赋给
13、变量。v例如:例如:max = (ab) ? a : b ; 当当ab时,时,maxa,否则,否则,maxb条件运算符(? :)v说明:说明:条件表达式可嵌套使用。条件表达式可嵌套使用。条件运算符的优先级高于赋值运算符。条件运算符的优先级高于赋值运算符。例如:例如:max = a b ? a : bnax = (a b ? a : b)条件运算符的优先级低于关系运算符和算术运算条件运算符的优先级低于关系运算符和算术运算符。符。例如:例如: max = a b ? a : b + 1 max = (a b ? a : (b + 1)结合方向:自右向左结合方向:自右向左条件运算符(? :)v【例【
14、例4.9】已知】已知w = 1, x = 2, y = 3, z = 4,求表达式,求表达式q = w x ? w : y x ? w : y x ? w : (y z ? y : z )条件表达式条件表达式 y x ? w : 3 的值为的值为3,表达式表达式q = 3 表示将表示将 3 赋给变量赋给变量 q,且表达式的值,且表达式的值为为3。v【例【例4.10】输入一个字输入一个字母,母,判判断断它是否它是否是是大写字大写字母母,如果是如果是,将它转换成小写字母将它转换成小写字母,如果不是如果不是,则则不转换不转换,最,最后输出后输出。main() char c; scanf(%c, &a
15、mp;c); c = (c=A & c0)0(x=0)-1(x0 ? 1 : (x=0 ? 0 : -1); printf(x=%d, y=%dn, x, y);4.4 多分支语句vswitch语句是多分支选择语句。语句是多分支选择语句。v一般形式:一般形式:switch (条件表达式条件表达式)case 常量表达式常量表达式1: 语句语句1; break; case 常量表达式常量表达式2: 语句语句2; break; case 常量表达式常量表达式n: 语句语句n; break; default: 语句语句n+1;switch语句v功能:功能:首先计算条件表达式的值,然后找到与其相
16、等的首先计算条件表达式的值,然后找到与其相等的常量表达式的常量表达式的case分支去执行语句;若分支去执行语句;若没有与条没有与条件表达式相等的常量表达式,则执行件表达式相等的常量表达式,则执行default语句语句后面的语句后面的语句n+1。default 语句可省略。如果没有语句可省略。如果没有default语句,则直接转到语句,则直接转到switch语句后面的语语句后面的语句去执行。句去执行。switch语句v说明:说明:条件表达式和常量表达式的值的数据类型要一致,条件表达式和常量表达式的值的数据类型要一致,必须是整型或字符型。常量表达式中不能包含变必须是整型或字符型。常量表达式中不能包
17、含变量。量。各个常量表达式的值必须互不相同。各个常量表达式的值必须互不相同。switch语句中的语句中的case和和default的出现次序是任的出现次序是任意的,且意的,且case的次序不要求按常量表达式的大小的次序不要求按常量表达式的大小顺序排列。顺序排列。case后面如果有多个语句,不需要用花括号后面如果有多个语句,不需要用花括号“ ”括起来。括起来。switch语句v说明:说明:在执行完某个在执行完某个case后面的语句后,如果没有后面的语句后,如果没有“break;”来结束多分支语句,将自动转到该语来结束多分支语句,将自动转到该语句后面的语句去执行,不再进行条件判断,直到句后面的语句
18、去执行,不再进行条件判断,直到遇到遇到switch语句的右花括号为止。语句的右花括号为止。多个多个case的后面可以共用一组执行语句。的后面可以共用一组执行语句。switch语句可以嵌套,即在一个语句可以嵌套,即在一个switch语句中嵌语句中嵌套另一个套另一个switch语句,但是要注意语句,但是要注意break只能跳只能跳出最内层的出最内层的switch语句。语句。v【例【例4.12】理解】理解switch语句的执行过程。语句的执行过程。main() int x=10; switch(x) case 9: x+=1; case 10: x+=2; case 11: x+=3; default: x+=4; printf(x=%d, x);运行结果:运行结果:x = 19v【例【例4.13】使用】使用switc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论