程序=算法+数据结构
一个程序主要包括对数据的描述和对操作的描述两方面的信息;
数据结构
对数据的描述,在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式,这就是数据结构。
算法
对操作的描述,解决“做什么”和“怎么做”的问题,要求计算机进行操作的步骤,也就是算法。
程序中的操作语句实际上就是算法的体现。
算法、数据结构、程序设计方法和语言工具4个方面是一个程序设计人员所应具备的知识,在设计一个程序时要综合运用这几方面知识。
算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。
计算机算法可分为两大类别:
数值运算算法和非数值运算算法
数值运算
目的:求数值解。
有现成的模型,可以运用数值分析方法;数值运算算法的研究比较深入,算法比较成熟,对各类数值运算都比较成熟的算法可供选用。
非数值运算
涉及面十分广泛,最常见的是用于事务管理领域。
非数值运算的种类繁多,要求各异,难以做到全部都有现成的答案,只有一些典型的非数值运算算法,如排序算法、查找搜索算法等有现成的、成熟的算法可供使用。许多问题往往需要使用者参考已有类似算法的思路,重新设计解决特定问题的专门算法。
算法的特性
有穷性
一个算法应包含有限的操作步骤,而不是无限的。
确定性
算法中的每一个步骤都应当是确定的,而不是含糊的、摸棱两可的。
有零个或多个输入
所谓输入是指在执行算法时需要从外界取得的必要的信息。
有一个或多个输出
算法的目的是为了求解,“解”就是输出。
有效性
算法中的每一步骤都应当能有效执行,并取得确定的结果。
算法的表示方法
常用的方法有:自然语言、传统流程图、结构化流程图和伪代码等。
自然语言表示算法
自然语言通俗易懂,但文字冗长、容易出现歧义,除了那些简单的问题外,一般不用自然语言表示算法。
流程图表示算法
流程图表示算法,直观形象、易于理解。
流程线不要忘记箭头哦,因为它是反映流程先后的,如不画出箭头就难以判定各框的执行次序了;
用流程图表示算法直观形象,比较清楚地显示出各个框之间的逻辑关系
三种基本结构和改进的流程图
传统流程图的弊端
传统流程图对流程线图地使用没有严格限制,可以不受限制地使流程随意地转来转去,毫无规律,难以阅读和修改,使算法的可靠性和可维护性难以保证。
如同乱麻一样的算法称为“BS型算法”,意为一碗面条。
三种基本结构
顺序结构:
顺序结构是最简单的,按顺序执行的一种基本结构。
选择结构:
选择结构又称选取结构或分支结构。根据给定条件是否成立而执行对应操作。
循环结构:
当型(while型)循环结构:
直到(until型)循环结构:
用N-S流程表示算法
用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。
它如同一篇文章一样,自上而下地写下来,每一行(或几行)表示一个基本操作。
它不用图形符号,因此书写方便,容易看懂,也便于向计算机语言算法(即程序)过度。
用伪代码写算法并无固定的、严格地语法规则,可以用英文、也可以用中英混用,只要把意思表达清楚,便于书写和阅读即可,书写地格式要写成清晰易读地形式。
用计算机语言表示算法
要完成一项工作,包括设计算法和实现算法两个部分。
例如:
以下是用c语言算法求出的5!。
求多项式1-1/2+1/3-1/4....-1/100的值。
结构化程序设计方法
结构化程序设计方法的基本思路:
把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
采取以下方法来保证得到结构化的程序:
(1)自顶而下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编码;
划分子模块时应注意模块的独立性,即使用一个模块完成一项目功能,耦合性越少越好,把一个大任务划分成几个小模块就相对简单了。
由基本结构所构成的算法属于结构化算法,结构化算法不存在无规律转向。
结构化编码,所谓编码就是将已设计好的算法用机器语言来表示,即根据已经细化的算法正确地写出计算机程序。结构化的语言都有与三种基本结构对应的语句,进行结构化程序是不困难的。有了正确的算法,任何语言进行编码都不是什么困难的事。
以上就是作者这两天学习的一点点收获,如果有错误或疑问的地方欢迎指正噢