




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章是逻辑运算和判断选择控制。4.1关系运算符和关系表达式关系运算是逻辑运算中相对简单的运算。所谓的“关系运算”实际上是一种“比较运算”。将这两个值进行比较,以确定比较结果是否满足给定条件。例如,大于3是关系表达式,大于号()是关系运算符。如果a的值为5,则满足给定的“a 3”条件,因此关系表达式的值为“真”(即,“条件满足”);如果a的值是2并且不满足“a 3”的条件,则关系表达式的值被称为“假”。4.1.1关系运算符及其优先级C语言提供了6种关系运算符:(1)(大于)(4)=(大于或等于) (5)=(等于)(6)!=(不等于)关于优先级:1。前四个关系运算符(,=)具有相同的优先级,后两个也是相同的。前4种高于后2种。例如,“”优先于“=”。而“”和“ b)=c的值为“真”(因为a b的值为1,等于c的值),表达式的值为1。b c BD的值为1。F=a b cf的值为0(因为“”运算符是从左到右的组合方向,首先执行“a b”以获得值1,然后执行关系运算:“1 c”以获得值0,该值分配给f、4.2逻辑运算符和逻辑表达式。逻辑运算符用于连接关系表达式或逻辑量以形成逻辑表达式。下面描述了C语言中的逻辑运算符和逻辑运算。4.2.1逻辑运算符及其优先级C语言提供了三种逻辑运算符:1。这个if语句的执行过程如图2所示。如果(表达式)语句1删除语句2,例如:如果(XY)PRINTF(“% d”,x);elseprintf(%d ,y);参见图3。例如,if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句else语句n流程图。如果(数字500)成本=0.15;elseif(编号 300)成本=0.10:elseif(编号 100)成本=0.075;elseif(数字 50)成本=0.05;else cost=0;注:在if语句的三种形式中,if后面都有“表达式”,通常是逻辑表达式或关系表达式。例如,如果(a=belsprintf( % f ,-x);这是因为分号是C语句中不可缺少的一部分。语句中的内部谎言语句要求使用分号。如果没有这样的分号,就会出现语法错误。然而,应该注意的是,上述两个陈述(如果陈述和否则陈述)不应该是错误的。它们都属于同一个if语句。else子句不能单独用作语句;它必须是if语句的一部分,并与if成对使用。3.在if和else之后,只能有一个嵌入式操作语句(如上例所示),或者可以有多个操作语句。在这种情况下,使用花括号“”将几个语句括在一个复合语句中。例如,如果(a b carea=sqrt(s *(s-a)*(s-b)*(s-c);printf(“面积=%6.2f”,面积); else printf(“itis nota triangial”);请注意,除外,您不需要任何额外的标记。因为是一个完整的复合语句,所以没有必要附加另一个分号。例4。1输入两个实数,并按降序输出这两个数字。/*示例4.1 tpage 53 */main() flove,b,t;Scanf(%f,%f ,操作如下。3.6,-3.2-3 . 20 . 3 . 60示例4.2输入三个数字,并按大小顺序输出。main() flove,b,c,t;printf(Inputa,b,c n );Scanf(%f,%f,%f ,运行如下:if语句中的3,7,11 . 0,3.00,7.00,4.3.2语句的嵌套,以及一个或多个if语句被称为if语句的嵌套。一般形式如下:if()if()语句1else语句2elseif()语句3else语句4应注意if和else之间的配对关系。从最内层开始,否则总是与最近的(不成对的)配对,如果在它上面的话。如果你写:1f()If()语句1elseif()语句2else语句3程序员将else写在与第一个if(外部if)相同的列上,希望else对应于第一个if,但实际上else与第二个if成对出现,因为它们最接近。因此,最好在嵌入的if语句中包含else部分,这样if的数量与else的数量相同,并且从内层到外层进行一对一的对应,这样就不会采取任何措施。如果If和else的数量不相同,为了实现设计者的尝试,可以添加括号来确定配对关系。例如:if () if()语句1此时的else语句2 if定义了嵌入if语句的范围,所以else与第一个成对出现。“示例4.3有一个函数:-1(x0)用于编程、输入一个X值和输出一个Y值。有几种写作方法,请判断哪一种是正确的。程序1: main () intx,y;scanf(“% d”、& x);if(x=0)if(x0)y=1;elsey=0;埃尔塞=11;程序3:将上述if语句改为:Y=1;如果(x!=0)如果(x0)y=1:elsey=0;程序4: y=0。if(x=0)if(x0)y=1;elsey=-1;只有程序1和2是正确的。通常,嵌入的if语句放在外部else子句中(如程序1)。因此,因为外部else是分开的,嵌入的else将不会与外部if配对,而是仅与嵌入的让步配对,以免混淆,如程序3和4中那样。4.3.3条件运算符如果在if语句中,当表达式为“真”和“假”并且只执行一个赋值语句来为同一变量赋值时,可以使用简单的条件运算符进行处理。例如,如果有以下if语句:if(a b)max=a;elsemax=b。下列条件运算符(?马克斯=(a b)?a:b哪一个?A:b“是一个”条件表达式。“这是如何实现的。如果(ab)条件为真,则条件表达式取值A;条件运算符需要三个操作数,称为三元运算符。条件表达式的一般形式是表达式1?表达式2:表达式3其执行过程如图4.7所示。条件运算符的执行顺序是:首先,求解表达式1;如果不是0(真),则求解表达式2,然后将表达式2的值作为整个条件表达式的值。如果表达式1的值是0(假),则表达式3被求解,并且表达式3的值是整个条件表达式的值。max=(ab)?a: b的执行结果是将条件表达式的值赋给max,也就是将a和b中的较大者赋给max。2.条件运算符优先于赋值运算符,因此求解上述赋值表达式的过程是首先求解条件表达式,然后将其值赋给max。条件运算符的优先级低于关系运算符和算术运算符。因此,最大值=(a b)?A: b括号是可选的,可以写成max=ab?甲:乙如果有ab?b1相当于a b?甲:(b1)不等于乙?a:b)+1 .3 .条件运算符的组合方向是“从右向左”。如果有以下条件表达式:ab?a:cd?C: d相当于ab?(cd?C: d) a=1,b=2,c=3,d=4,条件表达式的值等于4。4.条件表达式不能替换常规if语句,并且只能替换if语句,如果嵌入在if语句中的语句是赋值语句(并且两个分支都将值赋给同一个变量)。如下语句不能被条件表达式替换。如果(ab)printf(%d ,a);elseprintf(%d ,b);但是它可以被以下语句代替:printf (%d ,a b?a : b);输出条件表达式的值。5.在条件表达式中,表达式1的类型可以不同于表达式2和表达式3的类型。比如x。A a:bx b x是一个整数变量,如果x=0,则条件表达式的值为 b 。表达式2和表达式3的类型也可以不同,在这种情况下,条件表达式的值是更高的类型。比如xy。1: 1.5如果xy值应该是1,因为1.5是实数并且高于整数(见第2.7章),将1转换为1.0的实数。“示例4.4”输入一个字符以确定其是否为大写,如果是,将其转换为小写;如果没有,不要转换。然后输出最后一个字符。/*示例4.4 at page 57 */main() charch;scanf(“% c”)运行如下:在条件表达式(ch 32)中,32是小写字母和大写字母的ASCII码之间的差异(见附录1)。4.4switch语句switch语句是一个多分支选择语句。if语句只有两个分支可供选择,但实际问题往往需要选择多个分支。例如,学生的分数被分类(90分为“a”,80 89分为“b”,70 79分为“c”,等等,);人口分类(按年龄:老、中、年轻、年轻、儿童);工资统计分类;银行存款的分类;等等。当然,所有这些都可以通过嵌套的if语句来处理,但是如果有更多的分支,那么嵌套的if语句就会有更多的层,并且程序会很长,可读性也会降低。c语言提供了switch语句来直接处理多分支选择,这相当于Pascal语言中的case语句。其一般形式如下:switch(表达式)case常量表达式1:statement 1 base常量表达式2:statement 2 base常量表达式n:statement n default:statement n 11 ,例如,根据检查结果的等级,打印一个百分比段:switch(grade) case a :printf(“85 100 n”);案例“B”:打印(70 84 n);案例“C”:打印(60 69 n);案例“D”:printf(“60 n”);默认值:printf(“错误 n”);,描述:1。1.switch后面括号中的“表达式”可以是整数表达式、字符表达式或枚举数据(见第10章)。对于其他类型,不允许原始的C标准,而新的ANSI标准允许上述表达式和大小写常量表达式为任何类型。2.当表达式的值等于事例后的常量表达式的值时,执行事例后的语句。如果常量表达式的值在所有情况下都与表达式的值不匹配,则执行defau1t之后的语句。3 .在每种情况下,常量表达式的值必须互不相同,否则会出现矛盾现象(对于同一个表达式值,有两个或更多的执行方案)。4.每个案例的发生顺序不影响执行结果。例如,案例“d”:可以先出现,然后是案例“a”:5.在一种情况下执行语句后,过程控制转移到下一种情况下继续执行。“案例常量表达式”仅用作语句标签,而不是条件判断。执行switch语句时,根据开关后表达式的值找到匹配的填充标签,执行从该标签开始,不做判断。例如,在上面的例子中,如果等级的值等于a,它将连续输出:85 10070 8460 69 60误差。因此,在执行案例分支之后,流程应该跳出开关结构,即switch语句的执行被终止。break语句可用于实现此目的。上面的开关结构重写如下:开关(等级) case a :printf(“85 100 n”);休息;案例“B”:打印(70 84 n);休息;案例“C”:打印(160 69 n);休息;案例“D”:printf(“ 60 n);休息;当等级值为“a”、“b”或“c”时,将执行相同的语句集。4.5程序示例示例4.5写一个程序来判断给定的一年是否是闰年。判断一年是否是闰年。闰年的条件是满足以下两个条件之一:可以除以4,但不能除以100。(2)可以除以4,也可以除以400。可以用逻辑表达式表示:year% 4=0printf(输入日期 n );scanf(“% d”)、if(leap)printf(“% dis”,年份);else printf(“% disnot”,年份);printf( aleapy ear n );/*如果(年份% 4=0 *)/操作如下: 1989/1989年是一年 2000/2000年是一年,例4.6找到ax2 bx c=0方程的解。有如下几种可能性:a=0,不是二次方程。b2-4ac=0,具有两个相等的实根。b2-4ac0,具有两个不相等的实根。b2-4ac0有两个共轭复数根。绘制Ns流程图来表示算法(图4.10页面62)。程序如下:/*示例4.6atpage61 */#包括 math . h main() flove,b,c,disc,x1,x2,realpart,imagpart,zero=1e-6;printf(Inputa,b,c n );scanf(%f,%f,%f ,if(fabs(a)零) x1=(-b sqrt(disc)/(2 * a);x2=(-b-sqrt(disc)/(2 * a);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025石墨矿石买卖合同(完整)
- 2025实习员工合同范本
- 化肥厂采购设备安装规定
- 汽车保险代理合同协议
- 中医考试题及答案大专
- 金融机构总部大楼租赁及金融服务合作协议
- 宫萱与吴鹏的情感纠葛离婚协议书
- 宠物狗品种鉴定与知识产权保护协议
- 文员岗位招聘与团队建设合同
- 离婚协议书签订与诉讼离婚心理咨询服务合同
- 拒绝烟草诱惑向“吸烟”说不!课件-2024-2025学年高二下学期世界无烟日主题班会
- 4《少给父母添麻烦》公开课一等奖创新教案(第二课时)
- 月嫂证考试试题及答案
- 新生儿高胆红素血症诊治指南(2025)解读
- 羽绒服购销合同协议
- 民间道教考试试题及答案
- 北师大版九年级数学上册《知识解读•题型专练》第05讲一元二次方程的应用(知识解读+真题演练+课后巩固)(原卷版+解析)
- 马拉松志愿者培训
- 保健品会销管理制度
- 国际贸易摩擦对行业影响-全面剖析
- 消防水泵操作流程
评论
0/150
提交评论