版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学会去选择—分支结构程序设计C语言程序设计第四章本章目录01.关系运算和逻辑运算02.条件语句——if语句03.多分支语句——switch04.趣味实例4.1关系运算和逻辑运算用于构成条件的关系表达式和逻辑表达式关系运算
关系运算就是对两个数据值的大小进行比较的运算,也称为比较运算。对表达式进行比较,结果为0,即为假。C语言为我们提供了6种关系运算符,见表注意:>=、<=、==、!=这种符号之间不能存在空格。关系运算符1)关系运算符都是双目运算符,其结合性均为自左至右。例如:a>b>7相当于(a>b)>72)关系运算符的优先级低于算术运算符,高于赋值运算符。例如:a>b+7相当于a>(b+7)
a=b>7相当于a=(b>7)3)在6个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。若运算符优先级相同,根据其结合性进行运算,否则按照优先级运算。例如:a!=b>7相当于a!=(b>7)
a!=b==7相当于(a!=b)==7C语言中的关系运算符优先级1)用关系运算符连接的表达式称为关系表达式,以下是合法的关系表达式:2>33>2>1a>ba+b>c-d(a=7)<=(b=5)2)若a=2,b=7,c=4,d=1,1)中关系表达式的值为:
关系表达式和关系表达式的值表达式相当于值2>303>2>1(3>2)>10a>b2>70a+b>c-d2+7>4-11(a=7)<=(b=5)(2=7)<=(7=5)0逻辑运算C语言中的逻辑运算符有三种,见表1)逻辑非!的优先级最高,逻辑与&&次之,逻辑或||优先级最低。2)逻辑运算符和其他运算符优先级从低到高依次为:赋值运算符、逻辑或、逻辑与、关系运算符、算术运算符、逻辑非例如:a>b&&c>d等价于(a>b)&&(c>d)
a+!b||c<a等价于(a+(!b))||(d<a)
C语言中逻辑运算符的优先级逻辑运算
用逻辑运算符连接的表达式叫逻辑表达式,逻辑表达式运算的结果也只有“真”和“假”,“真”对应的值为1,“假”对应的值为0。需要说明的是,在逻辑表达式中非0即为真。1)逻辑与运算(&&),参与运算的两个表达式均为真时,结果才为真,否则为假。例如:3&&0,3为真,0为假,运算的结果为假,值为0。(7>0)&&(4>3),7>0的结果为真,4>3结果也为真,故运算的结果为真,值为1。2)逻辑或运算(||),参与运算的两个表达式均为假时,结果才为假,否则为真。例如:7||0,7为真,0为假,运算的结果为真,值为1。(5>0)||(5>7),5>0的结果为真,5>7的结果为假,故运算的结果为真,值为1。3)非运算(!),参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。例如:!0,0为假,非运算的结果为真,也就是1。!(7>0),7>0的结果是1,为真,非运算的结果为假,也就是0。
C语言中的逻辑表达式和逻辑表达式的值逻辑运算小贴士:逻辑运算中存在的“短路”现象:1)在使用“&&”运算符时,如果“&&”运算符左边的值为假,则右边的表达式就不再进行运算,整个表达式的结果为假。2)在使用“||”运算符时,如果“||”运算符左边的值为真,则右边的表达式就不再进行运算,整个表达式的结果为真。实例体验:首先,判断表达式中各优先级的先后次序:逻辑非(!)>算术运算符>关系运算符>逻辑与(&&),由逻辑与优先级最低得出:(a+b>c)&&(x+y<!b)。其次,根据算术运算符优先于关系运算符得出:((a+b)>c)&&((x+y)<!b)。最后,由于逻辑非(!)在该表达式的优先级最后,可以得出:((a+b)>c)&&((x+y)<(!b))。因此,a+b>c&&x+y<!b等价于((a+b)>c)&&((x+y)<(!b))。例4-1
根据运算符的优先级写出表达式a+b>c&&x+y<!b
的等价式。实例体验:#include<stdio.h>main(){inta=0,b=10,c=-6;intm=a&&b,n=c||0;printf("%d,%d\n",m,!c);printf("%d,%d\n",9&&0,n);}例4-2
分析以下程序,输出逻辑运算的结果:运行结果:实例体验:问题描述:台儿庄古城作为枣庄市台儿庄区的知名旅游景点,为保障游客游览体验与安全,需对古城内游客流量实施管控。具体流量控制标准如下:当游客数量≤3000人时,判定为流量正常,无需采取干预措施。当游客数量>3000人且≤5000人时,判定为流量较大,需启动疏导广播,提醒游客注意安全并合理规划游览路线。当游客数量>5000人时,判定为流量过载,需立即执行限流措施,暂停游客进入古城,并增派安保人员开展现场疏导工作。例4-3编程解决台儿庄古城游客流量控制与安全疏导问题。实例体验:分析:本例使用关系运算符和逻辑运算符对当前游客数量进行判断,然后根据判断的结果输出不同的内容。用图4-1所示流程图表示该题设计思路。实例体验:#include<stdio.h>main(){inttourist_count;//提示用户输入游客数量printf("请输入当前台儿庄古城内的游客数量:");scanf("%d",&tourist_count);//判断游客流量状态if(tourist_count<=3000){printf("游客流量正常,无需采取措施。请继续关注游客流量变化,保障游客在台儿庄古城的安全与舒适。");}elseif(tourist_count>3000&&tourist_count<=5000){printf("游客流量较大,已开启疏导广播。提醒游客注意安全并合理安排游览路线,共同维护台儿庄古城的秩序与环境。");}else{printf("游客流量过载,已采取限流措施,暂停游客入城。同时增加安保人员进行现场疏导,确保游客在台儿庄古城的安全与秩序。");}}4.2条件语句——if语句学习单分支、双分支和多分支if语句的使用if语句基本形式if(表达式)
语句块;执行过程if语句的执行过程如图
所示。首先对“表达式”进行求值,如果表达式的值为真,则执行其后的语句块,否则直接跳过。核心特点只有一个分支,满足条件执行,不满足跳过,逻辑简单直接。
分支结构也称为选择结构,是程序根据所列条件是否满足来选择执行路径,C语言中有三种分支结构形式,分别是:单分支、双分支、多分支。而if语句是C语言中用来实现分支结构的最基本的语句,if语句的基本形式有单分支结构的if语句和双分支结构的if…else语句,if语句还可以嵌套使用。if语句
1)
表达式可以为任何类型的表达式,常用的是关系表达式和逻辑表达式。例如:
算术表达式3+7,值为10,结果为真。关系表达式a>7,对a的值进行判定。赋值表达式a=0,值为0,结果为假。赋值表达式a=7,值为7,结果为真。2)
语句块可以是一条简单的语句,也可以是用花括号括起来的几条语句(即复合语句)。例如:if(a>0) a=a+1;if(a>b){ a=a+1;
b=b+1;}注意事项:if-else语句基本形式if(表达式)
语句块1//条件为真时执行else
语句块2//条件为假时执行核心特点包含两个分支,根据表达式值的真假,选择执行其中一个分支。两者必选其一,且只选其一,实现“二选一”的逻辑控制。执行流程:计算表达式->真(执行语句块1)/假(执行语句块2)->结束注意:对表达式和语句块的说明与if语句的相同。if语句嵌套一般形式if(表达式1)语句块1elseif(表达式2)语句块2elseif(表达式3)
语句块2else
语句块4
执行流程关键注意事项依次判断表达式的值,当出现某个值为真时,则执行其对应的语句块,然后跳到整个if
语句之外继续执行程序。如果所有的表达式均为假,则执行语句块4,然后继续执行后续程序。自上而下依次判断,一旦条件为真,执行对应语句块并跳出结构。所有条件均为假时,才会执行最后的else块。核心特点配对规则:else总是与最近的未配对if结合。代码可读性:务必使用缩进明确层级,避免逻辑错误。if语句的嵌套执行流程可视化实战:成绩等级判断intscore=85;//假设输入85分if(score>=90){printf("A");}elseif(score>=80){printf("B");}elseif(score>=70){printf("C");}elseif(score>=60){printf("D");}else{printf("E");}//输出结果:B条件表达式(三目运算符)核心语法与执行逻辑表达式1?表达式2:表达式3;计算“表达式1”,若为真(非0),执行“表达式2”若为假(0),则执行“表达式3”特点:简洁紧凑,适合简单的二选一赋值等价的if-else语句if(表达式1){表达式2;}else{表达式3;}实战:求两个数的最大值#include<stdio.h>intmain(){inta=10,b=20,max;//三目运算符写法(简洁)max=(a>b)?a:b;printf("最大值:%d\n",max);//输出20//等价的if-else写法if(a>b){max=a;}else{max=b;}return0;}实例体验:if语句书写的程序如下:#include<stdio.h>main(){inta,b,max;printf("输入两个整数:");scanf("%d%d",&a,&b);max=b;if(a>b)max=a;printf("%d和%d的较大值是:%d\n",a,b,max);}例4-4输入两个整数,输出其中的大数,用if语句和if…else语句书写程序。if…else语句书写的程序如下:#include<stdio.h>main(){inta,b,max;printf("输入两个整数:");scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf("%d和%d的较大值是:%d\n",a,b,max);}实例体验:例4-5有一个函数编写程序,输入x,输出y值。程序代码:#include<stdio.h>main(){intx,y;printf("请输入一个x的值:");scanf("%d",&x);if(x==1)y=2*x;elseif(x>1)y=x+1;elsey=3*x-4;printf("x=%d,y=%d",x,y);}实例体验:问题描述:台儿庄古城是枣庄市台儿庄区的一处著名旅游景点,根据游客的年龄、门票类型等不同因素,门票价格会有所不同。台儿庄古城门票定价方案如下:1.儿童(年龄<12岁):30元/人。2.学生(12岁≤年龄≤18岁):60元/人。3.成人(年龄>18岁):90元/人。4.台儿庄区本地居民(身份证号以370405开头)凭有效证件享受半价优惠。请编写程序实现:接收用户输入的年龄和本地居民标识(y/n),按上述规则计算并输出应付门票价格。例4-6台儿庄古城门票价格计算。实例体验:分析:本题先提示用户输入年龄和是否为本地居民,然后使用if语句根据年龄判断门票类型,并设置对应的初始价格,再使用if语句判断是否为本地居民,如果是,则将门票价格减半,最后输出计算后的门票价格即可。用图4-6所示流程图表示该题设计思路。实例体验:程序代码:#include<stdio.h>main(){intage;charlocal;intticket_price=0;printf("请输入您的年龄:");//提示用户输入年龄scanf("%d",&age);printf("您是台儿庄区本地居民吗?(y/n):");//提示用户是否为本地居民scanf("%c",&local);//前面加空格是为了跳过可能的换行符或空格//判断年龄并计算门票价格if(age<12){
ticket_price=30;}elseif(age>=12&&age<=18){ticket_price=60;}else{ticket_price=90;}//判断是否为本地居民并应用优惠if(local=='y'){ticket_price/=2;}//输出最终门票价格printf("您的门票价格为:%d元\n",ticket_price);}4.3多分支语句——switch学习switch语句的语法和使用场景switch语句的语法一般形式switch(表达式){
case常量表达式1:语句块1;[break;]
case常量表达式2:语句块2;[break;]
case常量表达式n:语句块n;[break;]
[default:语句(n+1)]
[break;]}switch
关键字定义分支结构的开始,其后括号内为待判断的表达式。case关键字标记分支入口,后接常量表达式。若匹配则执行后续语句。break关键字跳出switch结构。若无此语句,程序会继续执行后续case。default关键字可选的默认分支,当所有case都不匹配时执行此部分。
在C语言中,if语句只有两个分支,而实际问题中常需要用到多分支选择,可以用if语句进行嵌套,但往往嵌套的层数多,会导致程序冗长且可读性降低。所以,C语言还提供了一种多分支结构—switch语句,它可以根据控制表达式的值,把程序跳转到多个语句中的一个去执行。switch语句的语法一般形式switch(表达式){
case常量表达式1:语句块1;[break;]
case常量表达式2:语句块2;[break;]
case常量表达式n:语句块n;[break;]
[default:语句(n+1)]
[break;]}switch
关键字定义分支结构的开始,其后括号内为待判断的表达式。case关键字标记分支入口,后接常量表达式。若匹配则执行后续语句。break关键字跳出switch结构。若无此语句,程序会继续执行后续case。default关键字可选的默认分支,当所有case都不匹配时执行此部分。
在C语言中,if语句只有两个分支,而实际问题中常需要用到多分支选择,可以用if语句进行嵌套,但往往嵌套的层数多,会导致程序冗长且可读性降低。所以,C语言还提供了一种多分支结构—switch语句,它可以根据控制表达式的值,把程序跳转到多个语句中的一个去执行。switch语句的语法switch后面括号内的“表达式”,其值可以是整型、字符型、枚举型数据;case后面的常量表达式值只能是常量,相当于一个语句标号,并不是在该处进行条件判断,表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch语句,继续执行所有后面case语句的情况。语句部分允许有多个语句,可以不用{}括起来。首先计算表达式的值,并逐个与case后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同,则执行default后的语句。C语言还提供了一种break语句,专用于跳出switch语句。在switch语句结构中break语句起的作用很重要,当程序执行break语句后,它可以使程序流程跳出switch结构,转而执行switch结构后面的第一条语句。switch语句的执行过程注意:switch语句的使用注意事项1)每个case的常量表达式的值必须互不相同,否则会相互矛盾。2)执行完一个case后面的语句后,流程控制会转移到下一个case继续执行,遇到break语句会跳出switch语句,否则执行完整个switch语句。3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4)default子句可以省略不用。小贴士实例体验:问题描述:台儿庄古城始终践行环保理念,为强化大家的环保意识与责任担当,特编写“垃圾分类小助手”程序。垃圾类型划分如下:1—可回收物;2—有害垃圾;3—厨余垃圾;4—其他垃圾。程序将根据用户输入的垃圾类型数字,给出对应的处理建议。例4-7编程解决台儿庄古城垃圾分类问题。分析:本题先输出内容提示用户选择输入垃圾类型:提示用户输入垃圾类型(1—可回收物;2—有害垃圾;3—厨余垃圾;4—其他垃圾),然后判断垃圾类型:使用switch语句对垃圾类型进行判断,并输出相应的处理建议,最后程序结束输出结果即可。实例体验:程序代码:#include<stdio.h>main(){intgarbageType;printf("欢迎使用台儿庄古城垃圾分类小助手!\n");printf("请输入垃圾的类型(1—可回收物;2—有害垃圾;3—厨余垃圾;4—其他垃圾):");scanf("%d",&garbageType);switch(garbageType){case1:printf("您输入的是可回收物,建议进行回收再利用,为环保出一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年凤阳县带编教师招聘笔试模拟试题及答案解析
- 2026年台前县带编教师招聘考试模拟试题及答案解析
- 2026年突泉县带编教师招聘笔试参考题库及答案解析
- 2026年元阳县带编教师招聘笔试模拟试题及答案解析
- 2026年高中教师资格证综合素质(中学)模拟考试题
- 2026年德保县带编教师招聘笔试参考题库及答案解析
- 2026年大埔县带编教师招聘考试参考题库及答案解析
- 2026年武定县带编教师招聘考试备考试题及答案解析
- 2026年呼玛县带编教师招聘笔试参考题库及答案解析
- 2026年永靖县带编教师招聘考试备考题库及答案解析
- 中华护理学会心血管专科进修汇报
- 呼吸训练与有效咳嗽排痰技术要点
- GB/T 19348.2-2025无损检测工业射线照相胶片第2部分:用参考值方法控制胶片处理
- 2025年烘焙技术知识培训考试题库与答案
- (正确)新入场人员一级安全教育考试试卷(含答案)
- 美容仪器应用第二版讲解
- DB31∕T 360-2020 住宅物业管理服务规范
- 装饰装修工程劳务分包合同
- 《求解器基础》课件
- JGJ196-2010 建筑施工塔式起重机安装、使用、拆卸安全技术规程
- 20G520-1-2钢吊车梁(6m-9m)2020年合订本
评论
0/150
提交评论