收藏 分享(赏)

语言第02章ppt课件.ppt

上传人:微传9988 文档编号:3370942 上传时间:2018-10-20 格式:PPT 页数:34 大小:632.50KB
下载 相关 举报
语言第02章ppt课件.ppt_第1页
第1页 / 共34页
语言第02章ppt课件.ppt_第2页
第2页 / 共34页
语言第02章ppt课件.ppt_第3页
第3页 / 共34页
语言第02章ppt课件.ppt_第4页
第4页 / 共34页
语言第02章ppt课件.ppt_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、1,第2章 程序的灵魂-算法,2.0 引言 2.1 算法的概念 2.2 简单算法举例 2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化程序设计方法 Return,2,程序应包含2方面的内容: 对数据的描述: 程序中指定数据的类型和数据的组织形式-数据结构 对操作的描述:操作的步骤,即算法数据是操作的对象,操作的目的是对数据加工处理以得到期望的结果.以厨师需菜谱打比方.沃思提出了一个公式: 数据结构 + 算法 = 程序 除了上面2个主要方面还有其他因素,程序可表示为: 程序 = 算法 + 数据结构 + 程序设计方法 + 语言工具和环境4方面中:算法是灵魂,数据结构是加工对象,语言是工

2、具,编程要采用合适的方法.本书不单单讲算法或是语言规则,而是结合这4方面,如何编写C程序,Return,2.0 引言,3,2.1 算法的概念,算法:解决一个问题而采取的方法和步骤 做任何事情都有一定的步骤.如开会,购物,考大学,按一定顺序进行,缺一不可,日常生活中人们意识不到每件事都需事先设计出“行动步骤”。 并不是只有“计算”的问题才有算法.例如:太极拳的拳谱,乐谱 不仅要保证算法正确,还要考虑的是算法的质量.例如求解 本书只考虑计算机算法. 数值算法: 目的是求数值解. 如求方程的根,求积分等 非数值算法: 包括的面非常广泛.最常见的用在事物管理领域Return,4,2.2 简单算法举例,

3、案例2.1求 5! 。 方法1: 步骤1:先求12,得结果2 步骤2:将步骤1的结果乘以3,得结果6 步骤3:6再乘以4,得24 步骤4:24再乘以5,得最后的结果120。 分析:算法正确,但太烦琐。若要求1000 !,要写多少步骤呢?且不方便的是每次都直接使用上一步骤的结果方法2:设变量p为被乘数(乘积),i为乘数,改写如下 S1:使p=1 S2:使i=2 S3:p ip S4:i+1 i S5:若i不大于5,则回到S3;否则算法结束。最后的p就是5! 分析:若求1 3 5 7 9 11,只做很少的改动即可。S2:i=3 S4:i+2 i S5:i11,回到S3,否则结束。说明方法2简练且通

4、用。若条件改成i11,结果会怎样?,5,案例2.2有50个学生,要求将他们之中成绩在80分以上者打印出来。变量i作为下标,用它来控制序号, ni代表第i个学生学号,gi代表第i个学生的成绩。算法如下: S1:1i S2:gi80,则打印ni和gi,否则不打印 S3:i+1 i S4:若i 50,返回S2;否则算法结束,6,案例2.3判定20002500年中的每一年是否是闰年,将结果输出 分析:满足下列条件之一就是闰年:条件1,能被4整除,但不能被100整除;条件2,能被100整除同时又能被400整除 设y为被测年份,算法如下: S1:2000y S2:若y不能被4整除,则输出y“不是闰年”。转

5、到S6 S3:若y能被4整除,不能被100整除,则输出y“是闰年”,转到S6 S4:若y能被100整除,又能被400整除,则输出y“是闰年”;否则输出“不是闰年”。然后转到S6 S5:输出y“不是闰年” S6:y+1 y S7:若y2500,转S2继续执行。否则算法停止。,7,考虑算法时,应仔细分析所需判断的条件,如何一步步缩小被判断的范围。有的问题,与判断条件的先后次序有关,根据具体问题决定逻辑。,8,案例2.4求级数的和:用有含义的单词作变量名,易于理解。sum表示累加和,deno是分母denominator缩写,sign代表数值的符号,term代表某一项,算法如下: S1:1sign S

6、2:1sum 初始化工作 S3:2deno S4:(-1)signsign S5: sign(1/deno)term S6:sum+term sum 循环部分 S7:deno+1 deno S8:若deno100返回S4,否则算法结束 跳出循环条件,9,案例2.5对一个大于或等于3的正整数,判断它是否是素数。分析:素数的概念;判断一个数n是否素数的方法,将n作为被除数,将2到(n-1)各个整数轮流作除数,若都不能被整除,则n是素数。算法如下 S1:输入n的值 S2:2i S3:n被i除,得余数r S4:若r为0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5 S5: i+1i

7、S6:若in-1,返回S3;否则打印n“是素数”,然后结束 实际上,n不必被2到n-1的所有整数除,只需被2到n/2间整数除即可,甚至只需被2到 之间的整数除即可。 Return,10,2.3 算法的特性,有穷性 一个算法应包含有限的操作步骤,而不能是无限的。如算法包含语句:for( i=1 ; i0 ; i+ ) 。实际上,“有穷性”是指在一个“合理的范围内”。若让计算机执行一个历时几千年才结束的算法,虽然是有穷的,但超过了合理的限度。“合理限度”无严格标准,根据常识和需要而定 确定性 算法中的每一步骤的含义都应当是确定唯一的,不应当产生“歧义性”。如“手举过头顶” “n被一个整数除,得余数

8、r。” 有零个或多个输入 输入是指在执行算法时需要从外界取得必要的信息。例如,算法:判断一个数是否是素数,求2个整数的最大公约数,求n个数的方差等。当然也可以没有输入。 有一个或多个输出 算法的目的就是求解,解就是输出。不一定是计算机打印输出。没有输出的算法没有意义 有效性 算法的每一步骤应当有效的执行,得到确定的结果。如一个除数为0表达式是不能有效执行的。 算法如同“黑箱子”,从外部特性了解算法的作用,就可使用算法。但自己要学会设计算法 Return,11,2.4 怎样表示算法,2.4.1 用自然语言表示算法 2.4.2 用传统流程图表示算法 2.4.3 三种基本结构和改进的流程图 2.4.

9、4 用N-S流程图表示算法 2.4.5 用伪代码表示算法 2.4.6 用计算机语言表示算法Return,12,2.4.1 用自然语言表示算法,2.2节 算法举例中讲的算法就是用自然语言表示的。自然语言就是日常使用的语言,如汉语,英语等。 通俗易懂,但文字冗长,易出现“歧义” “张先生对李先生说他的孩子考上了大学”,他指的谁? 描述包含分支和循环的算法,不是很方便 适用描述简单的问题Return,13,2.4.2 用流程图表示算法,用图形表示算法,直观形象,易理解。美国国家标准化协会ANSI(american national standard institute)规定了一些常用的流程图符号:,

10、14,案例2.6,案例2.1 求5!的算法的流程图,流程图一般包括以下几个部分:表示相应操作的框;带箭头的流程线(反映各框的执行次序);框内外的文字说明.,15,案例2.7,图2.9 案例2.2的流程图表示:输入50个学生的学号和成绩且将80分以上的打印出来,16,案例2.8 判断闰年算法的流程图表示,17,案例2.9 求 (案例2.4)的算法的流程图表示,18,案例2.10 判断素数的算法 (案例2.5)的流程图表示,传统流程图的优点:直观形象,逻辑关系清楚 缺点是:篇幅较多,费时又不方便. N-S结构化流程图已代替传统的流程图,Return,返回图2.34,19,2.4.3 三种基本结构和

11、改进的流程图,传统流程图的弊端 对流程线没有严格的限制,复杂的算法就会使流程图变得毫无规律,难以阅读和修改,算法的可靠性和可维护性不能得到保证(见书中P24 图 2.13) 为提高算法的质量,必须限制流程的随意转向.可算法不可能由一个个框按顺序执行.所以人们设想规定了几种基本结构,由各个基本结构顺序排列组成算法. 三种基本结构 顺序结构(最简单) 选择结构(又称选取或分支结构) 循环结构(重复结构) 当型(While) 直到型(Until),20,共同特点:只有一入口(a点) 只有一出口(b点) 每一部分都有机会被执行 结构内不存在死循环 具有以上特点的都可作为基本结构,但最基本就是以上3种,

12、其他的可以看作为由3种最基本结构派生出来的. Return,程序演示1,程序演示2,21,2.4.4 用N-S流程图表示算法,1973年美国人Nassi和Shneiderman提出了新的流程图形式,即N-S结构化流程图。适合结构化程序设计,省略掉了带箭头的流程线,算法写在一个矩形框内,还可以包含框。 用到以下流程图符号:其他的可用这几种结构组合。如图2.24中的A可以是选择结构,B可以是循环结构,22,23,24,图 2.34变换使符合基本结构的特点,以解决2个出口点的问题。加了个标志变量w,25,N-S的优点: 比文字描述直观、形象、易理解 比传统流程图紧凑易画,废除了流程线,由各个基本结构

13、按顺序组成 总之,结构化的算法由一些基本结构按顺序组成的;基本结构又可以包含其他的基本结构;流程的跳转只存在基本结构范围内,之间不存在;非结构化的算法可以用等价的结构化算法代替;若算法不能分解成若干个基本结构,必然不是结构化的算法,Return,26,2.4.5 用伪代码表示算法,设计算法时要反复修改,画、修改流程图麻烦。为方便常用称为伪代码的工具。 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法的。每一行(或几行)表示一个操作。不用图形符号,书写方便,格式紧凑,易懂,向计算机语言算法过渡方便 计算机语言中的语句关键字用英文表示,其他可用汉字表示,以便于书写和阅读为原则。无固定的

14、语法规则,只要把意思表达清楚,写成清晰易读的形式。 优点:书写格式自由,易表达设计者的思想,容易修改。缺点:不如流程图直观,可能会出现逻辑上的错误。适合软件专业人员,初学者一般采用N-S。下面看几个例子:,27,例2.16 求5! BEGIN1t2iwhile i=5 ti ti+1 i print END,例2.17 打印出50个学生中成绩高于80分的学号和成绩 BEGIN1iwhile i=50 input ni and gii+1 i 1iwhile i=50 if gi80 print ni and gii+1 i END,28,例2.18 判闰年 BEGIN2000ywhile y=

15、2500 if y被4整除if y 不被100整除print y;“是闰年”elseif y被400整除print y;“是闰年” elseprint y;“非闰年”end ifend ifelseprint y;“非闰年”end ify+1y END,例2.19 求 BEGIN1sum2deno1signwhile deno=2500 (-1)sign signsign 1/deno termsum+term sumdeno+1denoprint sum END,Return,29,2.4.6 用计算机语言表示算法,设计算法的目的是实现算法。作曲家创作曲谱和演奏家演奏乐谱、菜谱和厨师炒菜 实

16、现算法的方式有多种:人工心算、笔算和用计算器等。我们的任务就是用计算机实现算法,那就要用计算机语言编写程序 例2.20 5!算法用C语言表示: #Include void main() int i,t; t=1; i=2;while(i=5) t=t*i; i=i+1;printf(“%d”,t); ,程序演示,30,例2.21 求 算法用C语言表示 #Include void main() int sign=1;float deno=2.0,sum=1.0,term;while(deno=100)sign=-sign;term=sign/deno;sum=sum+term;deno=deno

17、+1;printf(“%f”,sum); ,程序演示,Return,31,2.5 结构化程序设计方法,结构化程序便于编写、阅读、修改和维护,减少程序出错的机会,提高可靠性,保证质量。 结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构,怎样得到一个结构化的程序呢?基本思路为:把复杂问题分解成多个阶段,而每一阶段都容易理解和处理。具体地说,有以下4种方法可得到结构化程序:自顶向下逐步细化模块化设计结构化编码 接受一任务后怎样着手进行呢?有2种方法,以写文章来说,自顶向下,逐步细化自下而上,逐步积累。提倡第一种方法,即是用工程的方法设计程序,例如设计房屋。此方法的过程是将问题求解由抽

18、象逐步具体化的过程,也便于验证,在向下一层展开前要本层设计的正确。下面看一个实例,32,例2.22 将1到1000之间的素数打印出来。 用“筛法”求解,即用“埃拉托色尼筛法”:在纸上写上1到1000全部整数,判断一个素数就把它挖掉。,33,34,也可用伪代码来描述逐步细化过程,如: 输入1n各数 把所有非素数去掉 打印全部素数i=1 while in把未挖的xi打印出来(if xi 不等于0 then print xi)i=i+1 根据程序模块的功能可划分若干个子模块,若有必要还可划分更小的模块.子模块在C语言中是用函数实现的,一般不超过50行,这样便于组织和阅读.划分时应注意模块的独立性,即完成一项功能且模块间耦合少.Return,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医学治疗 > 基础医学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报