




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第4章章 选择结构程序设计选择结构程序设计本章要点:本章要点:if语句语句if语句的嵌套语句的嵌套条件运算符条件运算符switch语句语句选择结构程序设计选择结构程序设计学习方法建议:学习方法建议:学习本章内容应重点掌握学习本章内容应重点掌握if语句的执行过程,在此基础语句的执行过程,在此基础上,掌握上,掌握if语句、语句、switch语句格式及应用,学会编写选择结语句格式及应用,学会编写选择结构程序。本章的难点是构程序。本章的难点是if语句的嵌套和语句的嵌套和switch语句的应用。语句的应用。4.1 引例引例1问题描述问题描述学生助学金评定学生助学金评定助学金是高等院校资助贫困学生的一项
2、重要举措,助学金是高等院校资助贫困学生的一项重要举措,一般助学金的评定要参考学生的学习成绩。假定助一般助学金的评定要参考学生的学习成绩。假定助学金的评选规则为:综合平均成绩在学金的评选规则为:综合平均成绩在90分及以上的分及以上的同学可获一等助学金;在同学可获一等助学金;在 80分(包括分(包括80分)至分)至90分之间的同学可获二等助学金;在分之间的同学可获二等助学金;在60分(包括分(包括60分)分)至至80的同学可获三等助学金;的同学可获三等助学金;60分以下的同学不能分以下的同学不能获助学金。获助学金。2引例分析引例分析首先用最简单的方式处理评定结果:根据某位同学首先用最简单的方式处理
3、评定结果:根据某位同学的成绩判断他能否获取助学金,输出不获得助学金的成绩判断他能否获取助学金,输出不获得助学金的提示信息,算法的流程图如图的提示信息,算法的流程图如图4-1所示。所示。3程序代码程序代码 实现引例算法的程序代码:实现引例算法的程序代码:#includemain() int score; printf(input score:); scanf(%d,&score); if (score60) printf(no grant!n);4.2 if语句语句4.2.1 if语句语句 1第一种格式第一种格式格式:格式:if (表达式表达式) 语句语句1 ;功能:首先计算表达式的值,
4、若值为功能:首先计算表达式的值,若值为“真真”(非(非0),),则执行语句则执行语句1;表达式的值为;表达式的值为“假假”(0),则直接转),则直接转到此到此if语句的下一条语句去执行。语句的下一条语句去执行。(1)if语句中的语句中的“表达式表达式”必须用必须用“( )”括起来。括起来。(2)当)当if(表达式)后面的语句,仅由一条语句构成(表达式)后面的语句,仅由一条语句构成时,可不使用大括号时,可不使用大括号,但是语句但是语句1由两条或两条以上语由两条或两条以上语句构成句构成,就必须用大括号就必须用大括号“ ”括起来构成复合语句。括起来构成复合语句。图图4-2 if4-2 if语句第一种
5、格式流程图语句第一种格式流程图main() int a,b,x; scanf(a=%d,b=%d,&a,&b); if (ab)x=a; a=b; b=x; /*交换交换a与与b单元的内容单元的内容*/ printf(a=%d,b=%d,a,b);第一次运行结果为:第一次运行结果为: 输入输入a=10,b=20 a=20,b=10 第二次运行结果为:第二次运行结果为: 输入输入a=30,b=5 a=30,b=5【例【例4.1】比较两个数】比较两个数,按由大到小输出。按由大到小输出。if(表达式表达式) 语句语句1;else 语句语句2;功能:计算表达式的值,若表达式的值为功能:
6、计算表达式的值,若表达式的值为“真真”(非(非0或或t),则),则执行语句执行语句1;表达式的值为;表达式的值为“假假”(0或或f),则执行语句),则执行语句2。2第二种格式第二种格式【例【例4.2】 由由4.1节引例可知,当输入一个大于节引例可知,当输入一个大于60分的成绩,程分的成绩,程序无任何显示。因此,有必要进一步补充助学金评定结果的信息,序无任何显示。因此,有必要进一步补充助学金评定结果的信息,无论结果如何,都给出提示信息。程序代码修改如下:无论结果如何,都给出提示信息。程序代码修改如下:#includemain() int score; printf(input score:);
7、scanf(%d,&score); if (score60) printf(sorry! you dont get a grant.n ); else printf(congratulations! you may get grant money. n); 【例【例4.3】 从两个数中找出较大的数。从两个数中找出较大的数。#includemain() int a,b,max; printf(input two scores: ); scanf(%d%d,&a,&b); if (ab) max=a; else max=b; printf(max=%dn,max); 运行结
8、果为:please input three numbers:6 ,9 ,13max=13main() int num1,num2,num3,max; printf(please input three numbers:); scanf(%d,%d,%d,&num1,&num2,&num3); if (num1num2) max=num1; else max=num2; if (num3max) max=num3; printf(the three numbers are:%d,%d,%dn,num1,num2,num3); printf(max=%dn,max); 【例
9、【例4.4】 输入任意三个整数输入任意三个整数num1、num2、num3,求三个数中的最大值。,求三个数中的最大值。if (表达式表达式1) 语句语句1;else if (表达式表达式2) 语句语句2;else if (表达式表达式3) 语句语句3;else if (表达式表达式n) 语句语句n;else 语句语句 n+1;3第三种格式第三种格式图图4-3 if语句第三种格式流程图语句第三种格式流程图【例【例4.5】 使用使用if-else语句完善了助学金评定引例,实际上引例显示的信息语句完善了助学金评定引例,实际上引例显示的信息仍然有限。我们希望依据某位同学的成绩,程序可以判断出他能否获取
10、助学仍然有限。我们希望依据某位同学的成绩,程序可以判断出他能否获取助学金,而且还可以详细地显示助学金的等级。引例的程序代码修改如下:金,而且还可以详细地显示助学金的等级。引例的程序代码修改如下:#includemain() int score; printf(input a score(0100):); scanf(%d,&score); if (score=90) /*90分及以上为一等助学金分及以上为一等助学金*/ printf(grant grade : 1n); else if (score=80) /*80分(包括分(包括80分)至分)至90分之间为二等助学金分之间为二等助学
11、金*/ printf(grant grade: 2n); else if (score=60) /*60分(包括分(包括60分)至分)至80为三等助学金为三等助学金*/ printf(grant grade : 3n); else /*60分以下不能获取助学金分以下不能获取助学金*/ printf(no grant!n); 【例【例4.6】 输入一个字符,判定它的类别,比如是数字、小写字母、输入一个字符,判定它的类别,比如是数字、小写字母、大写字母、控制字符或其他字符。大写字母、控制字符或其他字符。#includemain() char c; printf(input a character:
12、 ); c=getchar(); if(c=0&c=a&c=a&c=z) /*判定是否为小写字母判定是否为小写字母*/ printf(this is a small lettern); else /*判定是否为其他字符判定是否为其他字符*/ printf(this is an other charactern); if语句中又包含一个或多个语句中又包含一个或多个if语句称为语句称为if语句语句的嵌套。一般形式为:的嵌套。一般形式为:if()() if()() 语句语句1; else 语句语句2 ;else if()() 语句语句3; else 语句语句4;4.2.2 i
13、f语句的嵌套语句的嵌套【例【例4.7】 使用嵌套的使用嵌套的if语句实现相同的功能,首先根据成绩的取值范围语句实现相同的功能,首先根据成绩的取值范围处理分为两种情况:有或者没有助学金,如果有则进一步判别等级是一等、处理分为两种情况:有或者没有助学金,如果有则进一步判别等级是一等、二等或三等助学金。二等或三等助学金。#includemain() int score; printf(input score value between 0 and 100: ); scanf(%d,&score); if (score=60) if (score80) printf(grant grade:
14、3n); else if (score90) printf(grant grade: 2n); else printf(“grant grade: 1n”); else printf(no grant!n); 【例【例4.8】 if语句的嵌套应用。语句的嵌套应用。#includemain() int a,b; printf(input a,b=); scanf(%d,%d,&a,&b); if (ab) printf(ab n); else /*此此else与距离它最近的与距离它最近的if(ab)配对配对*/ if(ab) printf(ab ? a : b当当a=2 b=1
15、时,时,x=2 条件运算符的优先级,高于赋值运算符,但低于关系运算符条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。其结合性为和算术运算符。其结合性为“从右到左从右到左”(即右结合性)。(即右结合性)。例如:例如:x= ab? a : (cd ? c : d)当当a=1 b=2 c=3 d=4时时 x=44.2.3 条件运算条件运算符符【例【例4.9】 从键盘上输入一个字符,如果它是大写字母,则从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。把它转换成小写字母输出;否则,直接输出。#includemain() char ch; printf(
16、input a character: ); scanf(%c,&ch); /*输入一个字符输入一个字符*/ ch=(ch=a&ch=z)?(ch+32):ch; /*若是大写字母则转若是大写字母则转换成小写字母,否则直接输出换成小写字母,否则直接输出*/ printf(ch=%cn,ch); 4.3 switch语句语句语言还提供了另一种用于多分支选择的语言还提供了另一种用于多分支选择的switch语句,语句,这种语句把一个表达式的值和一个整数或字符常量表中的元这种语句把一个表达式的值和一个整数或字符常量表中的元素逐一比较,发生匹配时,与匹配常数关联的语句被执行。素逐一比较,发
17、生匹配时,与匹配常数关联的语句被执行。switch语句的一般形式:语句的一般形式:switch(表达式表达式)case 常量表达式常量表达式1:语句:语句1;break; case 常量表达式常量表达式2:语句:语句2;break; . case 常量表达式:语句常量表达式:语句n;break; default:语句:语句n+1;break; 【例【例4.10】 使用使用swicth语句实现语句实现“助学金评定助学金评定”引例的编程,完成助学金等级的判引例的编程,完成助学金等级的判别。别。#includemain() int score; printf(input score value be
18、tween 0 and 100: ); scanf(%d, &score); switch (score/10) case 10: case 9: printf(grant grade: 1n); break; case 8: printf(grant grade:2n); break; case 7: case 6: printf(grant grade 3n); break; case 5: case 4: case 3: case 2: case 1: case 0: printf(no grant!n); break; default: printf(the score is
19、out of range!n);4.4 程序设计举例程序设计举例【例【例4.11】有一函数】有一函数 ,输入,输入x值,输出对应的值,输出对应的y值。值。main() int x,y;printf(input x:);scanf(%d,&x);if(x1) y=x;else if(x10) /*此时此时x1在判断在判断x10则相当于满足条件则相当于满足条件(1x10)*/ y=2*x-1;else y=3*x+1; /*前面判断前面判断x不小于不小于1,也不小于也不小于10即满足条件即满足条件x10*/printf(y=%dn,y);运行结果为:运行结果为:input x:5 y=9
20、10) x()101 () 1(1312xxxxxy【例【例4.12】 已知三角形的三条边长已知三角形的三条边长a、b、c,求三角形面积。计算三角形面积,求三角形面积。计算三角形面积的海伦公式为:的海伦公式为: ,其中,其中s = (a+b+c)/2。#include#includemain() float a,b,c,s,area; printf(plese input three sides of triangle:n); scanf(%f,%f,%f,&a,&b,&c); /*输入三角形的三条边长输入三角形的三条边长a,b,c*/ if (a+bc & a
21、+cb & b+ca) /*是否满足三角形的条件是否满足三角形的条件*/ s=1.0/2*(a+b+c); /*计算三角形周长的一半计算三角形周长的一半*/ area=sqrt(s*(s-a)*(s-b)*(s-c); /*利用海伦公式计算三角形面积利用海伦公式计算三角形面积*/ printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s); printf(area=%.2fn,area); /*输出三角形面积输出三角形面积*/ else /*如果不满足三角形条件,则输出三角形的边值出错如果不满足三角形条件,则输出三角形的边值出错*/ printf(
22、the value of triangle sides error!); )()(csbsassarea【例【例4.13】 输入一个数,判断它是奇数还是偶数,如果是输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为奇数则进一步判断它是否为3的倍数。的倍数。#includemain( ) int x; scanf (%d,&x); if (x%2!=0) /*判断判断x是否为奇数是否为奇数*/ printf(%d is an odd n,x) ; if (x%3=0) /*判断判断x是否是是否是3的倍数的倍数*/ printf(%d is the times of 3 n,
23、x) ; else printf(%d is an even n,x) ; 【例【例4.14】 求一元二次方程求一元二次方程ax2+bx+c=0的解(的解(a0)。)。#include#includemain() float a,b,c,disc,x1,x2,p,q; scanf(%f,%f,%f, &a, &b, &c); /*输入一元二次方程的系数输入一元二次方程的系数a,b,c*/ disc=b*b-4*a*c; if (fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); /*求出两个不相等的实根求出两个不相等的实根*/ x2=(-b
24、-sqrt(disc)/(2*a); printf(x1=%7.2f,x2=%7.2fn, x1, x2); else p=-b/(2*a); /*求出两个共轭复根求出两个共轭复根*/ q=sqrt(fabs(disc)/(2*a); printf(x1=%7.2f + %7.2f in, p, q);/*输出两个共轭复根输出两个共轭复根*/ printf(x2=%7.2f - %7.2f in, p, q); 能被能被4整除,但不能被整除,但不能被100整除。整除。 能被能被400整除。整除。main() int year; printf(please input the year:); s
25、canf(%d,&year); if (year%4=0 & year%100!=0)|(year%400=0) printf(%d is a leap year.n,year); else printf(%d is not a leap year.n,year); 【例【例4.15】判别某一年是否为闰年。判断闰年的条件为下面二者之一:】判别某一年是否为闰年。判断闰年的条件为下面二者之一:运行结果为:运行结果为:输入输入1989 1989 is not a leap year.输入输入2000 2000 is a leap year.上机实验上机实验1熟练掌握熟练掌握if语句的
26、基本结构;语句的基本结构;2学会利用学会利用if语句编写选择结构程序;语句编写选择结构程序;3学会利用学会利用switch语句编写选择结构语句编写选择结构程序。程序。一、实验目的一、实验目的1验证性实验验证性实验1)以下程序实现计算两个数的商,请验证程序运行结果。)以下程序实现计算两个数的商,请验证程序运行结果。#include main() int a,b; printf(“input two int number:n”); scanf(“%d%d”,&a,&b); if (b=0) printf(divided by zeron); else printf(“%fn”,1.0*a/b); 二、实验内容二、实验内容2)程序改错)程序改
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电商平台大数据分析助力电商装修辅料行业精准营销策略研究报告
- 2025年成人教育线上学习模式创新终身学习理念下的教学模式变革
- 锂电池生产技术改造项目可行性研究报告
- 高精度海洋流速计行业深度调研及发展项目商业计划书
- 高精度地图更新服务行业跨境出海项目商业计划书
- 神经保护食品补充剂行业深度调研及发展项目商业计划书
- 书法艺术工作坊企业制定与实施新质生产力项目商业计划书
- 乡村宠物寄养服务企业制定与实施新质生产力项目商业计划书
- 亲子旅游线上推广行业深度调研及发展项目商业计划书
- 环保塑料餐具设计行业跨境出海项目商业计划书
- GB/T 4340.2-2025金属材料维氏硬度试验第2部分:硬度计的检验与校准
- 普惠金融大学试题及答案
- 2025年公共营养师考试的重点知识回顾试题及答案
- 带状疱疹知识
- 2025-2030纳米银行业市场深度调研及前景趋势与投资研究报告
- 全媒体运营师运营管理技能试题及答案
- 职业教育“双师型”教师队伍建设路径与质量提升研究
- 青年红色筑梦之旅活动
- 高中主题班会 常规管理促状态规范月课件-高二上学期主题班会
- 拓扑结构特征提取-深度研究
- 家具鉴赏知到智慧树章节测试课后答案2024年秋东北林业大学
评论
0/150
提交评论