《C语言第四章分支语句.ppt》由会员分享,可在线阅读,更多相关《C语言第四章分支语句.ppt(49页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句第四章第四章 分支语句分支语句 4.1 if 结构结构 4.2 Switch语句语句 4.3 程序范例程序范例 1/16/20231C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 4.1 if 结构结构 顺序结构顺序结构的程序只能以顺序的方式处理数据的程序只能以顺序的方式处理数据,但实,但实际问题要求计算机能够对问题进行判断,根据判断的结果,际问题要求计算机能够对问题进行判断,根据判断的结果,选择不同的处理方式,这就要求程序本身具有判断和选择选择不同的处理方式,这就要求程序本身具有判断和选择能力,能力
2、,分支结构分支结构正是为解决这类问题而设定的。正是为解决这类问题而设定的。C语言用于实现分支有语言用于实现分支有if结构结构和和switch结构结构。4.1.1 if语句语句if结构是一种常用的分支结构,是最简单的一种单分支结构是一种常用的分支结构,是最简单的一种单分支结构结构 。1/16/20232C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句一般形式为:一般形式为:if():一般为条件表达式或逻一般为条件表达式或逻辑表达式。辑表达式。功功能能:先先判判断断的的逻逻辑辑值值,若若该该逻逻辑辑值值为为“真真”,则则执执行行,否则,什么也不执行。,否则,什么也不执行。注注
3、意意:if语语句句中中的的一一般般情情况况下下都都是是以以复复合合语语句句的的形形式式出出现现,即即用一对花括号将语句括起来。用一对花括号将语句括起来。if结构的流程图结构的流程图:1/16/20233C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-1】从键盘任意输入两个实数,然后按其代数值从键盘任意输入两个实数,然后按其代数值从小到大输出这两个数。从小到大输出这两个数。16 ab169169 t1/16/20234C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句先制定算法的流程图,如先制定算法的流程图,如图所示,虚线框为图所示,虚线框为
4、if结构。结构。根据流程图可以很方便地根据流程图可以很方便地写出解决这个问题的程序写出解决这个问题的程序 1/16/20235C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句/*exam4_1.c 按升序输出两个数按升序输出两个数*/#include main()float a,b,t;scanf(%f,%f,&a,&b);if(ab)t=a;a=b;b=t;printf(%5.2f,%5.2fn,a,b);1/16/20236C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句例:例:输入三个实数,按从小到大的顺序输出。输入三个实数,按从小到大的顺序输
5、出。main()float a,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(“%5.2f,%5.2f,%5.2f”,a,b,c);1/16/20237C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-2】:从键盘输】:从键盘输入一个整数,求该数的入一个整数,求该数的绝对值。绝对值。该问题算法该问题算法的流程图的流程图:1/16/20238C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句根据流程图写出
6、的程序如下:根据流程图写出的程序如下:/*exam4_2.c 求整数的绝对值求整数的绝对值*/#include main()int num;scanf(%d,&num);if(num0)num=-num;printf(The absolute value i s:%dn,num);1/16/20239C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 4.1.2 if_else语句语句 if_else语句是一种双分支结构,其一般形式为:语句是一种双分支结构,其一般形式为:if()else :一般为条件表达式或逻辑表达式。:一般为条件表达式或逻辑表达式。功能是:先判断功能是:
7、先判断的值,若其值为的值,若其值为“真真”,则执,则执行行,否则执行,否则执行。if_else结构的流程图结构的流程图:1/16/202310C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-3】设计一个猜数游戏,由计算机产生一个随机设计一个猜数游戏,由计算机产生一个随机数数magic,从键盘输入一个数从键盘输入一个数guess,若输入的数,若输入的数guess的的大小等于随机数大小等于随机数magic,则输出,则输出“You are right!”。否则,。否则,输出输出“You are wrong!”。1/16/202311C C 程序设计基础教程程序设计基
8、础教程第四章第四章 分支语句分支语句根据流程图可写出程序如下:根据流程图可写出程序如下:/*exam4_3.c 猜数游戏的程序猜数游戏的程序*/#include#include main()int guess,magic;magic=rand();scanf(%d,&guess);if(guess=magic)printf(You Are Right);else printf(You Are Wrong);1/16/202312C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 4.1.3 if语句的嵌套语句的嵌套 if语句的嵌套语句的嵌套:是指在:是指在if或或else的
9、分支下又可以包含另一个的分支下又可以包含另一个if语句或语句或if_else语句,嵌套的形式有语句,嵌套的形式有规则嵌套规则嵌套和和任意嵌套任意嵌套两两种。种。if语句的规则嵌套形式如下:语句的规则嵌套形式如下:if()else if()else if()else if()else 从最内层开始,从最内层开始,else总是与它前总是与它前面最近的未曾面最近的未曾配对的配对的if 配对,配对,除非用花括号除非用花括号改变其配对关改变其配对关系。系。1/16/202313C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 if_else的规则嵌套流程图的规则嵌套流程图 1/16
10、/202314C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-4】从键盘输入从键盘输入+、-、*、/中的任一个,输出对中的任一个,输出对应的英文单词:应的英文单词:plus、minus、mutiply、divide,若输,若输入的不是这四个字符中的任一个,则输出入的不是这四个字符中的任一个,则输出“error”。算法的流程图如图所示,虚线框所示为算法的流程图如图所示,虚线框所示为if_else的规则嵌套:的规则嵌套:1/16/202315C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句#includemain()char ch;ch=ge
11、tchar();if(ch=+)printf(plusn);else if(ch=-)printf(minusn);else if(ch=*)printf(multiplyn);else if(ch=/)printf(dividen);else printf(errorn);1/16/202316C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句注意:注意:if与与else的匹配关系,的匹配关系,else总是与其之前最近且不带总是与其之前最近且不带else的的if配对。将每一对配对。将每一对if_else 结构采用结构采用缩进对齐方式缩进对齐方式,可以增加程序的可读性,良好
12、的程序书写风格有助于对可以增加程序的可读性,良好的程序书写风格有助于对程序的理解。程序的理解。【例【例4-5】计算阶跃函数计算阶跃函数y的值:的值:1/16/202317C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句算法的流程图如图,两个虚线框均为算法的流程图如图,两个虚线框均为if_else结构。结构。1/16/202318C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句根据流程图写出的程序如下:根据流程图写出的程序如下:/*exam4_5.c 计算阶跃函数计算阶跃函数y的值的值*/#includemain()float x,y;printf(i
13、nput x:n);scanf(%f,&x);if(x=0)if(x0)y=1;elsey=0;elsey=-1;printf(y=%-4.0fn,y);对多重对多重if,最容易犯的,最容易犯的错误是错误是if与与else配对错误,配对错误,else总是与离它最近的总是与离它最近的上一个上一个if配对。配对。1/16/202319C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句main()int x,y;scanf(“%d”,&x);y=0;if (x=0)if(x0)y=1;else y=-1;printf(“y=%dn”,y);例例4.3 另解另解“语句语句1”部分部
14、分1/16/202320C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 例:例:编程判断某一年是否为闰年。编程判断某一年是否为闰年。year被被4整除整除TFyear被被100整除整除TFyear被被400整除整除TFleap=1leap=0leap=1leap=0 leapTF输出输出”闰年闰年”输出输出”非闰年非闰年”1/16/202321C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句main()int year,leap;scanf(“%d”,&year);if (year%4=0)if(year%100=0)if(year%400=0)l
15、eap=1;else leap=0;else leap=1;else leap=0;if(year%4=0&year%100!=0)|(year%400=0)leap=1;else leap=0;1/16/202322C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句if(leap)printf(“%d is”,year);else printf(“%d is not”,year);printf(“a leap yearn”);1/16/202323C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句例:例:if(ab)max=a;else max=b;m
16、ax=(ab)?a:b;/*三目运算符三目运算符*/例:例:if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);补充:补充:条件运算符条件运算符?:1/16/202324C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句优先级别:优先级别:算术算术关系关系 条件条件 赋值赋值ab?a:b+1;ab?a:(b+1)结合方向结合方向:“自右至左自右至左”如:如:ab?a:cd?c:d ab?a:(cd?c:d)x?a:b 当当x=0时,条件表达式的值为时,条件表达式的值为b条件表达式中的操作对象类型可以不同,
17、结果取较高类条件表达式中的操作对象类型可以不同,结果取较高类型。型。如:如:xy?1:1.5 当当x y时,值为时,值为 1.0。1/16/202325C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 4.2 Switch结构结构 当嵌套当嵌套if分支较多时,程序变得复杂冗长,可读性降低。分支较多时,程序变得复杂冗长,可读性降低。C语言提供了语言提供了switch开关语句专门处理多路分支的情形,开关语句专门处理多路分支的情形,使程序变得简洁。使程序变得简洁。4.2.1 switch语句语句 switch语句的语句的一般形式一般形式为:为:switch(表达式表达式)cas
18、e 常量表达式常量表达式1:语句语句1;case 常量表达式常量表达式2:语句语句2;case 常量表达式常量表达式n:语句语句n;default :语句语句n+1;常量表达式的值必须是整型、字常量表达式的值必须是整型、字符型或枚举型,值必须互不相同符型或枚举型,值必须互不相同default 语句语句可以省略。可以省略。语句序列语句序列:允许允许有多条语句有多条语句:可以可以为任何表达式为任何表达式1/16/202326C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句功能:功能:先计算先计算的值,再从上到下地判断与哪一个的值,再从上到下地判断与哪一个的值相等,如果的值相等
19、,如果的值等于的值等于的值,则从语句序列的值,则从语句序列i开始执行,直到语句序列开始执行,直到语句序列(n+1)为止;若为止;若的值不等于任何一个的值不等于任何一个的值,是执行的值,是执行default后面的语句序列后面的语句序列(n+1)。1/16/202327C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 switch语句语句一般形式一般形式的流程图的流程图:?1/16/202328C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-6】根据下面表所示的天气情况,决】根据下面表所示的天气情况,决定活动的场所。定活动的场所。分别用整数分
20、别用整数0、1、2和和3代表下雨、下雪、晴天和有风代表下雨、下雪、晴天和有风无雨天气。采用无雨天气。采用switch语句的一般形式语句的一般形式.1/16/202329C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句例例46 switch语句语句一般形式的一般形式的流程图流程图 1/16/202330C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句根据图所示的流程图写出的程序如下所示:根据图所示的流程图写出的程序如下所示:/*exam4_6.c 根据天气情况决定活动场所根据天气情况决定活动场所*/#include main()int weather;
21、scanf(%d,&weather);switch(weather)case 0:printf(rain-at palaestran);case 1:printf(snow-at playgroundn);case 2:printf(fine-at hilln);case 3:printf(wind-to outskirtn);default:printf(other-at homen);1/16/202331C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句程序运行结果程序运行结果:输入输入:2输出输出:fine-at hill wind-to outskirt othe
22、r-at home 发现发现,如果输入的天气值为,如果输入的天气值为0,即天气情况为下雨,即天气情况为下雨,则活动场所为所有地方,显然这是与题意不相符合的,则活动场所为所有地方,显然这是与题意不相符合的,程序是错误的。程序是错误的。解决这个问题必须要用到分支语句:解决这个问题必须要用到分支语句:break。1/16/202332C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句4.2.2 break语句在语句在switch语句中的作用语句中的作用 如果是一个条件对应着一组独立的操作,那么在如果是一个条件对应着一组独立的操作,那么在switch语句的一般形式中,每一个语句的一
23、般形式中,每一个完成后都要加上完成后都要加上一条分支语句:一条分支语句:break;switch条件分支条件分支互相独立互相独立的形式:的形式:switch ()case:;break;case:;break;case:;break;case:;break;default:;1/16/202333C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 先计算先计算的值,再从上到下地判断与哪一个的值,再从上到下地判断与哪一个的值相等,如果的值相等,如果的值等于的值等于i的的值,则执行值,则执行i,执行完后,跳出,执行完后,跳出switch结构,执行结构,执行switch结构外的下
24、一条语句结构外的下一条语句.功能:功能:1/16/202334C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-7】将例】将例46改写成具有独立分支的改写成具有独立分支的switch结构。结构。#include main()int weather;scanf(%d,&weather);switch(weather)case 0:printf(rain-at palaestran);break;case 1:printf(snow-at playgroundn);break;case 2:printf(fine-at hilln);break;case 3:pri
25、ntf(wind-to outskirtn);break;default:printf(other-at homen);程序运行时,任何一种天气程序运行时,任何一种天气情况都只会对应出现一种运情况都只会对应出现一种运动场所动场所.1/16/202335C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句例:例:求两个数的运算结果(和求两个数的运算结果(和/差差/积积/商)商)。输入数据输入数据a b 和运算符号和运算符号operateswitch(operate)+-*/w=a+bw=a-bw=a*bw=a/bprintf(“%f%c%f=%f”,a,operate,b,w)
26、1/16/202336C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句main()float a,b,w;char operate;scanf(“%f%c%f”,&a,&operate,&b);switch (operate)case +:w=a+b;break;case -:w=a-b;break;case *:w=a*b;break;case /:w=a/b;break;printf(“=%f n”,w);1/16/202337C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-8】从键盘输入】从键盘输入一个字符,判断其是一个字符,判断其
27、是否为否为a(可代表(可代表abort)或)或r(可代表(可代表retry)或)或f(可代表可代表fail),并输出相应信息。,并输出相应信息。(输入时不区分大小(输入时不区分大小写)。写)。采用采用switch 结构,其结构,其算法流程图如图算法流程图如图:1/16/202338C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句/*exam4_8.c 字符输入判断字符输入判断*/#include main()char ch;printf(Abort,Retry,Fail?n);ch=getchar();switch(ch)case a:case A:printf(nAbo
28、rtn);break;case r:case R:printf(nRetryn);break;case f:case F:printf(nFailn);break;default:printf(nerrorn);多个多个case可以共用可以共用一组执行语句一组执行语句case后后面面若若有有多多个个语语句句,可可以以不不用用 1/16/202339C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 4.3 程序范例程序范例【例【例4-9】求解任意的一元二次方程】求解任意的一元二次方程ax2+bx+c=0的根,的根,a、b、c的值由键盘输入。的值由键盘输入。分析:对系数分析:
29、对系数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,有两个共轭复根。,有两个共轭复根。采用嵌套的采用嵌套的if结构,结构,考虑算法流程图考虑算法流程图?1/16/202340C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句1/16/202341C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句/*exam4_9
30、.c 求一元二次方程的根求一元二次方程的根*/#include#include main()float a,b,c,s,x1,x2;double t;printf(please input a,b,c:n);scanf(%f%f%f,&a,&b,&c);if(a=0.0)if(b!=0.0)printf(the root is:%5.2fn,-c/b);else if(c=0.0)printf(x is inexactiven);1/16/202342C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句 else printf(no root!n);else s=b*b-4*
31、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 different roots:n%5.2f and%5.2fn,x1,x2);1/16/202343C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句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 ro
32、ots:n);printf(%5.2f+%5.2fitt%5.2f-%5.2fin,x1,x2,x1,x2);1/16/202344C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句【例【例4-10】运输费用的计算问题。距离】运输费用的计算问题。距离S越远,每公里的越远,每公里的运费越低。设每公里每吨货物的基本运费为运费越低。设每公里每吨货物的基本运费为P,货物重,货物重量为量为W(吨),距离为(吨),距离为S,折扣为,折扣为d,则总运输费用,则总运输费用f的的计算公式为:计算公式为:f=P*W*S*(1-d)。其中折扣数。其中折扣数d与距离有关,与距离有关,具体标准如下:
33、具体标准如下:0S250km 没有折扣没有折扣 250 S500 折扣折扣2500 S1000 折扣折扣5 1000 S2000 折扣折扣82000 S3000 折扣折扣10 3000 S 折扣折扣15 分析:折扣点的变化处都发生在距离为分析:折扣点的变化处都发生在距离为250的倍数上,如的倍数上,如表所示。表所示。1/16/202345C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句流程图简流程图简图如左图图如左图 1/16/202346C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句/*exam4_10.c 运输费用的计算运输费用的计算*/#in
34、clude main()int c,s;float p,w,d,f;printf(please input p,w,s:n);scanf(%f,%f,%d,&p,&w,&s);if(s=3000)c=12;elsec=s/250;switch(c)1/16/202347C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句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
35、;break;case 12:d=15;break;f=p*w*s*(1-d/100);printf(Total freight is:%10.2fn,f);1/16/202348C C 程序设计基础教程程序设计基础教程第四章第四章 分支语句分支语句小结:小结:本章主要介绍了程序分支结构的几种形式,它包括有本章主要介绍了程序分支结构的几种形式,它包括有if语句,语句,if_else语句,语句,if嵌套语句和嵌套语句和switch语句语句。共同特点是:先进行条件判断,再根据判断结果决定下共同特点是:先进行条件判断,再根据判断结果决定下一步做什么。一步做什么。switch是一种是一种“多路开关多路开关”语句,用它可更好地完成语句,用它可更好地完成多路选择任务,只是在使用中应注意多路选择任务,只是在使用中应注意break语句的正确语句的正确使用,以使程序能正常地从使用,以使程序能正常地从switch分支中跳出。分支中跳出。1/16/202349
限制150内