第5章 选择结构程序设计.ppt

上传人:eastlab115 文档编号:388581 上传时间:2018-10-12 格式:PPT 页数:66 大小:1.26MB
下载 相关 举报
第5章 选择结构程序设计.ppt_第1页
第1页 / 共66页
第5章 选择结构程序设计.ppt_第2页
第2页 / 共66页
第5章 选择结构程序设计.ppt_第3页
第3页 / 共66页
第5章 选择结构程序设计.ppt_第4页
第4页 / 共66页
第5章 选择结构程序设计.ppt_第5页
第5页 / 共66页
亲,该文档总共66页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第5章 选择结构程序设计,第5章 选择结构程序设计,关系运算符和关系表达式 逻辑运算符和逻辑表达式 if语句 switch语句 选择结构程序举例,5.1 关系运算符和关系表达式,所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是否符合给定的关系。,其中操作数可以是变量、常量或表达式。,操作数,关系运算符,操作数,关系运算符,关系运算符,!=,=,=,=,操作数1,操作数2,5.1 关系运算符和关系表达式,1、关系运算符 (比较两个量关系的运算符)C语言提供6种关系运算符: (大于) = (大于或等于) = = (等于)!= (不等于)注意:在语言中,“等于”关系运算符

2、是双等号“= =”,而不是单等号“= ”(赋值运算符)。,2关系运算符的优先级,(1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。 (2)与其它种类运算符的优先级关系,算术运算符(高),关系运算符,赋值运算符(低),5.1 关系运算符和关系表达式,关系运算符都是双目运算符,其结合性均为左结合(多个优先级相同的关系运算符同时出现时,运算方向为从左至右)。例如:a+bc 等价于(a+b)cabc 等价于(ab)c /*左结合*/,5.1 关系运算符和关系表达式,3关系运算符的结合性,由于语言没有逻辑型数据,所以用整数“”表示“逻辑真”,用整数“”表示“逻辑假”。,5.1 关

3、系运算符和关系表达式,4关系表达式的概念,所谓关系表达式是指,用关系运算符将两个表达式连接起来,进行关系运算的式子。例如,下面的关系表达式都是合法的:ab,a+bc-d,(a=3)=b, (ab)=(bc),5关系表达式的值,例如,假设num1=3,num2=4,num3=5,则:(1)num1num2的值(2)(num1num2)!=num3的值(3)num1num2num3的值思考题:任意改变num1或num2的值,会影响整个表达式的值吗?(4)(num1num2)+num3再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值还可以参与其它种类的运算

4、,例如算术运算、逻辑运算等。,例 int a=3,b=2,c=1,d,f;ab (ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,5.1 关系运算符和关系表达式,关系运算注意:,例 若a=0; b=0.5; x=0.3;则 a=x=b的值为,0,例 5278在C中是允许的,值为,0,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为A100 结果为,1,0,5.1 关系运算符和关系表达式,例 注意区分“=”与“=”int a=0,b=1;if(a=b) printf(“a equal to b”);elsep

5、rintf(“a not equal to b”);,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,关系运算注意:,5.1 关系运算符和关系表达式,0,逻辑运算符,逻辑运算符用于连接一个或多个条件,判断这些条件是否成立 逻辑运算符的类型为:,5.2 逻辑运算符和逻辑表达式,逻辑“与”运算符 &,所有学科及格,考勤率达到75%,留级,留级,留级,升级,Yes,No,No,No,No,Yes,Yes,Yes,逻辑“与”运算符 &,逻辑“或”运算符 |,无法支付,可支付,可支付,可支付,Yes,No,No

6、,No,No,Yes,Yes,Yes,购物帐单,信用卡,逻辑“或”运算符 |,逻辑“非”运算符 !,天气 NOT 阴天,逻辑运算符总结,&,只有当两个条件都为真时才执行操作,只要任何一个条件为真时就执行操作,对原条件取反,即: 如果原条件为假时就执行操作,|,!,5.2 逻辑运算符和逻辑表达式,1.逻辑运算符及运算规则,下面的逻辑表达式哪个是合法的:(x=0) & (x5)(x=10)! (x=0),(1)C语言提供三种逻辑运算符:& 逻辑与(相当于“同时”)| 逻辑或(相当于“或者”)! 逻辑非(相当于“否定”),(2)运算规则1)&:当且仅当两个运算量的值都为“真”时,运算结果为“真”,否

7、则为“假”。(全真既真)2) | :当且仅当两个运算量的值都为“假”时,运算结果为“假”,否则为“真”。(一真既真)3) ! :当运算量的值为“真”时,运算结果为“假”;当运算量的值为“假”时,运算结果为“真”。(取反),5.2 逻辑运算符和逻辑表达式,1.逻辑运算符及运算规则,例如,假定x=5,则(x=0) & (x5)的值,2逻辑运算符的优先级,(1)逻辑非的优先级最高,逻辑与次之,逻辑或最低 .即:!(非) &(与) |(或) (2)与其它种类运算符的优先关系! 算术运算符 关系运算符 & | 赋值运算符 逗号运算符,5.2 逻辑运算符和逻辑表达式,例 ab&xya=b|x=y!a|ab

8、,/ (a=x) & (x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),用逻辑运算符将1个或多个关系表达式或逻辑量(真或假)连接起来的式子。,5.2 逻辑运算符和逻辑表达式,3逻辑表达式的概念,在C语言中,用逻辑表达式表示多个条件的组合。例如,要判断某一年year是否是闰年。闰年的条件是符合二者之一:能被4整除,但不能被100整除。能被4整除,又能被400整除。,(year%4=0)&(year%100!=0)|(year%400=0),逻辑表达式的值也是一个逻辑值(非“真”即“假”)。,5.2 逻辑运算符和逻辑表达式,4逻辑表达式的值,例如,假设num=12,

9、则: !num的值 num=1 num31的值1。,C语言中,运算量: 0表示“假”,非0表示“真”,运算结果: 0表示“假”,1表示“真”,例 a=4;b=5;!aa&ba|b!a|b4&0|253&2|84-!0c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0) 值为1,5.2 逻辑运算符和逻辑表达式,(1)逻辑运算符两侧的操作数,除可以是和非的整数外,也可以是其它任何类型的数据,如实型、字符型等。a&b(2)在计算逻辑表达式时,并不是所有的表达式都被求解,只有在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,5.2 逻辑运算符和逻辑

10、表达式,5说明,短路特性,例 a(m=ab)&(n=cd),/结果m=0,n=1,例如:执行以下语句后,x,y,z的值分别为()int x=0,y=0,z=0;+x|+y,5.3 简单条件结构,用if语句可以构成分支结构。它对给定的条件进行判断,根据判断的结果(真或假)来决定执行某个分支程序段。,单选择: 格式:if (expression) statement 执行过程:,例:if (xy)printf(“%d”,x);,表达式,真,假,语句,# include main() int num1, num2, sum;printf(“n请输入两个数:“);scanf(“%d %d“, ,简单i

11、f语句的示例,56,78,134,请输入两个数:56 78,两数的和大于 100,双选: 格式:if (expression) statement1elsestatement2 执行过程:,例:if (xy) printf(“%d“,x);else printf(“%d“,y);,表达式,真,假,语句1,语句2,修改上例 # include main() int num1, num2, sum;printf(“n请输入两个数:“);scanf(“%d %d“, ,#include main() int num;printf(“n请输入一个整数:“);scanf (“%d“, ,if-else语

12、句的示例,57,请输入一个整数:57,57 是一个奇数。,问题描述: 要求用户输入一个字符,用程序判断该字符是否为小写字母 ,并输出相应的信息。,#include main() char a;printf(“n请输入一个字符:“);scanf(“%c“, ,使用&运算符的示例,T,请输入一个字符:T,您输入的字符不是小写字母,问题描述: 接受用户输入的三种商品的价格。如果购买的三种商品中至少有一种商品的价格大于 50 或者三种商品的总额大于 100,则折扣率为15,否则折扣率为,计算并显示用户应付的钱数。,#include main() float rate1,rate2,rate3;doub

13、le discount,total;printf(“n请输入第一种商品的价格:“);scanf(“%f“, ,使用 | 运算符的示例,if(rate150)|(rate250)|(rate350)|(total100),输出: 请输入第一种商品的价格:34 请输入第二种商品的价格:42 请输入第三种商品的价格:38 折后总价为:96.90,问题描述: 确定用户输入的数字是否可以被5整除,并输出相应的消息。,#include main() int num;printf(“n 请输入一个数:“);scanf(“%d“, ,使用 ! 运算符的示例,请输入一个数:90,该数能被 5 整除,问题描述:判

14、定给定的年份是否为闰年。提示:闰年的判定规则为:能被 4 整除但不能被 100 整除的年份,或能被 400 整除的年份。,#include main() int year;printf(“n 请输入年份:“);scanf(“%d“, ,综合示例1,请输入年份:2005,2005 年不是闰年,问题描述: 输入一个5位数,判断它是不是回文数。 例如:12321是回文数,个位与万位相同,十位与千位相同。,#include main() long ge,shi,qian,wan,x;printf(“n 请输入一个五位整数:“);scanf(“%ld“, ,综合示例2,输出: 请输入一个五位整数:456

15、54 这个数是回文数,如:if(a=b,说明: if后面的表达式类型任意,if(x) if(x!=0)if(!x) if(x=0) if和else后面只含一个语句,也可以是复合语句(用括起来) else不能作为语句单独,它必须与if配对使用,例 考虑下面程序的输出结果: #include main() int x,y;scanf(“%d,%d”, ,编译错误!,有胡萝卜吗?,有黄瓜吗?,制作胡萝卜沙拉,有,多重条件判断,有,制作黄瓜沙拉,制作黄瓜沙拉,没有,没有,多重if(阶梯式),要处理多重条件判断的情况,需要使用多重条件结构,多重条件结构,嵌套 if,switch结构,if (表达式1)语

16、句1;else if (表达式2)语句2;else if (表达式3)语句3; . . else 语句n;,多重 if 结构是if-else 的另一种形式 ,这种形式也称为阶梯式 if-else-if,多重 if 结构,真,假,真,假,真,假,表达式1,真,假,语句1,语句2,表达式2,表达式3,语句3,语句4,真,假,真,假,多重 if 结构示例,问题描述: 编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于90分输出“优”;成绩大于等于80分小于90分输出“良”;成绩大于等于60分小于80分输出“中”;成绩小于60分输出“差”。,#include main()

17、float grade;printf(“n 请输入期末考试成绩: “);scanf(“%f“, ,59,请输入期末考试成绩:59,差,嵌套 if 结构就是将整个 if 块插入另一个 if 块中,嵌套 if 结构,if (表达式1)if (表达式2)if (表达式3) 语句m;else语句n;,真,真,真,假,if (x 0)if (y 1) z = 1; else /*这个 else 部分属于哪个 if?*/z = 2;,嵌套 if 结构,C语言规定,每个 else 部分总属于前面最近的那个缺少对应的 else 部分的 if 语句。提倡使用大括号括起来以避免看起来有二义性。,?,if else

18、 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对,#include main() int a,b;printf(“n 请输入 A 和 B 的值: “);scanf(“%d%d“, ,嵌套 if 结构的示例,68,93,输出: AB,例: if (a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改: if (a=b) if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,实现if else 正确配对方法:加 , 考虑下面程序输出结果:main() int x=100,a=10,b=20;int v

19、1=5,v2=0;if(ab)if(b!=15)if(!v1)x=1;elseif(v2) x=10;x=-1;printf(“%d”,x);,结果:-1,switch 结构,printf(“这是迈克尔,身高 180cm,加利福尼亚第 12 大街”);,printf(“这是丹尼尔,身高 193cm,现居住地不明,1998 年 12 月 12 日在佛罗里达被捕”);,printf(“这是吉姆,身高 175cm, 墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”);,default:,printf(“未发现匹配项。对不起!”);,停止搜索,停止搜索,停止搜索,停止

20、搜索,警察记录,不是,这是吉姆,身高 175cm, 墨西哥州海鸥路弗罗拉公寓, 于 2003 年 11 月 1 日在新泽西因抢银行被捕,不是,是,switch-case 语句是多路判断语句 switch 语句计算条件表达式并对照多个常数值进行检查,switch 结构,switch (表达式) case 常量 1:语句;break;case 常量 2:语句;break;default:语句; ,计算表达式的值,如果等于常量1,如果等于常量2,如果没有找到匹配的值,阅读程序,分析结果 main() int score;scanf(“%d”,运行结果: score为5时,输出: Very good!

21、 Good! Pass! Fail! data error!,switch 结构,在使用switch结构时应注意以下几点:在case后的各常量表达式的值不能相同,否则会出现错误; 在case后,允许有多个语句,可以不用括起来; 每个case语句后都必须有一个break语句,否则会出现错误; 各case和default子句的先后顺序可以变动,而不会影响程序执行结果; default子句可以省略;,switch 结构示例,问题描述: 要求用户输入一个字符值并检查它是否为元音字母。,char in_char; printf(“n 请输入一个小写字母: “); scanf(“%c“, ,e,请输入一个

22、小写字母:e,您输入的是元音字母 e,多重if结构和switch结构都可以用来实现多路分支 多重if结构用来实现两路、三路分支比较方便,而switch结构实现三路以上分支比较方便 在使用switch结构时,应注意分支条件要求是整型表达式,而且case语句后面必须是常量表达式 有些问题只能使用多重if结构来实现,例如要判断一个值是否处在某个区间的情况,比较多重 if 和 switch 结构,示例,问题描述: 要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII码值小于32的为控制字符。 在09之间的为数字,在AZ之间为大写字母, 在az之间为小写字

23、母,其余则为其它字符。,main() char c;printf(“n 请输入一个字符: “);c=getchar();if(c=0 ,E,请输入一个字符:E,该字符是一个大写字母,示例,问题描述: 编写一个简单的计算器,实现两个整型数的四则运算。,int a,b; char op; printf(“n 输入操作数1,运算符,操作数2: “); scanf(“%d,%c,%d“, ,输入操作数1,运算符,操作数2:45,*,2,452 = 90,45,2,*,switch说明:E1,E2,En是常量表达式,且值必须互不相同 语句标号作用,必须用break跳出 case后可包含多个可执行语句,且

24、不必加 switch可嵌套 多个case可共用一组执行语句,如: case A:case B:case C: printf(“score60n”);break;,分析结果#include ”stdio.h”main() int a=15, b=21, m=0;switch (a%3) case 0: m+; break;case 1: m+;switch (b%2) default: m+;case 0: m+; break;printf(”%dn”,m);,A1 B2 C3 D4,分析结果void main() int x=1,y=0,a=0,b=0;switch(x) case 1:swi

25、tch(y) case 0: a+; break;case 1: b+; break;case 2: a+;b+; break;case 3: a+;b+;printf(“na=%d,b=%d”,a,b);,运行结果:a=2,b=1,#include main() int c;printf(“Enter m or n or h or other:“);c=getchar();switch(c) case m: printf(“nGood morning!n“);break;case n: printf(“nGood night!n“); break;case h: printf(“nHello

26、!n“); break;default : printf(“n?n“); break; , 根据输入字母输出字符串,条件运算符,?,?,条件表达式,考试是 否及格?,是,不是,真,表达式1,假,表达式2,条件运算符,if (num100) value=y; else value=n; ,使用“if-else”的等同代码,假设 num = 200,value = num 100,;,?,y,:,n,200,value,=,y,一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b|printf(“a+|b|=%dn”,b0

27、?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,条件运算符可嵌套如 x0?1:(x0?-1:0) 优先级: 13,结合方向:自右向左如 ab?a:cd?c:d ab?a:(cd?c:d) expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b /x=0,表达式值为b; x0,表达式值为axy?1:1.5 /xy ,值为1.0; xy ,值为1.5,5.3.3 条件运算符和条件表达式,条件运算符示例,问题描述: 个人所得税收取规定:工资大于1000元的部分将扣除5的个人所得税。小于1000元

28、的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。,#include void main() double sal;double rate;printf(“n 请输入基本工资:“);scanf(“%lf“, ,请输入基本工资:1500,税后工资为:1475.00,总结,多重if结构就是在主if块的else部分中还包含其他if块 嵌套if结构是在主if块中还包含另一个if 语句 C语言规定,嵌套if结构中每个else部分总是属于前面最近的那个缺少对应的else部分的if语句 switch结构也可以用于多分支选择。用于分支条件是整型表达式,而且判断该整型表达式的值是否等于某些值(可以罗列

29、的),然后根据不同的情况,执行不同的操作 条件运算符是 ifelse 语句的另一种表现形式,练习,从键盘输入的三角形的三条边长,编程判定是该三边 可以组成何种三角形。 从键盘任意输入年、月,编程输出该年份该月的天数。 商店卖西瓜,10斤以上的每斤0.15元,8斤以上的每斤0.3元,6斤以上的每斤0.4元,4斤以上的每斤0.6元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,输出应付款和应找钱数。 某服装批发商店经营套服,也单件出售。若买的不少于50套,每套80元;不足50套的每套100元;只买上衣每件60元;只买裤子每条45元。从键盘任意输入顾客所买的上衣和裤子的件数,输出应付款。,给出一百分制成绩,要求输出成绩等级A、 B、 C、 D、 E。90分以上为A,80到89分为B,70到79分为C,60到69分为D,60分以下为E。 有3个整数a、b、c,由键盘输入,输出其中最大的数。 通过键盘输入字符,判断其为控制、数字、大写字母、小写字母和其他字母的哪一类。 根据如下函数关系,从键盘任意输入一个数(x),计算出相应的y值。x yx0 00=x10 x10=x20 1020=x40 -0.5x+20,

展开阅读全文
相关资源
猜你喜欢
相关搜索

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

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1