第八篇 算法————程序的灵魂

2.1 程序=算法+数据结构

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

  •     (1)对数据的描述。在程序中要指定哪些数据,以及这些数据的类型和数据的组织形式。这就是数据结构。
  •     (2)对操作的描述。要求计算机进行操作的步骤,也就是算法。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。

          著名计算机科学家沃思提出一个公式:

                                         算法+数据结构=程序

           算法,数据结构,程序设计方法和语言工具4个方面是一个程序设计人员所应具备的知识。

2.2 什么是算法

   计算机算法可分为两大类:数值运算算法和非数值运算算法。数值运算的目的是求数值解,例如求方程的根,求一个函数得到定积分等;非数值运算涉及的面十分广泛,最常见的是用于事务管理领域。例如对一批职工按姓名排序。图书检索,人事管理和行车调度管理等。

2.3 简单的算法举例

  例1:求1*2*3*4*5

         设置两个变量,一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而是直接将每一步骤的乘积放在被乘数变量中。

        S1:令p=1,或写成1=>p(表示将1存放在变量p中);

        S2:令i=2,或写成2=>i(表示将2存放在变量i中);

        S3:使p与i相乘,乘积仍放在变量p中,可表示为:p*i=>p;

        S4:使i的值加1,即i+1=>i;

        S5:如果i不大于5,返回重新执行S3及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。

              (1*3*5*7*9*11与上题同理)

例2:有50个学生,要求输出成绩在80分以上的学生的学号和成绩。

       用n表示学生学号,用下标i代表第几个学生,Ni代表第i个学生的学号;统一用g表示学生的成绩,g1代表第1个学生的成绩,gi代表第i个学生的成绩。

         S1:1=>i;

         S2:如果gi>=80,则输出ni和gi,否则不输出;

         S3:i+1=>i ;

         S4:如果i=<50,返回步骤S2,继续执行,否则,算法结束。

(判断闰年的条件:能被4整除,但不能被100整除且能被400整除的年份是闰年)

2.4 算法的特性

  • (1)有穷性。一个算法应包含有限的操作步骤,而不能是无限的。
  • (2)确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。
  • (3)有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。
  • (4)有一个或多个输出。算法的目的是为了求解,“解”就是输出。但算法的输出并不一定就是计算机的打印输出或屏幕输出,一个算法得到的结果就是算法的输出。没有输出的算法是没有意义的。
  • (5)有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。

2.5 怎样表示一个算法(相关图形可自行查找这里只提一下)

2.5.1 用自然语言表示算法

自然语言就是人们日常使用的语言,可以是汉语、英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现歧义。用自然语言来描述包含分支和循环的算法不大方便。

2.5.2 用流程图表示算法

  流程图是用一些图框来表示各种操作,用图形表示算法,直观形象,易于理解。菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立决定如何执行其后的操作,它有一个入口,两个出口。连接点(小圆圈)是用于将画在不同地方的流程线连接起来。

 一个流程图包括以下几部分

  • (1)表示相应操作的框;
  • (2)带箭头的流程线;
  • (3)框内外必要的文字说明;
  • 流程线不要忘记画线头,它是反应流程的先后的,不画出箭头就难以判定各框的执行次序了。算法直观形象,比较清楚地显示出各个框之间的逻辑关系。

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

  1.传统流程图的弊端

      传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格的限制。可以不受限制地使用流程随意的转来转去,是流程图变得毫无规律,阅读时要花很大精力去追踪流程,使人难以理解算法的逻辑。如同乱麻一样的算法称为BS型算法。为了提高算法的质量,使算法的设计和阅读方便,必须限制箭头的滥用,即不允许无规律的使流程随意转向,只能顺序的进行下去。

2. 三种基本结构

      用三种基本结构作为表示一个良好算法的基本单元。

  • (1)顺序结构:在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构。
  • (2)选择结构:选择结构又称选取结构或分支结构,根据给定的条件p是否成立而选择执行A框或B框。注意:无论p条件是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。
  • (3)循环结构:又称重复结构,及反复执行某一部分的操作。有两类循环结构。
  1. 当型(while型)循环结构:当给定的条件p1成立时,执行A框操作,执行完A后,再判断条件p1是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次p1条件不成立为止,此时不执行A框,而从b点脱离循环结构。
  2. 直到型(until型)循环结构:先执行A框,然后判断给定的p2条件是否成立,如果p2条件不成立,则再执行A,然后再对p2条件作判断,如果p2条件仍然不成立,又执行A·······如此反复执行A,知道给定的p2条件成立为止,此时不再执行A,从b点脱离本循环结构。

  以上三种基本结构,有以下共同特点

  1.  只有一个入口。
  2. 只有一个出口。
  3. 结构内的每一部分都有机会被执行到。
  4. 结构内不存在“死循环”。
  5. 注:基本结构并不一定只限于上面3种,只要具有上述4个特点的都可以作为基本结构。

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

  1973年,提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线,全部算法写在一个矩形框内,在该框内还可以包含其他从属于它的框,这种流程图又称N-S结构化流程图

2.5.5 用伪代码表示算法

   伪代码使用介于自然语言和计算机语言之间的文字和符号来描述算法。它不用图形符号,书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法*(即程序)过渡。

  例:求5!,用伪代码表示

beign
  1=>t
  2=>i
  while i<=5
  {
     t*i=>t
     i+1=>i
  }
print t
 end

2.5.6 用计算机语言表示算法

  用计算机语言表示的算法是计算机能够执行的算法,用计算机语言表示算法必须严格遵循所用的语言的语法规则

例:求5!

 

include<stdio.h>
int main()
{
 int i,t;
 t=1;
 i=2;
 while(i<=5)
  {
   t=t*i;
   i=i+1;
  }
 printf("%d\n",t);
 return 0;
}

2.6 结构化程序设计方法

  •   采取以下方式来保证得到机构化的程序
  1.  自顶向下;

逐步细化;

  1. 模块化设计;
  2. 结构化编程。
  • 程序中的子模块在C语言中通常用函数来实现,划分子模块时应注意模块的独立性
  • 结构化程序设计方法用来解决人脑思维能力的局限性和被处理问题的复杂性之间的矛盾,设计好一个结构化算法,还要善于进行结构化编程。

 

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值