




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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种关系运算符: 优先级相同 (高): (小于) =(小于或等于) (大于) =(大于或等于) 优先级相同 (低): = = (等于) !=(不等于),关于优先次序: (1)前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表示“真”,以f
4、alse表示“假”。Pascal和FORTRAN等语言都有逻辑型,变量和逻辑型常量),以1代表“真”,以“0”代表“假”。例如,a=3,b=2,c=1,则: 关系表达式“ab”的值为“真”,表达式的值为1。 关系表达式“(ab)=c”的值为“真”(因为ab的值为1,等于c的值),表达式的值为1。 关系表达式“bca”的值为“假”,表达式的值为0。 如果有以下赋值表达式: d=ab d的值为1。 f=abc f的值为0 (因为“”运算符是自左至右的结合方向,先执行“ab”得值为1, 再执行关系运算“1c”,得值0,赋给f)。,用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。在bas
5、ic和Pascal语言中有以下形式的逻辑表达式(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
6、=b else 各有一个分号 printf(%f,-x); 这是由于分号是c语句中不可缺少的部分,这个分号是if语句中的内嵌语句所要求的。如果无此分号,则出现语法错误。但应注意,不要误认为上面是两个语句(if语句和else语句)。它们都属于同一个if语句。else子句不能作为语句单独使用,它必须是if语句的一部分,与if配对使用。,(3) 在if和else后面可以只含一个内嵌的操作语句(如上例),也可以有多个操作语句,此时用花括号“”将几个语句括起来成为一个复合语句。如: if(abc else printf(it is not a trilateral); 注意在第5行的花括号“”外面不需要
7、再加分号。因为内是一个完整的复合语句,不需另附加分号。,例4.1输入两个实数,按代数值由小到大的次序输出这两个数。 这个问题的算法很简单,只需要作一次比较即可。对类似这样简单的问题可以不必先写出算法或画流程图,而直接编写程序。或者说,算法在编程者的脑子里,相当于在算术运算中对简单的问题可以“心算”而不必在纸上写出来一样。 程序如下: main() float a,b,t; scanf(f,f, 若 x 0,则y = 1。 输出y。也可以用流程图表示,见图4.7。,图4.7,有以下几个程序,请读者判断哪个是正确的? 程序1: main() int x,y; scanf(d, break; cas
8、ec : 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; grade的值为a、b或c时都执行同一组
9、语句。,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,realpart,imagpart); print
10、f(%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代表实部p,以imagpart代表虚部q,以
11、增加可读性。 运行结果如下: 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折扣 2000S3000 10折扣 3000S 15
12、折扣 设每公里每吨货物的基本运费为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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿色物流与绿色建筑2025年协同创新研究报告
- 管理运筹学排队论
- 2025年农村土地流转市场化进程与规范化管理对农业产业链条完善影响研究报告
- 2025文旅景区7月限定(超轻盈入夏企划主题)夏日养生局活动策划方案
- 2023-2024学年贵州省遵义市九年级上学期物理期末试题及答案
- XX经济开发区标准化厂房建设工程可行性研究报告
- 秋游题目大全及答案
- 软件安全性测试题库及答案
- 数方题目及答案
- 数学二考研试题及答案
- 法务岗位招聘笔试题与参考答案
- 安全专题课件教学课件
- 2024自制抱杆起重吊装方案的安全规定
- 成功食品库房规划方案
- 三年级下册口算题大全(可打印版)
- 生态养生养老综合示范区建设项目投资可研报告
- 四川省泸州市2024年七年级下学期数学期末考试试卷附答案
- JT-T 1495-2024 公路水运危险性较大工程专项施工方案编制审查规程
- 药物临床试验方案模板
- 《物流大数据分析》课程标准
- 正畸推广活动方案
评论
0/150
提交评论