版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章分支结构程序设计4.1
关系、逻辑运算符和表达式4.2if语句4.3switch语句4.4分支结构程序设计示例本章主要内容4.1
关系、逻辑运算符和表达式
4.1.1关系运算符和关系表达式1.关系运算符C语言提供了6种关系运算符,都是双目运算符:>、<、>=、<=、==、!= 2.优先级和结合方向左结合(>、<、>=、<=)优先级高于(==、!=)3.关系表达式4.1
关系、逻辑运算符和表达式3.关系表达式格式:表达式1关系运算符表达式2关系表达式的值:逻辑值“真”(1)或“假”(0)。【例4-1】若有变量定义:inta=1,b=2,c=3,d=4;则下列关系表达式分别为多少:a>b
其值为“假”,表达式的值为0。a+b>=c
其值是“真”,表达式的值为1。d=a+b
所有的“非0”值均看做“真”,该表达式的值为1。4.1
关系、逻辑运算符和表达式
4.1.2逻辑运算符和逻辑表达式1.逻辑运算符(三个)&& (逻辑与),双目运算符||(逻辑或),双目运算符!(逻辑非),单目运算符
逻辑运算真值表ab!a!ba&&ba||b0011000110011001011100114.1
关系、逻辑运算符和表达式
4.1.2逻辑运算符和逻辑表达式1.逻辑运算符(三个)&& (逻辑与),||(逻辑或),!(逻辑非)
&&和||是双目运算符,它要求有两个操作数,而“!”是单目运算符,只要求有一个操作数,例如有两个表达式a和b:a||b的运算结果为:当a和b其中一个为“真”时,其结果为“真”,只有二者均为“假”时,结果才为“假”。!a的运算结果为:当a为“真”时,其结果为“假”,否则为“真”。4.1
关系、逻辑运算符和表达式逻辑运算真值表
ab!a!ba&&ba||b0011000110011001011100114.1
关系、逻辑运算符和表达式2.优先级和结合方向逻辑运算符的优先级由高到低依次为:!→&&→||3.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子称为逻辑表达式。如:
a&&b,a||b,(x>0)&&(y>0),!a逻辑表达式的值只有两种(“真”或“假”),分别用1和0表示。4.1
关系、逻辑运算符和表达式【例4-2】写出判断是否是闰年的表达式。分析:闰年的年份条件是符合下面二者之一:(1)年号能被4整除,但不能被100整除。(2)年号能被400整除。这两个条件是逻辑或的关系,如果用year表示年号,判断闰年的表达式可表示为:(year%4==0&&year%100!=0)||(year%400==0)4.2if语句
4.2.1单分支if语句格式:if(表达式)语句;流程图如下:用法:当表达式为真时,执行语句,否则,跳过该语句,执行if语句的后续语句。注意:语句可以是用{}括起来的复合语句。成立语句表达式不成立4.2if语句【例4-3】输入一个字符,判断它是否为字母。如果是,则输出字符,否则不输出。#include<stdio.h>intmain(){charch;printf("输入一个字符:");scanf("%c",&ch);if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')printf("%c\n",ch);return0;4.2if语句【例4-4】输入2个整数,输出其中的最大值。分析:程序中需要比较两次a和b的值,第一次判断a>=b是否为真,如果为真,输出a,第二次判断a<b是否为真,如果为真,则输出b。#include<stdio.h>intmain(){inta,b;printf("输入2个整数:");scanf("%d%d",&a,&b);if(a>=b)
printf(“最大值为%d”,a);
/*当a>=b时,输出a*/if(a<b)printf(“最大值为%d”,b); /*当a<b时,输出b*/return0;}4.2if语句
4.2.2双分支if语句格式:
流程图:用法:当表达式为真时,执行语句1,否则,执行语句2。【例4-5】输入两个整数,输出最大值。分析:可以将上例中的两个单分支if语句就可以修改为一个双分支语句。if(表达式)语句1;else语句2;语句1语句2表达式成立不成立4.2if语句程序如下:#include<stdio.h>intmain(){inta,b,m;printf("输入两个整数:");scanf("%d%d",&a,&b);if(a>b)m=a;elsem=b;printf("最大值为:%d\n",m);return0;}4.2if语句
4.2.3多分支if语句格式:
流程图:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…elseif(表达式n)语句n;else语句n+1;
语句n语句2语句1语句n+1真真真假假假
表达式2表达式1表达式n4.2if语句用法:依次判断表达式的值,如果其中一个表达式的值非0,则执行相应的语句,然后跳出整个if语句继续执行后续语句。如果所有的表达式都为0,则执行语句n+1,然后执行后续语句。【例4-6】编写程序求如下分段函数的值。要求:根据输入的x值,输出y的值。4.2if语句程序如下:#include<stdio.h>intmain(){floatx;inty;printf("x=");scanf("%f",&x);if(x>0)y=1;elseif(x==0)y=0;elsey=-1;printf("y=%d\n",y);return0;}4.2if语句【例4-7】输入一个百分制成绩,要求输出其对应的五级制的等级,即90分以上为“等级A”,80~89分为“等级B”,70~79分为“等级C”,60~69分为“等级D”,60分以下为“等级E”。程序如下:#include<stdio.h>intmain(){floatscore;printf("请输入一个成绩(0-100):");scanf("%f",&score);if(score>=90)printf("等级A\n");elseif(score>=80)printf("等级B\n");elseif(score>=70)printf("等级C\n");elseif(score>=60)printf("等级D\n");elseprintf("等级E\n");return0;}4.2if语句4.2.4条件运算符和表达式格式:表达式1?表达式2:表达式3
用法:如果表达式1为真(非0),整个条件表达式的值等于表达式2的值,否则,整个条件表达式的值等于表达式3的值。例如:将两个值中的最大值赋值给变量。max=(a>b)?a:b;4.2if语句4.2.4条件运算符和表达式格式:表达式1?表达式2:表达式3
用法:如果表达式1为真(非0),整个条件表达式的值等于表达式2的值,否则,整个条件表达式的值等于表达式3的值。例如:将两个值中的最大值赋值给变量。max=(a>b)?a:b;4.2if语句
4.2.5复合语句复合语句是用一对大括号“{}”括起来的一组语句。在语法上等同于单个语句。例如:{t=a;a=b;b=t;}复合语句的一般形式为:注意:①复合语句中的右大括号“}”后面没有分号;②一个复合语句在语法上等价于单个语句,凡一个语句能够出现的地方都能出现复合语句,换句话说,复合语句在逻辑上是一个语句;③复合语句中说明部分的变量,其作用域只限于该复合语句内部,在复合语句外不存在;④在if子句和else子句以及while、for的循环体中若需要多个语句,必须写成复合语句的形式。{说明部分;语句部分;}4.3switch语句4.3.1switch语句switch语句又被成为开关语句。其一般格式为:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;……case常量表达式n:语句n;default:语句n+1;}4.3switch语句4.3.1switch语句switch语句的执行过程为:先计算switch表达式的值,然后将该值与各case后面的常量表达式的值进行比较。当其值与某一常量表达式的值相同时,就从该case后面的语句开始执行,直到switch语句结束时为止;若其值与所有的常量表达式的值都不相同,就执行default后面的语句,若不存在default,则程序继续执行switch语句之后的语句。注意:如果希望程序只执行与表达式相匹配的case,而其他不执行,则需要使用break语句。4.3switch语句switch语句使用时的注意事项:(1)switch的语句体由多个case和一个(可以没有)default组成,各个case和default的出现次序不影响执行结果。(2)case后面的常量表达式是值为常数的表达式,通常为常量或符号常量。类型必须和switch表达式的类型相同。(3)switch语句中的所有case常量表达式的值必须各不相同。(4)如果希望程序只执行与表达式相匹配的case,而其他不执行,则需要使用break语句。break语句的作用是,使程序的执行跳出switch语句,转去执行switch语句后面的语句。4.3switch语句【例4-8】运行下列程序,熟悉switch的用法。#include<stdio.h>intmain(){inti;
printf("输入一个整数(1、0、-1):");scanf("%d",&i);switch(i){case-1:
printf("该数为负数!\n");break;case0:printf("该数为零!\n");break;case1:
printf("该数为正数!\n!");break;default:
printf("输入错误!\n");
}
return0;}4.3switch语句【例4-9】中国有句俗话“三天打鱼两天晒网”,假设某人从某天开始“前三天打鱼,后两天晒网”,问这个人在以后的第n天,是在“打渔”还是“晒网”,编写程序要求输入一个大于0的正数,输出这个人的状态。分析:假设输入一个正数n,根据题目描述,根据n%5的值可以判断出这个人到底处于“打渔”还是“晒网”的状态。当n%5的值为1,2,3时为“打渔”,当n%5时为“晒网”。程序如下:#include<stdio.h>intmain(){
intn;
scanf("%d",&n);
if(n<=0)
printf("输入错误!\n");
else
switch(n%5)
{
case1:
case2:
case3:printf("此人在打渔!\n");break;
case4:
case0:printf("此人在晒网!\n");break;
}
return0;}4.3switch语句4.3.2switch语句和多分支if语句在解决多分支选择问题时,用switch语句或者用多分支if语句通常是没有严格规定的。如果选择是基于求实型变量或表达式的值,就不能使用switch语句。如果变量必须落入某个范围,也不能很方便地使用switch语句。但在可以使用switch的情况下,程序通常运行得更快一些,结构也比较清晰,而且占据较少代码。4.4分支结构程序设计示例【例4-10】小和尚要用水桶为水缸挑水,水桶为x升,水缸为v升,请问小和尚至少需要挑几桶水才能把水缸倒满。编程实现输入水桶和水缸的容量(x和v均为大于0的整数),输出小和尚挑水的次数。分析:根据x和v的值,结果存在两种情况,一种是v正好是x的倍数,那么挑水的次数为v/x,如果v不是x的倍数,就要挑v/x+1次才能把水缸倒满。程序如下:#include<stdio.h>intmain(){
intv,x,n;
printf("请输入水缸和水桶的容量(升):");
scanf("%d%d",&v,&x);
if(v%x==0)
n=v/x;
else
n=v/x+1;
printf("小和尚至少需要挑%d桶水",n);
return0;
}4.4分支结构程序设计示例【例4-11】计算字母的序号。输入一个英文字母ch(大写或小写),输出该字母在字母表中的序号。如输入’b’,输出数字2。分析:键盘输入时,可能有三种输入情况:大写字母、小写字母或其他字符,因此这是一个多分支结构,可以使用if语句嵌套来实现,若ch是大写字母,ch在字母表中的序号则为ch-’A’+1。程序如下:#include<stdio.h>intmain(){charch;intn;floatscore;printf("请输入字符:");ch=getchar();if(ch>='A'&&ch<='Z') printf("该字母在第%d位\n",ch-'A'+1);
/*计算大写字母在字母表中的序号*/
elseif(ch>='a'&&ch<='z') printf("该字母在第%d位\n",ch-'a'+1);
/*计算小写字母在字母表中的序号*/else printf("输入错误!\n");return0;}4.4分支结构程序设计示例【例4-12】输入年、月、日三个整数,判断这个日期为该年度的第几天。分析:以2024年8月29日为例,要判断这一天是2024年的第几天,需要将前7个月的天数求和,再加29。所以,switch(m-
温馨提示
- 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年卓资县带编教师招聘考试模拟试题及答案解析
- T/CIE 185-2023光时延测量通用规范
- 中国银行2025信息科技岗笔试题及答案内蒙古地区
- 淝水之战课件
- 【新教材核心素养】苏教版生物八年级上册5.12.2《消化和吸收》第1课时(教学设计)
- 中药外敷技术操作规范
- 校园贷款案例讲解
- 矿山机械 安全技术规范
- 护士人文修养(第4版)课件 第四章 护士的美学修养
- 口腔根尖片的判读
- 大件设备仓储管理制度
- 油气输送管道穿越工程施工规范
评论
0/150
提交评论