C语言第4章 3_第1页
C语言第4章 3_第2页
C语言第4章 3_第3页
C语言第4章 3_第4页
C语言第4章 3_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、5 条件运算符和条件表达式 (1 1)条件运算符)条件运算符 条件运算符由条件运算符由“?”和和“:”组合而成,是三目运算符,组合而成,是三目运算符,要求有要求有3 3个操作对象,并且三个操作对象都是表达式。个操作对象,并且三个操作对象都是表达式。提高效率:提高效率: if (ab) max=a; else max=b;用条件表达式可以表示为:用条件表达式可以表示为: max=(ab)?a:b;4.3 if4.3 if语句语句2 2单分支单分支ifif语句语句双分支双分支ifif语句语句多分支多分支ifif语句语句ifif语句嵌套语句嵌套复习复习(2 2)条件表达式)条件表达式条件表达式的一般

2、形式为:条件表达式的一般形式为: 表达式表达式1? 1? 表达式表达式2 2:表达式:表达式3 3 条件运算的求值规则为:条件运算的求值规则为: 计算表达式计算表达式1 1的值,的值,若表达式若表达式1 1的值为真,则以表达式的值为真,则以表达式2 2的值作为整的值作为整个条件表达式的值个条件表达式的值( (不计算表达式不计算表达式3)3),否则以表达式,否则以表达式3 3的值作为整个条的值作为整个条件表达式的值件表达式的值( (不计算表达式不计算表达式2) 2) 。 条件表达式的结果类型:表达式条件表达式的结果类型:表达式2 2和表达式和表达式3 3中的较高者中的较高者,例如:,例如: y3

3、?yb?a:cd?c:d ab?a:cd?c:d 等价于等价于 ab?aab?a:(:(cd?c:dcd?c:d)4.3 if4.3 if语句语句用条件运算符重新编程,输出两个整数用条件运算符重新编程,输出两个整数中的最大者中的最大者main()main() float a, b,max; float a, b,max; printf(input the two numbers: ); printf(input the two numbers: ); scanf(%f,%f,&a,&b); scanf(%f,%f,&a,&b); max=ab?a:b;max=ab?a:b; printf(ma

4、x=%fn,max); printf(max=%fn,max); 4.3 if4.3 if语句语句注意:条件表达式的短路现象注意:条件表达式的短路现象例:例:main( )main( )int a, b;int a, b; scanf(“%d,%d”,&a,&b); scanf(“%d,%d”,&a,&b); printf(“%d”,( printf(“%d”,(-a=b+)?a=b+)?-a:b+);a:b+); printf(“%d,%dn”,a,b); printf(“%d,%dn”,a,b); 运行时输入运行时输入5 5,44输出输出3 3,3 3,5(:5(:后的后的b+b+没有计算

5、没有计算) )运行时输入运行时输入5 5,55输出输出6 6,4 4,7(:7(:前的前的-a a没有计算没有计算) )4.3 if4.3 if语句语句【问题问题】 前面我们所说的前面我们所说的ifif语句通常用于解决两个分支的情况,语句通常用于解决两个分支的情况,而日常生活中我们常常要解决多个分支的问题。例如前面我而日常生活中我们常常要解决多个分支的问题。例如前面我们所说的,给学生成绩划分们所说的,给学生成绩划分A A、B B、C C等等,诸如此类问题。,诸如此类问题。利用嵌套的利用嵌套的ifif语句当然也可以解决,但是如果分支太多,语句当然也可以解决,但是如果分支太多,ifif语句嵌套的层

6、次数太多,势必会造成程序的冗长,可读性差。语句嵌套的层次数太多,势必会造成程序的冗长,可读性差。有没有什么更好的方法能解决多分支问题呢?有没有什么更好的方法能解决多分支问题呢? switch语句4.4 Switch 4.4 Switch 语句语句一般形式:一般形式:switch (开关表达式开关表达式) case 常量表达式常量表达式1: 语句语句 1; case 常量表达式常量表达式2: 语句语句2; case 常量表达式常量表达式n-1: 语句语句n-1; default : 语句语句n; 只能是整型或字符型表达式。只能是整型或字符型表达式。整型字符型常量表达式。整型字符型常量表达式。表达

7、式的值不能相等。表达式的值不能相等。 流程:流程:先求开关表达式值。先求开关表达式值。依次比较开关表达式和各常量表达式的值。依次比较开关表达式和各常量表达式的值。 如果和如果和第第i个常量表达式相等个常量表达式相等,则执行,则执行第第i条以后条以后的语句。的语句。 如果不相等,则执行如果不相等,则执行default以后的语句。以后的语句。 4.4 Switch 4.4 Switch 语句语句main() int a; scanf(%d,&a); switch(a) case 1:printf(Mondayn); case 2:printf(Tuesdayn); case 3:printf(We

8、dnesdayn); case 4:printf(Thursdayn); case 5:printf(Fridayn); case 6:printf(Saturdayn); case 7:printf(Sundayn); default: printf(Errorn); 【例7】输入一个十进制数,输出所对应的英文星期单词。4.4 Switch 4.4 Switch 语句语句结论:结论: 程序不完全正确; 不能正确表达每一种情况。存在的问题:存在的问题: 程序不能正确分支;解决方案:解决方案: 使用分支语句break。switch ()case : ; break;case : ; break;

9、case : break;case : ; break;default: ;breakbreak语句在语句在switchswitch语句中的作用语句中的作用break语句起中断和跳出的作用。 可以用在switch分支语句和循环语句中。使用方法: 在switch语句中,在需要独立执行的后面加上一条分支语句:break;switch条件分支互相独立的语句形式为:switch条件分支互相独立语句的流程图:思考:思考: 该结构的语法规则。 修改上面程序的算法,使其能满足实际的需要。分析:分析:参照流程图,在每个分支的语句序列后面加上break语句即可。 练习:练习: 某班级准备周末举行一个班级活动,但

10、活动内容要根据表中所示的天气情况来决定:天 气活 动 内 容晴 天登 山有风无雨郊 游下 雪堆 雪 人下 雨不举行班级活动其他天气参观博物馆分析:分析:分别用整数1、2、3、4代表晴天、有风无雨、下雪和下雨这4种天气情况。通过输入天气情况weather的值,来确定活动场所。 switch结构的灵活应用: 可根据实际应用的需要,将两种不同形式的switch结构组合起来。例例8 8:从键盘输入一个字符,判断其是否为a(可代表abort)或r(可代表retry)或f(可代表fail),并输出相应信息(输入时不区分大小写)。分析:分析:问题的关键是对输入的字母a、r和f,不论它们是大写还是小写,所对应

11、的操作都是一样的。 利用switch 结构的特点,设计出该问题的算法流程图如图所示。n根据流程图不难写出其程序: example4_10.c分析习题册27页第三、六题【注意】 (1) switch(1) switch后的后的“开关表达式开关表达式”允许为任何类型的表达式。允许为任何类型的表达式。(2) (2) 在每一个在每一个casecase后各常量表达式不能相同,否则会出现错误。后各常量表达式不能相同,否则会出现错误。(3) (3) 在在casecase后,允许有多个语句,可以不用后,允许有多个语句,可以不用 括起来。括起来。(4) case(4) case和和defaultdefault子

12、句出现的先后顺序可以变动,有子句出现的先后顺序可以变动,有breakbreak语句时语句时不会影响程序执行结果。不会影响程序执行结果。defaultdefault子句也可以省略不用。子句也可以省略不用。(5) (5) 多个多个casecase可以共用一组执行语句。例如:可以共用一组执行语句。例如: case A:case A: case B: case B: case C:printf(60n);break; case C:printf(60n);break; (6) break(6) break(中断中断) )语句语句作用:作用:放在放在switchswitch语句的某语句组之后,跳出语句的

13、某语句组之后,跳出( (该层该层)switch)switch语句。语句。放在循环体中,跳出放在循环体中,跳出( (该层该层) )循环语句。循环语句。4.4 Switch 4.4 Switch 语句语句19条件运算符及条件表达式条件运算符及条件表达式switchswitch语句语句课堂小结课堂小结20 必做:必做: 1.1.改错并上机验证运行结果。改错并上机验证运行结果。 2.2.将成绩等级的程序补齐,并上机运行。将成绩等级的程序补齐,并上机运行。 3. 3.成绩等级填空。成绩等级填空。实验实验【分析分析】使用使用switchswitch语句,必须将分数段和等级字母的对应关系转化为语句,必须将分

14、数段和等级字母的对应关系转化为某个常量和等级字母的对应关系。某个常量和等级字母的对应关系。经过分析,我们可以把输入的分数十位上的数字作为考查对象,只需要经过分析,我们可以把输入的分数十位上的数字作为考查对象,只需要将输入的分数除以十,得到的数据就是十位上的数值。将输入的分数除以十,得到的数据就是十位上的数值。用用switchswitchcasecase语句来实现输入一个将百分制成绩转化语句来实现输入一个将百分制成绩转化为为5 5个等级:个等级:9090分以上分以上 打印打印 A A80-89 80-89 打印打印 B B70-79 70-79 打印打印 C C60-69 60-69 打印打印

15、D D60 60 以下以下 打印打印 E E 4.4 Switch 4.4 Switch 语句语句main()int a; scanf(%d,&a); if(a100) printf(data errorn); else switch(a/10) case 10: case 9: printf(An); case 8: printf(Bn); case 7: printf(Cn); case 6: printf(Dn); default: printf(En); 4.4 Switch 4.4 Switch 语句语句 break; break; break; break;break语句的作用:中

16、断语句的作用:中断switch流程。流程。多个标号可以共用相同的语句多个标号可以共用相同的语句default语句可以省略。语句可以省略。程序举例程序举例【例例】输入一个十进制正整数,判断该数是否是输入一个十进制正整数,判断该数是否是3 3的的倍数,若是输出倍数,若是输出Yes!Yes!,否则输出,否则输出“No!No!”【分析分析】输入一个十进制整数,判断是否为输入一个十进制整数,判断是否为3 3的倍数,的倍数,只需考察这个数对只需考察这个数对3 3取余数结果是否为取余数结果是否为0 0,为,为0 0就是就是3 3的倍数,否则就不是的倍数,否则就不是3 3的倍数。的倍数。main() int

17、a; printf(Enter an integer: ); scanf(%d,&a); if(a%3=0) printf(Yes!n); else printf(No!n); #include stdio.hmain ( ) int a, b, c, t ; printf (please input the three number: ); scanf (%d,%d,%d, &a, &b, &c); if (ab) t=a; a=b; b=t; /* a和和b的值交换的值交换 */ if (ac) t=a; a=c; c=t; /* a和和c的值交换的值交换*/ if (b= %d =%dn

18、, a, b, c);【例例】输入输入3 3个数,按从大到小的顺序输出。个数,按从大到小的顺序输出。 【分析分析】设设3 3个数分别是个数分别是a a、b b和和c c,把它们中最大者存放在,把它们中最大者存放在a a中,中,把次大者存放在把次大者存放在b b中,中,c c中存放最小者,然后依次输出中存放最小者,然后依次输出a a、b b和和c c【例】 将一个百分制的成绩转化成将一个百分制的成绩转化成5 5个等级:个等级:9090分以分以上为上为AA,80808989分为分为BB,70707979分为分为CC,60606969分为分为DD,6060分以下为分以下为EE。例如输入。例如输入7575,则显,则显示示C C。【分析分析】先判断输入的数据是否在合理的分数范先判断输入的数据是否在合理的分数范围(围(0 0100100)内,然后再判断是哪个分数段:)内,然后再判断是哪个分数段:9090分以上输出

温馨提示

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

评论

0/150

提交评论