版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三章第三章 选择结构程序设计选择结构程序设计3.1 3.1 算法及其描述方法算法及其描述方法w 算法的概念算法的概念w 怎么样表示一个算法怎么样表示一个算法w 结构化程序设计方法的基本思想结构化程序设计方法的基本思想算法的基本概念算法的基本概念w 所谓算法,就是指为解决特定问题而采所谓算法,就是指为解决特定问题而采取的有限操作步骤。取的有限操作步骤。程序程序=数据结构数据结构+算法算法描述问题处描述问题处理的对象及理的对象及其关系其关系描述对问题描述对问题处理对象的处理对象的处理规则处理规则算法举例算法举例l已知苹果价格和公斤数,求苹果总价格算法:已知苹果价格和公斤数,求苹果总价格算法: 步
2、骤步骤1 1:输入苹果价格和所需公斤数:输入苹果价格和所需公斤数 步骤步骤2 2:处理数据,求得苹果总价格。:处理数据,求得苹果总价格。 步骤步骤3 3:输出苹果总价格。:输出苹果总价格。 我们把这种将问题归结为有规律的操作步骤,并我们把这种将问题归结为有规律的操作步骤,并且用有限多个步骤来表示的具体过程就称之为且用有限多个步骤来表示的具体过程就称之为算法算法。l对同一个问题,可以有不同的解题方法和步骤。对同一个问题,可以有不同的解题方法和步骤。算法的表示算法的表示w自然语言描述法自然语言描述法w流程图描述法流程图描述法w 伪代码描述法伪代码描述法w NS流程图描述法流程图描述法1、 自然语言
3、描述法自然语言描述法w 自然语言描述法:自然语言描述法: 自然语言描述就是用人们日常使用的语自然语言描述就是用人们日常使用的语言,如:汉语、英语或其他语言来描述算法言,如:汉语、英语或其他语言来描述算法。用自然语言来描述和表示算法的优点是。用自然语言来描述和表示算法的优点是通通俗易懂俗易懂,缺点是文字过于,缺点是文字过于冗长冗长,容易出现歧,容易出现歧义性。因此,除了简单的问题外,一般不用义性。因此,除了简单的问题外,一般不用自然语言描述算法。自然语言描述算法。2 传统流程图描述法传统流程图描述法w 算法常用算法常用“流程图流程图”描述,更直观,容易阅读和理解。描述,更直观,容易阅读和理解。w
4、 流程图中基本的图形符号流程图中基本的图形符号无角矩形框无角矩形框(开始(开始/结束框)结束框)矩形框矩形框(操作框)(操作框)菱形框菱形框(条件判断框)(条件判断框)平行四边形框平行四边形框(输入(输入/输出框)输出框)流程线流程线连接点连接点totalPriceprice*quantity开始开始结束结束输出输出totalPrice输入苹果每公斤价格输入苹果每公斤价格 price功能:功能:已知苹果价格和公斤数,求苹果总价格的流程图已知苹果价格和公斤数,求苹果总价格的流程图输入苹果公斤数输入苹果公斤数 quantityvoid apple() float price, totalPrice
5、; int quantity; scanf(“%f”,&price); scanf(“%d”,&quantity); totalPrice=price * quantity; printf(“%f”,totalPrice);3 N- S 图表示法图表示法1973年美国学者年美国学者I . Nassi 和和 B . Shneiderman提出一种新提出一种新的流程图形式。的流程图形式。 NS流程图符号:流程图符号:AB顺序结构顺序结构 P成立成立 不成立不成立 A B选择结构选择结构 当当P成立成立A当型循环当型循环 直到P为假A直到型循环直到型循环构成程序的三种基本结构构成程序
6、的三种基本结构w 顺序结构顺序结构w 选择结构选择结构w 循环结构循环结构w 已经证明,任何程序均可只用这三种结构已经证明,任何程序均可只用这三种结构综合描述综合描述w 只用这三种结构编制的程序,叫结构化程只用这三种结构编制的程序,叫结构化程序序w 程序必须符合结构化规则程序必须符合结构化规则结构化程序设计的核心思想结构化程序设计的核心思想w 采用顺序、选择和循环三种基本结构作为采用顺序、选择和循环三种基本结构作为程序设计的基本单元程序设计的基本单元 n只有一个入口;只有一个入口;n只有一个出口;只有一个出口;n无死语句,即不存在永远都执行不到的语句;无死语句,即不存在永远都执行不到的语句;n
7、无死循环,即不存在永远都执行不完的循环。无死循环,即不存在永远都执行不完的循环。w 采用采用“自顶向下、逐步求精自顶向下、逐步求精”和模块化的和模块化的方法进行结构化程序设计方法进行结构化程序设计 课堂练习课堂练习w 问题问题1:从键盘输入大写字母,用小写字:从键盘输入大写字母,用小写字母输出到屏幕上。母输出到屏幕上。w 解题思路:解题思路:n分析大写字母、小写字母的关系,得到转换方法;分析大写字母、小写字母的关系,得到转换方法;n写出处理问题的步骤(算法);写出处理问题的步骤(算法);n根据算法,编写程序。根据算法,编写程序。流程图流程图开始开始输入一个大写字母输入一个大写字母c1c2c13
8、2输出一个小写字母输出一个小写字母c2结束结束源程序参考源程序参考#include void change() char c1,c2; c1=getchar(); printf(%c,%dn,c1,c1); c2=c1+32; printf(%c,%dn,c2,c2); 输入:A 输出:A,65 a,973.2 3.2 基本控制结构基本控制结构N 成绩成绩60=60output “pass”endyesno #include void pass() int mark;scanf(%d,&mark); if(mark=60)printf(passn); 表达式(通常表达式(通常是逻辑或关
9、系是逻辑或关系表达式)必须表达式)必须用(),右括用(),右括号后面没有号后面没有“;”if的内嵌语句要有缩进的内嵌语句要有缩进分支结构程序示例二分支结构程序示例二*24 要求:从键盘输入两个整数要求:从键盘输入两个整数a和和b,如果,如果a大于大于b则交换两数则交换两数,最最后输出两个数。后输出两个数。abab交换交换a a、b b真真假假输入输入a,b输出输出a,b开始开始结束结束*25#include void swap(int *p1,int *p2);int main( )int a,b; printf(nInput a,b: );scanf(%d,%d,&a,&b)
10、;swap(&a,&b);printf(a=%d, b=%dn,a,b); return 0;void swap(int *p1,int *p2)int t;if(*p1*p2)t = *p1;*p1 = *p2 ;*p2 = t;262 双分支选择双分支选择if语句语句语句形式:语句形式:语句执行流程:语句执行流程:if (表达式)表达式) 语句语句1;else 语句语句2 ; 表达式语句1真(非0)假(0)语句2结束结束输入输入c c开始开始27要求:要求:输入一个字符,输入一个字符,判断它是否是判断它是否是09之间之间的字符的字符,并显示相应提,并显示相应提示。示。? ?
11、c c是数字是数字真真假假c c不是数字不是数字怎么判断一个字符是怎么判断一个字符是否是否是09之间之间的字符呢?的字符呢?#include void TestDigit();int main() TestDigit(); return 0; void TestDigit() char c; printf(input a character:); c=getchar(); if(c = 0 & c b) a+;b+; else a=0;b=10; 一定记得不能丢!后没有分号29*3 多分支选择多分支选择if语句语句 语句形式:语句形式:if (表达式1) 语句1;else if (表达
12、式2)语句2; else if (表达式n)语句n; else 语句n+1;30w 语句执行流程:语句执行流程:表达式表达式1 1语句语句1真真(非非0)假假(0)真真(非非0)语句语句2表达式表达式2 2真真(非非0)表达式表达式n n语句语句n语句语句n+1假假(0)假假(0)if (表达式1) 语句1;else if (表达式2)语句2; else if (表达式n)语句n; else 语句n+1;31*例:分段函数的计算例:分段函数的计算 0 (x50)假假x0 x0真真x50y=xy=x* *x xy=xy=xy=0y=0假假真真分析设计:x是int;y是double;获得获得x x
13、#include int main() int x; scanf(%d,&x); if(x=0&x50) printf(y=%dn,x*x); else if(x=50) printf(y=%dn,x); else printf(y=%dn,x*x); else if (x=50) printf(y=%dn,x); else printf(y=%dn,x*x); return 0; 32*例:分段函数的计算例:分段函数的计算 0 (x50)假y=0输入xx50真0 x50y=x*xy=x假真If 语句的嵌套语句的嵌套v一般形式:一般形式:if (条件1) if (条件2) 语句
14、1 else 语句2else if(条件3) 语句3 else 语句4内嵌if内嵌ifvif 嵌套的几种变形嵌套的几种变形if (条件1) 语句1else if (条件2) 语句2 else 语句3内嵌ifif (条件1) if (条件2) 语句1 else 语句2else 语句3内嵌ifif (条件1) if (条件2) 语句1else if (条件3) 语句2 else 语句3内嵌ifif (条件1) if (条件2) 语句1else if (条件3) 语句2 else 语句3内嵌if内嵌if注意:else 总是与前面最近的if 配对。内嵌if内嵌if35*注意事项注意事项w else与与
15、if的配对原则:的配对原则:n一个一个if 最多配一个最多配一个else,可以不配;可以不配;nelse与最接近它与最接近它if相匹配相匹配/*结果是2*/常见错误: if (x0) ; if (x=2) if (1=x0”); y=x-1;例如:以下函数的输出结果是什么? void test_xy( ) int x=2,y=-1,z=2; if (xy) if (y0) z=0; else z+=1; printf(“%dn”,z); 哦,原来是因为else 总是与靠近它的if配对 实例实例w 体型判断。按体型判断。按“体指数体指数”对肥胖程度进行对肥胖程度进行划分:划分: 体指数体指数t
16、= 体重体重w / (身高身高h)2 (w 单位为公斤,单位为公斤,h单位为米)单位为米)n当当t = 27时,为肥胖。时,为肥胖。要要 求求w 编程从键盘输入身高编程从键盘输入身高h和体重和体重w,根据给定公式计算,根据给定公式计算体指数体指数t,然后判断体重属于何种类型,给出提示。,然后判断体重属于何种类型,给出提示。w 用函数完成,已知函数声明为用函数完成,已知函数声明为w void JudgeBodyIndex(float height,float weight);w 分别用以下三种方式实现,要求画出流程图。分别用以下三种方式实现,要求画出流程图。 n(1)不带不带else子句的子句的
17、if语句编程;语句编程;n(2)在在if子句中嵌入子句中嵌入if语句的形式编程;语句的形式编程;n(3)用在用在else子句中嵌入子句中嵌入if语句的形式编程;语句的形式编程;38*小结小结w 分支结构有三种形式,分别用什么语句分支结构有三种形式,分别用什么语句实现的?实现的?n单分支结构单分支结构n双分支结构双分支结构n多分支结构多分支结构if (表达式)语句1;if (表达式)语句1;else 语句2;if 语句嵌套问题: 编写函数将一个百分制成绩score,按下列原则转换成等级:score90,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级
18、为D;score60,等级为E。分析设计自变量score是int函数值是char函数头:char grade(int score)39*5 switch语句语句 1、语句形式:、语句形式:switch (表达式)(表达式) case 常量常量1: 语句语句1; case 常量常量2: 语句语句2; case 常量常量3: 语句语句3; . case 常量常量n: 语句语句n; default : 语句语句n+1; 。数值型或字符型常量1n的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号举举例例void weekday()int weekday;pr
19、intf(n输入一个整数:输入一个整数:);scanf(%d,&weekday);switch(weekday) case 1: printf(Mondayn);case 2: printf(Tusedayn);case 3: printf(Wedesdayn);case 4: printf(Thursdayn);case 5: printf(Fridayn);case 6: printf(Saturdayn);case 0: printf(Sundayn);该函数被调用执行后的效果如下:casecase语句出现的次序语句出现的次序直接影响执行结果。直接影响执行结果。41*breakb
20、reak语句语句w 中断当前开关语句中断当前开关语句 或者或者 中断当前循环中断当前循环w 语句形式:语句形式:break;break;的应用的应用void one_weekday()int weekday;printf(输入一个整数:);scanf(%d,&weekday);switch(weekday) case 1: printf(Mondayn);break;case 2: printf(Tusedayn);break;case 3: printf(Wedesdayn);break;case 4: printf(Thursdayn);break;case 5: printf(F
21、ridayn);break;case 6: printf(Saturdayn);break;case 0: printf(Sundayn);break;default : printf(n 值不符合要求n);该函数被调用执行后的效果如下:break;break;的应用的应用该函数被调用执行后的效果如下:如果有如果有breakbreak;casecase语句出语句出现的次序并现的次序并不影响执行结果。不影响执行结果。switch-caseswitch-case语句执行流程:语句执行流程:指语句的最指语句的最后一条是否后一条是否为为break;简单语句或简单语句或复合语句复合语句breakbrea
22、kbreakbreak有有无无breakbreak有有无无有有计算表达式计算表达式常量常量1 1常量常量2 2常量常量n n=语句语句1 1=语句语句2 2语句语句n n其它其它=语句语句n+1n+1无无值值如果有如果有breakbreak;casecase语句出语句出现的次序并现的次序并不影响执行结果。不影响执行结果。45*分支结构程序示例分支结构程序示例w “成绩等级成绩等级”问题问题要求:要求: 获取一个百分制成绩获取一个百分制成绩score,按下列原则输出,按下列原则输出其等级:其等级:score90,等级为,等级为A;80score90,等级为,等级为B;70score80,等级为,等级为C;60score70,等级为,等级为D;score=90: printf(“Got An”); case score=60:printf(“Got Dn”); break;break;实例实例- -选择合适的语句选择合适
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧农业技术研发绩效表
- 催办2026年4月20日生产设备采购确认函(3篇)范文
- 传统酿酒工艺优化改进成效考核表
- 复古游戏测试团队考核评估表
- 酒店入住服务改进方案集
- 影视娱乐业导演作品创作能力KPI考核表
- 高层住宅电梯维保不到位安全隐患预防方案
- 农作物新品种推广与种植技术研究报告
- 航空公司飞行员飞行操作与安全绩效考评表
- 农业科技研发人员农作物产量及科技应用成果绩效评定表
- 2024年10月 财务管理学(00067)自考真题
- 2026全国广播电视播音员主持人资格考试(综合知识)历年参考题库含答案详解
- 2026 年冬季取暖防一氧化碳中毒课件
- 第7课《培养德智体美劳全面发展的社会主义建设者和接班人》课件
- 变电站舞动灾害应急演练脚本
- 2026年辅警考试时事政治练习题附答案
- 2025四川成都兴城投资集团有限公司招聘11人笔试历年典型考点题库附带答案详解
- 2026年中级注册安全工程师《建筑施工安全》押题宝典题库附答案详解AB卷
- 2025年股份制银行审计人员招聘考试真题(含答案)
- 汽车救援人员培训及考核规范
- 低钾血症诊治管理专家共识摘要2026
评论
0/150
提交评论