版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、4.1 4.1 ifif语句语句 4.2 4.2 switchswitch语句语句 4.3 4.3 选择结构程序设计举例选择结构程序设计举例 第四章第四章 选择结构程选择结构程 序设计序设计 本章练习本章练习 问题提出问题提出: : 计算分段函数:计算分段函数: y= 3-x x0 2/x x0 解题的步骤:解题的步骤: 输入输入x x x0 x0 是是 y=3-xy=3-xy=2/xy=2/x 否否 输出输出y y的值的值 c语言用来设计条件选择语言用来设计条件选择 结构程序的选择语句有两结构程序的选择语句有两 种:种: if语句、语句、switch语句。语句。 4.1 4.1 ifif语句
2、语句 1、单分支选择单分支选择if语句语句 if语句有三种形式:单分支选择语句有三种形式:单分支选择if语句、双分支语句、双分支 面具选择面具选择if语句、多分支选择语句、多分支选择if语句。语句。 语句形式:语句形式: if (表达式)表达式) 语句;语句; 语句执行流程:语句执行流程: 表达式表达式 语句语句 真真(非非0) 假假(0) 4.1.1 4.1.1 ifif语句的三种形式语句的三种形式 例例4-1:从键盘输入两个整:从键盘输入两个整 数数a和和b,如果如果a大于大于b则交换则交换 两数,最后输出两个数。两数,最后输出两个数。 #include 输入输入a,ba,b abab 交
3、换交换a a、b b 输出输出 结束结束 真真 假假 void main() int a,b,t; scanf(%d,%d, if(ab) t=a;a=b;b=t; printf(a=%d,b=%dn,a,b); 注意:注意: (1 1)ifif语句自动结合一个语句,当满足条件需语句自动结合一个语句,当满足条件需 要执行多个语句时,应用一对大括号要执行多个语句时,应用一对大括号将需要执将需要执 行的多个语句括起,形成一个复合语句。行的多个语句括起,形成一个复合语句。 (2 2)ifif语句中表达式形式很灵活,可以是常量语句中表达式形式很灵活,可以是常量 、变量、任何类型表达式、函数、指针等。只
4、、变量、任何类型表达式、函数、指针等。只 要表达式的值为非零值,条件就为真,反之条要表达式的值为非零值,条件就为真,反之条 件为假。件为假。 2、双分支选择双分支选择if语句语句 语句形式:语句形式: if (表达式)表达式) 语句语句1; else 语句语句2 ; 语句执行流程:语句执行流程: 表达式表达式 语句语句1 真真(非非0) 假假(0) 语句语句2 例例4-2 4-2 输入两个整数,输输入两个整数,输 出其中较大的数。出其中较大的数。 输入输入x,yx,y xyxy max=xmax=x 输出最大值输出最大值 结束结束 真真 假假 max=ymax=y if if语句语句 注意注意
5、 if和和else语句之间只能有一个语句,当语句之间只能有一个语句,当ifelse之间之间 的语句不只一句时,应用一对的语句不只一句时,应用一对将语句括起。将语句括起。 if(ab) a+;b+; else a=0;b=10; 知识点如何表达条件知识点如何表达条件 选择条件通常是关系表达式或逻辑表达式。放选择条件通常是关系表达式或逻辑表达式。放 在括号中。在括号中。 逻辑运算符:逻辑运算符: if(flag) 算术运算优先级高于关系运算,关系运算算术运算优先级高于关系运算,关系运算 优先级高于逻辑运算。优先级高于逻辑运算。 逻辑运算符优先级:逻辑运算符优先级: !、!、 if(s=2) pri
6、ntf(hello); else printf(error); if后面圆括号中的表示 分支条件的类型不限于逻辑/关系表达式,可以 是任意的c语言有效表达式(如赋值表达式,算术表达式等 等),因此也可以是作为表达式特例的常量或变量。 3.非关系、非逻辑表达式构成的条件表达式2 【例3.10】中的条件表达式是一个赋值表达式,并不是判断s是否等于2。 相当于if(2)printf(hello);,这是合法的。由于该条件表达式的值是非零值, 恒为真,故本程序的printf(error);无论如何都不会被执行。if语句最终执 行哪一个分支,取决于条件表达式的计算结果。同一个条件的也可以用多 种表达方式
7、。 【例3.11】以变量为分支条件的实例。 /*程序名为l3_11.cpp。*/ #include stdio.h main() int x,y; scanf(%d, if(x) y=1; else y=-1; 3.非关系、非逻辑表达式构成的条件表达式3 printf(y=%dn,y); 现把程序中if(x)改成if(x!=0),此时虽然条件表达式 写法不同,但是完成的功能是相同的。 下面两种表示方法经常使用: if(x)等价于if(x!=0) if(!x)等价于if(x=0) 3、多分支选择多分支选择if语句语句 语句形式:语句形式: if (表达式表达式1) 语句语句1; else if
8、(表达式表达式2)语句)语句2; else if (表达式表达式n)语句语句n; else 语句语句n+1; 语句执行流程:语句执行流程: 表达式表达式1 1 语句语句1 真真(非非0) 假假(0) 语句语句2 表达式表达式2 2 真真(非非0) 表达式表达式2 2 语句语句n语句语句n+1 假假(0) 假假(0) 例例4-3:计算分段函数。:计算分段函数。 x5x1 y2 x1x1 0 3 x1 0 x1 0 假假 输入输入x x x=1x=1 真真 x10x10 y=3/(x-10)y=3/(x-10)y=2xy=2x y=x+5y=x+5 假假 真真 #include void main
9、() float x,y; printf(enter x:); scanf( %f , else if (x=1) y=x+5; else if (xb) if(ab) / /* * 1 1 * */ / if(ac) if(ac) / /* * 2 2 * */ / if(ad) flag=1; if(ad) flag=1; / /* * 3 3 * */ / else flag=2; else flag=2; / /* * 4 4 * */ / else flag=3; else flag=3; / /* * 5 5 * */ / 当当 a a 最大最大时,时,flag=3flag=3 当
10、当 d d 最大最大时,时,flag=2flag=2 当当 c ca ab b 时,时,flag=3flag=3 加加 后成后成 为一个语句。为一个语句。 1、语句形式:、语句形式: switch (表达式)表达式) case 常量常量1: 语句语句1; case 常量常量2: 语句语句2; case 常量常量3: 语句语句3; . case 常量常量n: 语句语句n; default : 语句语句n+1; 。 数值型数值型 或或 字符型字符型 常量表达式的值必须常量表达式的值必须 互不相同,否则执行互不相同,否则执行 时将出现矛盾,即同时将出现矛盾,即同 一个开关值,将对应一个开关值,将对应
11、 多种执行方案。多种执行方案。 千万不千万不 能接能接(;) 号号 2、语句执行流程:、语句执行流程: 指语句的最指语句的最 后一条是否后一条是否 为为break 简单语句或简单语句或 复合语句复合语句 breakbreakbreakbreak 有有 无 breakbreak 有 无 有 计算表达式计算表达式 常量常量1 1常量常量2 2常量常量n n = 语句语句1 1 = 语句语句2 2语句语句n n 其它其它 = 语句语句n+1n+1 无 值值 casecase语句出语句出 现的次序并现的次序并 不影响执行不影响执行 结果。结果。 例例4-44-4:假设用:假设用0 0、1 1、2.62
12、.6分别表示星期日、星期分别表示星期日、星期 一一.星期六。现输入一个数字,输出对应的星期星期六。现输入一个数字,输出对应的星期 几的英文单词。如果输入几的英文单词。如果输入3 3,输出,输出“wednesday”wednesday”。 #include stdio.h void main() int n; scanf(%d, switch(n) case 0: printf(sundayn); case 1: printf(mondayn); case 2: printf(tuesdayn); case 3: printf(wednesdayn); case 4: printf(thursd
13、ayn); case 5: printf(fridayn); case 6: printf(saturdayn); default: printf(error); 程序运行情况如下:程序运行情况如下: 3 wednesday thursday friday saturday error 在在“switchswitch”语句中,语句中,“case case 常量表达式常量表达式” 只相当于一个语句标号,表达式的值和某标号只相当于一个语句标号,表达式的值和某标号 相等则转向该标号执行,但不能在执行完该标相等则转向该标号执行,但不能在执行完该标 号的语句后自动跳出整个号的语句后自动跳出整个switc
14、h switch 语句,因此语句,因此 会继续执行所有后面语句的情况。会继续执行所有后面语句的情况。 为此,语言提供了一种为此,语言提供了一种breakbreak语句,其功能是语句,其功能是 可以跳出它所在的可以跳出它所在的switchswitch语句。语句。 将上面的例将上面的例4-44-4修改如下:修改如下: #include stdio.h void main() int n; scanf(%d, switch(n) case 0: printf(sundayn); break; case 1: printf(mondayn); break; case 2: printf(tuesday
15、n); break; case 3: printf(wednesdayn); break; case 4: printf(thursdayn); break; case 5: printf(fridayn); break; case 6: printf(saturdayn); break; default: printf(error); 程序运行情况如下:程序运行情况如下: 3 3 wednesday wednesday 3、说明、说明 多个多个casecase语句可以共用一组执行语句。语句可以共用一组执行语句。 switch(grade) case a: case b: case c:pri
16、ntf(grade=60n);break; default:printf(grade60); 各各casecase和和defaultdefault子句的先后顺序可以变动,而子句的先后顺序可以变动,而 不会影响程序执行结果。不会影响程序执行结果。 defaultdefault语句可以省略不用。语句可以省略不用。 casecase和和defaultdefault与其后面的常量表达式间至少有与其后面的常量表达式间至少有 一个空格。一个空格。 switchswitch语句可以嵌套,语句可以嵌套,breakbreak语句只跳出它所在语句只跳出它所在 的的switchswitch语句。语句。 例例4-5
17、4-5 企业发放的奖金根据利润提成。从键盘输入企业发放的奖金根据利润提成。从键盘输入 当月利润,求应发放奖金总数?当月利润,求应发放奖金总数? 10%10 12%1020 14%2040 16%4060 18%60100 20%100 利润利润万 利润利润万 利润利润万 奖金 利润利润万 利润利润万 利润利润万 利润x x=10 10 x20 20 x40 40 x60 60 x100 100 x (int )x/10 常量常量 0,1 1,2 2,3,4 4,5,6 6,7,8,9,10 10以上 用这种方法转换后,用这种方法转换后,n n出现了在不同区域有重复数字出现了在不同区域有重复数字
18、 的情况。解决的方法有很多,其中一种是可以采用当的情况。解决的方法有很多,其中一种是可以采用当 x x为为1010的整数倍时,将计算出的的整数倍时,将计算出的n n值减值减1 1。 使用使用 switchswitch 解题的解题的 关键,关键, 通过分通过分 析找到析找到 表达式表达式 ,将问,将问 题分成题分成 几种情几种情 况。况。 #include stdio.h void main() float x,y; int n; scanf(%f, n=(int)x/10; if(int)x/10=x/10) n-; switch(n) case 0:y=x*0.1;break; case 1
19、:y=x*0.12;break; case 2:case 3:y=x*0.14;break; case 4:case 5:y=x*0.16;break; case 6:case 7:case 8:case 9:y=x*0.18;break; default:y=x*0.2; printf(y=%.2fn,y); 程序如下:程序如下: 4.3 4.3 选择结构程序设计举例选择结构程序设计举例 例例4 4-7-7 将任意三个整数按从大到小的顺序输出。将任意三个整数按从大到小的顺序输出。 #include stdio.h void main() int x,y,z,t; scanf(%d,%d,%d
20、, if(xy) t=x;x=y;y=t; /*交换交换x,y的值的值*/ if(xz) t=x;x=z;z=t; /*交换交换x,z的值的值*/ if(yz) t=y;y=z;z=t; /*交换交换y,z的值的值*/ printf(%d,%d,%dn,x,y,z); 例例4-8 4-8 给一个不多于给一个不多于4 4位的正整数,求出它是几位的正整数,求出它是几 位数,逆序打印出各位数字。位数,逆序打印出各位数字。 #include stdio.h void main() int x,a,b,c,d; /*a,b,c,d代表千位、百位、十位、个位代表千位、百位、十位、个位*/ scanf(%d
21、, a=x/1000; b=x%1000/100; c=x%100/10; d=x%10; /*分解出千位、百位、十位、个位分解出千位、百位、十位、个位*/ if(a!=0) printf(4:%d%d%d%dn,d,c,b,a); else if(b!=0) printf(3:%d%d%dn,d,c,b); else if(c!=0) printf(2:%d%dn,d,c); else if(d!=0) printf(1:%dn,d); main( )main( ) intint year, month, days; year, month, days; scanf(%d%dscanf(%d
22、%d, , switch (month) switch (month) casecase 1 1: case: case 3 3: : casecase 5 5: case: case 7 7: case: case 8 8: case: case 10 10: : case case 12 12: : days=31; days=31; break;break; / /* * 处理处理“大大”月月 * */ / case case 4 4: : case case 6 6: case: case 9 9: : case case 1111: : days=30; days=30; break;break
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年培训需求分析与计划制定考试试题及答案
- 建筑工程施工合同协议2025年参考版
- 国企职工续签合同范本
- 大型活动策划合同范本
- 培训合作协议合同模板
- 园林绿化购销合同范本
- 塔城矿山承包协议合同
- 外墙石材订购合同范本
- 城区库房出租合同范本
- 国债质押借款合同范本
- GB/T 17350-2024专用汽车和专用挂车分类、名称及型号编制方法
- 奢侈品鉴定知识培训课件
- 2024年03月福建中国工商银行福建分行春季校园招考笔试历年参考题库附带答案详解
- 商务星球版地理八年级下册全册教案
- 青岛市及下辖各区市经济财政实力与债务研究(2024) -新世纪
- iso28000-2022供应链安全管理手册程序文件表单一整套
- 奥尔夫音乐教育知到智慧树章节测试课后答案2024年秋白城师范学院
- 金匮要略知到智慧树章节测试课后答案2024年秋浙江中医药大学
- 中国近代史纲要东北石油大学练习题复习资料
- 完整液压系统课件
- 2024-2030年中国丙纶纺粘法无纺布行业产量预测及投资策略研究报告版
评论
0/150
提交评论