C语言第4章选择结构.ppt

上传人:本田雅阁 文档编号:2201091 上传时间:2019-03-03 格式:PPT 页数:47 大小:576.01KB
返回 下载 相关 举报
C语言第4章选择结构.ppt_第1页
第1页 / 共47页
C语言第4章选择结构.ppt_第2页
第2页 / 共47页
C语言第4章选择结构.ppt_第3页
第3页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言第4章选择结构.ppt》由会员分享,可在线阅读,更多相关《C语言第4章选择结构.ppt(47页珍藏版)》请在三一文库上搜索。

1、if 语句,关系表达式和逻辑表达式,if 语句的变形及嵌套,多重选择语句 (switch 语句),本章小结,本章内容,第4章 选择结构程序设计,第四章 选择结构程序设计,问题与讨论:,第四章 分支结构程序设计,解决办法:,1、引入新的程序结构,选择结构, 有时也称 判断结构 或分支结构。,2、为了和分支结构相配合,同时还要 引入逻辑表达式的概念。,3、有三种形式可进行分支结构的程序设计,A、 if 结构 B、多重选择结构(switch语句) C、无条件转移结构(goto语句),第4章 选择结构程序设计,【例4.1】输入两个正整数,并按从小到大的顺序输出。,void main( ) int a,

2、b,t; scanf(“%d,%d“, ,void main( ) int a,b; scanf(“%d,%d“, ,图3-2 变换a和b的值,if (ab) t=a; a=b; b=t; ,if 条件“真” 复合语句1 else 复合语句2,(1) if,else 为关键字 (2)如果语句块超过一条语句,则要用一对大括号 将语句块括起作为复合语句 (3) else 可省,语法:,说明:,if 语句,计算逻辑表达式的值,真否?,复合语句1,复合语句2,执行复合语句后的语句,F,T,ifelse 的执行过程,【例4.6】编写程序,求输入的整数的绝对值并将其输出。,void main( ) int

3、 x,x1; scanf(“%d”, ,形式:if (表达式) 语句块,【例4.7】比较用户输入的两个整数的大小。若输入的第1个数大于第2个数,则显示:firstsecond,#include void main( ) int first, second; printf(“Enter two numbers: “); scanf(“%d%d“, ,形式: if (表达式) 语句块 else 语句块,一、if 语句的变形,1、省略 else语句 语法: if 逻辑表达式“真” 语句体 ,2、增加 else 语句,语法: if 逻辑表达式1“真” 语句体 1 else if 逻辑表达式2“真” 语

4、句体 2 . . else 语句体 N ,if语句的变形,形式:if (表达式) 语句块,形式: if (表达式) 语句块 else if 语句块 else 语句块,if 逻辑表达式 “真” 语句块 1 if 逻辑表达式 2 “真” 语句块 2 else 语句块 3 else 语句块 4 ,注意:else 语句与最近的 if 语句配套,if 语句的嵌套,注意:嵌套必须完全包住,不能相互骑跨。在if 的嵌套中, else, else if 与 最近的 if 相匹,大括号要配对。,if 逻辑表达式 1 语句块 1 if 逻辑表达式 2 语句块 2 else 语句块 3 else 语句块 4 语句块

5、 5 ,忌讳:大括号不配对, 也不对齐,不知谁跟谁配对,【例4-9】 编写一程序,进行十进制数、八进制数和十六进制数之间的转换。(04.doc),【例】 商店售货,按购买货物款的多少分别给予不同的优惠折扣,编程计算实际应付货款。 (1)购货不足250元,没有折扣; (2)购货250元(含250元,下同), 不足500元,减5% (3)购货500元,不足1000元,减价7.5%; (4)购货1000元,不足2000元,减价10%; (5)购货2000元及以上,减价15%;,1、算法分析: 设购物款为M,折扣为D,则D可表示为: D=0 (M250) D=0.05 (250 M500) D=0.0

6、75 (500 M1000) D=0.1 (1000 M2000) D=0.15 (2000M),void main( ) ,程序 代码,if ( m=250 ,t=m*(1-d), /计算应付款 printf( “实际应付款:%f”,t);,float m,d,t; printf(“请输入购物金额: ”); scanf(“%f”,void main( ) ,float m,d,t; printf(“请输入购物金额: ”); scanf(“%f”,if ( m=250 ,t=m*(1-d), /应付款 printf( “实际应付款:%f”,t);,形式: if(表达式1)语句1 else if

7、(表达式2)语句2 else if(表达式3)语句3 . . . else if (表达式m)语句m else 语句 n,?,这样改写的优点?,的根,2、数据结构: 由于问题简单,只需用到一些单精度实数,【例】 求一元二次方程,第4章 选择结构程序设计,3、伪代码,输入方程系数 a,b,c 计算判别式 d=b*b-4*a*c if 判别式大于等于 0 then 计算两个实根 定位输出光标 打印结果 else 计算实部 计算虚部 定位输出光标 打印结果 end program,第4章 选择结构程序设计,#include #include void main() ,float a,b,c,d,x1

8、,x2,p,q; printf( “输入方程系数:” ); scanf(“%f,%f,%f”,d=b*b-4*a*c;,if ( d=0) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf( “x1=%f,x2=%fn”,x1,x2); ,else p=-b/(2*a); q=sqrt(-d)/(2*a); printf( “x1=%f+i%f,x2=%f-i%fn”,p,q,p,q);,一、逻辑量的概念,逻辑值: “真”、“假”,或 T 、F 表示方式: 0 表示“假”,非0表示“真” 系统真值: 1,二、关系运算符,关系运算符 含义 例子

9、 结果 优先级 大于 4+69 = 大于或等于 6=5 = 小于或等于 8=7 = 等于 2+3=6 != 不等于 9+3!=12,T T T F F F,相同,高,相同,低,关系表达式和逻辑表达式,用关系运算符将两个算术表达式或两个字符串表达式联起来的式子,其值为逻辑值。,例 #include main() int a,b; a=10=56; b=(10=5)6; printf(“%d,%dn”,a,b); 输出结果:,0,1,例 #include main() int a,b; a=6*77+8; b=7!=73; printf(“%d,%dn”,a,b); 输出结果:,1,1,三、关系表

10、达式,!(非), &(与), | (或),1、运算符,2、运算法则(T 真, F 假),值 逻辑非 逻辑与 逻辑或 X Y ! X X & Y X| Y T T T F F T F F,F T T,F F T,T F T,T F F,四、逻辑运算符,用逻辑运算符连接关系表达式的式子称逻辑表达式。,例 用逻辑表达式表达下述数学式,(1) 080 (3) 10x 30, 50 x 90,相应的逻辑表达:,(1) 0x & x10,(2) x180 (或 !(x=60 & x=80),(3) (x=10 & x=50 & x=90),x,10,0,60,80,x,10,50,90,x,30,x,x,

11、五、逻辑表达式,2、运算符的优先级,1、逻辑运算符的优先级,!,&,|,高,低,( ),!, +,-,(类型),sizeof,*,/ ,%,+,-,=,=,!=,&,|,赋值运算符,自右至左,? :,逻辑表达式中的优先级,语法:表达式1?表达式2:表达式3,说明:表达式1的值非零,则条件表达式的值为表达式2的值,否则为表达式3的值。,执行过程:,表达式1,表达式的值为表达式3的值,表达式的值为表达式2的值,T,F,条件运算符,void main( ) int a,b; scanf(“ %d,%d “, ,在某种情况下,条件运算符可以代替if语句,简化程序书写,void main( ) int

12、a,b; scanf(“ %d,%d “, ,改写后,【例?:】 从键盘输入两个整数,按大小顺序输出,【例】 从键盘输入一字符,如果为Y,则打印是,若为N,打印否, 其它字符,打印输入错误。,#include void main() char a; printf(“输入一个字符:”); a=getchar(); if( a=“Y” | a= =“N” ) if (a=“Y”) printf( “是”); else printf( “否”); else printf( “输入数据不合要求”); ,嵌套不能太深,一般以三层为限, 嵌套太深,容易出错。,【例4-12】用户从键盘输入3个整数,找出并输

13、出其中数值最大的那一个。如果其中有一个以上的最大数(两数相等的情况),也要表示出来。,#include void main() int a,b,c; printf(“Enter 3 numbers: “); scanf(“%d%d%d“, ,#include void main() int x,y,z; printf(“Iput x,y,z:”); scanf(“%d,%d,%d”, ,嵌套不能太深,一般以三层为限, 嵌套太深,容易出错。,【例】从键盘输入三个整数,判断其正负情况,#include void main() int x,y,z; printf(“Iput x,y,x:”); sc

14、anf(“%d,%d,%”, ,利用逻辑表达式将上例改写,第4章 选择结构程序设计,改 写 后 的 程 序 结 构 要 清 晰 得 多,【例 】 将输入的字母转化为小写字母。,1 算法分析,在计算机中,处理英文字母,其实是处理它的ASCII码值。将大写字母变成小写字母,就是将大写字母的ASCII码值变为相应的小写字母的ASCII码值。,大写字母的ASCII值比小写字母的ASCII值小32,故将相应字母的ASCII值加32就变成了小写字母。,程序设计时,要注意如果输入的不是大写的字母,则不用转换。,void main() char ch; scanf(“%c”, ,2 源程序代码之一,void

15、main() char ch; scanf(“%c”, ,注意: 1、 条件运算符优先于赋值运算符,低于关系运算符 2、条件运算符的结合方向为“自右至左” ab?a:cd?c:d ab?a:(cd?c:d),此处使用了条件运算符,3 源程序代码之二,等价于,#include void main() int i; printf(“输入数字 1- 7: ”); scanf(“%d”, ,【例 】 输入星期中的某一天,显示对应的英文,是否有更好的办法来解决多分支程序结构?,?,语法: switch(表达式) case 常量表达式1:语句块1 case 常量表达式2:语句块2 . . . case 常

16、量表达式N:语句块N default: 语句块N+1 ,switch多重选择语句,说明: switch后的表达式可以是char, byte, short, or int 类型,case后的表达式与switch后的表达式相等时, case后的语句被执行。若一个相等的也没有时,执行default后面语句。若没有default时,则结束switch语句,case后的表达式必须互不相同,否则出错,case 与 default 出现的顺序不影响执行结果。,执行完一个case语句块后,流程转到下一个case语句继续执行。,在执行过程中碰到break语句,程序退出switch结构。,void main()

17、int i; printf( “输入数字 1- 7: ”); scanf(“%d”, ,【例 switch】 用 switch 语句重写打印星期程序。,void main() int i; printf( “输入数字 1- 7: ”); scanf(“%d”, ,语法:break;,功能: 1: 退出所在switch语句 2: 退出所在循环(for,while,do),break 语句,格式: continue ;,功能:忽略continue 以下的循环体,重新回到循环开始(对continue 所在循环有效)。,continue 语句,【例 】 用 switch 语句重写前例的程序,void

18、main() char a; printf( “输入一个字符:” ); a=getchar(); if (a=“Y” | a=“N” ) if (a=“Y” ) printf( “是n”); else printf( “否n”); else printf( “字符不合要求!n”); ,void main() char a; printf( “输入字符:”); a=getchar(); switch (a) case Y: printf( “是n”); break; case N: printf( “否n”); break; default: printf( “字符不合要求!n”); ,【例 4

19、-9B】 在屏幕上显示菜单,分析: 程序首先在屏幕上将功能显示出来,用户根据需要选择相应的功能,程序根据用户的选择执行相应的程序段。,对于这类程序,往往是用户输入一个英文字母,然后程序根据字母来断别程序该执行什么程序段,故一般用 switch语句比较方便。,2 源程序清单,switch(a) case i: printf(“调用输入模块!”); break; case o: printf(“调用输出模块!”); break; case l: printf(“调用查找模块!”); break; case q: printf(“调用退出模块!”); break; ,main() int char

20、a; printf(“请选择:”); printf(“输入 i ”); printf(“ 输出 o ”); printf(“找出最长的单词 l”); printf(“退出 q”); a=getchar();,执行选项时,要调用相应的模块(程序段)。由于现在还没有相应的程序,暂用一条打印语句代替。,以后会用相应程序代替,语法 : goto 语句标号 (有效的C标识符,不能是整数),功能 : 改变程序执行的顺序,无条件转移到语 句标号所指定的语句行。,语句标号:语句某一行的名字,一般情况下可省。,定义标号例:loop : x=x+1;,无条件转移语句 (goto 语句),使用goto例:goto

21、loop;,【例 4.14】 统计某班级中计算机课程中考试成绩高于80分的人数。假设学生人数为 ,void main() int i, fs, j=0; Loop: scanf(“%d”, ,1、分支结构:改变程序的执行流程,或有选择地执行程序;,2、if else 和 switch 是结构化语句,而 goto 语句不是;,3、块 if 语句 可以取代所有的分支结构,而多重分支结构不可;,4、块 if 语句 中的条件可以是复杂逻辑表达式,而多重分支中 的条件只能是简单表达式;,5、块 if 与 goto 语句结合,可以构造任何复杂的循环, 但用专门的循环语句更方便。,本章小结,易出错内容,if 后的条件不用括号括起来 if 条件后加上分号 关系运算符 和赋值运算符区分 习惯于数学的区间表示,如00 & x5 if多层嵌套语句的匹配关系分不清 在switch语句中漏掉break语句,作业,1、编写程序,输入一个整数,输出它是奇数还是偶数。 2、输入3个整数,要求按照从大到小的顺序输出。 3、输入一个整数,求其平方根和立方根。(考虑负数情况) 4、p111 5.6 5、p111 5.8,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1