已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 选择结构程序设计 学习要求: 1. 熟悉选择控制结构 2. 熟悉关系运算符及表达式求值、逻辑运算符及表达式 求值 3. 掌握ifelse语句的语法及应用 4. 掌握switch语句的语法及应用 5. 熟悉条件运算符及表达式求值 5. 熟悉选择结构程序设计的典型应用 4.1 4.1 选择结构和条件判断选择结构和条件判断 C语言有两种选择语句: (1)if语句,实现两个分支的选择结构 (2)switch语句,实现多分支的选择结构 4.1 4.1 选择结构和条件判断选择结构和条件判断 例4.1 在例3.5的基础上对程序进行改进。题目要求是求 方程的根。 由键盘输入a,b,c。假设a,b,c的值任意,并不保证 。需要在程序中进行判别,如果 ,就计算并输出 方程的两个实根,否则就输出“方程无实根”的信息。 解题思路: 输入a,b,c 计算disc discb,交换a , b ,否则不交换 S3: 顺序输出a,b 解题思路: S1: if ab,a和b对换 (a是a、b中的小者) S2: if ac,a和c对换 (a是三者中最小者) S3: if bc,b和c对换 (b是三者中次小者) S4: 顺序输出a,b,c 例4.3 输入3个数a,b,c,要求按由小到大的顺 序输出。 if语句的三种形式 形式一: 格式:if (表达式) 语句 执行过程: 表达式 语句 非0 =0 例:if (xy) printf(“%d”,x); 表达式 语句1语句2 非0=0l 形式二: u格式:if (表达式) 语句1 else 语句2 u执行过程: 例:if (xy) max=x; else max=y; 4.2.2 if 语句 形式三: 格式: if ( 表达式1 ) 语句1 else if (表达式2 ) 语句2 else if (表达式3 ) 语句3 . else 语句n expr1 statemnt 1 非0 =0 expr2 expr3 statemnt n statemnt 3 statemnt 2 非0 非0 =0 =0 u执行过程: 例:if (number500) cost=0.15; else if (salary300) cost=0.10; else if (salary100) cost=0.075; else if (salary50) cost=0.05; else cost=0; 说明: 1、if 语句后面的表达式,一般为逻辑表达式或关系表达式,但 也可是任意的类型。 2、else 不能作为单独的语句使用,必须和if 配对使用。 3、在 if 和 else只能控制其后的一条语句,如果是多条语 句,应 该用 括起来成为一个复合语句。 4、if 语句中又包含一个或多个 if 语句。从最内层开始,else 总 是与它上面最近的未曾配对的 if 配对。 5、为避免错用,最好使 if 和 else 数目相同,也可用 来确定。 4.34.3关系运算符和关系表达式关系运算符和关系表达式 4.3.1关系运算符及其优先次序 4.3.2 关系表达式 4.4 4.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 4.4.1 逻辑运算符及其优先次序 4.4.2 逻辑表达式 4.5 4.5 条件运算符和条件表达式条件运算符和条件表达式 三、条件运算符:三目运算符 一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句 例 if (ab) printf(“%d”,a); else printf(“%d”,b); printf(“%d”,ab?a:b); 例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b); expr1 取expr2值取expr3值 非0=0 例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a if(x0) y = 1; printf(“x=%d,y=%dn“,x,y); 4.6 4.6 选择结构的嵌套选择结构的嵌套 解题思路:方法2 (2) 用一个嵌套的if语句处理: 输入x 若x =0) if (x0) y=1; else y=0; else y=-1; printf(“x=%d,y=%dn“,x,y); 提倡内嵌if放在else中 4.7 4.7 用用switchswitch语句实现多分支选择结构语句实现多分支选择结构 switch语句用来实现多分支选择结构 学生成绩分类 85分以上为A等 7084分为B等 6069分为C等 人口统计分类 按年龄分为老、中、青、少、儿童 4.7 4.7 用用switchswitch语句实现多分支选择结构语句实现多分支选择结构 例4.6 要求按照考试成绩的等级输出百分制分数 段,A等为85分以上,B等为7084分,C等为60 69分 ,D等为 60分以下 。成绩的等级由键盘输入。 4.7 4.7 用用switchswitch语句实现多分支选择结构语句实现多分支选择结构 解题思路: 判断出这是一个多分支选择问题 根据百分制分数将学生成绩分为4个等级 如果用if语句,至少要用3层嵌套的if,进行3 次检查判断 用switch语句进行一次检查即可得到结果 switch语句的作用是根据表达式的值,使流程跳转 到不同的语句 switch语句的一般形式: switch(表达式) case 常量1 :语句1 case 常量2 :语句2 case 常量n :语句n default : 语句n+1 整型或字符型常量、变量或表 达式 必须为简单整型或字符型的常 量,不能是变量或表达式;各 常量必须互不相同。 scanf(“%c“, printf(“Your score:“); switch(grade) case A: printf(“85100n“);break; case B: printf(“7084n“);break; case C: printf(“6069n“);break; case D: printf(“ int main() int year,leap; printf(“enter year:“); scanf(“%d“, if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is “,year); else printf(“%d is not “,year); printf(“a leap year.n“); return 0; 标志变量 与if (leap!=0)含义相同 #include int main() int year,leap; printf(“enter year:“); scanf(“%d“, if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is “,year); else printf(“%d is not “,year); printf(“a leap year.n“); return 0; 采取锯齿形式 #include int main() int year,leap; printf(“enter year:“); scanf(“%d“, if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is “,year); else printf(“%d is not “,year); printf(“a leap year.n“); return 0; if(year%4!=0) leap=0; else if (year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1; #include int main() int year,leap; printf(“enter year:“); scanf(“%d“, if (year%4=0) if(year%100=0) if(year%400=0) leap=1; else leap=0; else leap=1; else leap=0; if (leap) printf(“%d is “,year); else printf(“%d is not “,year); printf(“a leap year.n“); return 0; if(year%4=0 else leap=0; 例4.9 求 方程的解。 解题思路:处理以下各情况 ,不是二次方程 ,有两个相等实根 ,有两个不等实根。 ,有两个共轭复根。 应当以p+qi和p-qi的形式输出复根 其中,p=-b/2a,q=( )/2a 参见教材图4.14 例4.10 求三角形的面积。 #include #include /使用数学函数时要包含头文件math.h int main( ) double a,b,c; printf(“please enter a,b,c: “); scanf(“%f%f%f“, if (a+bc /在复合语句内定义变量 s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(“area=%.4fn“,area); /指定输出的数包含4位 小数 /复合语句结束 else printf(“it is not a trilateral!n“); return 0; 例4.12 输入两个整数,输出其中的较大数。 【任务要求】掌握求最值的算法,以及if语句实现双分支结构的应用。 输输入数据x,y Y N xy 输输出 max 的值值 max=ymax=x NoYes xy 输输入x,y 开始 max=y 输输出max 结结束 (a) 案例3.1的流程图图 (b) 案例3.1的N-S图图 max=x 例4.12 的算法描述 【程序详解】 /*ex4-12.c 求两个数的最大数 */ #include void main() int x , y,max; printf(“请输入两个整数 :“); scanf(“%d%d“ , if(xy) /判断条件 max=x ; else max=y ; printf(“max is : %dn“ , max ); /输出max 【思考】 求3个数中的最大数/最小数 或求4个数中的最大数/最小数 如何实现? 例4.14 计算以下分段函数的值。 【目的】掌握ifelse构造多分支选择结构的算法 【算法分析】 (1)输入x的值 (2) if(x void main() float x , y ; printf(“请输入x :“); scanf(“%f“, if(x1) y=x; else if(x10) y=2*x-1; else y=3*x-11; printf(“x=%.2f, y=%.2fn“ , x , y ); y= 2x-1 1 x 10 x x1 3x-11 x 10 【思考】 程序中虚线部分有没有其他 的写法? 课堂小结 C实现选择(分支)结构的方法 ifelse语句 switch语句 两种方法均可实现单分支、双分支及多分支选择 在if之后的表达式可以是任意类型的表达式,取逻辑值 else只能和if配对使用,配对原则是“else总是和上面最近的未曾配对的if 配对”,决定在哪个if条
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年6月银行从业中级银行管理真题及答案
- 2026-2031中国泡沫镍市场动态监测及竞争战略研究报告
- XX加油站应急预案演练记录(加油机起火)
- 2025年体育教育专业考试试卷及答案
- 2025年疾病防控常识科普试题及答案解析
- 金融监管数字化转型的政策与挑战分析
- 2026年建筑材料供应协调协议
- 安全风险控制手册考试试题及答案
- 2025年燃气管网运行工技能大赛竞赛题库及答案
- 医影2025放射技术主管专业知识试题含答案
- 2026年畜牧业养殖公司屠宰设备使用与维护管理制度
- 腋臭营销推广方案
- 19 中国石拱桥 课件 2025-2026学年统编版语文八年级上册
- 2026年合肥合燃华润燃气有限公司校园招聘25人笔试考试备考试题及答案解析
- 北师大版(2024)2025-2026学年三年级下册期中调研试卷(含解析)
- 2025成都农商银行社会招聘(综合柜员)模拟试卷附答案详解(综合卷)
- 2025中国水利报社公开招聘工作人员12人笔试历年参考题库附带答案详解
- 2025年全新科级年轻干部选拔笔试真题及答案解析
- DB43∕T 388-2020 用水定额标准规范
- 万豪酒店管理集团介绍
- 小升初数学衔接方法指导
评论
0/150
提交评论