《3.选择结构(精品).ppt》由会员分享,可在线阅读,更多相关《3.选择结构(精品).ppt(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第三章 选择结构Conditional Structure潘理信息与通信工程学院湖南理工学院2/2/2023回顾q表达式是操作数和运算符的集合q关系运算符运用测试两个操作数之间的关系q条件结构解决了程序种需要根据不同情况进行判断的情况q逻辑运算符用于组合多个条件(&和|)或者为某一条件取反(!)2目标q熟练使用多重 if 结构q熟练使用嵌套 if 结构q熟练使用 switch 结构q理解条件运算符的用法3选择结构q if-else 语句的一般形式为:语句的一般形式为:if()else 如果条件为真,执行if 后面的语句块;如果条件为假,则执行else 后面的语句块。4#include void
2、 main()int num;printf(n请输入一个整数:);scanf(%d,&num);if(num%2)=0)printf(%d 是一个偶数。n,num);elseprintf(%d 是一个奇数。n,num);if-else语句的示例内存内存num57请输入一个整数:5757 是一个奇数。5条件结构 q条件结构就是需要根据不同条件进行判断,后执行不同的操作q简单 if 语句的一般形式为:if()如果条件(关系表达式)为真,if 语句执行一个语句或一组语句;如果条件为假,则绕过if 语句块,执行if后面的语句。6#include void main()int num1,num2,sum
3、;printf(n请输入两个数:);scanf(%d%d,&num1,&num2);sum=num1+num2;if(sum 100)printf(n两数的和大于 100 n);简单if语句的示例内存内存num1num2sum5678134请输入两个数:56 78两数的和大于 1007练习q输入一个科目的成绩,判断是否合格,并给出判断结果?(大于等于60分合格)#include void main()float score;printf(请输入分数:);scanf(%f,&score);if(score=60)printf(“恭喜你,通过了!n);elseprintf(“很抱歉,你挂科了!n)
4、;8不能不能上菜上菜有胡萝卜吗?有黄瓜吗?制作胡萝卜沙拉有多重条件判断有可以可以上菜上菜制作黄瓜沙拉制作沙拉没有没有开始做黄瓜沙拉做胡萝卜沙拉有没有不能不能上菜上菜可以可以上菜上菜是否有胡萝卜有没有是否有黄瓜?结束9多重ifq要处理多重条件判断的情况,需要使用多重条件结构多重条件结构嵌套 ifswitch结构多重条件结构多重条件结构多重条件结构多重条件结构10if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;.else 语句n;q多重 if 结构是if-else 的另一种形式,这种形式也称为阶梯式 if-else-if 多重 if 结构真真 假 真真假
5、真真 假 11多重 if 结构示例问题描述:编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于90分输出“优”;成绩大于等于80分小于90分输出“良”;成绩大于等于60分小于80分输出“中”;成绩小于60分输出“差”。#include void main()float grade;printf(n 请输入期末考试成绩:);scanf(%f,&grade);if(grade=90)printf(n 优);else if(grade=80)printf(n 良);else if(grade=60)printf(n 中);else printf(n 差);printf(n
6、);12多重 if 结构示例q从键盘输入一个字符,若为A,表示一等奖,则输出奖金1000元;若为B,表示二等奖,则输出奖金800元;若为C,表示三等奖,则输出奖金500元。#include void main()char ch;printf(“请输入奖励等次:);scanf(%c,&ch);if(ch=A)printf(“奖励1000元n);else if(ch=B)printf(“奖励800元n);else if(ch=C)printf(“奖励500元n);elseprintf(“输入错误!n);13if(x 0)if(y 0)z=1;else z=2;嵌套 if 结构q嵌套 if 结构就是
7、将一个 if 块插入另一个 if 块中q例:若x0且y0,则z=1;若x 0)if(y 0)z=1;else/*这个 else 部分属于哪个 if?*/z=2;嵌套 if 结构 2-2q嵌套 if 结构就是将一个 if 块插入另一个 if 块中C语言规定,每个else 部分与它前面最近的未配对的 if 语句匹配。建议使用大括号括起来以避免看起来有二义性。if(x 0)if(y 0)z=1;else z=2;15注意事项 q先按各种情况分析问题的逻辑关系,然后确定if-else的设计。q如果大条件包含小条件,用if-else嵌套;q如果各个条件是互斥的,则用多重if-else。16嵌套 if 结
8、构示例q输入两个整数,判断它们之间的大于、小于或等于=的关系。#includevoid main()int a,b;printf(n 请输入 a 和 b 的值:);scanf(%d%d,&a,&b);if(a!=b)if(ab)printf(n abn);elseprintf(n abn);elseprintf(n a=bn);17#includevoid main()int a,b;printf(n 请输入 a 和 b 的值:);scanf(%d%d,&a,&b);if(ab)printf(n abn);else if(ab)printf(n a=60).若成绩输入不合法(比如-5,159等
9、),则报告输入错误.#includevoid main()float score;printf(请输入成绩:);scanf(%f,&score);if(score100)printf(成绩输入错误n);else if(score=60)printf(成绩及格n);elseprintf(成绩不及格n);#includevoid main()float score;printf(请输入成绩:);scanf(%f,&score);if(score=0&score=60)printf(成绩及格n);elseprintf(成绩不及格n);elseprintf(成绩输入错误n);19实践q设计程序计算下面
10、函数,并画出流程图。#includevoid main()float x,y;printf(请输入x=);scanf(%f,&x);if(x=2)y=3*x+5;elsey=2*x-10;printf(y=%.2fn,y);20switch 结构printf(“这是迈克尔,身高 180cm,加利福尼亚第 12 大街”);printf(“这是丹尼尔,身高 193cm,现居住地不明,1998 年 12 月 12 日在佛罗里达被捕”);printf(“这是吉姆,身高 175cm,墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”);printf(“未发现匹配项。对不起
11、!”);停止搜索停止搜索停止搜索停止搜索警察记录嫌疑犯照片不是这是吉姆,身高 175cm,墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕不是是21qswitch-case 语句是多路判断语句qswitch语句计算条件表达式,并对照case常数值进行检查匹配switch-case 结构switch(表达式)case 常量 1:语句1;case 常量 2:语句2;default:语句;22switch-case结构流程图switch(表达式)case 常量 1:语句1;case 常量 2:语句2;default:语句;23switch 结构示例q从键盘输入奖励等级
12、 A、B或 C,输出相应等级的所获奖品。等级A:智能手机1部+等级B的奖品等级B:MP4播放器1台+等级C的奖品等级C:8G优盘1个#include void main()char ch;printf(请输入奖励等次:);scanf(%c,&ch);switch(ch)case A:printf(奖励智能手机1部n);case B:printf(奖励MP4播放器1台n);case C:printf(奖励8G优盘1个n);default:printf(输入错误n);24qswitch-case 语句是多路判断语句qswitch 语句计算条件表达式并对照多个常数值进行检查switch-case-b
13、reak结构switch(表达式)case 常量 1:语句;break;case 常量 2:语句;break;default:语句;计算表达式的值如果等于常量1 如果等于常量2 如果没有找到匹配的值 25switch-case结构流程图switch(表达式)case 常量 1:语句;break;case 常量 2:语句;break;default:语句;26switch 结构示例q从键盘输入奖励等级 A、B或 C,输出相应等级的所获奖品。等级A:智能手机1部等级B:MP4播放器1台等级C:8G优盘1个#include void main()char ch;printf(“请输入奖励等次:);s
14、canf(%c,&ch);switch(ch)case A:printf(奖励奖励智能手机1部n);break;case B:printf(“奖励MP4播放器1台n);break;case C:printf(“奖励8G优盘1个n);break;default:printf(输入错误n);27switch结构使用注意事项qswitch结构包括case和default子句,它们的顺序可以变动;q每个case的常量值不能相同;q在case后的多个语句可以不用包括;qbreak语句用于结束子句执行,若case或default子句中没有break语句,会继续执行下一个子句,直到遇到break或 才结束;
15、q最后一个子句可以不用break;qdefault子句可省略,即缺省情况下不做任何事情。28练习题#include void main()char ch;printf(请输入奖励等次:);scanf(%c,&ch);switch(ch)default:printf(输入错误n);case A:printf(奖励1000元n);break;case B:printf(奖励800元n);case C:printf(奖励500元n);break;29实践问题描述:要求用户输入一个字符值并检查它是否为元音字母。/只写出只写出main()函数体部分函数体部分char in_char;printf(n 请
16、输入一个小写字母:);scanf(%c,&in_char);switch(in_char)case a:case e:case i:case o:case u:printf(n 您输入的是元音字母.n);break;default:printf(n 您输入的不是元音字母.n);30示例2-2问题描述:编写一个简单的计算器,实现两个整型数的四则运算。int a,b;char op;printf(“n请输入简单算式:);scanf(%d%c%d,&a,&op,&b);switch(op)case+:printf(n%d+%d=%dn,a,b,a+b);break;case-:printf(n%d-
17、%d=%dn,a,b,a-b);break;case*:printf(n%d%d=%dn,a,b,a*b);break;case/:printf(“n%d/%d=%dn”,a,b,a/b);break;/最好考最好考虑虑除除0问题问题 default:printf(n 运算符错误!);31示例2-3问题描述:用switch结构实现编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩大于等于90分输出“优”;成绩大于等于80分小于90分输出“良”;成绩大于等于60分小于80分输出“中”;成绩小于60分输出“差”。#include void main()int score;pri
18、ntf(请输入成绩:);scanf(%d,&score);switch(score/10)case 0:default:switch(score/10)/枚举表达式的值case 0:case 1:case 2:case 3:case 4:case 5:printf(差n);break;case 6:case 7:printf(中n);break;case 8:printf(良n);break;case 9:case 10:printf(优n);break;default:printf(输入错误.n);32q多重if结构和switch结构都可以用来实现多路分支q在使用switch结构时,其后的表
19、达式是整型表达式,即表达式的值仅限于整型值或字符值.这些值通过每个case子句列出并处理,剩余情况则由default子句来处理.q一般来说,switch结构可由if结构来完成.但反之,if结构不一定适合switch处理.例如:判断某个区段某个区段的情况;实型值的判断等.多重if和switch结构33实践q设计程序计算下面函数,并画出流程图。#includevoid main()float x,y;printf(请输入x=);scanf(%f,&x);if(x=2)y=3*x+5;elsey=2*x-10;printf(y=%.2fn,y);34示例2-1问题描述:要求判别键盘输入字符的类别。可
20、以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII码值小于32的为控制字符。在09之间的为数字,在AZ之间为大写字母,在az之间为小写字母,其余则为其它字符。void main()char c;printf(n 请输入一个字符:);c=getchar();if(c=0&c=A&c=a&c100)value=y;else value=n;value=num 100?y:n;(1)(0)条件表达式使用使用“if-else”的等同代码的等同代码 假设 num=200 value=num 100;?y:n200value=y37条件运算符示例问题描述:个人所得税收取规定:工资大于1
21、000元的部分将扣除5的个人所得税。小于1000元的部分不扣除个人所得税。要求用户输入基本工资,计算税后工资。#include void main()double sal;double rate;printf(n 请输入基本工资:);scanf(%lf,&sal);rate=(sal=1000)?0:0.05;sal=sal-(sal-1000)*rate;printf(n 税后工资为:%7.2f n,sal);38总结q多重if结构 vs 嵌套if结构q每个else部分总是属于前面最近的那个缺少对应的else部分的if语句qswitch结构也可以用于多分支选择。用于分支条件是整型表达式,而该整型表达式的值是可以罗列的,然后根据表达式的值,执行不同的分支q条件运算符?:是 ifelse 语句的另一种表现形式39作业q完成习题集1.3(下周四检查)q预习循环结构q准备实验三1,2,3,5(下周五)40
限制150内