版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4 4章章 选择结构选择结构第第4章章 选择结构选择结构4.1 4.1 关系运算符和关系表达式关系运算符和关系表达式4.2 4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.3 if4.3 if语句语句4.4 switch4.4 switch语句语句 第第4章章 选择结构选择结构4.1 4.1 关系运算符和关系表达式关系运算符和关系表达式4.2 4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.3 if4.3 if语句语句4.4 switch4.4 switch语句语句关系运算符和关系表达式关系运算符和关系表达式 所谓所谓“关系运算关系运算”实际上就是实际上就是“比较运算比较运
2、算”,即将两个数据进行比较,判定两个数据是否符即将两个数据进行比较,判定两个数据是否符合给定的关系。合给定的关系。 例如,例如,“a b”中的中的“”是一个关系运算符。是一个关系运算符。 a b是一个关系表达式是一个关系表达式 如果如果a的值是的值是5,b的值是的值是3,则大于关系运算,则大于关系运算“”的结的结果为果为“真真”,即条件成立;,即条件成立; 如果如果a的值是的值是2,b的值是的值是3,则大于关系运算,则大于关系运算“”的结的结果为果为“假假”,即条件不成立。,即条件不成立。 关系表达式的类型是关系表达式的类型是int,其值为,其值为1(“逻辑真逻辑真”)或或0(“逻辑假逻辑假”
3、)。)。关系运算符和关系表达式关系运算符和关系表达式关系运算符及其优先级关系运算符及其优先级 = = =( =(等于等于), !=(), !=(不等于不等于) ) 关系运算符和关系表达式关系运算符和关系表达式u关系运算符的优先级,低于算术运算符,但高关系运算符的优先级,低于算术运算符,但高于赋值运算符。于赋值运算符。 u例如:例如: ca+b ab=c a=bc重要提示重要提示 不要混淆不要混淆“= =”运算符和运算符和“=”运算符!运算符!关系运算符和关系表达式关系运算符和关系表达式 关系表达式关系表达式 使用关系运算符连接起来的表达式。使用关系运算符连接起来的表达式。 例如:例如: ab
4、a+bc-d (a=3)=b (ab)=(bc)关系运算符和关系表达式关系运算符和关系表达式 关系表达式的值关系表达式的值 关系表达式的值为关系表达式的值为“真真”或或“假假”。 在在C语言中,关系表达式的类型是语言中,关系表达式的类型是int,其,其值为值为1(“真真”)或)或0(“假假”)。 例如:例如: int a=3,b=2,c=1; 关系表达式关系表达式ab的值为的值为1 关系表达式关系表达式b+cb),先计算关系表达式,先计算关系表达式ab,再,再将关系表达式的值赋给将关系表达式的值赋给d,则,则d的值为的值为1。关系运算符和关系表达式关系运算符和关系表达式 关系运算符的结合性关系
5、运算符的结合性 关系运算符在表达式中具关系运算符在表达式中具有有左结合性左结合性,因此,表达,因此,表达式式 abc与与 (ab)bc不同于数学中的含义。不同于数学中的含义。设设a=8、b=6、c=4,则,则abc的值为的值为 0( a b ) ca b c01 c第第4章章 选择结构选择结构4.1 4.1 关系运算符和关系表达式关系运算符和关系表达式4.2 4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.3 if4.3 if语句语句4.4 switch4.4 switch语句语句逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符及其优先级逻辑运算符及其优先级 !(逻辑非)!(逻辑
6、非) &(逻辑与)(逻辑与) |(逻辑或)(逻辑或) 优先级:优先级: ! 算术运算算术运算 关系运算关系运算 & | =& | =逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式运算符意义运算符意义 &:当且仅当两个操作数的值都为:当且仅当两个操作数的值都为“真真”时,时, 运算结果为运算结果为“真真”,否则为,否则为“假假”。 |:当且仅当两个操作数的值都为:当且仅当两个操作数的值都为“假假”时,时, 运算结果为运算结果为“假假”,否则为,否则为“真真”。 ! ! :当操作数的值为:当操作数的值为“真真”时,运算结果为时,运算结果为“假假”; 当操作数的值为当操
7、作数的值为“假假”时,运算结果为时,运算结果为“真真”。 例如:假定例如:假定x=5x=5, 则则 x=0 & x=0 & x10 的值为的值为“真真”, x5 x5 的值为的值为“假假”。逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式x=0 & x=0 & x10 比较比较 0=x100=x=0 & x=0 & x10 表示表示0,10)0,10)范围内的数范围内的数 x5 x5 表示表示1,51,5范围外的数范围外的数 !(x=0) !(x=0) x!=0 x!=0 x x year%4=0&year%100!=0|year%400=0
8、 year%4=0&year%100!=0|year%400=0逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式&和和|的短路运算性质的短路运算性质 & & 如果第一个操作数被判定为如果第一个操作数被判定为“假假”, 系统不再判定或求解右边的操作数。系统不再判定或求解右边的操作数。 | | 如果第一个操作数被判定为如果第一个操作数被判定为“真真”, 系统不再判定或求解右边的操作数。系统不再判定或求解右边的操作数。逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式例子例子 假设假设n1=1n1=1、n2=2n2=2、n3=3n3=3、n4=4n4=4、x=1x=1、y=1y
9、=1,则,则求解表达式求解表达式 (x=n1n2)&(y=n3n4)(x=n1n2)&(y=n3n4) 后,后,x x的值变为的值变为0 0,而,而y y的值不变,仍等于的值不变,仍等于1 1!第第4章章 选择结构选择结构4.1 4.1 关系运算符和关系表达式关系运算符和关系表达式4.2 4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.3 if4.3 if语句语句4.4 switch4.4 switch语句语句if语句语句 C语言中语言中 if语句有两种格式语句有两种格式: 单路选择格式:单路选择格式:if( ) 双路选择格式:双路选择格式: if( )elseif语句
10、语句单路选择格式单路选择格式一般形式:一般形式:ifif( (表达式表达式) ) 语句语句1 1;单路选择语句的流程图语句1假(0)真(非0)表达式 注意:(1)表达式必须用表达式必须用“(”和和“)”括起来。括起来。(2)如果语如果语句句1 需需要多个语句时,要使要多个语句时,要使用复合语用复合语句形句形式式。(3) if (表达式表达式) 与与语语句句1 之之间不要加分间不要加分号(;)。号(;)。 4.3if语句语句 例例4.1 将变量将变量a、b中的数据按降序排列(即程序执行中的数据按降序排列(即程序执行完成后完成后a中的数据总是比中的数据总是比b 中的数据大)中的数据大)#inclu
11、de int main( ) int a,b,temp; printf(Enter values of a and b:n); scanf(%d%d,&a,&b); if(ab) temp=a;a=b;b=temp; /* 交换算法交换算法 */ printf(a=%d,b=%dn,a,b); return 0;4.3if语句语句 例例4.2 判断由键盘输入的字符是否是判断由键盘输入的字符是否是26个英文字母(包个英文字母(包括大小写),如果是,则输出:括大小写),如果是,则输出:Yes! #include int main( ) char ch; scanf(%c,&
12、ch); if(ch=a&ch=A&ch=Z) printf(Yes!n); return 0; if语句语句双路选择语句双路选择语句 一般形式:一般形式:if(表达式表达式) 语句语句1; else 语句语句2; 双路选择语句的流程图语句1假(0)语句2真(非0)表达式 如果表达式为如果表达式为“真真”(即非零即非零),就执行语句,就执行语句1,然后执行后,然后执行后面的语句;如果表达式为面的语句;如果表达式为“假假”(即零),执行语句(即零),执行语句2,然后执行后面的语句。然后执行后面的语句。if语句语句 例例4.3 判断由键盘输入的字符是否是判断由键盘输入的字符是否是2
13、6个英文字母,个英文字母,如果是则输出如果是则输出Yes!,否则,输出,否则,输出No!。#include int main() char ch; scanf(%c,&ch); if (ch=a&ch=A&ch=Z) printf(Yes!n); else printf(No!n); return 0; if语句语句 if语句的嵌套语句的嵌套if (表达式表达式1) 语句语句1; else if (表达式表达式2) 语句语句2; else if (表达式表达式3) 语句语句;else 语句语句;#include int main() int number; float
14、cost; scanf(%d,&number); if(number500) cost=0.15; else if(number300) cost=0.10; else if(number100) cost=0.075; else cost=0; printf(%d,%fn,number,cost); return 0;4.3if语句语句4.3if语句语句 if (表达式表达式1) if (表达式表达式2) 语句;语句; else if (表达式表达式) 语句语句2; else 语句语句3;if (表达式表达式1) if (表达式表达式2) 语句;语句; else if (表达式表达式
15、) 语句语句2; else 语句语句3; if (表达式表达式1) if (表达式表达式2) 语句;语句; else if (表达式表达式) 语句语句2; else 语句语句3;if (表达式表达式1) if (表达式表达式2) 语句;语句; else if (表达式表达式) 语句语句2; else 语句语句3; if (表达式表达式1) if (表达式表达式2) 语句语句1; else if (表达式表达式3) 语句语句2; else 语句语句3;if语句语句 注意事项:注意事项: else语句不能单独使用,必须要与语句不能单独使用,必须要与if语句配对语句配对使用使用 if/else的配对
16、原则:的配对原则:else总是与它前面的最近总是与它前面的最近的处于同一复合语句中的未配对的的处于同一复合语句中的未配对的 if 配对。配对。 可以通过加来改变配对关系,使可以通过加来改变配对关系,使 if 和和else 处于不同的复合语句中。处于不同的复合语句中。ifif语句语句 例例4.44.4: 符号函数符号函数 #include /程序程序1 int main() int x,y;scanf(%d,&x);if (x0) y=-1;else if (x=0)y=0; elsey=1;printf(x=%d,y=%dn,x,y); return 0; 010001xxxyifif
17、语句语句#include /程序程序2int main() int x,y; scanf(%d,&x); y=-1; if (x!=0) if (x0) y=1; else y=0; printf(x=%d,y=%dn,x,y); return 0; 结果是否正确?结果是否正确?ifif语句语句#include /程序程序2改正改正int main() int x,y; scanf(%d,&x); y=-1; if (x!=0) if (x0) y=1; else y=0; printf(x=%d,y=%dn,x,y); return 0; #include int main(
18、 ) /程序程序3 int x,y; scanf(%d,&x); y=0; if (x=0) if (x0) y=1; else y=-1; printf(x=%d,y=%dn,x,y); return 0;程序运行结果是否正确程序运行结果是否正确? ?如何修改如何修改? ?if语句语句 三目条件运算符(三目条件运算符(?:?:)一般形式:一般形式: 表达式表达式1 ? 表达式表达式2 : 表达式表达式3条件运算符相当于:条件运算符相当于: if (表达式(表达式1 ) 表达式表达式2; else 表达式表达式3; 条件运算符的执行:若表达式的值为真,则条件表达式的值为表达式的值;若表
19、达式的值为假,则条件表达式的值为表达式的值;if语句语句 例:例:max=ab ? a : b;max=ab ? a : b; 等价于等价于ifif(abab) max=amax=a; elseelse max=b; max=b; 条件运算符的优先级高于赋值运算符,但比关系运算符条件运算符的优先级高于赋值运算符,但比关系运算符和算术运算符都低。和算术运算符都低。 条件运算符的结合方向为条件运算符的结合方向为“从右向左结合从右向左结合”,即右结合,即右结合性性 例如例如:ab?a:cd?c:d :ab?a:cd?c:d 等价于等价于 ab?a:(cd?c:d)ab?a:(cd?c:d) 如果如果
20、a=1,b=2,c=3,d=4,a=1,b=2,c=3,d=4,则该条件表达式的值为则该条件表达式的值为: :4 4if语句语句 条件表达式中,表达式的值的类型可以与表条件表达式中,表达式的值的类型可以与表达式和表达式的值类型不同。达式和表达式的值类型不同。 表达式和表达式的值类型也可以不同,表达式和表达式的值类型也可以不同,条条件表达式的值的类型为两者类型中较高的类型件表达式的值的类型为两者类型中较高的类型。 例如:例如: char a,b; ab ? 1 : 3.14 条件表达式的值的类型为条件表达式的值的类型为doubleifif语句语句 例例4.5 字母大写转小写字母大写转小写 #in
21、clude int main() char c; scanf(%c,&c); c = (c=A& c=Z) ? (c+32) : c; printf(%cn,c); return 0; if语句语句 例例4.6 从键盘输入一年份,判定该年份是否闰从键盘输入一年份,判定该年份是否闰年,是输出年,是输出Yes!,否则,输出,否则,输出No!。 闰年的判定条件满足以下两个中一个:闰年的判定条件满足以下两个中一个: (1)能被)能被4整除,但不能被整除,但不能被100整除的年份都整除的年份都是闰年;是闰年; (2)能被)能被400整除的年份也都是闰年。整除的年份也都是闰年。例如例如,
22、2000年,年,2004年是闰年。年是闰年。if语句语句#include int main( ) int year; printf(input year:n); scanf(%d,&year); if(year%400=0) printf(%d is a leap year.n,year); else if(year%4=0&year%100!=0) printf(%d is a leap year.n,year); else printf(%d is not a leap year.n,year); return 0;if语句语句#include int main( ) /简
23、化简化 int year;printf( input year:n); scanf(%d,&year);if(year%400=0|year%4=0&year%100!=0) printf(%d is a leap year.n,year); else printf(%d is not a leap year.n,year); return 0;if语句语句#include int main( ) /再简化再简化 int year; printf(input year:n); scanf(%d,&year); !(year%400)|!(year%4)&year
24、%100 ? printf(%d is a leap year.n,year) : printf(%d is not a leap year.n,year); return 0;if语句语句#include int main( ) /再简化再简化 int year; printf(input year:n); scanf(%d,&year); printf(%d is%s a leap year.n, year, !(year%400)|!(year%4)&year%100 ? : not); return 0; ifif语句语句 例例4.74.7求一元二次方程求一元二次方程a
25、xax2 2+bx+c=0+bx+c=0的解的解 a=0 a=0 不是二次方程不是二次方程 b b2 2-4ac=0 -4ac=0 两个相等实根两个相等实根 b b2 2-4ac0 -4ac0 两个不等实根两个不等实根 b b2 2-4ac0 -4ac0 两个共轭实根两个共轭实根例例 求解方程根求解方程根 #include #include int main()int main() double a,b,c,disc,x1,x2,p,q; double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf, &a, &b, &c); scanf(%
26、lf%lf%lf, &a, &b, &c); if (fabs(a)=1e-6) if (fabs(a)=1e-6) /浮点数的比较运算浮点数的比较运算 printf(printf(不是二次方程不是二次方程);); else else 例例 求解方程根求解方程根 disc=b disc=b* *b-4b-4* *a a* *c;c; if (fabs(disc)=1e-6) if (fabs(disc)1e-6) if (disc1e-6) x1=(-b+sqrt(disc)/(2 x1=(-b+sqrt(disc)/(2* *a);a); x2=(-b-sqrt(di
27、sc)/(2 x2=(-b-sqrt(disc)/(2* *a);a); printf(x1=%8.4f,x2=%8.4fn, x1, x2); printf(x1=%8.4f,x2=%8.4fn, x1, x2); 例例 求解方程根求解方程根 else else p=-b/(2 p=-b/(2* *a);a); q=sqrt(fabs(disc)/(2 q=sqrt(fabs(disc)/(2* *a);a); printf(x1=%8.4f + %8.4f in, p, q); printf(x1=%8.4f + %8.4f in, p, q); printf(x2=%8.4f - %8.
28、4f in, p, q); printf(x2=%8.4f - %8.4f in, p, q); return 0; 第第4章章 选择结构选择结构4.1 4.1 关系运算符和关系表达式关系运算符和关系表达式4.2 4.2 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式4.3 if4.3 if语句语句4.4 switch4.4 switch语句语句switchswitch语句语句 switch switch语句是特殊的语句是特殊的多分支多分支语句语句, ,有时要有时要比使用比使用ifif语句来得方便。语句来得方便。 switchswitch语句的一般形式是:语句的一般形式是: switch (sw
29、itch (表达式表达式) ) case case 常量表达式常量表达式1 1: : 语句语句1 1 case case 常量表达式常量表达式2 2: : 语句语句2 2 case case 常量表达式常量表达式n n: : 语句语句n n default: default: 语句语句n+1n+1 switchswitch语句语句 例子例子 switch (grade)switch (grade) case A case A:printf(85 printf(85 100n) 100n); case Bcase B:printf(70 printf(70 84n) 84n); case C: printf(60 case C: printf(60 69n) 69n); case Dcase D:printf(60n)printf(60n); defaultdefault: printf(ERRORn)printf(ERRORn); switch语句grade=Agrade=Dgrade=Cgrade=Bprintf(“85-100n”)printf(“60n”)printf(“60-69n”)printf(“70-84n”)gradeprintf(“ERRORn”)grade=其他switchswitch语句语句uswitchswitch语句中:语句中:表达式的类型为表达式
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 土方开挖工程检验批质量验收记录表
- 项目安全员绩效考核评分表
- 财务印鉴管理制度
- 胸腔闭式引流的健康教育
- (辅导班)2026年新高三数学暑假讲义(基础班)第13讲 数列求和(解析版)
- 2025-2026学年平凉市高考考前模拟语文试题含解析
- 【浙江省杭州市事业单位考试综合应用能力(中小学教师类D类)备考重点解析】
- 【2025】鄂州鄂城社区工作者招考笔试试题
- 【2026】超星尔雅学习通《论文写作初阶(北京大学)》章节测试及答案
- 【北京市化学高三下学期期末复习难点解析】
- 2026四川甘孜州巴塘县考调事业单位工作人员18人重点基础提升(共500题)附带答案详解
- 北京市2025中国文化遗产研究院应届毕业生招聘4人笔试历年参考题库典型考点附带答案详解
- 2026年住院医师规范化培训试题【新题速递】附答案详解
- 2026年广东省广州市高三二模英语试题(含答案)
- CNCA-C09-02:2025 强制性产品认证实施规则 移动电源、锂离子电池和电池组(试行)
- 疾控中心采购制度
- 2026西安银行总行科技部、数据管理部相关岗位招聘笔试模拟试题及答案解析
- 交通安全培训【课件文档】
- 贵州国企招聘2025贵州磷化(集团)有限责任公司招聘89人笔试参考题库附带答案详解
- 纱线基础知识图文详解
- FZ/T 73023-2006抗菌针织品
评论
0/150
提交评论