下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 选择结构程序设计,4.1 选择结构和条件判断 4.2 用if语句实现选择结构 4.3关系运算符和关系表达式 4.4 逻辑运算符和逻辑表达式 4.5 条件运算符和条件表达式 4.6 选择结构的嵌套 4.7 用switch语句实现多分支选择结构 4.8选择结构程序综合举例,4.1 选择结构和条件判断,在现实生活中,需要进行判断和选择的情况是很多的 如果你在家,我去拜访你 如果考试不及格,要补考 如果遇到红灯,要停车等待 周末我们去郊游 70岁以上的老年人,入公园免票,4.1 选择结构和条件判断,在现实生活中,需要进行判断和选择的情况是很多的 处理这些问题,关键在于进行条件判断 由于程序处理
2、问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断,4.1 选择结构和条件判断,C语言有两种选择语句: (1)if语句,实现两个分支的选择结构 (2)switch语句,实现多分支的选择结构,4.1 选择结构和条件判断,例4.1 在例3.5的基础上对程序进行改进。题目要求是求 方程的根。 由键盘输入a,b,c。假设a,b,c的值任意,并不保证 。需要在程序中进行判别,如果 ,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。,解题思路:,输入a,b,c,计算disc,disc0,计算x1,x2,输出无实根,输出x1,x2,真,假,#include #in
3、clude int main ( ) double a,b,c,disc,x1,x2,p,q; scanf(%lf%lf%lf,计算b2-4ac,disc的值变为-15,if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0; ,-150为真,#include #include int main ( ) double a,b,c,disc,
4、x1,x2,p,q; scanf(%lf%lf%lf,计算b2-4ac,disc的值变为8,if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0; ,80为假,p的值变为-1,q的值变为0.71,x1的值变为-0.29,x2的值变为-1.71,if (disc0) printf(“has not real rootsn”); else p
5、=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0; ,选择结构,用if语句实现的,if (disc0) printf(“has not real rootsn”); else p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf(“real roots:nx1=%7.2fn x2=%7.2fn”,x1,x2); return 0; ,复合语句,4.2 用if语句实现
6、选择结构,4.2.1 用if语句处理选择结构举例 4.2.2 if语句的一般形式,4.2.1 用if语句处理选择结构举例,例4.2 输入两个实数,按代数值由小到大的顺序输出这两个数。,解题思路: 只需要做一次比较,然后进行一次交换即可 用if语句实现条件判断 关键是怎样实现两个变量值的互换,A,B,互换前,A,B,互换后,4.2.1 用if语句处理选择结构举例,A,B,C,4.2.1 用if语句处理选择结构举例,A,B,C,4.2.1 用if语句处理选择结构举例,A,B,C,4.2.1 用if语句处理选择结构举例,#include int main() float a,b,t; scanf(%
7、f,%f, ,将a和b的值互换,如果ab,#include int main() float a,b,t; scanf(%f,%f, ,选择结构,用if语句实现的,例4.3 输入3个数a,b,c,要求按由小到大的顺序输出。,解题思路:可以先用伪代码写出算法: if ab,a和b对换 (a是a、b中的小者) if ac,a和c对换 (a是三者中最小者) if bc,b和c对换 (b是三者中次小者) 顺序输出a,b,c,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 ab,将a和b对换,a是a、b中的小者,#include int ma
8、in() float a,b,c,t; scanf(%f,%f,%f, ,如果 ac,将a和c对换,a是三者中的小者,#include int main() float a,b,c,t; scanf(%f,%f,%f, ,如果 bc,将b和c对换,b是三者中的次小者,4.2.2 if语句的一般形式,if (表达式) 语句1 else 语句2 ,关系表达式 逻辑表达式 数值表达式,方括号内的部分为可选的,4.2.2 if语句的一般形式,if (表达式) 语句1 else 语句2 ,简单的语句 复合语句 另一个if语句等,最常用的3种if语句形式: 1. if (表达式) 语句1 (没有else子
9、句) 2. if (表达式) 语句1 else 语句2 (有else子句) 3. if(表达式) 语句 else if(表达式) 语句 else if(表达式) 语句 else if(表达式) 语句 else 语句m+1 (在else部分又嵌套了多层的if语句),if(number 500) cost = 0.15; else if (number 300) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) cost = 0.05; else cost=0;,if (number 500) cost = 0.
10、15; else if (number 300) cost = 0.10; else if (number 100) cost = 0.075; else if (number 50) cost = 0.05; else cost = 0;,等价于,分号不能丢,说明: (1)整个if语句可写在多行上,也可写在一行上 但都是一个整体,属于同一个语句 (2)“语句1”“语句m”是if中的内嵌语句 内嵌语句也可以是一个if语句 (3)“语句1”“语句m”可以是简单的语句,也可以是复合语句,4.3关系运算符和关系表达式,4.3.1关系运算符及其优先次序 4.3.2 关系表达式,4.3.1关系运算符及其
11、优先次序,关系运算符: 用来对两个数值进行比较的比较运算符 语言提供种关系运算符: (小于) = (小于或等于) (大于) = (大于或等于) = (等于) != (不等于),优先级相同 (高),优先级相同 (低),4.3.1关系运算符及其优先次序,关系、算术、赋值运算符的优先级,4.3.1关系运算符及其优先次序,ca+b 等效于 c(a+b) ab=c 等效于 (ab)=c a=bc 等效于 a=(bc),4.3.2 关系表达式,关系表达式 用关系运算符将两个数值或数值表达式连接起来的式子 关系表达式的值是一个逻辑值,即“真”或“假” 在C的逻辑运算中,以“”代表“真”,以“”代表“假”,4
12、.4 逻辑运算符和逻辑表达式,4.4.1 逻辑运算符及其优先次序 4.4.2 逻辑表达式 4.4.3 逻辑型变量,4.4.1 逻辑运算符及其优先次序,3种逻辑运算符: else max=b;,max = (a b) ? a : b;,条件运算符,4.5 条件运算符和条件表达式,有一种if语句,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值 如:if (ab) max=a; else max=b;,max = (a b) ? a : b;,条件表达式,4.5 条件运算符和条件表达式,条件表达式的一般形式为 表达式?表达式: 表达式,4.5 条件运算符和条件表达式,
13、条件运算符的执行顺序: 求解表达式1 若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,4.5 条件运算符和条件表达式,条件运算符优先于赋值运算符 条件运算符的结合方向为“自右至左” 以下为合法的使用方法: ab ? (max=a):(max=b); ab ? printf(“%d”,a): printf(“%d”,b);,4.5 条件运算符和条件表达式,例4.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,4.5 条件运算符和条件表
14、达式,解题思路:用条件表达式来处理,当字母是大写时,转换成小写字母,否则不转换,4.5 条件运算符和条件表达式,#include int main() char ch; scanf(%c, ,4.6 选择结构的嵌套,在if语句中又包含一个或多个if语句称为if语句的嵌套 一般形式: if( ) if( ) 语句1 else 语句2 else if( ) 语句3 else 语句4,内嵌if,else总是与它上面最近的未配对的if配对,4.6 选择结构的嵌套,在if语句中又包含一个或多个if语句称为if语句的嵌套 if () if () 语句1 else语句2,内嵌if, 限定了内嵌if范围,4.
15、6 选择结构的嵌套,例4.5有一函数: 编一程序,输入一个x值,要求输出相应的y值。,4.6 选择结构的嵌套,解题思路: 用if语句检查x的值,根据x的值决定赋予y的值 由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现,4.6 选择结构的嵌套,解题思路:方法1 (1) 先后用3个独立的if语句处理: 输入x 若 x 0, 则y = 1 输出x和y,scanf(%d,4.6 选择结构的嵌套,解题思路:方法2 (2) 用一个嵌套的if语句处理: 输入x 若x 0, 则y = -1 否则 若 x = 0, 则y = 0 否则 y = 1 输出x和y,scanf(
16、%d,4.6 选择结构的嵌套,解题思路:方法2 (2) 用一个嵌套的if语句处理: 输入x 若x 0, 则y = -1 否则 若 x = 0, 则y = 0 否则 y = 1 输出x和y,scanf(%d,scanf(%d,提倡内嵌if放在else中,4.7 用switch语句实现多分支选择结构,switch语句用来实现多分支选择结构 学生成绩分类 85分以上为A等 7084分为B等 6069分为C等 人口统计分类 按年龄分为老、中、青、少、儿童,4.7 用switch语句实现多分支选择结构,例4.6 要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为7084分,C等为6069分
17、 ,D等为 60分以下 。成绩的等级由键盘输入。,4.7 用switch语句实现多分支选择结构,解题思路: 判断出这是一个多分支选择问题 根据百分制分数将学生成绩分为4个等级 如果用if语句,至少要用3层嵌套的if,进行3次检查判断 用switch语句进行一次检查即可得到结果,#include int main() char grade; scanf(%c, ,值为A,#include int main() char grade; scanf(%c, ,不能少,#include int main() char grade; scanf(%c, ,值为C,#include int main()
18、char grade; scanf(%c, ,值为F,#include int main() char grade; scanf(%c, ,此行位置有问题,应如何修改?,switch语句的作用是根据表达式的值,使流程跳转到不同的语句 switch语句的一般形式: switch(表达式) case 常量1 :语句1 case 常量2 :语句2 case 常量n :语句n default : 语句n+1 ,整数类型(包括字符型),switch语句的作用是根据表达式的值,使流程跳转到不同的语句 switch语句的一般形式: switch(表达式) case 常量1 :语句1 case 常量2 :语句
19、2 case 常量n :语句n default : 语句n+1 ,不能相同,scanf(%c, ,scanf(%c, ,scanf(%c, ,例4.7 编写程序,用switch语句处理菜单命令。 解题思路:在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个A或a字符,就会执行A操作,输入一个B或b字符,就会执行B操作,等等。,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1
20、(a,b);break; case b: case B: action2(a,b);break; default: putchar(a); return 0; ,输入a或A,调用action1函数,执行A操作,void action1(int x,int y) printf(x+y=%dn,x+y); ,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; ca
21、se b: case B: action2(a,b);break; default: putchar(a); return 0; ,输入b或B,调用action2函数,执行B操作,void action2(int x,int y) printf(x*y=%dn,x*y); ,#include int main() void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) case a: case A: action1(a,b);break; case b: case B: a
22、ction2(a,b);break; default: putchar(a); return 0; ,输入其他字符,发出警告,这是一个非常简单的示意程序 实际应用中,所指定的操作可能比较复杂: A:输入全班学生各门课的成绩 B:计算并输出每个学生各门课的平均成绩 C:计算并输出各门课的全班平均成绩 D:对全班学生的平均成绩由高到低排序并输出 可以按以上思路编写程序,把各action函数设计成不同的功能以实现各要求,4.8选择结构程序综合举例,例4.8 写一程序,判断某一年是否闰年。 解题思路:在前面已介绍过判别闰年的方法 本例用不同的方法编写程序,4.8选择结构程序综合举例,用变量leap代表
23、是否闰年的信息。若闰年,令leap=1;非闰年,leap=0。最后判断leap是否为(真),若是,则输出“闰年”信息 参见教材图4.13,#include int main() int year,leap; printf(enter year:); scanf(%d, ,标志变量,与if (leap!=0)含义相同,#include int main() int year,leap; printf(enter year:); scanf(%d, ,采取锯齿形式,#include int main() int year,leap; printf(enter year:); scanf(%d, ,
24、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 ,例4.9 求 方程的解。,解题思路:处理以下各情况 ,不是二次方程 ,有两个相等实根 ,有两个不等实根。 ,有两个共轭复根。 应当以p+qi和p-qi的形式输出复根 其中,p=-b/2a,q=( )/2a 参见教材图4.14,#include #inc
25、lude int main() double a,b,c,disc,x1,x2,realpart, imagpart; scanf(%lf,%lf,%lf,实型不能用if (a=0),else disc=b*b-4*a*c; if(fabs(disc)=1e-6) printf(has two equal roots:%8.4fn, -b/(2*a); else,先算disc,以减少重复计算,不能用if (disc=0),if(disc1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(has distinct real
26、 roots:%8.4f and %8.4fn,x1,x2); else, realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf( has complex roots:n); printf(%8.4f+%8.4fin“ ,realpart,imagpart); printf(%8.4f-%8.4fin, realpart,imagpart); return 0; , realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf( has complex roots:n); printf(%8.4f+%8.4fin“ ,realpart,imagpart); printf(%8.4f-%8.4fin, realpart,imagpart); return 0; , realpa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版交通枢纽保安服务合同终止及交通秩序保障协议3篇
- 2024年度电力工程索赔风险评估与控制合同3篇
- 2024商铺租赁租赁保证金管理与退还合同协议书2篇
- 2024年度农业项目担保借款及支持政策合同3篇
- 2024年度广告发布合同标的及广告投放方案6篇
- 2024年度游乐场演艺节目外包合同3篇
- 2024版二手房购房贷款合同签订流程与细节3篇
- 2024年度商场文创产品开发与合作合同3篇
- 2024年度艺术展览售票及接待服务合同3篇
- 2024年度知识产权保护与维权服务合同2篇
- GB/T 18277-2000公路收费制式
- 2023年住院医师规范化培训胸外科出科考试
- 11468工作岗位研究原理与应用第7章
- 2023实施《中华人民共和国野生动物保护法》全文学习PPT课件(带内容)
- 2022年初级育婴师考试题库附答案
- 系统家庭疗法课件
- 新版GSP《医疗器械经营质量管理规范》培训试题
- 初中道德与法治答题技巧课件
- 管理学专业:管理基础知识试题库(附含答案)
- 河北省保定市药品零售药店企业药房名单目录
- 广西基本医疗保险门诊特殊慢性病申报表
评论
0/150
提交评论