版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2023/12/61复习关系运算符if语句分支结构程序设计思想2023/12/62逻辑判断关系运算符和关系表达式> 大于< 小于>= 大于等于<=小于等于== 等于!= 不等于2023/12/63关系判断#include<stdio.h>main(){ intb,c; //整型变量 b=3;c=2; //对变量赋值 printf(“3>2是%d\n”,(b>c));//输出逻辑值 printf(“3>=2是%d\n”,(b>=c)); printf(“3==2是%d\n”,(b==c)); printf(“3<2是%d\n”,(b<c)); printf(“3!=2是%d\n”,(b!=c));}2023/12/64
if(表达式)语句;
其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。如:
if(c<min)min=c;
单分支——选择结构的一种常用形式2023/12/65格式:if(条件)语句1;else语句2;
双分支——选择结构的一种最常用形式工作过程图
:条件2023/12/66本节内容逻辑运算符if语句应用举例switch语句及应用2023/12/67鸡兔同笼已知鸡和兔的总数为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目,若无解,则输出Noanswer!逻辑运算符2023/12/68#include<stdio.h>main(){intchick,rabbit,n,m;scanf(“%d%d”,&n,&m);chick=(4*n-m)/2;rabbit=n-chick;
if(m%2==1||a<0||b<0)printf(“Noanswer!\n”);else
printf(“chicks:%d;rabbits:%d\n”,chick,rabbit);
}
必须保证chick和rabbit都是非负整数!2023/12/69分析:1、先根据输入的三边长,判断能否构成三角形,若能,则转步骤2;若不能,则转步骤3;2、使用海伦公式求三角形面积3、输出提示:该三角形不存在。输入三角形的三边长,求三角形面积。2023/12/610#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);
printf(“a=%7.2f,b=%7.2f,c=%7.2f\n”,a,b,c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%7.2f\n”,area);}if((a+b>c)&&(b+c>a)&&(a+c>b))elseprintf(“不能构成三角形!\n”);2023/12/611逻辑运算符与表达式关系表达式只能描述单一条件,例如“x>=0”。如果需要描述“x>=0”、同时“x<10”,就要借助于逻辑表达式了。
2023/12/6121、逻辑运算符极其优先次序C语言中提供了三种逻辑运算符:&&与运算||或运算!非运算逻辑运算符与表达式2023/12/613逻辑与,运算符为&&
如图电路A——表示开关A合上;B——表示开关B合上;A&&B——表示灯亮;
A B A&&B
1 1 1
1 0 0
0 1 0
0 0 01表示真,0表示假,这是逻辑变量的取值,非真即假2023/12/614逻辑或,运算符为||
如图电路A——表示开关A合上;B——表示开关B合上;A||B——表示灯亮;
A B A||B
1 1 1
1 0 1
0 1 1
0 0 01表示真,0表示假逻辑非,运算符为!两队比赛篮球,变量A表示A队到场,!A表示A队不到场,变量B表示B队到场,!B表示B队不到场。这场球赛能够赛成,必须两队都到场。假定“能赛成”用逻辑变量C表示,则
C=A&&B赛不成当然用!C表示,让D=!C,D表示赛不成则
D=!A||!B理解为A不到场或B不到场,球赛均无法进行。2023/12/616
!(非)(高)算术运算符 关系运算符 &&|| 赋值运算符 (低)不使用逻辑运算符可否判断三边长构成三角形?if(a+b>c)if(a+c>b)if(b+c>a){
s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));}if的嵌套【例4-1】写一程序,从键盘上输入某年份year(4位十进制数),判断其是否闰年。闰年的条件是:年份能被4整除、但不能被100整除;或者能被400整除。分析:1、从键盘输入任意一年份,类型为十进制整数2、判断是否是闰年3、给出结论:“是”或“否”继续对第2步进行任务细化2.1、判断该年份数字能否被4整除,并且不能被100整除若能,则是闰年,程序结束,否则进入2.22.2、判断该年份数字能否被400整除,若能,是闰年,程序结束,否则不是闰年,程序结束。程序优化首先将是否闰年的标志leap预置为0(非闰年),这样仅当year为闰年时将leap置为1即可。这种处理两种状态值的方法,对优化算法和提高程序可读性非常有效。利用逻辑运算能描述复杂条件的特点,使用逻辑运算降低if语句的复杂性,使程序更简洁
if((year%4==0&&year%100!=0)||(year%400==0))
………………else………………逻辑表达式的短路计算对于逻辑与运算,例如“a&&b”,若a的逻辑值为“假”,则无须计算b的逻辑值,就可得知表达式“a&&b”的逻辑值为“假”。能被4整除,但是不能被100整除的年份是闰年
(k%4==0)&&(k%100!=0)对于逻辑或运算,例如“a||b”,若a的逻辑值为“真”,则无须计算b的逻辑值,就可得知表达式“a||b”的逻辑值为“真”。因此,对于逻辑表达式,可以进行短路计算,既只计算表达式的部分项。练习设a=3,b=4,c=5,试计算以下表达式的值a+b>c&&b==ca||b+c&&b–c(!(a+b)+c–1)&&(b+c/2)提出问题:从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。若使用if语句如何编程解决?二、switch语句
C语言还提供了另一种用于多分支选择的switch语句,其一般形式为:
switch(表达式){
case常量表达式1:语句1;
case常量表达式2:语句2;…
case常量表达式n:语句n;
[default:语句n+1;]}[例4.2]main(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){ case1:printf(“Monday\n”); case2:printf("Tuesday\n"); case3:printf("Wednesday\n"); case4:printf("Thursday\n"); case5:printf("Friday\n"); case6:printf("Saturday\n"); case7:printf("Sunday\n"); default:printf("error\n");}}swich语句的语义是:计算switch后的括号内的表达式的值;逐个与case后的常量表达式值相比较,
当表达式的值与某个case后的常量表达式的值相等时,即执行其后的语句,然后不再进行与case后常量表达式的比较,继续执行后面所有case常量表达式:后的语句。若表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。main(){inta;printf("inputintegernumber:");scanf("%d",&a);switch(a){ case1:printf(“Monday\n”);break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("error\n");}}[例4.3]从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A;80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60,等级为E。
main()
{intscore,grade;
printf(“Inputascore(0~100):”);
scanf(“%d”,&score);
grade=score/10;//将成绩整除10,转化成switch语句中的case标号switch(grade){case10:case9:printf(“grade=A\n”);breakcase8:printf("grade=B\n");break;case7:printf("grade=C\n");break;case6:printf("grade=D\n");break;case5:case4:case3:case2:case1:case0:printf(“grade=E\n”);break;default:printf(“Thescoreisoutofrange!\n”); }
}
例4-4已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下(计量单位:元):
profit≤1000 没有提成;1000<profit
≤2000 提成10%;2000<profit≤5000 提成15%;5000<profit≤10000 提成20%;10000<profit 提成25%。为使用switch语句,必须将利润profit与提成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、100000)如果将利润profit整除1000,则当:
profit≤1000 对应0、11000<profit≤2000 对应1、22000<profit≤5000 对应2、3、4、55000<profit≤10000 对应5、6、7、8、9、1010000<profit 对应10、11、12、……为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:
profit≤1000 对应01000<profit≤2000 对应12000<profit≤5000 对应2、3、45000<profit≤10000 对应5、6、7、8、910000<profit 对应10、11、12、……main(){longprofit;intgrade;floatcommission,salary=500;printf("Inputprofit:");scanf("%ld",&profit);
grade=(profit–1)/1000;switch(grade){case0:commission=0;break; /*profit≤1000*/case1:commission=profit*0.1;break; /*1000<profit≤2000*/case2:case3:case4:commission=profit*0.15;break; /*2000<profit≤5000*/case5:case6:case7:case8:case9:commission=profit*0.2;break; /*5000<profit≤10000*/default:commission=profit*0.25; /*10000<profit*/}salary+=commission;printf("salary=%.2f\n",salary);}2023/12/632三整数排序输入3个整数,从小到大排序后输出。样例:输入20733
输出72033if语句应用实例2023/12/633三整数排序分析
a,b,c三个数共有6种由大到小排序可能我们用6条if语句实现排序如何?2023/12/634三整数排序
if(a<b&&b<c) printf("%d,%d,%d\n",a,b,c); if(a<c&&c<b) printf("%d,%d,%d\n",a,c,b); if(b<a&&a<c) printf("%d,%d,%d\n",b,a,c); if(b<c&&c<a) printf("%d,%d,%d\n",b,c,a); if(c<a&&a<b) printf("%d,%d,%d\n",c,a,b); if(c<b&&b<a) printf("%d,%d,%d\n",c,b,a);存在问题吗?2023/12/635三整数排序if(a<=b&&b<=c) printf("%d,%d,%d\n",a,b,c); if(a<=c&&c<=b) printf("%d,%d,%d\n",a,c,b); if(b<=a&&a<=c) printf("%d,%d,%d\n",b,a,c); if(b<=c&&c<=a) printf("%d,%d,%d\n",b,c,a); if(c<=a&&a<=b) printf("%d,%d,%d\n",c,a,b); if(c<=b&&b<=a) printf("%d,%d,%d\n",c,b,a);存在问题吗?2023/12/636三整数排序 if(a<=b&&b<=c) printf("%d,%d,%d\n",a,b,c); else if(a<=c&&c<=b) printf("%d,%d,%d\n",a,c,b); else if(b<=a&&a<=c)printf("%d,%d,%d\n",b,a,c); elseif(b<=c&&c<=a)printf("%d,%d,%d\n",b,c,a); else if(c<=a&&a<=b)printf("%d,%d,%d\n",c,a,b); else if(c<=b&&b<=a)printf("%d,%d,%d\n",c,b,a);2023/12/637三整数排序
if(a>b)
{t=a; a=b; b=t; } if(a>c)
{t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%d,%d,%d\n",a,b,c);复合语句2023/12/638三整数排序min=a; if(b<min)
min=b;
if(c<min)
min=c;
max=a; if(b>max)max=b; if(c>max)max=c;
mid=a+b+c-min-max; printf("%d,%d,%d\n",min,mid,max);很有用的技巧哦:求最大值或最小值在使用if语句中应注意的问题:在各种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它任意合法表达式,如赋值表达式等,甚至也可以是一个变量。例如:
if(a=5)语句;if(b)语句;在C中,将非零数认定为“真”,零认定为“假”。
在if语句中,if后的表达式必须用括号括起来,在语句之后必须加分号。在if语句的各种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句;但要注意的是在}之后不能再加分号。例如:if(a>b){a++;b++;}else{a=0;b=10;}
下次上机题目编程,在输入某人的身高(厘米)和体重(公斤)后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年广东理工职业学院单招职业适应性考试备考试题及答案解析
- 2026年齐鲁理工学院单招职业适应性考试备考题库及答案解析
- 2026年江苏商贸职业学院单招职业适应性测试备考试题及答案解析
- 2026年云南交通运输职业学院单招职业适应性考试参考题库及答案解析
- 2026年南京铁道职业技术学院单招职业适应性测试参考题库及答案解析
- 2026年益阳医学高等专科学校单招职业适应性考试参考题库及答案解析
- 2026年荆门职业学院单招职业适应性考试备考试题及答案解析
- 期末演讲稿(集合15篇)
- 期末总结的发言稿
- 2026年河北工业职业技术大学单招职业适应性测试模拟试题及答案解析
- 拆迁劳务合同协议
- 2025年云南省交通投资建设集团有限公司下属港投公司社会招聘51人备考题库完整参考答案详解
- 2025中国融通资产管理集团有限公司招聘(230人)(公共基础知识)测试题附答案解析
- 工作交接表-交接表
- 2025年课件-(已瘦身)2023版马原马克思主义基本原理(2023年版)全套教学课件-新版
- 2025云南省人民检察院招聘22人考试笔试备考题库及答案解析
- 2025国家统计局齐齐哈尔调查队招聘公益性岗位5人笔试考试备考题库及答案解析
- 全膀胱切除课件
- 护理质量改进工具:深入解析PDCA
- 承重载荷管理制度范本(3篇)
- 2025版市政施工员岗位考试题库
评论
0/150
提交评论