1、 程序设计技术基础-C语言第4章 选择结构程序设计4.1 条件判断和选择结构4.2 选择结构中的运算符4.3 用于选择结构的if语句4.4 用于多分支选择结构的switch语句4.5 选择结构程序设计举例2022-8-82程序设计技术基础-C语言 在现实生活中有许多问题需要先进行判断和选择,再执行。判断条件是否满足,并根据这个条件做出指定的操作,或者从给定的两种或多种操作中选择执行其中一种,正是选择结构要解决的问题。本章最重要的内容如下。(1)关系运算符、逻辑运算符和条件运算符。(2)if语句。(3)switch语句。2022-8-83程序设计技术基础-C语言4.1 条件判断和选择结构 在现实
2、生活中,需要进行条件判断和选择的场景是很常见的,例如:(1)如果今天预报有雨,我就带雨伞;(2)下学后我们一起去打篮球;(3)身高1.2米以下儿童,免费入园参观;2022-8-84程序设计技术基础-C语言【例4-1】输入两个整数,输出其中的大数。2022-8-85#includeint main()int a,b,max;scanf(%d,%d,&a,&b);if(a=b)max=a;else max=b;printf(max=%dn,max);return 0;程序运行结果:程序运行结果:5,3max=53,5max=5程序设计技术基础-C语言4.2 选择结构中的运算符4.2.1 关系运算符
3、与关系表达式 C语言中,“关系运算”实际上就是“比较运算”,将两个数值进行大小比较,根据两个值和所使用的关系运算符,得到一个逻辑值:“真”(值为1)或“假”(值为0)。例如:20 这个关系表达式,它是成立的,逻辑值为“真”,即为1;6=9 这个关系表达式,它是不成立的,逻辑值为“假”,即为0。2022-8-86程序设计技术基础-C语言1.关系运算符及其优先级2022-8-87程序设计技术基础-C语言 关系运算符的优先次序为:(1)关系运算符的优先级低于算术运算符,高于赋值运算符。(2)在6个关系运算符中,、=的优先级相同,=和!=的优先级相同;并且前4种高于后2种。例如:x+yz等同于 (x+
4、y)zx=y=z等同于 x=(yz等同于 x=(yz)2022-8-88程序设计技术基础-C语言2.关系表达式 用关系运算符将两个数值或表达式(包括算术表达式、关系表达式、逻辑表达式、赋值表达式等)连接起来的式子,称为关系表达式。例如,下面都是合法的关系表达式:x=zxy!=z x(y=5)x(y=z)(x!=y)z2022-8-89程序设计技术基础-C语言 C语言中,关系表达式的值是一个逻辑值,即“真”或“假”,当表示关系运算结果时,以数值1代表“真”,以数值0代表“假”。设a=1,b=2,c=3,d=4,e=5,关系表达式c a+b=1.2米;身高y&y=z等价于(!x)y)&(y=z)x
5、+y|x-zy等价于(x+y)|(x-z)6&5b)?a:b首先计算关系表达式“ab”的值;若“ab”的值为1,则条件表达式的值为“a”;若“ab”的值为0,则条件表达式的值为“b”。程序设计技术基础-C语言【例4-2】输入两个整数,输出其中的大数(使用条件运算符)。2022-8-820#includeint main()int a,b,max;scanf(%d,%d,&a,&b);max=ab?a:b;printf(max=%dn,max);return 0;程序运行结果:程序运行结果:5,3max=53,5max=5程序设计技术基础-C语言4.3 用于选择结构的if语句4.3.1 if语句
6、的一般形式 if(表达式)语句1 else 语句22022-8-821程序设计技术基础-C语言【例4-3】输入一个整数,输出其绝对值。2022-8-822#includeint main()int x,y;scanf(%d,&x);if(x=0)y=x;else y=-x;printf(x的绝对值为:%dn,y);return 0;程序运行结果:程序运行结果:5x的绝对值为:5-12x的绝对值为:12程序设计技术基础-C语言【例4-4】输入一个年份,判断是否为闰年。2022-8-823程序设计技术基础-C语言【例4-4】输入一个年份,判断是否为闰年。2022-8-824#includeint
7、main()int year;scanf(%d,&year);if(year%4=0&year%100!=0|year%400=0)printf(%d是闰年n,year);elseprintf(%d不是闰年n,year);return 0;程序运行结果:程序运行结果:20122012是闰年20002000是闰年20182018不是闰年程序设计技术基础-C语言4.3.2 单分支if语句 if(表达式)语句2022-8-825程序设计技术基础-C语言【例4-5】输入一个整数,根据分段函数 输出相应的函数值。2022-8-826程序设计技术基础-C语言2022-8-827#includeint ma
8、in()int x,y;scanf(%d,&x);if(x0&x5)y=x*x+3;printf(y=%dn,y);return 0;程序运行结果:程序运行结果:-1y=-10y=02y=36y=39程序设计技术基础-C语言【例4-6】输入3个实数,按从大到小的顺序输出。2022-8-828#includeint 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;程
9、序运行结果:程序运行结果:1.5,2.3,3.7 3.70,2.30,1.50程序设计技术基础-C语言4.3.3 嵌套的if语句其一般形式为:if(表达式1)if(表达式2)语句1 else 语句2 else if(表达式3)语句3 else 语句42022-8-829内嵌的if语句内嵌的if语句程序设计技术基础-C语言另一种形式为:if(表达式1)语句1 else if(表达式2)语句2 else if(表达式n)语句n else 语句n+12022-8-830else总是与它上面最近的未配对的if相配对程序设计技术基础-C语言【例4-7】使用嵌套的if语句实现例4-5中的分段函数。2022
10、-8-831算法1:程序设计技术基础-C语言2022-8-832#includeint main()int x,y;scanf(%d,&x);if(x=0)if(x0)y=3*x+2;else y=0;else if(x=5)y=2*x-1;else y=x*x+3;printf(y=%dn,y);return 0;程序运行结果:程序运行结果:-1y=-10y=02y=36y=39程序1:程序设计技术基础-C语言2022-8-833算法2:程序设计技术基础-C语言2022-8-834#includeint main()int x,y;scanf(%d,&x);if(x0)y=3*x+2;els
11、e if(x=0)y=0;else if(x=5)y=2*x-1;else y=x*x+3;printf(y=%dn,y);return 0;程序运行结果:程序运行结果:-1y=-10y=02y=36y=39程序2:程序设计技术基础-C语言4.4 用于多分支选择结构的switch语句switch(表达式)case常量表达式1:语句1 case常量表达式2:语句2 case常量表达式n:语句n default:语句n+1 2022-8-835程序设计技术基础-C语言【例4-8】输入06中的一个数字,输出对应的“星期几”。2022-8-836程序设计技术基础-C语言2022-8-837#inclu
12、deint main()int day;printf(请输入星期的数字编号(06):);scanf(%d,&day);switch(day)case 0:printf(星期日n);case 1:printf(星期一n);case 2:printf(星期二n);case 3:printf(星期三n);case 4:printf(星期四n);case 5:printf(星期五n);case 6:printf(星期六n);default:printf(Error!应该输入06之 间的数字!n);return 0;程序运行结果:程序运行结果:请输入星期的数字编号(06):4星期四星期五星期六Error
13、!应该输入06之间的数字!程序设计技术基础-C语言4.4.2 break语句2022-8-838switch(表达式)case常量表达式1:语句1 break;case常量表达式2:语句2 break;case常量表达式n:语句n break;default:语句n+1 程序设计技术基础-C语言【例4-8】输入06中的一个数字,输出对应的“星期几”。2022-8-839程序设计技术基础-C语言2022-8-840#includeint main()int day;printf(请输入星期的数字编号(06):);scanf(%d,&day);switch(day)case 0:printf(星期
14、日n);break;case 1:printf(星期一n);break;case 2:printf(星期二n);break;case 3:printf(星期三n);break;case 4:printf(星期四n);break;case 5:printf(星期五n);break;case 6:printf(星期六n);default:printf(Error!应该输入06之 间的数字!n);return 0;程序运行结果:程序运行结果:请输入星期的数字编号(06):4星期四请输入星期的数字编号(06):9Error!应该输入06之间的数字!程序设计技术基础-C语言4.5 选择结构程序设计举例【
15、例4-9】输入3个数,判断这3个数是否可以构成一个三角形,若可以,则输出三角形的面积,若不可以,则输出“Error!输入的3个数不能构成三角形。”l构成三角形的条件:三边长都为正数;任意两边之和大于第三边。l海伦公式求面积:l预处理命令“#include”2022-8-841 =-areass as bs c程序设计技术基础-C语言2022-8-842程序设计技术基础-C语言2022-8-843#include#includeint main()double a,b,c,s,area;scanf(%lf,%lf,%lf,&a,&b,&c);if(a0&b0&c0&a+bc&b+ca&a+cb)
16、s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%5.2fn,area);else printf(Error!输入的3个数不能构成三角形。n);return 0;程序运行结果:程序运行结果:3.0,4.0,5.0area=6.002.0,4.0,1.0Error!输入的3个数不能构成三角形。程序设计技术基础-C语言【例4-10】求一元二次方程 的解。2022-8-844程序设计技术基础-C语言2022-8-845程序设计技术基础-C语言2022-8-846#include#includeint main()double a,b,c,s
17、,x1,x2,p,q;printf(请输入a,b,c的值:);scanf(%lf,%lf,%lf,&a,&b,&c);s=b*b-4*a*c;if(fabs(a)=1e-6)printf(此方程不是二次方程n);else if(fabs(s)1e-6)x1=-b+sqrt(s)/(2*a);x2=-b-sqrt(s)/(2*a);printf(方程有两个不相等的实根:x1=%.2f,x2=%.2fn,x1,x2);else p=-b/(2*a);q=sqrt(-s)/(2*a);printf(方程有两个共轭复根:x1=%.2f+%.2fi,x2=%.2f-%.2fi n,p,q,p,q);re
18、turn 0;程序设计技术基础-C语言2022-8-848程序运行结果:程序运行结果:请输入a,b,c的值:0.0,2.0,3.0此方程不是二次方程请输入a,b,c的值:1.0,2.0,1.0方程有两个相等的实根:x1=x2=-1.00请输入a,b,c的值:2.0,3.0,1.0方程有两个不相等的实根:x1=-2.75,x2=-3.25请输入a,b,c的值:2.0,2.0,1.0方程有两个共轭复根:x1=-0.50+0.50i,x2=-0.50-0.50i程序设计技术基础-C语言【例4-11】将某课程考试的百分制成绩转化为等级制成绩。转换规则为:60分以下为“不合格”,6069分为“合格”,7
19、079分为“中等”,8089分为“良好”,90分以上为“优秀”。本例是一个多分支选择问题,下面分别用两种算法解决。算法1:使用嵌套的if语句结构。算法2:使用switch语句结构。2022-8-849程序设计技术基础-C语言2022-8-850算法1:程序设计技术基础-C语言2022-8-851#includeint main()int score;scanf(%d,&score);if(score100)printf(成绩输入有误!n);else if(score60)printf(不合格n);else if(score70)printf(合格n);else if(score80)print
20、f(中等n);else if(score90)printf(良好n);else printf(优秀n);return 0;程序1:程序运行结果:程序运行结果:程序设计技术基础-C语言2022-8-852算法2:程序设计技术基础-C语言2022-8-853#includeint main()int score,grade;scanf(%d,&score);if(score=0&score=100)grade=score/10;switch(grade)case 6:printf(合格n);break;case 7:printf(中等n);break;case 8:printf(良好n);brea
21、k;case 9:case 10:printf(优秀n);break;default:printf(不合格n);else printf(成绩输入有误!n);return 0;程序2:程序运行结果:程序运行结果:程序设计技术基础-C语言2022-8-854 选择结构要解决的主要问题是根据条件是否成立来选择执行指定选择结构要解决的主要问题是根据条件是否成立来选择执行指定的操作,或者从给定的多种操作中选择其一执行。的操作,或者从给定的多种操作中选择其一执行。关系运算符和逻辑运算符及由它们所形成的表达式是构成判断条关系运算符和逻辑运算符及由它们所形成的表达式是构成判断条件的主要形式,使用时需要注意各运算符的优先级和结合方向。件的主要形式,使用时需要注意各运算符的优先级和结合方向。本章小结注意本章节知识点!程序设计技术基础-C语言2022-8-855 if语句是构成选择结构的重要语句,包括语句是构成选择结构的重要语句,包括3种主要的形式:单分支种主要的形式:单分支if语句、双分支语句、双分支if语句和嵌套的语句和嵌套的if语句。语句。实现多分支选择结构时,可以采用嵌套的实现多分支选择结构时,可以采用嵌套的if语句,语句,也也可以选用可以选用switch语句语句。本章小结注意本章节知识点!