




已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5.1 关系运算符和关系表达式 5.2 逻辑运算符和逻辑表达式 5.3 if语句 5.4 switch语句 5.5 程序举例 习题 第5章 选择结构程序设计 在第3章中已介绍了选择结构,它是三种基本 结构之一。在大多数程序中都会包含选择结 构。它的作用是,根据所指定的条件是否满 足,决定从给定的两组操作选择其一。在本 章中介绍如何用c语言实现选择结构。在c语 言中选择结构是用if语句实现的。if语句最常 用的形式是 if (关系表达式)语句1 else 语句2 例如: if ( x0 ) y=1; else y=-1; 其中x0是一个关系表达式。“”是一个关系运 算符。 5.1 关系运算符和关系表达式 关系运算是逻辑运算中比较简单的一种。所谓“关系 运算”实际上是“比较运算”。将两个值进行比较, 判断其比较的结果是否符合给定的条件。例如,a 3是一个关系表达式,大于号()是一个关系运算 符,如果a的值为5,则满足给定的“a3”条件,因 此关系表达式的值为“真”(即“条件满足”);如果a的 值为2,不满足“a3”条件,则称关系表达式的值 为“假”。 5.1.1 关系运算符及其优先次序 C语言提供6种关系运算符: 优先级相同 (高): (小于) =(小于或等于) (大于) =(大于或等于) 优先级相同 (低): = = (等于) !=(不等于) 关于优先次序: (1) 前4种关系运算符(,=,=)的优先级别相同,后 两种也相同。前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) 关系表达式的值是一个逻辑值,即“真”或“假” 。例如,关系表达式“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 (因为“”运算符是自左至右的结 合方向,先执行“ab”得值为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; elsecost=0; 说明: (1) 三种形式的if语句中在if后面都有“表达式”,一般为逻辑表 达式或关系表达式。例如,if(a=b else 各有一个分号 printf(“%f“,-x); 这是由于分号是c语句中不可缺少的部分,这个分号 是if语句中的内嵌语句所要求的。如果无此分号, 则出现语法错误。但应注意,不要误认为上面是两 个语句(if语句和else语句)。它们都属于同一个if语 句。else子句不能作为语句单独使用,它必须是if语 句的一部分,与if配对使用。 (3) 在if和else后面可以只含一个内嵌的操作语句(如 上例),也可以有多个操作语句,此时用花括号“ ”将几个语句括起来成为一个复合语句。如: if (abc area=sqrt(S*(S-a)*(S-b)*(S-c); printf(“area=62f“,area); else printf(“it is not a trilateral“); 注意在第3行的花括号“”外面不需要再加分号。因 为内是一个完整的复合语句,不需另附加分 号。 例5.1输入两个实数,按代数值由小到大的次序输出 这两个数。 这个问题的算法很简单,只需要作一次比较即可。 对类似这样简单的问题可以不必先写出算法或画 流程图,而直接编写程序。或者说,算法在编程 者的脑子里,相当于在算术运算中对简单的问题 可以“心算”而不必在纸上写出来一样。 程序如下: main() float a,b,t; scanf(“f,f“, else leap=0; 例5.6求ax2bxc=0方程的解。 例4.12曾介绍过基本的算法,实际上应该有以下几种 可能: a=0,不是二次方程。 b2-4ac=0,有两个相等实根。 b2-4ac0,有两个不等实根。 b2-4ac0,有两个共轭复根。 画出N S流程图表示算法(图5.14)。 图5.14 据此编写程序如下: #include main() float a,b,c,d,disc,x1,x2,realpart, imagpart; scanf(“f,f,f“, else realpart=-b(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)因 为这样可能会出现本来是零的量,由于上述误差而 被判别为不等于零而导致结果错误。所以采取的办 法是判别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运输公司对用户计算运费。路程(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 ,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; else c=S250; switch(c) case0d=0;break; case1d=2;break; case2 case3d=5;break; case4 case5 case6 case7d=8;break; case8 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 写出下面各逻辑表达式的值。设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时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可持续材料在别墅灯箱应用中的性能与成本平衡难题
- 反射镜多物理场耦合设计中的热-力-光协同优化难题
- 反光胶膜纳米改性技术突破与产业应用瓶颈的辩证思考
- 双碳目标下废旧凸轮轴盖再生铝材回收工艺与价值链延伸模式
- 双材料复合构件切头精度偏差溯源的数字化孪生应用探索
- 卡箍连接界面在高压流体输送中的泄漏失效溯源与防护技术
- 医药中间体规模化生产中的连续流反应器适配性瓶颈研究
- 区块链防伪溯源系统在定制首饰领域的落地障碍
- 北斗导航系统在复杂地形作业精度优化中的应用边界
- 功率可调激光器在精密制造中的热效能平衡与材料失效阈值研究
- 医学人文与叙事课件
- 植物灰分的测定
- 三年级美术上册《魔幻颜色》课件
- 部编版一年级上册语文全册优秀课件
- 《横》书法教学课件
- 工程项目进度管理-课件
- 文件外发申请单
- 土壤肥料全套课件
- 历史选择性必修1 国家制度与社会治理(思考点学思之窗问题探究)参考答案
- 中国铁路总公司《铁路技术管理规程》(高速铁路部分)2014年7月
- 中国医院质量安全管理 第2-29部分:患者服务临床营养 T∕CHAS 10-2-29-2020
评论
0/150
提交评论