版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 选择结构,在前面已介绍了选择结构,它是三种基本结构之一。在大多数程序中都会包含选择结构。它的作用是,根据所指定的条件是否满足,决定从给定的两组操作选择其一。在本章中介绍如何用c语言实现选择结构。在c语言中选择结构是用if语句实现的。if语句最常用的形式是 if (关系表达式) 语句1 else 语句2 例如: if ( x0 ) y=1; else y=-1; 其中x0是一个关系表达式。“”是一个关系运算符。,4.1 关系运算符和关系表达式,关系运算是逻辑运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断其比较的结果是否符合给定的条件。例如,a3是一个关
2、系表达式,大于号()是一个关系运算符,如果a的值为5,则满足给定的“a3”条件,因此关系表达式的值为“真”(即“条件满足”);如果a的值为2,不满足“a3”条件,则称关系表达式的值为“假”。,4.1.1 关系运算符及其优先次序,C语言提供6种关系运算符: 优先级相同 (高): (小于) =(小于或等于) (大于) =(大于或等于) 优先级相同 (低): = = (等于) !=(不等于),关于优先次序: 前4种关系运算符(,=,=)的优先级别相同,后两种也相同。前4种高于后2种。例如,“”优先于“=”。而“”与“”优先级相同。 (2) 关系运算符的优先级低于算术运算符。 (3) 关系运算符的优先
3、级高于赋值运算符。 以上关系见图4.1。,例如: cab 等效于 c(ab) ab=c 等效于(ab)=c a=bc 等效于a=(bc) a=bc 等效于a=(bc),图4.1,4.1.2 关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称关系表达式。例如,下面都是合法的关系表达式: ab,abbc,(a=3)(b=5),ab,(ab)(bc) 关系表达式的值是一个逻辑值,即“真”或“假”。例如,关系表达式“5=3”的值为“假”,“5=0”的值为“真”。c语言没有逻辑型数据(Pascal语言以True表示“真”,以fals
4、e表示“假”。Pascal和FORTRAN等语言都有逻辑型,变量和逻辑型常量),以1代表“真”,以“0”代表“假”。例如,a=3,b=2,c=1,则: 关系表达式“ab”的值为“真”,表达式的值为1。 关系表达式“(ab)=c”的值为“真”(因为ab的值为1,等于c的值),表达式的值为1。 关系表达式“bca”的值为“假”,表达式的值为0。 如果有以下赋值表达式: d=abd的值为1。 f=abcf的值为0 (因为“”运算符是自左至右的结合方向,先执行“ab”得值为1, 再执行关系运算“1c”,得值0,赋给f)。,用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。在basic和Pa
5、scal语言中有以下形式的逻辑表达式(AND是逻辑运算符): (ab)AND(xy) 如果ab且xy,则上述逻辑表达式的值为“真”。下面介绍c语言中的逻辑运算符和逻辑运算。 4.2.1 逻辑运算符及其优先次序 C语言提供三种逻辑运算符:,4.2 逻辑运算符和逻辑表达式,(1) else if(number300) cost=0.10; else if(number100) cost=0.075; else if(number50) cost=0.05; else cost=0; 说明: (1) 三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表达式。例如,if(a=b el
6、se 各有一个分号 printf(%f,-x); 这是由于分号是c语句中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。如果无此分号,则出现语法错误。但应注意,不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。,(3) 在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。如: if(abc printf(“area=62f”,area); else printf(it is not a trilateral
7、); 注意在第5行的花括号“”外面不需要再加分号。因为内是一个完整的复合语句,不需另附加分号。,例4.1输入两个实数,按代数值由小到大的次序输出这两个数。 这个问题的算法很简单,只需要作一次比较即可。对类似这样简单的问题可以不必先写出算法或画流程图,而直接编写程序。或者说,算法在编程者的脑子里,相当于在算术运算中对简单的问题可以“心算”而不必在纸上写出来一样。 程序如下: main() float a,b,t; scanf(f,f, 若 x 0,则y = 1。 输出y。也可以用流程图表示,见图4.7。,图4.7,有以下几个程序,请读者判断哪个是正确的? 程序1: main() int x,y;
8、 scanf(d, break; casec : printf(“6069n”); break; cased : printf(“60n”); break; default printf(errorn); ,最后一个分支(default)可以不加break语句。 如果grade的值为b,则只输出“7084”。流程图见图4.12。,图4.12,在case后面中虽然包含一个以上执行语句,但可以不必用花括弧括起来,会自动顺序执行本case后面所有的执行语句。当然加上花括弧也可以。 (6) 多个case可以共用一组执行语句,如: casea caseb casecprintf(60n);break;
9、grade的值为a、b或c时都执行同一组语句。,4.5 程序举例 例4.5写程序,判断某一年是否闰年。 我们用图4.13来表示判别闰年的算法。以变量leap代表是否闰年的信息。若某年为闰年,则令leap=1;若为非闰年,令leap=0。最后判断leap是否为1(真),若是,则输出“闰年”信息。,图4.13,据此编写程序如下: main() int year, leap; scanf(d, else realpart=-b(2*a);,imagpart=sqrt(-disc)(2*a); printf(has comPlex rootsn); printf(%8.4f+%8.4fin,realp
10、art,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); 程序中用disc代表b2-4ac,先计算disc的值,以减少以后的重复计算。对于判断b2-4ac是否等于0,时,要注意一个问题:由于disc(即b2-4ac)是实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:if(disc=0)因为这样可能会出现本来是零的量,由于上述误差而被判别为不等于零而导致结果错误。所以采取的办法是判别disc的绝对值(fabs(disc)是否小于一个很小的数(例如1e-6),如果小于此数,就认为disc=0。程序中以realpart代表
11、实部p,以imagpart代表虚部q,以增加可读性。 运行结果如下: 1,2,1 The equation has two equalroots-10000, 1,2,2 The equation has complex roots: -1000010000i -10000-10000i 2,6,1 The equation has distinct real roots:-0.1771 and =2.8229 例4.7运输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下:,s250km 没有折扣 250S500 2折扣 500S1000 5折扣 1000S2000 8折扣 200
12、0S3000 10折扣 3000S 15折扣 设每公里每吨货物的基本运费为P(Price的缩写),货物重为w(weight的缩写),距离为S,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为f=P*w*S*(1-d).分析此问题,折扣的变化是有规律的:从图4.15可以看到,折扣的“变化,点”都是250的倍数(250,500,1000,2000,3000)。利用这一特点,可以在横轴上加一种坐标c,c的值为S/250。c代表250的倍数。当c1时,表示S250,无折扣;1c2时,表示250S500,折扣d=2;2c4时,d=5;4c8时,d=8;8c12时,d=10;c12时,d=15。,图4.15,据此写出程序如下: main() int c,S; float P,w,d,f; scanf(f,f,d,&P,&w,&S); if(S=3000) c=12; elsec=S250; switch(c) case 0 d=0;break;,case1d=2;break; case2 case3d=5;break; case4 case5 case6 case7d=8;break; case8 case9 case10 case11d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026黑龙江黑河市五大连池市机关事务服务中心招聘公益性岗位1人备考题库附答案详解(b卷)
- 2026广东广州市荔湾中心医院招聘编外工作人员68人备考题库(第一批)及答案详解(真题汇编)
- 2026东风汽车集团股份有限公司战略规划部招聘2人备考题库含答案详解(精练)
- 2026河南省人力资源开发中心有限公司招聘1人备考题库有答案详解
- 2026浙江丽水职业技术学院通识教育学院见习生招聘1人备考题库及答案详解(夺冠)
- 2026江苏盐城工学院招聘专业技术人员110人(第一批)农业考试备考试题及答案解析
- 2026浙江宁波交通投资集团有限公司第一批统筹招聘24人农业考试参考题库及答案解析
- 2026广东中山大学附属第五医院凤凰国际医学中心医师岗位招聘2人农业考试备考试题及答案解析
- 2026安徽马鞍山市临床检验中心招聘2人农业考试模拟试题及答案解析
- 2026江苏省常州市体育运动学校招聘自行车教练1人农业笔试模拟试题及答案解析
- 【9英一模】2026年安徽合肥市包河区九年级中考一模英语试卷
- 2026国家义务教育(心理健康)质量监测试题(附答案)
- 2026上海市建筑工程学校招聘7人笔试参考试题及答案解析
- 广东省广州市2026年普通高中毕业班综合测试(广州一模)英语试题
- 老旧小区改造监理规划
- 2026年保肝药物试题及答案
- 广东省佛山市2026届高三上学期一模数学试题及参考答案
- 常州2025年江苏常州市锡剧院公开招聘企业用工工作人员5人笔试历年参考题库附带答案详解
- 《中国展览经济发展报告2025》
- 2025年中职机械制造与自动化(机械制造基础)试题及答案
- 脊柱损伤搬运课件
评论
0/150
提交评论