C语言学习笔记 第2章 程序的灵魂——算法

  • 知识概要:
    • 本章内容是算法的概念和思想
    • 一个程序应包括:
    • ①对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure)。
    • ②对操作的描述。即操作步骤,也就是算法(algorithm)。
    • Nikiklaus Wirth提出的公式:数据结构+算法=程序
    • 教材认为:程序=算法+数据结构+程序设计方法+语言工具和环境
  • 2.1 算法的概念(了解)
    • 为解决一个问题而采取的方法和步骤,就称为算法。
    • 计算机算法:计算机能够执行的算法。
    • 计算机算法分为两大类:
      • ①数值运算算法:求解数值。
      • ②非数值运算算法:事务管理领域。
  • 2.2 简单算法举例(理解)
    • 例2.1 求1×2×3×4×5
      • 步骤1:先求1×2,得到结果为2。
      • 步骤2:将步骤1得到的乘积2乘以3,得到结果6。
      • 步骤3:将6再乘4,得24。
      • 步骤4:将24再乘以5,得120。
      • 这样的算法虽然正确,但太繁琐。
    • 改进的算法:
      • 步骤1:使t=1
      • 步骤2:使i=2
      • 步骤3:使t×i,乘积仍然放在变量t中,可表示为t×i→t。
      • 步骤4:使i的值+1,即i+1→i。
      • 步骤5:如果i≤5,返回重新执行步骤3以及其后的步骤4和步骤5;否则,算法结束。
    • 如果计算100! 只需将步骤5:若i≤5改成i≤100即可。
    • 注:
      • ①编程的本质是给计算机看的,而不是给人看的,所以编程必须脱离人的思考范围转换为计算机的思考方式。
      • ②上面最原始的算法恰恰是计算机的思考方式,1×2×3×4×5计算机只会一步步的计算,而不会像人一样转换为5! 然后5! =120直接得到结果。
      • ③改进的算法是将原始的算法抽象出共性,从而解决相似的一类问题,而不是仅仅解决这一道题。
      • ④原始算法代码如下:

      • ⑤改进后算法代码如下:

      • ⑥从上面代码看,似乎改进后的算法代码比原始代码更多,但算法可扩展性更强。如果求100!,1000!呢?改进后的算法只需将数字5改为100或者1000就可以。
  • 2.3 算法的特性(理解)
    • ①有穷性:一个算法应包含有限的操作步骤,不能是无限的。
    • ②确定性:算法中每一个步骤应当是确定的,不能是含糊的、模棱两可的。
    • ③有零个或多个输入。
    • ④有一个或多个输出。
    • ⑤有效性:算法中每一个步骤应当能够有效的执行,并且得到确定的结果。
    • 对于程序设计人员,必须会设计算法,根据算法写出程序。
  • 2.4 怎样表示一个算法(了解)
    • 2.4.1 用自然语言表示算法(了解)
      • 除了很简单的问题,一般不用自然语言表示算法。
    • 2.4.2 用流程图表示算法(了解)
      • 流程图表示算法,直观形象,易于理解。

    • 例2.2 将力2.1求5!的运算用流程图表示:

    • 2.4.3 三种基本结构和改进的流程图(了解):
      • 1.顺序结构:

      • 2.选择结构:

      • 3.循环结构:

      • 三种基本结构的共同点:
        • ①只有一个入口
        • ②只有一个出口
        • ③结构内的每一部分都有机会被执行到
        • ④结构内不存“在死循环”
    • 2.4.4 用N-S流程图表示算法(了解)
      • 1973年,美国学者提出一种新型流程图:N-S流程图
        • ①顺序结构:

        • ②选择结构:

        • ③循环结构:

    • 2.4.5 用伪代码表示算法(了解)
      • 伪代码使用介于自然语言和计算机语言之间的文字和符号来表述算法。
    • 2.4.6 用计算机语言表示算法(了解)
      • ⑴任务是用计算机解题,就是用计算机实现算法。
      • ⑵用计算机语言表示算法必须严格遵循所用语言的语法规则。

  • 2.5 结构化程序设计方法(了解)
    • ⑴自顶向下
    • ⑵逐步细化
    • ⑶模块化设计
    • ⑷结构化编码

猜你喜欢

转载自blog.csdn.net/qq_51607668/article/details/119755493