




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章选择程序设计If语句switch语句逻辑运算符和逻辑表达式关系运算符和关系表达式条件运算符和条件表达式难点:If语句嵌套switch语句关系运算符和表达式关系运算符种类:<<===>=>!=关系表达式的值:是逻辑值“真”或“假”,用1和0表示<>5>3值为真15<=3值为假0‘5’==5值为假05!=3值为真1例应避免对实数作相等或不等的判断如1.0/3.0*3.0==1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)<1e-60关系运算注意:关系运算注意:<>例5>2>7>8在C中是允许的,值为0例inti=1,j=7,a;a=i+(j%4!=0);
则a=2算术运算3,4级赋值运算符14逗号运算符15(最低)关系运算符的优化级<<=>>===!=优先级6(高)优先级7(低)结合方向:自左向右优先级别(见课本287页附录)5>2>7>8(从左向右结合)例:a+b>c/d//(a+b)>(c/d)‘a’+1<c//(‘a’+1)<c-i-5*j==k+1a>b==c//(a>b)==cx=a!=c==d//x=((a!=c)==d)左结合#include<stdio.h>main(){ charc='k'; inti=1,j=2,k=3; floatx=3e+5,y=0.85; printf("%d,%d\n",'a'+5<c,-i-2*j>=k+1); printf("%d,%d\n",1<j<5,x-5.25<=x+y); printf("%d,%d\n",i+j+k==-2*j,k==j==i+5);}1,01,10,0ab!a!ba&&ba||b真假真假假假真真逻辑运算符和表达式逻辑运算符种类:!&&||逻辑运算真值表C语言中,运算量:0表示“假”,非0表示“真”,
运算结果:0表示“假”,1表示“真”,<>真假假假假假真真假假真真真假真真优先级和结合方向结合方向:&&||左结合!右结合!(非)算术运算符关系运算符&&和||赋值运算符高低优先级和结合方向例a<=x&&x<=b
a>b&&x>ya==b||x==y!a||a>b//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)例a=4;b=5;!aa&&ba||b!a||b4&&0||25>3&&2||8<4-!0‘c’&&‘d’值为1值为0值为1值为1值为1值为1//(5>3)&&2||(8<(4-(!0)))值为1如何正确表示0.5<x<2.0x>0.5&&x<2.0短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符<>例a&&b&&c//只在a为真时,才判别b的值;只在a、b都为真时,才判别c的值例a||b||c//只在a为假时,才判别b的值;只在a、b都为假时,才判别c的值例a=1;b=2;c=3;d=4;m=1;n=1;(m=a>b)&&(n=c>d)//结果m=0,n=1
优先级1级()[]->.2级!~++--+-**(类型名)sizeof3级*/%4级+-5级<<>>6级<><=>=7级==!=8级&按位与9级^按位异或|按位或11&&逻辑与12||逻辑或13?:条件运算符14=+=-=*=/=%=&=^=|=<<=>>=15,逗号运算符初等运算符单目运算符算术运算符先乘除后加减关系运算符位运算符逻辑运算符(不含!)移位位运算符#include<stdio.h>main(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d,\n",x||(i=5)&&j-3,i<j&&x<y);printf("%d,%d,\n",i==5&&c&&(j=8),x+y||i+j+k);}0,01,00,1If语句switch语句if语句1.1if语句的三种形式形式一(单分支if语句)格式:if(expression)statement执行过程:exprstatement非0=0例:if(x>y)printf(“%d”,x);exprstatement1statement2非0=0形式二:(双分支)格式:if(expression)statement1elsestatement2执行过程:例:if(x>0)y=sqrt(x);elsey=x;#include<stdio.h>#include<math.h>voidmain(){ floatx,y; printf("inputoneuumber:"); scanf("%f",&x); y=x;
if(x>0)y=sqrt(x); printf("y=%f",y);}形式三:格式:if(expr1)statement1elseif(expr2)statement2elseif(expr3)statement3…...[elsestatementn]expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0执行过程:
例:if(salary>1000)index=0.4;elseif(salary>800)index=0.3;elseif(salary>600)index=0.2;elseif(salary>400)index=0.1;elseindex=0;如:if(a==b&&x==y)printf(“a=b,x=y”);if(3)printf(“OK”);if(‘a’)printf(“%d”,’a’);说明:if后面的表达式类型任意语句可以是复合语句
if(x)if(x!=0)
if(!x)
if(x==0)例考虑下面程序的输出结果:#include<stdio.h>main(){intx,y;scanf(“%d,%d”,&x,&y);if(x>y)x=y;y++;elsex++;y++;printf(“%d,%d\n”,x,y);}CompileError!例4.4三个数由小到大顺序输出#include<stdio.h>main(){floata,b,c,t;scanf("%f%f%f",&a,&b,&c);if(a>b) {t=a;a=b;b=t;}/*对换a和b的值*/if(a>c) {t=a;a=c;c=t;}if(b>c) {t=b;b=c;c=t;}printf("%5.2f,%5.2f,%5.2f\n",a,b,c);}#include<stdio.h>main(){inta,b;printf("Enterintegera:");scanf("%d",&a);printf("Enterintegerb:");scanf("%d",&b);if(a==b)printf("a==b\n");
elseprintf("a!=b\n");}例输入两个数并判断两数相等否运行:Enterintegera:12
Enterintegerb:12a==b运行:Enterintegera:12
Enterintegerb:9a!=b#include<stdio.h>main(){charc;printf("Enteracharacter:");c=getchar();
if(c<0x20)printf("Thecharacterisacontrolcharacter\n");
elseif(c>='0'&&c<='9')printf("Thecharacterisadigit\n");
elseif(c>='A'&&c<='Z')printf("Thecharacterisacapitalletter\n");
elseif(c>='a'&&c<='z')printf("Thecharacterisalowerletter\n");
elseprintf("Thecharacterisothercharacter\n");}例4.5判断输入字符种类运行:Enteracharacter:
Thecharacterisacontrolcharacter运行:Enteracharacter:8Thecharacterisadigit运行:Enteracharacter:DThecharacterisacapitalletter运行:Enteracharacter:hThecharacterisalowerletter运行:Enteracharacter:F1Thecharacterisothercharacter1.2if语句嵌套:一般形式:if(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1)if(expr2)statement1elsestatement3
内嵌ifif(expr1)statement1elseif(expr3)statement3elsestatement4内嵌if例输入两数并判断其大小关系#include<stdio.h>main(){intx,y;printf("Enterintegerx,y:");scanf("%d,%d",&x,&y);
if(x!=y)if(x>y)printf("X>Y\n");elseprintf("X<Y\n");
elseprintf("X==Y\n");}运行:Enterintegerx,y:12,23X<Y
Enterintegerx,y:12,6X>YEnterintegerx,y:12,12X==Yif~else配对原则:缺省{}时,else总是和它上面离它最近的未配对的if配对if(……)if(……)if(……)else…...else…...else…...if(expr1){if(expr2)statement1}elsestatement3
内嵌if例:if(a==b)
if(b==c)printf(“a==b==c”);
elseprintf(“a!=b”);修改:if(a==b){if(b==c)printf(“a==b==c”);}elseprintf(“a!=b”);实现if~else正确配对方法:加{}例考虑下面程序输出结果:main(){intx=100,a=10,b=20;intv1=5,v2=0;if(a<b)if(b!=15)if(!v1)x=1;elseif(v2)x=10;x=-1;printf(“%d”,x);}结果:-1条件运算符:max=(a>b)?a:b; if(a>b) max=a; else max=b;
结合方向:自右向左
如a>b?a:c>d?c:d
a>b?a:(c>d?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型条件运算符可嵌套
如x>0?1:(x<0?-1:0)优先级:13条件运算符与表达式一般形式:expr1?expr2:expr3执行过程功能:相当于条件语句,但不能取代一般if语句例if(a>b)printf(“%d”,a);elseprintf(“%d”,b);printf(“%d”,a>b?a:b);例求a+|b|printf(“a+|b|=%d\n”,b>0?a+b:a-b);expr1取expr2值取expr3值非0=0<>例x?‘a’:‘b’//x=0,表达式值为‘b’;x‡0,表达式值为‘a’x>y?1:1.5//x>y,值为1.0;x<y,值为1.52.switch语句(开关分支语句)一般形式:switch(表达式){caseE1:
语句组1;break;caseE2:
语句组2;break;…….caseEn:
语句组n;break;[default:
语句组;break;]}执行过程:switch表达式语句组1语句组2语句组n语句组…...E1E2Endefaultcase说明:E1,E2,…En是常量表达式,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加{}switch可嵌套多个case可共用一组执行语句如:……case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;……..例4.7
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”);}运行结果:a为5时,输出:FridaySaturdaySundayerror例4.8
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”);}运行结果:a为5时,输出:Friday例voidmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf(“\na=%d,b=%d”,a,b);}运行结果:a=2,b=1例4.9闰年问题if(year%4==0&&year%100!=0||year%400==0)printf(“YES”);elseprintf(“NO”);
例4.10输入一个不多于4位的正整数,求出该数是几位数,并逆序打印出各位数字。#include<stdio.h>main(){intx,a,b,c,d;scanf(“%d”,&x);a1=x%10;//分解个位a2=x/10%10;//分解十位a3=x/100%10;//分解百位a4=x/1000%10;
//分解千位
if(a4!=0)printf(“4:%d%d%d%d\n”,a1,a2,a3,a4);elseif(a3!=0)printf(“3:%d%d%d\n”,a1,a2,a3);elseif(a2!=0)printf(“2:%d%d\n”,a1,a2);elseprintf(“1:%d\n”,a1);}输入:562输出:3:265profit<=1000,没有提成;1000<profit<=2000,提成10%;2000<profit<=5000,提成15%;5000<profit<=10000,提成20%;
10000<profit,提成25%;0,11,22,3,4,55,6,7,8,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年汽车维修工专业知识测试试题及答案
- 2025年特种铜合金材料项目合作计划书
- 2025年ZRO2陶瓷磨介项目合作计划书
- 小自考汉语言文学课外拓展实践试题及答案
- 小自考汉语言文学重点考题预判及试题答案
- 广东省汕头市潮阳区2024-2025学年高一上学期期末教学质量监测生物试题2
- 2024年食品质检员适应性训练试题及答案
- 2025年小学语文学习资源试题及答案
- 计算机基础考试学习的阶段性回顾试题及答案
- 2024-2025项目部管理人员安全培训考试试题ab卷
- 高支模巡视检查记录
- 2022-2023学年北京市海淀区高二下学期期中练习数学试题【含答案】
- 标准-美国DS-160中文表格-1
- 设计成果确认单
- GA/T 1163-2014人类DNA荧光标记STR分型结果的分析及应用
- 骨转移瘤课件
- 护士注册健康体检表下载【可直接打印版本】
- 核心素养视角下教师专业发展课件
- 污水处理培训课件
- 初中语文八年级下册第三单元综合性学习古诗苑漫步-综合性学习《古诗苑漫步》教案
- 高中英语各种教材词组汇总大全(超级实用)
评论
0/150
提交评论