C语言程序设计-第4章--选择结构程序设计_第1页
C语言程序设计-第4章--选择结构程序设计_第2页
C语言程序设计-第4章--选择结构程序设计_第3页
C语言程序设计-第4章--选择结构程序设计_第4页
C语言程序设计-第4章--选择结构程序设计_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 程序设计技术基础第4章 选择结构程序设计4.1 条件判断和选择结构4.2 选择结构中的运算符4.3 用于选择结构的if语句4.4 用于多分支选择结构的switch语句4.5 选择结构程序设计举例2022/7/232 在现实生活中有许多问题需要先进行判断和选择,再执行。判断条件是否满足,并根据这个条件做出指定的操作,或者从给定的两种或多种操作中选择执行其中一种,正是选择结构要解决的问题。 本章最重要的内容如下。 (1)关系运算符、逻辑运算符和条件运算符。 (2)if语句。 (3)switch语句。2022/7/2334.1 条件判断和选择结构 在现实生活中,需要进行条件判断和选择的场景是很常见

2、的,例如: (1)如果今天预报有雨,我就带雨伞; (2)下学后我们一起去打篮球; (3)身高1.2米以下儿童,免费入园参观;2022/7/234【例4-1】输入两个整数,输出其中的大数。2022/7/235#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=54.2 选择结构中的运算符4.2.1 关系运算符与关系表达式 C语言中,“关系运算”实际上就是“比较运算”,将两个数值进行大小比较

3、,根据两个值和所使用的关系运算符,得到一个逻辑值:“真”(值为1)或“假”(值为0)。 例如: 20 这个关系表达式,它是成立的,逻辑值为“真”,即为1; 6=9 这个关系表达式,它是不成立的,逻辑值为“假”,即为0。2022/7/2361. 关系运算符及其优先级2022/7/237 关系运算符的优先次序为:(1)关系运算符的优先级低于算术运算符,高于赋值运算符。(2)在6个关系运算符中,、=的优先级相同,= =和!=的优先级相同;并且前4种高于后2种。 例如:x+yz等同于 (x+y)zx=y=z等同于 x=( yz等同于 x=(yz)2022/7/2382. 关系表达式 用关系运算符将两个

4、数值或表达式(包括算术表达式、关系表达式、逻辑表达式、赋值表达式等)连接起来的式子,称为关系表达式。 例如,下面都是合法的关系表达式: x=zxy!=z x(y=5)x(y=z) (x!=y)z2022/7/239 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+y|x-zy等价于(x+y)|(x-z)6&5b)?a:b首先计算关系表达式“ab”的值;若“ab”的值为1,则条件表达式的值为“

5、a”; 若“ab”的值为0,则条件表达式的值为“b”。【例4-2】输入两个整数,输出其中的大数(使用条件运算符)。2022/7/2320#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=54.3 用于选择结构的if语句4.3.1 if语句的一般形式 if (表达式) 语句1 else 语句22022/7/2321【例4-3】输入一个整数,输出其绝对值。2022/7/2322#includeint main() in

6、t x,y; scanf(%d,&x); if(x=0) y=x; else y=-x; printf(x的绝对值为:%dn,y); return 0;程序运行结果:5x的绝对值为:5-12x的绝对值为:12【例4-4】输入一个年份,判断是否为闰年。2022/7/2323【例4-4】输入一个年份,判断是否为闰年。2022/7/2324#includeint 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

7、0;程序运行结果:20122012是闰年20002000是闰年20182018不是闰年4.3.2 单分支if语句 if(表达式) 语句2022/7/2325【例4-5】输入一个整数,根据分段函数 输出相应的函数值。2022/7/23262022/7/2327#includeint main() int x,y; scanf(%d,&x); if(x0&x5) y=x*x+3; printf(y=%dn,y); return 0;程序运行结果:-1y=-10y=02y=36y=39【例4-6】输入3个实数,按从大到小的顺序输出。2022/7/2328#includeint main() floa

8、t 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; 程序运行结果:1.5,2.3,3.7 3.70, 2.30, 1.504.3.3 嵌套的if语句其一般形式为: if(表达式1) if(表达式2) 语句1 else 语句2 else if(表达式3) 语句3 else 语句42022/7/2329内嵌的if语句内嵌的if语句另一种形式为: if(表达式1

9、) 语句1 else if(表达式2) 语句2 elseif(表达式n) 语句n else 语句n+12022/7/2330else总是与它上面最近的未配对的if相配对【例4-7】使用嵌套的if语句实现例4-5中的分段函数。2022/7/2331算法1:2022/7/2332#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

10、=39程序1:2022/7/2333算法2:2022/7/2334#includeint main() int x,y; scanf(%d,&x); if(x0) y=3*x+2; else 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:4.4 用于多分支选择结构的switch语句switch(表达式) case常量表达式1: 语句1 case常量表达式2: 语句2 case常量表达式n: 语句n default:语句n+1 20

11、22/7/2335【例4-8】输入06中的一个数字, 输出对应的“星期几”。2022/7/23362022/7/2337#includeint 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: prin

12、tf(Error!应该输入06之 间的数字!n); return 0; 程序运行结果:请输入星期的数字编号(06):4星期四星期五星期六Error!应该输入06之间的数字!4.4.2 break语句2022/7/2338switch(表达式) case常量表达式1: 语句1 break; case常量表达式2: 语句2 break; case常量表达式n: 语句n break; default:语句n+1 【例4-8】输入06中的一个数字, 输出对应的“星期几”。2022/7/23392022/7/2340#includeint main() int day; printf(请输入星期的数字编

13、号(06):); scanf(%d,&day); switch(day) case 0:printf(星期日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星期四请

14、输入星期的数字编号(06):9Error!应该输入06之间的数字!4.5 选择结构程序设计举例【例4-9】输入3个数,判断这3个数是否可以构成一个三角形,若可以,则输出三角形的面积,若不可以,则输出“Error!输入的3个数不能构成三角形。”构成三角形的条件:三边长都为正数;任意两边之和大于第三边。海伦公式求面积:预处理命令“#include”2022/7/23412022/7/23422022/7/2343#include#includeint main() double a,b,c,s,area; scanf(%lf,%lf,%lf,&a,&b,&c); if(a0&b0&c0&a+bc&

15、b+ca&a+cb) 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个数不能构成三角形。【例4-10】求一元二次方程 的解。2022/7/23442022/7/23452022/7/2346#include#includeint main() double a,b,c,s,x1,x2,p,q; printf(请输入a,b

16、,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); return 0;2022

17、/7/2348程序运行结果:请输入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【例4-11】将某课程考试的百分制成绩转化为等级制成绩。转换规则为:60分以下为“不合格”,6069分为“合格”,7079分为“中等”,8089分为“良好”,90分以上为“优秀”。本例是一个多分支选

18、择问题,下面分别用两种算法解决。算法1:使用嵌套的if语句结构。算法2:使用switch语句结构。2022/7/23492022/7/2350算法1:2022/7/2351#includeint main() int score; scanf(%d,&score); if(score100) printf(成绩输入有误!n); else if(score60) printf(不合格n); else if(score70) printf(合格n); else if(score80) printf(中等n); else if(score90) printf(良好n); else printf(优秀n); return 0; 程序1:程序运行结果:2022/7/2352算法2:2022/7/2353#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);break; case 9: case 10:printf(优秀n);break; default: print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论