02--算法
程序=算法+数据结构
一个程序主要包括
-
对数据的描述
-
对操作的描述
数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。
著名计算机科学家沃思提出一个公式:
算法+数据结构=程序
算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用适合的方法。
什么是算法
广义地说:为了解决一个问题而采取的方法和步骤,就称为“算法”。
计算机算法可以分两大类别:
-
数值运算算法——目的是求数值解
-
非数值运算算法
算法的特性
-
有穷性
-
确定性
-
有零个或多个输入
-
有一个或多个输出
-
有效性——每一个步骤都应当能有效地执行,并得到确定的结果
怎样表示一个算法
常用的有以下几种方法:
1、自然语言——人们日常使用的语言
2、传统流程图——用框架来表示各种操作
一个流程图应该包括以下几部分:
-
表示相应操作的框
-
带箭头的流程线
-
框内外必要的文字说明
三种基本结构
1966年,Bohra和Jacopini提出了以下3种结构:
-
顺序结构
-
选择结构
-
循环结构:
-
当型(while型)循环结构
-
直到型(until型)循环结构
-
三种结构都有以下共同特点:
-
只有一个入口
-
只有一个出口
-
结构内的每一部分都有机会被执行到
-
结构内不存在“死循环”
3、N-S流程图
1973年,美国学者I.Nassi和B.Shneiderman提供了一种新的流程图表示:
4、伪代码
为了设计算法时方便,常用一种称为伪代码的工具。
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。
例如:
求5! begin (算法开始) 1 => t 2 => i whiile i <= 5 { t * i => t i + 1 => i } print t end ( 算法结束)
结构化程序设计方法
一个结构化程序就是用计算机语言表示的结构化算法。
结构化程序设计强调程序设计风格和程序结构的规范化、提倡清晰的结构。
为保证得到结构化的程序需要采取以下方法:
-
自顶向下
-
逐步细化
将问题求解有抽象到具体化的过程
-
模块化设计
模块的独立性—使用一个模块完成一项功能
-
结构化编码
编码就是将己设计好的算法用计算机语言表示出来。
根据已经细化的算法正确地写出计算机程序。