版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、5.1关系运算符和关系表达式 5.2逻辑运算符和逻辑表达式 5.3if语句 5.4switch语句 5.5程序举例 习题,第5章 选择结构程序设计,在第3章中已介绍了选择结构,它是三种基本结构之一。在大多数程序中都会包含选择结构。它的作用是,根据所指定的条件是否满足,决定从给定的两组操作选择其一。在本章中介绍如何用c语言实现选择结构。在c语言中选择结构是用if语句实现的。if语句最常用的形式是 if (关系表达式)语句1 else 语句2 例如: if ( x0 ) y=1; else y=-1; 其中x0是一个关系表达式。“”是一个关系运算符。,5.1 关系运算符和关系表达式,关系运算是逻辑
2、运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断其比较的结果是否符合给定的条件。例如,a3是一个关系表达式,大于号()是一个关系运算符,如果a的值为5,则满足给定的“a3”条件,因此关系表达式的值为“真”(即“条件满足”);如果a的值为2,不满足“a3”条件,则称关系表达式的值为“假”。,5.1.1 关系运算符及其优先次序,C语言提供6种关系运算符: 优先级相同 (高): (小于) =(小于或等于) (大于) =(大于或等于) 优先级相同 (低): = = (等于) !=(不等于) 关于优先次序: (1) 前4种关系运算符(,=,=)的优先级别相同,后两种也相
3、同。前4种高于后2种。例如,“”优先于“=”。而“”与“”优先级相同。,(2) 关系运算符的优先级低于算术运算符。 (3) 关系运算符的优先级高于赋值运算符。 以上关系见图5.1。 例如: cab等效于 c(ab) ab=c 等效于(ab)=c a=bc 等效于a=(bc) a=bc 等效于a=(bc),图5.1,5.1.2 关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达 式、字符表达式)连接起来的式子,称关系表达式。例如,下面都是合法的关系表达式: ab,abbc,(a=3)(b=5),ab,(ab)(bc) 关系表达式的值是一个逻辑值,即“真”或“
4、假”。例如,关系表达式“5=3”的值为“假”,“5=0”的值为“真”。c语言没有逻辑型数据(Pascal语言以True表示“真”,以false表示“假”。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 (因为“”运算符是自左至右的结合方向,先执行“a
5、b”得值为1, 再执行关系运算“1c”,得值0,赋给f)。,用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。在basic和Pascal语言中有以下形式的逻辑表达式(AND是逻辑运算符): (ab)AND(xy) 如果ab且xy,则上述逻辑表达式的值为“真”。下面介绍c语言中的逻辑运算符和逻辑运算。 5.2.1 逻辑运算符及其优先次序 C语言提供三种逻辑运算符:,5.2 逻辑运算符和逻辑表达式,(1) else if(number300)cost=0.10; else if(number100)cost=0.075; else if(number50)cost=0.05; else
6、cost=0; 说明: (1) 三种形式的if语句中在if后面都有“表达式”,一般为逻辑表达式或关系表达式。例如,if(a=b else 各有一个分号 printf(%f,-x); 这是由于分号是c语句中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。如果无此分号,则出现语法错误。但应注意,不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。,(3) 在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。如:
7、if(abc printf(area=62f,area); else printf(it is not a trilateral); 注意在第3行的花括号“”外面不需要再加分号。因为内是一个完整的复合语句,不需另附加分号。,例5.1输入两个实数,按代数值由小到大的次序输出这两个数。 这个问题的算法很简单,只需要作一次比较即可。对类似这样简单的问题可以不必先写出算法或画流程图,而直接编写程序。或者说,算法在编程者的脑子里,相当于在算术运算中对简单的问题可以“心算”而不必在纸上写出来一样。 程序如下: main() float a,b,t; scanf(f,f, else realpart=-b(
8、2*a);,imagpart=sqrt(-disc)(2*a); printf(has comPlex rootsn); printf(%8.4f+%8.4fin,realpart,imagpart); printf(%8.4f-%8.4fin,realpart,imagpart); 程序中用disc代表b2-4ac,先计算disc的值,以减少以后的重复计算。对于判断b2-4ac是否等于0时,要注意一个问题:由于disc(即b2-4ac)是,实数,而实数在计算和存储时会有一些微小的误差,因此不能直接进行如下判断:if(disc=0)因为这样可能会出现本来是零的量,由于上述误差而被判别为不等于零
9、而导致结果错误。所以采取的办法是判别disc的绝对值(fabs(disc)是否小于一个很小的数(例如10-6),如果小于此数,就认为disc=0。程序中以realpart代表实部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 例5.7运
10、输公司对用户计算运费。路程(S)越远,每公里运费越低。标准如下:,s250km没有折扣 250S500 2折扣 500S1000 5折扣 1000S2000 8折扣 2000S3000 10折扣 3000S 15折扣 设每公里每吨货物的基本运费为P(Price的缩写),货物重为w(weight的缩写),距离为S,折扣为d(discount的缩写),则总运费f(freight的缩写)的计算公式为f=P*w*S*(1-d)分析此问题,折扣的变化是有规律的:从图5.15可以看到,折扣的“变化,点”都是250的倍数(250,500,1000,2000,3000)。利用这一特点,可以在横轴上加一种坐标c
11、,c的值为S/250。c代表250的倍数。当c1时,表示S250,无折扣;1c2时,表示250S500,折扣d=2;2c4时,d=5;4c8时,d=8;8c12时,d=10;c12时,d=15。,图5.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) case0d=0;break;,case1d=2;break; case2 case3d=5;break; case4 case5 case6 case7d=8;break; case8
12、 case9 case10 case11d=10;break;,case12d=15;break; f=P*w*S*(1-d1000); printf(freight=154f,f); 运行情况如下: 100,20,300 freight= 588000.0000 请注意:c、S是整型变量,因此c=S250为整数。当S3000时,令c=12,而不使c随S增大,这是为了在Switch语句中便于处理,用一个case可以处理所有S3000的情况。,习题 5.1 什么是算术运算?什么是关系运算?什么是逻辑运算? 5.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 5.3 写出
13、下面各逻辑表达式的值。设a=3,b=4,c=5。 (1) abc & b=c (2) a|bc & b-c (3) !(ab) & !c|1 (4) !(x=a) & (y=b) & 0 (5) !(ab)c-1 & bc2,5.4 有3个整数a、b、c,由键盘输入,输出其中最大的数。 5.5 有一函数: x (x1) y = 2x-1 (1x10) 3x-11(x10) 写一程序,输入x,输出y值。 5.6 给一个不多于5位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字,例如原数为321,应输出123。,图5.16,5.7 企业发放的奖金根据利润提成。利润I低于或等于10万元的,奖金可提10;利润高于10万元,低于20万元(100000I200000)时,低于10万元的部分按10提成,高于100000元的部分,可提成75;200000I400000时,低于20万的部分仍按上述办法提成(下同)。高于20万元的部职?提成;400000I600000时,高于40万元的部分按3提成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高三物理二轮复习精讲精练 13讲 力学实验专题强化训练原卷版
- 安徽新闻出版职业技术学院《方剂学》2025-2026学年期末试卷
- 马鞍山职业技术学院《社会研究方法》2025-2026学年期末试卷
- 安徽邮电职业技术学院《旅游学》2025-2026学年期末试卷
- 皖北卫生职业学院《管理沟通》2025-2026学年期末试卷
- 江西科技师范大学《环境与资源保护法》2025-2026学年期末试卷
- 福建江夏学院《关务基础知识》2025-2026学年期末试卷
- 河北美术文化试题及答案
- 长春建筑学院《中外教育简史》2025-2026学年期末试卷
- 闽南科技学院《财务管理》2025-2026学年期末试卷
- 2026年山东省综合评标专家(水利工程)核心备考题库(含典型题、重点题)
- 西安经开区招教考试试题及答案
- GB/T 4623-2025环形混凝土电杆
- 装配式建筑碳核算 课件 第6章装配式建筑碳核算软件
- 【专家报告】河海大学郭苏:不同应用场景下多能互补综合能源系统优化关键技术研究
- 2025生物银行面试题目及答案
- 氟化工艺作业安全培训
- 资产减值准备管理办法
- 任务型阅读15篇-八年级英语下学期期末复习
- GB/T 45953-2025供应链安全管理体系规范
- 干部审计知识培训课件
评论
0/150
提交评论