zoukankan      html  css  js  c++  java
  • 附录 B 伪代码

      在本教材中,用英语和伪代码两种语言来描述算法。伪代码是过程步骤的英语描述和实际程序语言的过程说明之间的一个中间步骤。使用伪代码的优点在于它的简单性和可理解性,它很容易被写出来,也容易从它产生实际的计算机代码(用各种各样的程序设计语言)。

      在这个附录中,我们描述本教材中使用的伪代码的格式和语法。这种伪代码的的基本结构与Pascal的非常类似, 而Pascal是目前最广泛用于教学中的一种程序设计语言。但我们使用的伪代码比正式的程序设计语言要自由的多,因为许多步骤都可以使用英语来描述。

      本附录不是一个正式的学习材料,相反, 应该把它当做学生的参考指南。当学生在学习课文中算法的描述时,或在写练习的伪代码求解时,可以使用它。

    B.1 过程算法

      算法的伪代码描述以语句procedure开始,这个语句给出了算法的名称,列出输入变元和描述每个输入变元所具有的类型。例如, 语句:

    Procedure   maximum(L:整数列表)

    是一个算法的伪代码描述中的第一个语句,此算法的名称是maximum,它要求一列整数的最大值。

    B.2 赋值语句和其它语句类型

      赋值语句是用来对变元进行赋值的。在赋值语句中,左边的是变元名,右边是一个表达式,表达式中可以包含常量、已被赋值的变元和过程定义的函数。右边可以包含任何常见的算术运算。本书中的伪代码还可以包含任何已经定义的运算,即使这些运算需要用实际程序设计语言中的许多语句才能实现。

      赋值用符号:=表示。这样,赋值语句的形式为

    变元:=表达式

    例如,语句

    max:=a

    将a的值赋值给变元max。 也可以使用如下语句:

    x:=列表L中的最大整数

    它将x的值置为列表L中的最大整数。要将这个语句翻译成实际程序设计语言,可能需要不止一个语句。同时,可以用命令

    交换a和b

    来交换a和b。 虽然能够将这个语句表示成多个赋值语句,但为简单起见,我们经常使用这个伪代码的简写形式。

    B.3 命令块

      可以将许多语句分成块来执行复杂过程。这些块用begin 和 end 语句来划分,块中的所有语句都按照相同的间隔缩进。

    begin

      语句1

      语句2

      语句3

        •

        •

        •

      语句n

    end

    块中的所有语句按顺序执行。

    B.4  注释

      在本书的伪代码中, 以花括号括起来的语句是不执行的,这样的语句被用作注释或提示,帮助解释过程是怎么运行的。例如,可以用语句

    {x是L中最大元素}

    提醒读者,在过程的那个地方,x等于列表中的最大元素。

    B.5 条件结构

      我们将使用的最简单的条件结构是

    if 条件 then 语句

    或者

    if 条件 then

    begin

      语句块

    end

    执行时,首先检查条件,如果它为真,则执行所给的语句。例如,在2.1节的算法1(它求一个整数集合的最大值)中,用条件语句来检查max<ai是否对每一个变元都成立,如果是,就将ai 的值赋给max.

      常常要用更一般的(条件)结构。这种结构不仅在一种情形下(当所给的条件为真时)能够使用,在另一种情形下(条件为假)时也能使用。这种结构是

    if 条件then语句1

    else 语句2

    注意: 语句1和语句2都可以用一个程序块来替代。有时候,还要用更一般形式的条件语句,这种结构是

    if 条件1 then 语句1

    else if 条件2 then 语句2

    else if 条件3 then 语句3

        •

        •

        •

    else if 条件n then 语句n

    else 语句 n+1

    在使用这种结构时,若条件1为真,则执行语句1,然后程序就退出此结构。如果条件1为假,则程序检查条件2是否为真;如是,则执行语句2;等等。这样,如果前面n-1个条件都不成立,但条件n成立,则执行语句n.最后如果条件1、条件2、条件3、•••、条件n都不成立,则执行语句n+1。注意n+1语句中的任何一个都可以用一个程序块来替代。

    B. 6   循环结构

      本书的伪代码中,有两种我循环结构,第一个是“for 结构”,它的形式是:

    for 变元:=起始值 to 结束值

        语句

    for 变元:=起始值 to 结束值

    begin

      语句块

    end

    循环开始时,若起始值小于或者等于结束值,则将起始值赋给变元,并在变元的这个值下,执行结构尾部的语句。然后变元的值加1,并在变元的这个新值下,再执行这个语句(或语句块中语句)。这样一直重复下去,直至变元达到结束值。在执行这个命令之后,变元等于结束值,并且算法继续进行到下一个语句。如果起始值超过结束值,循环中的任何语句都不执行。

      下边伪代码用“for”循环结构求正整数1到n的和。

    sum:=0

    for i:=1 to n

      sum:=sum+1

    本书中还有一种更一般的“for” 语句,其形式是

    for 具有某种性质的所有元素

    它的含义是:对具有某种性质的所有元素,跟在它后面的语句或语句组将相继被执行。

      我们使用的第二类循环结构是“while”语句,其形式是

    while 条件

      语句

    while 条件

    begin

      语句块

    end

    在执行这个结构时,首先检查所给的条件。若为真,则执行后面的语句,这次执行可能改变某些变元的值,而这些变元是条件的一部分。在这些命令执行完毕后,若条件仍然为真,则在执行这些语句。此过程一直执行到条件变成假为止。例如,可以用下列包含“while的伪代码段来求整数1到n的和”。

    sum:=0

    while n>0

    begin

      sum:=sum+n

      n:=n-1

    end

    注意,任何“for”结构都可转换为“while”结构,但“for”结构更容易理解。所以,只要适合时,就优先使用“for”结构而不是对应的“while”结构。

    B.7 在过程中使用其它过程
      在一个过程内部还可以使用其他过程(或在递归程序中使用其自身),方法是写出这个过程的名称,后面再跟上此过程输入。例如:

    max(L)

    将执行输入为L的过程max。在这个过程中的所有步骤执行完毕后。再继续执行这个过程中的下一个语句。

    The most beautiful thing we can experience is the mysterious. It is the source of all true art and science. Albert Einstein, What I Believe, 1930!
  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/666638zhangqiang/p/4838901.html
Copyright © 2011-2022 走看看