第四章 选择结构.ppt_第1页
第四章 选择结构.ppt_第2页
第四章 选择结构.ppt_第3页
第四章 选择结构.ppt_第4页
第四章 选择结构.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 选择结构,4.1 关系运算符及其表达式 4.2 逻辑运算符及其表达式 4.3 if语句 4.4 switch语句 4.5 程序举例 4.6 C语言趣味程序实例3 4.7 本章小结,关键字:if语句 if语句嵌套 switch语句,选择结构是一种应用非常广泛的程序控制结构,是计算机科学用来描述自然界和社会生活中分支现象的手段。其特点是:根据所给定选择条件为真(即分支条件成立)与否,决定从各实际可能的不同操作分支中执行某一分支的相应操作,并且任何情况下恒有“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性。,4.1关系运算符及其表达式,关系运算是对两个运算对象进行大小关系的比较运算。

2、C语言的关系运算符共有6个,(大于 )、 =(大于等于 )、 ,=,=优先级相同,高于相同级别的=,!=。运算方向自左向右。由关系运算符组成的表达式称为关系表达式 。关系表达式的一般形式为: 表达式 关系运算符 表达式,例如:a4 a+b2 的值为“真”,即为1。 54=2的值为“假”,即为0。,【程序文本4.1】关系表达式示例。 #include “stdio.h” main() int a,b,c,d,e; c=2; d=4; e=6; a=cd; b=de; printf(“a=%d,b=%d”,a,b); 程序运行结果:a=0,b=1,C语言中提供了三种逻辑运算符,!(逻辑非 )、 x

3、=3; y=7; m=9; printf(“%dn”,x+ym ,程序运行结果: 0 1 1,4.3 if语句,实现选择结构最常用的方法是采用if语句。它根据给定的条件进行判断(真或假),以决定执行某个分支程序段。C语言提供了3种基本的if语句形式。 4.3.1 if语句的三种形式 1.单分支结构 这是一种最简单的if形式,格式为: if(表达式) 语句序列; 执行过程:如果表达式的值为真,则执行其后的语句,否则跳过该if的语句,直接执行下一条语句。,【程序文本4.1】输入两个实数,按从小到大的顺序输出这两个数。 #include “stdio.h” main() float x,y,t; p

4、rintf(“请输入两个实数(x,y):”); scanf(“%f,%f”, ,程序运行结果:(运行2次): 请输入两个实数(x,y):32,45 32.00,45.00 请输入两个实数(x,y):45,32 32.00,45.00 从运行结果可以看出,只有“xy”为真时才执行复合语句“t=x;x=y;y=t;”,当程序只需实现单分支选择时,就可以使用这种形式的if语句来完成。,2双分支ifelse语句 这是一种使用比较频繁的条件语句,格式为: if(表达式) 语句序列1; else 语句序列2; 执行过程:如果表达式的值为“真”,则执行语句1,否则执行语句2。,【程序文本4.2】输入一名学生

5、的C语言成绩,判断是否及格。 #include “stdio.h” main() int x; printf(“请输入一名学生的C语言成绩:n”); scanf(“%d”, ,程序运行结果:(运行2次): 请输入一名学生的C语言成绩: 89 及格 请输入一名学生的C语言成绩: 58 不及格 执行本程序时,当输入的成绩大于等于60时,执行if后面的语句,输出“及格”;当输入的成绩小于60时,执行else后面的语句,输出“不及格”。对于选择结构程序只能执行if后面的语句或者else后面的语句,绝对不可能同时执行两个分支。,3. 多分支ifelseif语句 这种多分支语句其实是固定在else分支下嵌

6、套着另一个ifelse语句,格式为: if (表达式1) 语句序列1; else if(表达式2) 语句序列2; else if(表达式3) 语句序列3; else if(表达式n) 语句序列n; else 语句序列n+1;,执行过程:程序先判断表达式1的值,当其结果为“真”时,则执行语句1;否则判断表达式2的值,当其值为“真”时,则执行语句2;否则判断表达式3的值,当其值为“真”时,则执行语句3;否则接着进行判断,依此类推,直到找到结果为“真”的表达式,并执行与之相关的语句。如果经过判断,所有的表达式都为“假”,那么就执行最后一个else之后的语句。,【程序文本4.3】现有一分段函数,输入任

7、意一个x值,输出对应的y值。,y =,x+3 (x3),x (x=3),x-3 (x3),#include “stdio.h” main() int x,y; printf(“n请输入x的值:”); scanf(“%d”, ,程序运行情况如下(运行3次): 请输入x的值:2 x=2,y=5 请输入x的值:3 x=3,y=3 请输入x的值:4 x=4,y=1 在应用if-else-if多分支结构时,应注意每个else是和其前面最近的if配对使用的。一般来讲,中间的各个else不能省略,但最后一个else可以省略,这时表示当所有的表达式的值都为假时,执行该选择结构下面的语句。,4.3.2 if语句

8、的嵌套 if语句的嵌套是指在if语句中又含有了if语句的形式。可以嵌套在if子句中,也可以嵌套在else子句中,可以多层嵌套。其一般形式为: if(表达式1) if(表达式2) 语句序列1; else 语句序列2; else if(表达式3) 语句序列3; else 语句序列4;,在if语句的嵌套结构中并不需要对称,可以根据实际情况上面格式中的一部分,并且可以进行if语句的多重嵌套。 【程序文本4.4】 从键盘输入3个数,如果这3个数能构成一个三角形,则输入该三角形的形状信息(等边、等腰、任意三种情况)。 #include “stdio.h” main() float a,b,c; print

9、f(“n请输入a,b,c的值:”);,scanf(“%f,%f,%f”, ,程序运行情况如下(运行4次) 请输入a,b,c的值:6,6,6 等边三角形! 请输入a,b,c的值:6,6,8 等腰三角形! 请输入a,b,c的值:6,7,8 任意三角形! 请输入a,b,c的值:2,3,6 不能构成三角形!,4.3.3 条件运算符 条件运算符“?:”是C语言中唯一的一个三目运算符,要求3个运算对象同时参加运算。条件表达式的语法格式为: 表达式1?表达式2:表达式3 其运算规则为:如果表达式1为“真”,则求解表达式2的值,并将其作为整个条件表达式的值;否则就求解表达式3的值,并将其作为整个条件表达式的值

10、。 例如: int a,b,max; a=3; b=4; ab?max=a:max=b;,执行时先判断a和b的大小,a的值是3,b的值是4,“ab”的值为“假”,执行表达式“max=b”, 所以最后max的值为4。 通常可以用前面介绍的if语句来改写,上例中的条件表达式可改写为: if(ab) max=a; else max=b;,4.4 switch语句,我们在解决实际问题时,经常要用到多分支的选择。虽然用if语句的嵌套格式可以实现,但有时不太方便简洁,C语言提供了一个用于多分支的switch语句,用它来解决多分支问题更加方便有效。 其一般形式为: switch(表达式) case常量表达式

11、1: 语句组1; case常量表达式2: 语句组2; case常量表达式n: 语句组n; default : 语句组n+1; ,其执行过程为: 将“表达式”的值与“常量表达式”的值依次进行比较,当发现了某个匹配的值时,就执行该case后面的语句,直到遇到break语句或switch语句结束的“”为止。如果没有匹配的值,则执行default后面的语句。,【程序文本4.5】为某运输公司编制计算运费的程序。运行程序时,由用户输入运输距离s和运量w,程序输入单价p和总金额t。运费标准为: 当s1000km时,没有优惠,单价为6元/(吨公里); 当1000kms2000km时,优惠5%; 当2000km

12、s3000km时,优惠8%; 当3000kms5000km时,优惠10%; 当s5000km时,优惠12%;,#include “stdio.h” main() int s,w,g; float p,t; printf(“请输入距离s和运量w的值:”); scanf(“%d, %d”,case 3: case 4: p=6*0.90;break; defalt: p=6*0.88;break; t=p*s*w; printf(“单价p是%.3fn总价t是%.3fn”,p,t); ,程序运行结果: 请输入距离s和运量w的值:900,100 单价p是6.000 总价t是540000.000 请输入

13、距离s和运量w的值:3500,100 单价p是5.400 总价t是1890000.000,4.5 程序举例,【例1】输入年份,判断是否为润年。 分析:能被4整除,不能被100整除或能被400整除的年份为润年。 #include “stdio.h” main() int year; printf(“n请输入年份:”); scanf(“%d”, ,程序运行结果:(运行2次) 请输入年份:1996 1996年是闰年。 请输入年份:2014 2014年不是闰年。,【例2】实现英寸与厘米的换算。 分析:设置一个变量flag,用于选择换算的方向,flag的值为1表示英寸换算成厘米,flag的值为2表示厘米

14、换算成英寸。 #include “stdio.h” main() float y,r=2.54; int flag; printf(“请输入要换算的数据和换算的方式(1.英寸厘米,2. 厘米英寸):n”); scanf(“%f,%d”, if(flag=2|flag=1),if(flag=1) printf(“%8.2f英寸=%8.2f厘米”,y,y*r); else printf(“%8.2f厘米=%8.2f英寸”,y,y/r); else printf(“数据错误!n”); ,程序运行结果:(运行2次) 请输入要换算的数据和换算的方式(1.英寸厘米,2. 厘米英寸): 2,1 2.00英寸

15、= 5.08厘米 请输入要换算的数据和换算的方式(1.英寸厘米,2. 厘米英寸): 4,2 4.00厘米= 1.57英寸,【例3】某企业利润提成的规则如下: (1)利润低于或等于10万元的,可提成奖金10%; (2)利润高于10万元,低于20万元时,低于10万元的部分按10%提成,另外10万元可以提成7.5%; (3)利润高于20万元,低于40万元时,其中20万按前面的方法发放,另外20万元可以提成5%; (4)利润高于40万元,40万按前面的方法提成,高于部分按3%提成。 请从键盘输入利润,输出应发的提成。,用if语句编写程序如下: #include “stdio.h” main() int

16、 pf; float pr; printf(“n请输入利润总数(单位:万元):”); scanf(“%d”, else if(pf20) pr=10*0.10+(pf-10)*0.075;,else if(pf40) pr=10*0.10+10*0.075+(pf-20)*0.05; else pr=10*0.10+10*0.075+20*0.05+(pf-40)*0.03; printf(“n应发的奖金是:%f万元。”,pr); ,程序运行结果:(运行4次) 请输入利润总数(单位:万元):5 应发的奖金是:0.500000万元。 请输入利润总数(单位:万元):13 应发的奖金是:1.2250

17、00万元。 请输入利润总数(单位:万元):25 应发的奖金是:2.000000万元。 请输入利润总数(单位:万元):60 应发的奖金是:3.350000万元。,用switch语句编写程序如下: #include “stdio.h” main() int pf; float pr; printf(“n请输入利润总数(单位:万元):”); scanf(“%d”,case 2: case 3: pr=10*0.10+10*0.075+(pf-20)*0.05;break; default: pr=10*0.10+10*0.075+20*0.05+(pf-40)*0.03; printf(“n应发的奖金是:%f万元。”,pr); ,4.6 本章小结,C语言提供了6种关

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论