第二章:算法——程序的灵魂

第二章:算法——程序的灵魂

2.1 程序 = 算法 + 数据结构

一个程序主要包括以下两方面的信息:

  • 数据的描述。在程序中指定用到哪些数据,以及这些数据的类型和数据的组织形式。这就是数据结构。
  • 操作的描述。要求计算机进行操作的步骤,也就是算法。

数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法)。直到今天,以下的公式对于过程化程序来说依然是适用的:
算 法 + 数 据 结 构 = 程 序 算法 + 数据结构 = 程序 +=
算法、数据结构、程序设计方法和语言工具4个方面是一个程序设计人员所应具备的知识。

2.2 什么是算法

广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。
计算机算法可分为两大类别:数值运算算法和非数值运算算法。

  • 数值运算的目的是求数值的解,如求方程的根等。
  • 非数值运算涉及的面十分广泛,最常见是是用于事务管理领域。

目前,计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。

2.3 简单的算法举例

2.4 算法的特性

  • (1)有穷性:一个算法应包含有限的操作步骤,而不能是无限的。事实上,“有穷性”往往指“在合理的范围内”。如计算机执行一个10000000年的算法,虽然是有穷的,但是超过了合理的限度,人们也不会将其视为有效的算法。
  • (2)确定性:算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。算法的含义应当是唯一的,而不应当产生“歧义性”。所谓“歧义性”,是指可以被理解为两种或多种的可能含义。
  • (3)有零个或多个输入:所谓输入是指在执行算法时需要从外界取得必要的信息。
  • (4)有一个或多个输出:算法的目的是为了求解,“解”就是输出。算法的输出并不是一定就是计算机的打印或屏幕输出,一个算法得到的结果就是算法的输出。没有输出的算法是没有意义的。
  • (5)有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果。

2.5 怎样表示一个算法

常用的方法有:自然语言、传统流程图、结构化流程图、伪代码。

2.5.1 用自然语言表示算法

自然语言就是人们日常使用的语言。自然语言表示通俗易懂,但文字冗长,容易出现歧义,且用于描述包含分支和循环的算法不太方便。

2.5.2 用流程图表示算法

流程图是用一些图框来表示各种操作。用图形表示算法,直观形象,易于理解。
在这里插入图片描述
一个流程图包括以下几个部分:

  • (1)表示相应操作的框;
  • (2)带箭头的流程线;
  • (3)框内外必要的文字说明。
    如:

例子

2.5.3 三种基本结构和改进的流程图

1. 传统流程图的弊

传统的流程图对流程线的使用没有严格限制,因此流程图易变得毫无规律,使人难以理解算法的逻辑。这种如乱麻一样的算法称为BS型算法。

2. 三种基本结构
  • (1)顺序结构:虚线框内是一个顺序结构。其中A和B两个框是顺序执行的。即:在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。
    顺序结构
  • (2)选择结构:虚线框内是一个选择结构。此结构中必包含一个判断框。根据给定的条件p是否成立而选择执行A框或B框。
    在这里插入图片描述
  • (3)循环结构:即反复执行某一部分的操作。有两类循环结构:
    • 当型(while型)循环结构。当型循环结构的作用是:当给定的条件p1成立时,执行A框操作,执行完A后,再判断条件p1是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p1条件不成立为止,此时不执行A框,而从b点脱离循环结构。
    • 直到型(until型)循环结构:直到型循环结构的作用是先执行A框,然后判断给定的p2条件是否成立,如果p2条件不成立,则再执行A,然后再对p2条件进行判断,如果p2条件仍然不成立,又执行A……如此反复执行A,直到给定的p2条件成立为止,此时不再执行A,从b点脱离本循环结构。
      在这里插入图片描述
      以上三种基本结构,有以下共同特点:
  • (1)只有一个入口。
  • (2)只有一个出口。注意,一个判断框有两个出口,而一个选择结构只有一个出口。不要混淆判断框出口和选择结构的出口。
  • (3)结构内的每一部分都有机会被执行到。对每个框来说,都应当有一条从入口到出口的路径通过它
  • (4)结构内不存在“死循环”(无终止的循环)

2.5.4 用N-S流程图表示算法

N-S流程图完全去掉了带箭头的流程线,全部的算法都写在一个矩形框内,该框还可以包含其他从属于它的框,或者是,由一些基本的框组成一个大的框。这种流程图适用于结构化程序设计,因而很受欢迎。
N-S流程图用以下的流程图符号。

  • (1)顺序结构在这里插入图片描述

  • (2)选择结构在这里插入图片描述

  • (3)循环结构在这里插入图片描述

例子:
在这里插入图片描述
N-S图比文字描述直观、形象、易于理解;比传统流程图紧凑易画。用N-S图表示的算法都是结构化算法(它不可能出现流程无规律的跳转,而只能自上而下的顺序执行)。
归纳起来,一个结构化的算法是由一些基本结构顺序组成的;在基本结构直接不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内。一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。

2.5.5 用伪代码表示算法

用传统的流程图和N-S图表示算法直观易懂,但画起来比较费事,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的。因此,为了设计算法时方便,常用一种被称为伪代码的工具。
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它自上而下地写下来,每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法(即程序)过度。
用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用。只需要把意思表达清楚,便于书写和阅读即可,书写的格式要写成清晰易读的形式。
在这里插入图片描述

2.5.6 用计算机语言表示算法

用计算机语言表示的算法是计算机能够执行的算法,必须严格遵循所用的语言的语法规则。
在这里插入图片描述

2.6 结构化程序设计方法

结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
具体说,采取以下方法来保证得到的结构化的程序:
(1)自顶向下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编码。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值