c程序设计5(ch3 分支)

上传人:mg****85 文档编号:49744714 上传时间:2018-08-02 格式:PPT 页数:46 大小:327.50KB
返回 下载 相关 举报
c程序设计5(ch3 分支)_第1页
第1页 / 共46页
c程序设计5(ch3 分支)_第2页
第2页 / 共46页
c程序设计5(ch3 分支)_第3页
第3页 / 共46页
c程序设计5(ch3 分支)_第4页
第4页 / 共46页
c程序设计5(ch3 分支)_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《c程序设计5(ch3 分支)》由会员分享,可在线阅读,更多相关《c程序设计5(ch3 分支)(46页珍藏版)》请在金锄头文库上搜索。

1、Ch3 C程序流程设计1分析问题 确定算法 编写程序 调试程序 整理结果2Niklaus Wirth 公式:程序=数据结构+算法3程序=数据结构+算法+程序设计方法+语言工具+程序设计人员43.1 算 法5一、算法概念 1.算法概念 算法:解决问题的方法与步骤。 如:某菜品制作步骤就是加工该菜肴的算法;乐谱就是演奏某乐曲的算法;太极拳动作图解就是打太极拳的算法。 例1(清华P14例2.2)写出输出50个学生成 绩中大于等于80分者的算法。 假设:i 为学生人数ni 为第i个学生的学号gi 为第i个学生的成绩6则算法如下: S1: 1 i S2: 输入ni, gi 的值S3: 如果gi80,则输

2、出ni,gi 的值,否则不 输出 S4: i+1 i S5: 若i50,则返回S2;否则算法结束2.算法优劣标准: 正确、简单3.算法种类:数值计算算法与非数值计算算法(清华P14) 7二、算法特性(清华P18) 1.有穷性 2.确定性(无歧义性) 3.有效性 4.有零个或多个输入 5.至少有一个输出 三、算法的组成要素(高教P56) 1.操作(算数运算、逻辑运算、关系运算、函数运算、 位运算、I/O操作等) 2.控制结构(顺序结构、选择结构、循环结构)8四、算法的描述(清华P19,高教P57) 1.用自然语言描述算法 2.用传统流程图描述算法 (组成元件见清华P19图2.3)例2(清华P20

3、例2.7/高教P59求n!)例3.用传统流程图描述求解两个整数中的最 大值的算法。9例3.开 始定义int a,b,cab输入a,b的值a cb c输出c 的值结 束103. 用N_S流程图描述算法 (组成元件见 清华P20图2.24至2.27/高教P59图3.6)例4. 用N_S流程图描述求解两个整数中的最大值 的算法。例5. (例1的N_S图)定义int a,b,c输入a,b的值aba cb c输出c 的值yn定义int i,ni,gi输入ni,gigi80i+1 i1 i输出ni,giyn当 i50例4例5114.用伪代码描述算法用伪代码描述算法就是用介于自然语言与计 算机语言之间的文字

4、与符号来描述算法。 例6. (对应例5)BEGIN1 iwhile i50input ni,giif gi80 print ni and gii+1 iEND125.用程序设计语言描述算法 计算机无法识别流程图和伪代码,只有用程序设 计语言描述的算法,才能被计算机执行、实现。 与伪代码不同,用程序设计语言描述算法时,必 须严格遵守所用语言的语法规则。 例7. (例6中算法的C语言描述.高教P61例3.1类似) main() int i=1,n,g;while(i=80) printf(“%d,%dn”,n,g);i=i+1;133.2 结构化 程序设计方法14一、程序设计方法及其发展 二、结构

5、化程序设计方法 1.结构化程序设计方法(功能抽象,化整为零,逐步细化) 2.结构化程序设计原则(高教P61例3.1后归纳总结)(1).模块化(2).自顶向下(3).逐步求精 3.结构化程序的特点(1).由三种基本结构顺序组成(清华P28)(2).每个程序块只有一个入口和一个出口(3).没有死语句(执行不到的语句)(4).没有死循环设计的模块化。划分模块时,模块的独立性 要强;扇出数要恰当(25个,9个); 大小要适中(50100条语句, 500 条)。编码的结构化。应选择结构化程度高的程序 设计语言编码。154.三种基本结构(图示其传统框图和N_S图。高教P58)(1).顺序结构(2).分之结

6、构(单分支、二分支、多分支)(3).循环结构(当型循环、直到型循环)任何一个结构化程序都由这三种基本结构 顺序组成,在基本结构之间不存在向前或 向后的跳转,流程的转移只存在于一个基 本结构之内。163.3 C程序整体结构 与C语句17一、C程序整体结构 C程序源程序文件2源程序文件n函数1源程序文件1预处理命令全局变量声明函数n函数说明部分函数体局部变量声明执行语句18二、C语句(个高教P64,P68图示) 1.控制语句(清华P68,9种,控制程序流程) 2.函数调用语句(由一次函数调用加;构成)如:printf(“%d”,32+5); 3.表达式语句(由一个表达式+;构成)如:x=3; 4.

7、空语句(由一个;构成): ; 5.复合语句(花括号括起的多个语句) 如:int x,y; x=2; y=3;193.4 三种基本控制结构 程序设计203.3.1 顺序结构程序设计(按语句出现的先后顺序执行,高教习题 ) 例从终端输入三角形三边的值(假设能构成三角形),求三角形的面积 设a,b,c,s,area分别为三边,半周长和面积, 则 area=s=(a+b+c)/2 框图和程序如下:21开始输入a,b,c(a+b+c)/2 sarea输出area结束#include main( ) float a,b,c,s,area;printf(“Input a,b,c:n”);scanf(“%f%

8、f%f”,s=(a+b+c)/2.0;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(“area=%fn”,area);223.3.2 分支结构程序设计(根据一定的条件有选择地执行) 一、if语句的三种形式 1. if(表达式) 语句_单分支结构表达式 0非0语句 如: if(xy) z=x;说明:格式中的”语句”称为if语句的 内嵌语句内嵌语句只能是一个语句;若 有多个,应用大括号括起来,成 为一个复合语句if(xy) z=x;x=y;23内嵌语句可以是空语句 if(xy) ;特别: if(xy) z=x; 可以写成:if(xy)z=x; 但不能写成: if(xy)

9、;z=x; 格式中的”表达式” 一般是表示条件的逻辑表达式或 关系表达式,但它可以是任意的数值类型的表达式( 整型,实型,字符型等)如 if(32) printf(“OK!n”);if(a) printf(“%dn”,a); 都是正确的 24例2.输入二整数,求a,b中的最 大值,并放在maxv中。 main( ) int a,b,maxv;scanf(“%d%d”,maxv=a;if(ay) temp=x; x=y; y=temp;if(xz)temp=x; x=z; z=temp;if(yz) temp=y; y=z; z=temp;Printf(“%f,%f,%fn”,x,y,z) ;成

10、本P30例3.6,高教习题262.if_else(二分支结构) 格式: if(表达式)语句1else 语句2功能: 根据条件控制程序流程表达式语句1 语句2非00说明:格式中if语 句,else语句 的内嵌语句均 可以是空语句, 也可以是复合 语句,还可以是 分支语句语句1与语 句2只能被执 行其一.27例4.用if_else结构改写例2中的程序 main( ) int a,b,maxv;scanf(“%d%d”,if(a=0)if(x0) y=1;else y=0;else y=-1;29程序3:将程序1中的if 语句改为: y=-1; if(x!=0)if(x0) y=1; else y=

11、0;程序4:将程序1中的if 语句改为: y=0; if(x=0)if(x0) y=1; else y=-1;分析之,并据程序画出相应的框图. 注意: if和else的内嵌语句后都必须有分号; else子句不能单独使用,必须与if语句配对 使用:从最内层开始,与前面最近的if配对.高教P70例3.4303.if_else if(多分支结构) 格式: if(表达式1) 语句1 else if (表达式2) 语句2else if (表达式3) 语句3else if (表达式n-1) 语句n-1else 语句n31功能:根据条件控制程序流程表达式1表达式2 表达式n-1语句1 语句2 语句n-1 语

12、句n非00非0非000032例7.某运输公司运费规定如 下(cost为运费,x为距离)0 x500.05 x50 cost= 0.075 x1000.10 x3000.15 x500 根据距离远近,输出运费. 程序如右:main( ) int x; float cost;scanf(“%f”, if(x60n”);break; 42执行完一个case子句后,流程转移到下一 case子句继续执行,若只需执行一个语句 后退出switch结构,可以在该case子句 的执行语句序列最后使用break语句。 例10.清华P75例3.7main( ) float value1,value2;char op

13、erator;printf(“type in your expresssion.n”);scanf(“%f%d%f”,例11.(用switch结构改写例8) 43case+: printf(“%fn”, value1+value2);break;case-: printf(“%fn”, value1-value2);break;case*: printf(“%fn”, value1*value2);break;case/: if(value2=0)printf(“division by zero.n”);else printf(“%fn”,value1/value2);break;defaul

14、t: printf(“unknwon operator.n”); switch( ) operator注意break;语句的有与无!44例12.假设学生成绩为A,B,C,D四等,其中A为90100分,B为8089分,C为7079分, D为6069分,E为不及格要求:输入成绩等级,输出百分制成绩段。 main( ) char grade; scanf(“%c”,case caseB: printf(“8089n”);break;caseC: printf(“7079n”);break;caseD: printf(“6069n”);break;caseE: printf(“60n”);break;

15、default : printf(“error!n”); switch( )grade A: printf(“90100n”); break;45思考: 如果上例中输入百分制成绩,输出成绩等级, 程序应做何修改? 例12中的程序可否用if_else if结构实现? 如何实现? 归纳与比较: if_else if结构与switch结构是多分支的两种 不同形式: if_else if多用于多条件并列测试,从中取一的情况; switch结构则用于单条件测试,从中取一的情况. 作业:清华P105 5.4, 5.5, 5.6, 5.8, 5.9高教P96:1,2(1,2,3,4),5,7,补充题自学教材P77例3.846

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号