C语言第四章分支语句.ppt

上传人:牧羊曲112 文档编号:6504297 上传时间:2023-11-07 格式:PPT 页数:49 大小:914KB
返回 下载 相关 举报
C语言第四章分支语句.ppt_第1页
第1页 / 共49页
C语言第四章分支语句.ppt_第2页
第2页 / 共49页
C语言第四章分支语句.ppt_第3页
第3页 / 共49页
C语言第四章分支语句.ppt_第4页
第4页 / 共49页
C语言第四章分支语句.ppt_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《C语言第四章分支语句.ppt》由会员分享,可在线阅读,更多相关《C语言第四章分支语句.ppt(49页珍藏版)》请在三一办公上搜索。

1、2023/11/7,1,第四章 分支语句,4.1 if 结构,4.2 Switch语句,4.3 程序范例,2023/11/7,2,4.1 if 结构,顺序结构的程序只能以顺序的方式处理数据,但实际问题要求计算机能够对问题进行判断,根据判断的结果,选择不同的处理方式,这就要求程序本身具有判断和选择能力,分支结构正是为解决这类问题而设定的。C语言用于实现分支有if结构和switch结构。,4.1.1 if语句if结构是一种常用的分支结构,是最简单的一种单分支结构。,2023/11/7,3,一般形式为:,if(),:一般为条件表达式或逻辑表达式。功能:先判断的逻辑值,若该逻辑值为“真”,则执行,否则

2、,什么也不执行。注意:if语句中的一般情况下都是以复合语句的形式出现,即用一对花括号将语句括起来。if结构的流程图:,2023/11/7,4,【例4-1】从键盘任意输入两个实数,然后按其代数值从小到大输出这两个数。,16,a,b,16,9,16,9,t,2023/11/7,5,先制定算法的流程图,如图所示,虚线框为if结构。,根据流程图可以很方便地写出解决这个问题的程序,2023/11/7,6,/*exam4_1.c 按升序输出两个数*/#include main()float a,b,t;scanf(%f,%f,2023/11/7,7,例:输入三个实数,按从小到大的顺序输出。main()fl

3、oat a,b,c,t;scanf(“%f,%f,%f”,2023/11/7,8,【例4-2】:从键盘输入一个整数,求该数的绝对值。该问题算法的流程图:,2023/11/7,9,根据流程图写出的程序如下:/*exam4_2.c 求整数的绝对值*/#include main()int num;scanf(%d,2023/11/7,10,4.1.2 if_else语句,if_else语句是一种双分支结构,其一般形式为:if()else,:一般为条件表达式或逻辑表达式。功能是:先判断的值,若其值为“真”,则执行,否则执行。,if_else结构的流程图:,2023/11/7,11,【例4-3】设计一个

4、猜数游戏,由计算机产生一个随机数magic,从键盘输入一个数guess,若输入的数guess的大小等于随机数magic,则输出“You are right!”。否则,输出“You are wrong!”。,2023/11/7,12,根据流程图可写出程序如下:,/*exam4_3.c 猜数游戏的程序*/#include#include main()int guess,magic;magic=rand();scanf(%d,2023/11/7,13,4.1.3 if语句的嵌套,if语句的嵌套:是指在if或else的分支下又可以包含另一个if语句或if_else语句,嵌套的形式有规则嵌套和任意嵌套两

5、种。,if语句的规则嵌套形式如下:,if()else if()else if()else if()else,从最内层开始,else总是与它前面最近的未曾配对的if 配对,除非用花括号改变其配对关系。,2023/11/7,14,if_else的规则嵌套流程图,2023/11/7,15,【例4-4】从键盘输入+、-、*、/中的任一个,输出对应的英文单词:plus、minus、mutiply、divide,若输入的不是这四个字符中的任一个,则输出“error”。,算法的流程图如图所示,虚线框所示为if_else的规则嵌套:,2023/11/7,16,#includemain()char ch;ch=

6、getchar();if(ch=+)printf(plusn);else if(ch=-)printf(minusn);else if(ch=*)printf(multiplyn);else if(ch=/)printf(dividen);else printf(errorn);,2023/11/7,17,注意:if与else的匹配关系,else总是与其之前最近且不带else的if配对。将每一对if_else 结构采用缩进对齐方式,可以增加程序的可读性,良好的程序书写风格有助于对程序的理解。,【例4-5】计算阶跃函数y的值:,2023/11/7,18,算法的流程图如图,两个虚线框均为if_el

7、se结构。,2023/11/7,19,根据流程图写出的程序如下:,/*exam4_5.c 计算阶跃函数y的值*/#includemain()float x,y;printf(input x:n);scanf(%f,对多重if,最容易犯的错误是if与else配对错误,else总是与离它最近的上一个if配对。,2023/11/7,20,main()int x,y;scanf(“%d”,例4.3 另解,“语句1”部分,2023/11/7,21,例:编程判断某一年是否为闰年。,year被4整除,T,F,year被100整除,T,F,year被400整除,T,F,leap=1,leap=0,leap=1

8、,leap=0,leap,T,F,输出”闰年”,输出”非闰年”,2023/11/7,22,main()int year,leap;scanf(“%d”,if(year%4=0,2023/11/7,23,if(leap)printf(“%d is”,year);else printf(“%d is not”,year);printf(“a leap yearn”);,2023/11/7,24,例:if(ab)max=a;else max=b;max=(ab)?a:b;/*三目运算符*/例:if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,a

9、b?a:b);,补充:条件运算符?:,2023/11/7,25,优先级别:算术关系 条件 赋值ab?a:b+1;ab?a:(b+1)结合方向:“自右至左”如:ab?a:cd?c:d ab?a:(cd?c:d)x?a:b 当x=0时,条件表达式的值为b条件表达式中的操作对象类型可以不同,结果取较高类型。如:xy?1:1.5 当x y时,值为 1.0。,2023/11/7,26,4.2 Switch结构,当嵌套if分支较多时,程序变得复杂冗长,可读性降低。C语言提供了switch开关语句专门处理多路分支的情形,使程序变得简洁。,4.2.1 switch语句 switch语句的一般形式为:,swit

10、ch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,常量表达式的值必须是整型、字符型或枚举型,值必须互不相同,default 语句可以省略。,语句序列:允许有多条语句,:可以为任何表达式,2023/11/7,27,功能:,先计算的值,再从上到下地判断与哪一个的值相等,如果的值等于的值,则从语句序列i开始执行,直到语句序列(n+1)为止;若的值不等于任何一个的值,是执行default后面的语句序列(n+1)。,2023/11/7,28,switch语句一般形式的流程图:,?,2023/11/7,29,【例4-

11、6】根据下面表所示的天气情况,决定活动的场所。,分别用整数0、1、2和3代表下雨、下雪、晴天和有风无雨天气。采用switch语句的一般形式.,2023/11/7,30,例46 switch语句一般形式的流程图,2023/11/7,31,根据图所示的流程图写出的程序如下所示:,/*exam4_6.c 根据天气情况决定活动场所*/#include main()int weather;scanf(%d,2023/11/7,32,程序运行结果:输入:2输出:fine-at hill wind-to outskirt other-at home,发现,如果输入的天气值为0,即天气情况为下雨,则活动场所为

12、所有地方,显然这是与题意不相符合的,程序是错误的。解决这个问题必须要用到分支语句:break。,2023/11/7,33,4.2.2 break语句在switch语句中的作用,如果是一个条件对应着一组独立的操作,那么在switch语句的一般形式中,每一个完成后都要加上一条分支语句:break;,switch条件分支互相独立的形式:,switch()case:;break;case:;break;case:;break;case:;break;default:;,2023/11/7,34,先计算的值,再从上到下地判断与哪一个的值相等,如果的值等于i的值,则执行i,执行完后,跳出switch结构,

13、执行switch结构外的下一条语句.,功能:,2023/11/7,35,【例4-7】将例46改写成具有独立分支的switch结构。,#include main()int weather;scanf(%d,程序运行时,任何一种天气情况都只会对应出现一种运动场所.,2023/11/7,36,例:求两个数的运算结果(和/差/积/商)。,输入数据a b 和运算符号operate,switch(operate),+,-,*,/,w=a+b,w=a-b,w=a*b,w=a/b,printf(“%f%c%f=%f”,a,operate,b,w),2023/11/7,37,main()float a,b,w;

14、char operate;scanf(“%f%c%f”,2023/11/7,38,【例4-8】从键盘输入一个字符,判断其是否为a(可代表abort)或r(可代表retry)或f(可代表fail),并输出相应信息。(输入时不区分大小写)。,采用switch 结构,其算法流程图如图:,2023/11/7,39,/*exam4_8.c 字符输入判断*/#include main()char ch;printf(Abort,Retry,Fail?n);ch=getchar();switch(ch)case a:case A:printf(nAbortn);break;case r:case R:pri

15、ntf(nRetryn);break;case f:case F:printf(nFailn);break;default:printf(nerrorn);,多个case可以共用一组执行语句,case后面若有多个语句,可以不用,2023/11/7,40,4.3 程序范例,【例4-9】求解任意的一元二次方程ax2+bx+c=0的根,a、b、c的值由键盘输入。,分析:对系数a、b、c考虑以下情形1)a=0:b0,则x=-c/b;b=0,则:若 c=0,则x无定根;若c0,则x无解。2)a0;b2-4ac0,有两个不等的实根;b2-4ac=0,有两个相等的实根;b2-4ac0,有两个共轭复根。,采用

16、嵌套的if结构,考虑算法流程图?,2023/11/7,41,2023/11/7,42,/*exam4_9.c 求一元二次方程的根*/#include#include main()float a,b,c,s,x1,x2;double t;printf(please input a,b,c:n);scanf(%f%f%f,2023/11/7,43,else printf(no root!n);else s=b*b-4*a*c;if(s=0.0)if(s0.0)t=sqrt(s);x1=-0.5*(b+t)/a;x2=-0.5*(b-t)/a;printf(There are two differe

17、nt roots:n%5.2f and%5.2fn,x1,x2);,2023/11/7,44,elseprintf(There are two equal roots:n%5.2fn,-0.5*b/a);else t=sqrt(-s);x1=-0.5*b/a;x2=abs(0.5*t/a);printf(There are two virtual roots:n);printf(%5.2f+%5.2fitt%5.2f-%5.2fin,x1,x2,x1,x2);,2023/11/7,45,【例4-10】运输费用的计算问题。距离S越远,每公里的运费越低。设每公里每吨货物的基本运费为P,货物重量为W

18、(吨),距离为S,折扣为d,则总运输费用f的计算公式为:f=P*W*S*(1-d)。其中折扣数d与距离有关,具体标准如下:,0S250km 没有折扣 250S500 折扣2500S1000 折扣5 1000S2000 折扣82000S3000 折扣10 3000S 折扣15,分析:折扣点的变化处都发生在距离为250的倍数上,如表所示。,2023/11/7,46,流程图简图如左图,2023/11/7,47,/*exam4_10.c 运输费用的计算*/#include main()int c,s;float p,w,d,f;printf(please input p,w,s:n);scanf(%f

19、,%f,%d,switch(c),2023/11/7,48,case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 4:case 5:case 6:case 7:d=8;break;case 8:case 9:case 10:case 11:d=10;break;case 12:d=15;break;f=p*w*s*(1-d/100);printf(Total freight is:%10.2fn,f);,2023/11/7,49,小结:,本章主要介绍了程序分支结构的几种形式,它包括有if语句,if_else语句,if嵌套语句和switch语句。,共同特点是:先进行条件判断,再根据判断结果决定下一步做什么。,switch是一种“多路开关”语句,用它可更好地完成多路选择任务,只是在使用中应注意break语句的正确使用,以使程序能正常地从switch分支中跳出。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号