C语言程序设计:第4章 选择结构程序设计

上传人:m**** 文档编号:587659876 上传时间:2024-09-06 格式:PPT 页数:67 大小:986KB
返回 下载 相关 举报
C语言程序设计:第4章 选择结构程序设计_第1页
第1页 / 共67页
C语言程序设计:第4章 选择结构程序设计_第2页
第2页 / 共67页
C语言程序设计:第4章 选择结构程序设计_第3页
第3页 / 共67页
C语言程序设计:第4章 选择结构程序设计_第4页
第4页 / 共67页
C语言程序设计:第4章 选择结构程序设计_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《C语言程序设计:第4章 选择结构程序设计》由会员分享,可在线阅读,更多相关《C语言程序设计:第4章 选择结构程序设计(67页珍藏版)》请在金锄头文库上搜索。

1、第第4章章 选择结构程序设计选择结构程序设计4.1 选择结构和条件判断选择结构和条件判断4.2 用用if语句实现选择结构语句实现选择结构4.3 关系运算符和关系表达式关系运算符和关系表达式4.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 4.5 条件运算符和条件表达式条件运算符和条件表达式4.6 选择结构的嵌套选择结构的嵌套4.7 用用switch语句实现多分支选择结构语句实现多分支选择结构4.8 选择结构程序综合举例选择结构程序综合举例4.1 选择结构和条件判断选择结构和条件判断 P85o在现实生活在现实生活中中,需要进行判断和选择的情,需要进行判断和选择的情况是很多的况是很多的。o处理

2、处理这些这些问题,问题,关键在于进行条件判断关键在于进行条件判断。o由于程序处理问题的需要,在大多数程序由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一中都会包含选择结构,需要在进行下一个操作之前先进行条件判断个操作之前先进行条件判断。选择结构和条件判断选择结构和条件判断 C语言有两种选择语句语言有两种选择语句:(1)if语句语句,实现两个分支的选择结构,实现两个分支的选择结构(2)switch语句语句,实现多分支的选择结构,实现多分支的选择结构 如在如在C语言中选择结构用语言中选择结构用if语句实现:语句实现: if语句最常用的形式之一语句最常用的形式之一 if (关系

3、表达式关系表达式)语句语句1 else 语句语句2 如:如: if (x0) y=1; else y=-1; P26 (第(第2章)章)选择结构选择结构ABYpNAYpN P86 例例4.1 在例在例3.5的基础上对程序进行改进。题的基础上对程序进行改进。题目要求目要求是是求求 方程的根。方程的根。 由键盘输入由键盘输入a,b,c。假设。假设a,b,c的值任意,并的值任意,并不不保证保证 。需要在程序中进行判别,。需要在程序中进行判别,如果如果 ,就计算并输出方程的,就计算并输出方程的两个两个实根实根,否则否则就输出就输出“方程无实根方程无实根”的信息。的信息。 o解题思路:解题思路:输入输入

4、a,b,c计算计算discdisc0计算计算x1,x2输出无实根输出无实根输出输出x1,x2真真假假程序程序见见P86#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf,&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(x1=%7.2fnx2=%7.2fn,x1,x2); return 0;程序中程序中调用数学函数调用数学函数sqrt输入输入a,b,c的值的值if(disc0

5、)printf(“无实根无实根”);else 分析分析P86#include #include int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf,&a,&b,&c); disc=b*b-4*a*c; if(disca+b 等效于等效于 c(a+b)ab=c 等效于等效于 (ab)=ca=bc 等效于等效于 a=(bc 等效于等效于 a=(bc) 关系表达式关系表达式o关系表达式关系表达式n用关系运算符将两个数值或数值表达式用关系运算符将两个数值或数值表达式连接起来的式子连接起来的式子n关系表达式的值是一个逻辑值,即关系表达式的值

6、是一个逻辑值,即“真真”或或“假假”n在在C的逻辑运算中,以的逻辑运算中,以“”代表代表“真真”,以,以“”代表代表“假假”n关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用用1和和0表示表示例例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc/ 表达式值表达式值1/ 表达式值表达式值1/ 表达式值表达式值0/ d=1/ f=0n关系运算举例:关系运算举例:例例 若若a=0; b=0.5; x=0.3; 则则 a=x278在在C中是允许的,中是允许的, 值为值为0例例 int i=1, j=7,a; a=i+(j%4!=0); 则则a

7、=2例例 a0 结果为结果为 A100 结果为结果为10语言程序设计 第五章Cn关系运算举例:关系运算举例:例 注意区分注意区分“=”与与“=” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);例例 应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果为结果为可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1e-60语言程序设计 第五章数据描述C例例4:写出程序运行结果。:写出程序运行结果。 #include void mai

8、n( ) float a=2.3, b=4.7; int c,d; c=(ab); printf(“%d” ,c); d=(c=0); printf(“%d”,d); 运行结果:运行结果: 0 14.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 P92n逻辑运算符及其优先次序逻辑运算符及其优先次序n逻辑表达式逻辑表达式n逻辑型变量逻辑型变量 逻辑运算符及其优先次序逻辑运算符及其优先次序 P93o3种逻辑运算符:种逻辑运算符:&(逻辑与逻辑与) |(逻辑或逻辑或) !(逻辑非逻辑非)o&和和|是双目是双目(元元)运算符运算符o!是一目是一目(元元)运算符运算符o逻辑表达式逻辑表达式n用逻辑运

9、算符将关系表达式或其他逻辑用逻辑运算符将关系表达式或其他逻辑量连接起来的式子量连接起来的式子 举例:o判断判断年龄年龄在在13至至17岁岁之内?之内?age=13 & age=17o判断判断年龄小于年龄小于12或大于或大于65?age65逻辑表达式逻辑表达式o逻辑表达式的值应该是逻辑量逻辑表达式的值应该是逻辑量“真真”或或“假假”o编译系统在编译系统在表示表示逻辑运算逻辑运算结果结果时时n以数值以数值1代表代表“真真”,以,以0代表代表“假假”o但在但在判断判断一个量是否为一个量是否为“真真”时时n以以0代表代表“假假”,以非,以非0代表代表“真真”o注意:注意:将一个非零的数值认作为将一个非

10、零的数值认作为“真真”逻辑运算符的优先次序逻辑运算符的优先次序! & | (!为三者中最高为三者中最高)与其他运算符的优先次序与其他运算符的优先次序 ! (高)(高)算术运算符算术运算符关系运算符关系运算符 & 和和 |赋值运算符赋值运算符 (低)(低) 逻辑运算的真值表逻辑运算的真值表 P93ab! a! ba & ba | b 真真真真假假假假真真真真真真假假假假真真假假真真假假真真真真假假假假真真假假假假真真真真假假假假表表4.2o修改后的修改后的逻辑运算真值表逻辑运算真值表ab! a! ba & ba | b 110011100101011001001100例例a=x & xb&xy

11、a=b|x=y !a|ab/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)语言程序设计 第四章C逻辑表达式逻辑表达式 P94例例 a=4;b=5; !a a&b a|b !a|b 4&0|253&2|83)&2|(8b)&(n=cd)/结果结果m=0,n=1语言程序设计第四章C见见P95例如例如:要判别某一年是否为闰年。要判别某一年是否为闰年。P95判断闰年的条件是符合下面二者之一:判断闰年的条件是符合下面二者之一:1.能被能被4整除,但不能被整除,但不能被100整除整除 2.能被能被4整除,又能被整除,又能被400整除。整除。可以用一个逻辑表达式来表示:可以

12、用一个逻辑表达式来表示: (year%4=0&year%100!=0) | year%400=0上述表达式值为上述表达式值为真真,则,则year为为闰年闰年,否则否则year为非闰年。为非闰年。 可以加一个可以加一个“!”来判别非闰年:来判别非闰年:!(year%4=0&year%100!=0) | year%400=0) 若表达式为若表达式为真真,year 为为非闰年非闰年。 o4.2 用用if语句实现选择结构语句实现选择结构 P87P89nif语句语句(条件选择语句)(条件选择语句)oif语句的三种形式语句的三种形式n形式一:形式一:格式:格式:if (表达式表达式) 语句语句执行过程:执

13、行过程:表达式表达式语句语句真真假假例:例:if (xy) printf(“%d”,x);举例举例P87n形式二:形式二:格式:格式:if (表达式表达式1) 语句语句1 else 语句语句2执行过程:执行过程:表达式表达式语句语句1语句语句2真真假假例:例:if (xy) max=x; else max=y;n形式三:形式三:格式:格式:if ( 表达式表达式1 ) 语句语句1else if (表达式表达式2) 语句语句2else if (表达式表达式3 ) 语句语句3. else 语句语句n 表达式表达式1语句语句1非非0=0表达式表达式2表达式表达式3语句语句n语句语句3语句语句2非非0

14、非非0=0=0u执行过程:执行过程: 例:例:if (number500) cost=0.15; else if (number300) cost=0.10; else if (number100) cost=0.075; else if (number50) cost=0.05; else cost=0; if (表达式表达式) 语句语句1 else 语句语句2 关系表达式关系表达式逻辑表达式逻辑表达式数值表达式数值表达式方括号内的部分为可选的方括号内的部分为可选的 If 语句的一般形式语句的一般形式if语句的一般形式语句的一般形式 if (表达式表达式) 语句语句1 else 语句语句2

15、简单的语句简单的语句复合语句复合语句另一个另一个if语句语句等等如:如:if(a=b&x=y) printf(“a=b,x=y”); if(3) printf(“OK”); if(a) printf(“%d”,a);l说明:说明:uifif后面的表达式类型任意后面的表达式类型任意u语句可以是复合语句语句可以是复合语句u if(x) if(x!=0) if(!x) if(x=0)例例 考虑下面程序的输出结果考虑下面程序的输出结果: #include void main( ) int x,y; scanf(“%d,%d”,&x,&y); if(xy) x=y; y=x; else x+; y+;

16、printf(“%d,%dn”,x,y); Compile Error!o解题思路:解题思路:n只需要做一次比较,然后进行一次交换即只需要做一次比较,然后进行一次交换即可可n用用if语句实现条件判断语句实现条件判断n关键是怎样实现两个变量值的互换关键是怎样实现两个变量值的互换AB互换前互换前AB互换后互换后例例4.2 输入两个实数,按代数值输入两个实数,按代数值由小到大的顺序输出这两个数。由小到大的顺序输出这两个数。P87ABC 借助中间变量ABC 借助中间变量ABC 借助中间变量#include int main() float a,b,t; scanf(%f,%f,&a,&b); if(a

17、b) t=a; a=b; b=t; printf(%5.2f,%5.2fn,a,b); return 0;将将a和和b的值互换的值互换如果如果ab选择结构,用选择结构,用if语句实现的语句实现的o解题思路:解题思路:nif ab,a和和b对换对换 (a是是a、b中的小者)中的小者)nif ac,a和和c对换对换 (a是三者中最小者)是三者中最小者)nif bc,b和和c对换对换 (b是三者中次小者是三者中次小者)n顺序输出顺序输出a,b,c 例例4.3 输入输入3个数个数a,b,c,要求按由小到,要求按由小到大的顺序输出。大的顺序输出。P88#include int main() float

18、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.2fn,a,b,c); return 0;如果如果 ab,将,将a和和b对换对换a是是a、b中的小者中的小者#include int 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

19、=t; printf(%5.2f,%5.2f,%5.2fn,a,b,c); return 0;如果如果 ac,将,将a和和c对换对换a是是三者三者中的小者中的小者#include int 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.2fn,a,b,c); return 0;如果如果 bc,将,将b和和c对换对换b是是三者三者中的中的次次小者小者n4.5 条件运算符与表达

20、式条件运算符与表达式 P97o一般形式:一般形式: 表达式表达式1 ? 表达式表达式2 : 表达式表达式3o执行过程执行过程o功能:相当于条件语句,不能完全取代功能:相当于条件语句,不能完全取代if语句语句例例 if (ab) printf(“%d”,a); else printf(“%d”,b);printf(“%d”,ab?a:b);表达式表达式1取表达式取表达式2值值取表达式取表达式3值值非非0=0o条件运算符可嵌套条件运算符可嵌套 如如 x0?1:(xb?a:cd?c:d ab?a:(cd?c:d) o表达式表达式1、表达式、表达式2、表达式、表达式3类型可不同,表达式值类型可不同,表

21、达式值取较高的类型取较高的类型例例 x?a:b /x=0,表达式值为表达式值为b; x0,表达式值为表达式值为a xy?1:1.5 /xy ,值为值为1.0; xy ,值为值为1.5语言程序设计 第四章C例4.4 P99#include int main() char ch; scanf(%c,&ch); ch=(ch=A & ch=Z)?(ch+32):ch; printf(%cn,ch); return 0;4.6 选择结构的嵌套选择结构的嵌套 P99o在在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套o一般形式:一般形式:if( ) if(

22、) 语句语句1 else 语句语句2 else if( ) 语句语句3 else 语句语句4 内嵌内嵌ifelse总是与它上面总是与它上面最最近近的未配对的的未配对的if配对配对 选择结构的嵌套选择结构的嵌套o在在if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句的嵌套语句的嵌套if () if () 语句语句1 else语句语句2内嵌内嵌if 限定了内嵌限定了内嵌if范围范围vIf 语句嵌套语句嵌套一般形式:一般形式:if (表达式表达式1) if (表达式表达式2) 语句语句1 else 语句语句2else if(表达式表达式3) 语句语句3 else 语句语句4

23、内嵌内嵌if内嵌内嵌ifif (表达式表达式1) if (表达式表达式2) 语句语句1 else 语句语句2内嵌内嵌ifif (表达式表达式1) if (表达式表达式2) 语句语句1 else 语句语句3 内嵌内嵌ifif (表达式表达式1) 语句语句1else if(表达式表达式2) 语句语句2 else 语句语句3内嵌内嵌ifnif else 配对原则:配对原则:缺省缺省 时,时,else总是和它上面总是和它上面离它最近离它最近的未配对的未配对的的if配对配对if()if()if()else.else.else.例:例: if (a=b) if(b=c) printf(“a=b=c”);

24、else printf(“a!=b”);修改:修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);实现实现if else 正确配对方法:加正确配对方法:加 如果如果if与与else的的数目不一样数目不一样,可,可用用 确定确定if与与else的关系的关系例例4.5 有一函数:有一函数:P100 -1 (x0) 编一程序,输入一个编一程序,输入一个x值,输出值,输出y值。值。 判断以下程序的正误:判断以下程序的正误:程序程序1: #include void main() int x, y; scanf(“%d” ,&x); if (

25、x=0) if (x0) y=1; else y=0; else y=-1; 正确正确正确正确程序程序3:将上述将上述if语句改为:语句改为: y=-1; if(x!=0) if(x0) y=1; else y=0;错误错误例例: 考虑下面程序输出结果考虑下面程序输出结果 #include void main( ) int x=100,a=10,b=20; int v1=5,v2=0; if(a60n”); break; .例例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf

26、(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); 运行结果:运行结果:score为为5时,输出:时,输出: Very good! Good! Pass! Fail! data error!最后一个分支可以不最后一个分支可以不加加break例例 #include 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: a+;b+; break; cas

27、e 3: a+;b+; printf(“na=%d,b=%d”,a,b); 运行结果:运行结果:a=2,b=1程序举例程序举例例例4.8 写程序,判断某一年是否闰年。写程序,判断某一年是否闰年。 #include void main( ) int year, leap; scanf (“%d”, &year); if (year%4=0) if (year%100=0) if (year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is”, year); else printf(“%d i

28、s not”, year); printf(“ a leap year.n”); 运行结果:运行结果:1989 1989 is not a leap year. 2000 2000 is a leap year.P105此题也可将此题也可将513行改写成以下的行改写成以下的if语句语句 if(year%4!=0) leap=0; else if(year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1;也可以用一个逻辑表达式包含所有的闰年条件,将上也可以用一个逻辑表达式包含所有的闰年条件,将上述述if语句用下面的语句用下面的if

29、语句代替:语句代替: if(year%4=0&year%100!=0)| (year%400=0) leap=1; else leap=0; P107例例4.10运输公司对用户计算运费。路程运输公司对用户计算运费。路程(s)越远,每公越远,每公里运费越低。标准如下:里运费越低。标准如下: s250 没有折扣没有折扣 250s500 2%折扣折扣 500s1000 5%折扣折扣 1000s2000 8%折扣折扣 2000s3000 10%折扣折扣 3000s 15%折扣折扣设设每公里每吨每公里每吨货物的基本运物的基本运费为p,货物物重重为w,距离,距离为s,折扣,折扣为d,则总运运费f的的计算公

30、式算公式为: f=p*w*s*(1-d) 分析此题见分析此题见P110图图4.15 #include void main( ) int c, s; float p, w, d, f; scanf (“%f, %f, %d”, &p, &w,&s); if(s=3000) c=12; else c=s/250; switch (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

31、10: case 11: d=10; break; case 12: d=15; break; f=p*w*s(1-d/100.0); printf (“freight=%15.4f”, f); 运行结果:运行结果:100,20,300freight=588000.0000例例4.9 求求ax2+bx+c=0方程的解。方程的解。P108基本算法:基本算法: a=0, 不是二次方程。不是二次方程。 b2-4ac=0,有两个相等实根。有两个相等实根。 b2-4ac0,有两个不相等实根。有两个不相等实根。 b2-4ac0,有两个共轭复根。有两个共轭复根。流程图表示算法见流程图表示算法见P108程序分

32、析见程序分析见P109#include void main( ) float a,b,c,d,disc,x1,x2, realpart,imagpart;scanf(“%f,%f,%f”, &a,&b,&c);printf(“The equation”);if (fabs(a)=1e-6) printf(“is not a quadratic”);else disc=b*b-4*a*c; if (fabs(disc)1e-6) x1=(b+sqrt(disc)/(2*a); X2=(bsqrt(disc)/(2*a);pirintf(“has distinct rael root:%8.4fa

33、nd%8.4fn”, x1,x2); else realpart=b/(2*a); imagpart=sqrt(-disc)/(2*a);printf(“has complex roots:n”);printf(“%8.4f+%8.4f in”, realpart,imagpart);printf(“%8.4f%8.4f in”, realpart,imagpart); 例例 : 从键盘上输入一个月份,在屏幕上输出该月的天数从键盘上输入一个月份,在屏幕上输出该月的天数(设(设2月份为月份为28天)天) #include void main( ) int month, day ;printf(“请输入月份(请输入月份(1-12):”); scanf(“%d”,&month); switch(month) case 1: case 3: case 5: case 7: case 8:case 10: case 12: day=31; break; case 2: day=28; break; default: day=30; printf(“该月有该月有%d天天”,day);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号