收藏 分享(赏)

C语言 第05章 选择结构程序设计.ppt

上传人:tkhy51908 文档编号:7972820 上传时间:2019-06-01 格式:PPT 页数:61 大小:1.30MB
下载 相关 举报
C语言 第05章 选择结构程序设计.ppt_第1页
第1页 / 共61页
C语言 第05章 选择结构程序设计.ppt_第2页
第2页 / 共61页
C语言 第05章 选择结构程序设计.ppt_第3页
第3页 / 共61页
C语言 第05章 选择结构程序设计.ppt_第4页
第4页 / 共61页
C语言 第05章 选择结构程序设计.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

1、第五章 选择结构程序设计,5.1 关系运算符和关系表达式5.2 逻辑运算符和逻辑表达式5.3 if语句5.4 switch语句5.5 程序举例,第五章 目录,ch5 选择结构程序设计,问题提出:,计算分段函数:,y=,3-x x0,2/x x0,解题的步骤:,输入x,x0,是,y=3-x,y=2/x,否,输出y的值,选择结构的语句有两种:if语句、switch语句。,5.1 关系运算符和关系表达式,5.1 关系运算符和关系表达式,1.关系运算符,关系运算:比较运算 比较两个操作数,判断比较的结果是否满足给定的条件。,=,=,=,!=,小于 ,35,小于等于,3=5,大于,53,大于等于,5 =

2、3,等于,5=3,不等于,5!=3,注意:,数学表达式,C表达式,转换,5.1 关系运算符和关系表达式,优先级, =,= !=,结合方向,自左向右,算术 运算符,高 低,高 低,高 低,赋值 运算符,ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),5.1 关系运算符和关系表达式,2.关系表达式,用关系运算符将表达式连接起来的式子,表达式的值,关系成立,即为真,结果为1;,关系不成立,即为假,结果为0;,关系表达式的值是1或0,故可以参与其他种类的运算。,5.1 关系运算符和关系表达式,如:a=3,b=2,c=1,ab(ab)=cb+cb f=ab

3、c,5.2 逻辑运算符和逻辑表达式,5.2 逻辑运算符和逻辑表达式,1.逻辑运算符,!,运算规则:取反,假,真,&,运算规则:两个操作数均为真,结果为真。,|,运算规则:只要两个操作数有一个为真,结果为真。,:逻辑非,一元运算符,:逻辑与 。又称逻辑乘。,:逻辑或 。又称逻辑加。,真,假,优先级,5.2 逻辑运算符和逻辑表达式,结合性,关系 运算符,& 逻辑与,算术 运算符,! 逻辑非,| 逻辑或,高 低,高 低,高 低,高 低,高 低,赋值 运算符,!:自右向左,&、|:自左向右,例.运算符的优先级。,5.2 逻辑运算符和逻辑表达式,53&8 4-!0,1,3,8,0,1&,0,5.2 逻辑

4、运算符和逻辑表达式,2.逻辑表达式,用逻辑运算符将表达式连接起来的式子。,逻辑表达式的值,非0 值:真,0值:假,整型 实型 字符型 指针类型,0 0.0 0 NULL,5.2 逻辑运算符和逻辑表达式,例.逻辑表达式举例。,int a=5; float b=3.5;,!a,0,!b,0,a&b,1,a|b,1,!a&!b,0,5.2 逻辑运算符和逻辑表达式,注意:,逻辑运算符两侧的操作,除了可以是0和非0的整数外,可以是其他任何类型的数据,如实型、字符型数据等。,可用逻辑表达式表示一个复杂的条件。,如:(y%4=0&y%100!=0)|y%400=0,5.2 逻辑运算符和逻辑表达式,注意:,在

5、逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,5.2 逻辑运算符和逻辑表达式, a & b & c,求解方法: 只有a为真(非0),才需要判断b 的值,只有a 和 b 都为真,才需要判断c 的值。只要a为假,就不必判断b和c,运算立即中止。,5.2 逻辑运算符和逻辑表达式,例:n1=1, n2=2, n3=3, n4=4, x=1, y=1,( x = n1n2 )&( y = n3n4 ),0,x值为0&运算中止结果: x为0, y为1, 表达式的值为0,5.2 逻辑运算符和逻辑表达式,例:a=0; b=1; c=2

6、;,d=(a+)&(b+)&(- -c),结果: d=0, a=1, b=1, c=2,0a自增为1 &运算中止 d 值为0,5.2 逻辑运算符和逻辑表达式, a | b | c,求解方法: 只要a为真(非0), 就不必判断 b和c ;只有a 为假,才判断b ;a 和b 都为假,才判断c。,5.2 逻辑运算符和逻辑表达式,例:a=0; b=1; c=2;,d=(a+) | (b+) | (- -c),结果: d=1, a=1, b=2, c=2,0 a自增为1,1 b自增为2,|,|运算中止,d 值为1,5.3 if语句,5.3 if语句,单分支选择if语句,双分支选择if语句,多分支选择if

7、语句,1. if语句的三种形式,if语句是用来判定所给定的条件是否满足,根据判定的结果决定所执行的操作。,5.3 if语句,单分支选择if语句,语句形式,if (表达式) 语句,语句执行流程,表达式,语句,真(非0),假(0),5.3 if语句,例.输入两个整数a 和b,如果a大于b则交换两数,并输出。,ab,交换a、b,真,假,#include “stdio.h”void main() int a, b, t; scanf(“%d,%d“, ,if(ab) t=a;a=b;b=t;,printf(“a=%d,b=%dn“,a,b); ,输入a,b,输出a,b,结束,5.3 if语句,注意:,

8、if语句中条件表达式形式很灵活,可以是常量、变量、任何类型表达式等。只要表达式的值为非零值,条件就为真,反之条件为假。,if( x ) printf (“x不为0”);,5.3 if语句,if语句自动结合一条语句,当满足条件需要执行多个语句时,应用一对大括号 将需要执行的多个语句括起,形成一个复合语句。,if(ab) t=a; a=b; b=t; ,;,5.3 if语句,双分支选择if语句,语句形式,if (表达式) 语句1 else 语句2,语句执行流程,表达式,语句1,真(非0),假(0),语句2,5.3 if语句,例.输入两个整数,输出其中较大的数。,#include “stdio.h”

9、void main( ) int x, y, max; scanf(“%d,%d“, ,if(xy) max=x;else max=y;,printf(“max=%dn“,max); ,xy,max=x,真,假,max=y,输入x,y,输出max,结束,5.3 if语句,例.判断下面程序的输出结果。,#include “stdio.h”void main( ) int a=10, b=0; if (a=12) a=a+1; b+=1; else a=a+4; b+=4;printf(“%d; %dn“, a, b); ,运行结果,13;1,判断赋值表达式的值a为12,5.3 if语句,注意:,

10、不能误认为if 和else 是两条语句,它们都属于同一个if 语句。else子句不能单独使用,必须与if 配对使用。,如:if (ab) a+;b+;else a=0;b=10;,当if else 之间的语句不止一条时,应该用一对 将语句括起。,5.3 if语句,多分支选择if语句,语句形式,if (表达式1) 语句1 else if (表达式2)语句2 else if (表达式n)语句nelse 语句n+1,5.3 if语句,语句执行流程,表达式1,语句1,真(非0),假(0),语句2,表达式2,真(非0),表达式n,语句n,语句n+1,假(0),假(0),真(非0),5.3 if语句,例.

11、计算分段函数。,x0,y= -1,真,假,y=0,x=0,真,y=1,假,输入x,5.3 if语句,程序如下:,#include “stdio.h”void main( ) float x; int y;printf(“enter x:“);scanf(“ %f “, ,if (x0) y=-1;else if (x= =0) y=0;else y=1;,printf(“x=%.2f, y=%d n“, x, y); ,5.3 if语句,在if 语句中又包含一个或多个if 语句称为if 语句的嵌套。,语句形式,2. if语句嵌套,if (表达式1)if (表达式2)语句1else语句2,if

12、(表达式1)if (表达式2) 语句1else 语句2 else if (表达式3) 语句3else 语句4,5.3 if语句,语句执行流程,表达式1,语句1,真(非0),假(0),语句2,表达式2,真(非0),表达式3,语句3,语句4,假(0),假(0),真(非0),5.3 if语句,要特别注意else与if 之间的匹配关系。,if (x0) y=-1;else if (x=0) y=0;else y=1;,if (x=0) if (x0) y=1; else y=0; else y=-1;,5.3 if语句,else与if 的匹配 就近一致原则,else 与同一层在它上面的、最接近的、尚未

13、匹配的if 配对。,建议: 将内嵌的if语句,一律用花括号括起来。另外嵌套的层数不宜太多,在实际编程时,应适当控制嵌套层次(23)。,如:if ( )if ( ) 语句1else if ( ) 语句2else 语句3,if ( )if ( ) 语句1 else if ( ) 语句2else 语句3,5.3 if语句,一般形式,3. 条件运算符,由两个符号?、:组成一个三元运算符。, ? :,如:(ab) ? a : b,5.3 if语句, ? :,求值规则和表达式的值,求解 表达式1,(非0)真,求解 表达式2,(0)假,求解 表达式3,表达式 的值,max=(ab)?a:b,if(ab) m

14、ax=a; else max=b;,等价,5.3 if语句,优先级,! 算术 关系 &和| 条件 赋值,例: int max, a=5, b=3, sub;,max = ab ? a : b,sub = ab ? a-b : b-a,max=5,5.3 if语句,已知:int x, y; x=24; y = x10 ? x/10 : x0 ? x: -x ;,结合性,自右向左,y = x10 ? x/10 : (x0 ? x: -x) ;,y=2,若理解为y = (x10 ? x/10 : x0) ? x: -x ;,则y=24,5.3 if语句,例. 输入一个字母,若是大写,将其转换成小写,

15、并输出。,分析: 判断条件ch=A&ch= 65 & ch= 90 大小写字母的转换,5.3 if语句,参考程序:,#include “stdio.h” void main( ) char ch;scanf(“%c”, ,5.3 if语句,注意:,表达式2和表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。,ab ? (a=100) : (b=100),ab? printf(“%d”, a) : printf(“%d”, b),5.4 switch语句,5.4 switch语句,1.语句形式,switch (表达式) case 常量表达式1: 语句1;break;case 常量表达

16、式2: 语句2;break;case 常量表达式3: 语句3;break;.case 常量表达式n: 语句n;break;default : 语句n+1;,根据表达式的不同值,选择不同的程序分支,又称开关语句。,数值型 或 字符型,常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。,5.4 switch语句,例. 假设用1、27分别表示星期一星期日。现输入一个数字,输出对应的星期几的英文单词。,#include “stdio.h” void main() int n;scanf(“%d“, ,运行情况,3 Wednesday Thursday Friday

17、Saturday Sunday Error,5.4 switch语句,将上例修改如下:,#include “stdio.h” void main( ) int n;scanf(“%d“, ,运行情况,3 Wednesday,5.4 switch语句,2. 语句执行流程,计算表达式,值,=,=,=,=,=,常量 表达式1,常量 表达式2,常量 表达式n,其它,语句1,语句2,语句n,语句n+1,break,无,break,无,break,无,有,有,有,简单语句或复合语句,case语句出 现的次序并 不影响执行 结果。,5.4 switch语句,多个case可以共用一组执行语句。,3. 说明,s

18、witch(grade) case A:case B:case C: printf(“grade=60n“);break;default: printf(“grade60“); ,default语句可以省略不用。,5.4 switch语句,switch语句可以嵌套,break语句只跳出它所在的switch语句。,例 . 设有说明语句int a=1, b=0; 则执行以下语句后,输出为 。,switch(a) case 1: switch(b) case 0: printf(“*0*”); break;case 1: printf(“*1*”); break;case 2: printf(“*2

19、*”); break;,*0*,*2*,5.4 switch语句,例 . 输入某年某月某日,判断这一天是这一年的第几天。,程序分析: 以3月5日为例, 考虑月份,先把前两个月的天数加起来, 然后再加上5天即本年的第几天 特殊情况:闰年且输入月份大于3时需考虑多加一天(闰年2月有29天)。,5.4 switch语句,#include “stdio.h” void main( ) int day, month, year, sum, leap;printf(“nplease input year,month,dayn“);scanf(“%d,%d,%d“,5.4 switch语句,/*续上*/ca

20、se 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf(“data error“);break;sum=sum+day;if(year%400=0|(year%4=0 ,5.5 程序举例,5.5 程序举例,例.将任意三个整数按从大到小的顺序输出。,#include “stdio.h” void main() int x, y, z, t;printf(“请输入三个整数x,y,z:”);scanf(“%d,%d,%d“,5.5 程序举例,例.给一个不多于

21、4 位的正整数,求出它是几位数,逆序打印出各位数字。, 求出千位、百位、十位、个位上的数字a=x/1000;b=x%1000/100;c=x%100/10;d=x%10; 判断是几位数,5.5 程序举例,参考程序:,#include “stdio.h” void main() int x,a,b,c,d; /*a,b,c,d代表千位、百位、十位、个位*/scanf(“%d“, ,5.5 程序举例,例. 企业发放的奖金根据利润提成,求应发奖金总数。,奖金数=(利润-所在级下限)*比率+基数,5.5 程序举例,#include “stdio.h” void main() long int i;fl

22、oat bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld“, ,课堂练习,课堂练习,课堂练习,2. 写出下列“?:”运算的结果 。#include “stdio.h” void main() int x=3, y=4, z=4;printf(“%dn”, (z=y /* */,答案: 0 1,课堂练习,3. #include “stdio.h” void main()int x=1,y=0,a=0,b=0;switch(x)case 1: switch(y)case 0: a+;break;case 1:b+;break;case 2:

23、a+;b+;break;case 3: a+;b+;printf(“a=%d,b=%dn”,a,b);,结果: a=2,b=1,a=1,a=2 b=1,课堂练习,4. 写出下列程序的输出结果 。#include “stdio.h”void main() int x=1, y=2, z=3;x+=y+=z;printf(“%dn”, xy?x+:y+); /* */printf(“%d, %dn”, y, z); /* */,结果: 6 5 6, 6 9 7, 9,x=6, y=5, z=3,x=6, y=6, z=3,x=6, y=7, z=9,本章小结,本章小结,1. 三种运算符:关系、逻辑和条件运算符用法、优先级、结合性,2. 两种选择语句:if-else、switch语句,注意选择条件的描述;,2. 在编写程序过程中,注意分支的作用范围,及复合语句的运用。,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报