zoukankan      html  css  js  c++  java
  • 算法中的伪代码语法格式

    伪代码 pseudo-code,是一种非正式的,类似自然语言,用于描述模块结构图的语言。对于熟练不同编程语言的程序员要理解其他编程语言编写的功能时很困难,而伪代码清晰、简单、可读性好,可将整个算法运行过程的结构用接近自然语言的形式描述出来。伪代码不关心软件工程的问题,常忽略数据抽象、模块性、错误处理的问题。

    1、操作类型

    操作类型 符号 示例
    分配 ← 或 := c ← 2πr, c:= 2πr
    比较 =, ≠, <, >, ≤, ≥
    算术 +, −, ×, /, mod
    上界/下界 ⌊, ⌋, ⌈, ⌉ a ← ⌊b⌋ + ⌈c⌉
    逻辑 and, or
    总和、乘积 ∑ ∏ $$h ← ∑_{a∈A}1/a $$

    x and y,当x成立时才会对y求值,否则x将短路,不再对y求值
    x or y,当x成立时才会y求值,否则x将短路,不再对y求值

    2、语法规则

    1、每一条指令占一行(else if除外)
    2、指令后不跟任何符号
    3、用缩进表示块结构、分支结构,代替begin..end、if-then-else语句

    3、组成部分

    3.1 算法名称

    过程:Procedure,执行一系列操作,不需返回结果,无返回数据
    函数:Function,执行一系列操作,需返回结果,有返回数据

    Procedure <算法名>([<参数列表>])
    Function <算法名>([<参数列表>])
    

    3.2 指令序列

    用Begin或"{"作为开始,用End或"}"作为结束。

    Begin
        指令序列;
    End
    
    
    {
        指令序列;
    }
    
    

    3.3 输入/输出

    输入:input,参数作值或对象的指针被传递
    输出:output 或 return,return语句返回多个会上并回到过程的调用点。
    错误:error,调用出现异常,调用过程负责处理该错误,当前程序不用说明如何处理

    3.4 分支选择

    //第一种
    If<条件> Then
    {
        指令序列;
    }
    
    //第二种
    If<条件> Then
    {
        指令序列1;
    }
    Else
    {
        指令序列2;
    }
    
    

    3.5 赋值

    x:=x+1;
    x<-x+1;

    3.6 循环

    • 计数式循环
      迭代增加循环计数器时,用to
      迭代减少循环计数器时,用downto
      步进用by
    For 变量:=初值 To 终值
    {
        指令序列;
    }
    
    

    循环次数:终值-初值+1

    • 条件式循环
    While (条件) do
    {
        指令序列;
    }
    

    3.7 数组

    A[j]指示数组A的第j个元素。符号“ …”用来指示数组中值的范围。
    例如:
    A[1…j]表示含元素A[1], A[2], … , A[j]的子数组;
    还有个写法是A[0:n]表示数组下标从0开始一直到n
    二维数组也是:A[0:m,0:n]

    3.8 算法结束

    关键字End的后面加上算法名称,表示算法结束,是算法的最后一句。

    End DFS
    

    3.9 注释

    //表示行注释

    3.10 对象

    复合数据通常被组织成对象,由属性组成,用对象.属性对象.对象.属性表示,如A.b.c。数组或对象的变量常看做一个数组或对象的指针。当指针不指向任何对象时为NIL

    4、伪代码示例

     // 冒泡排序
     procedure Bubble(n:integer);
       var temp,i,j:integer;
       change:boolean;
       begin
          for i:=1 to n-1 do
          begin
            change:=false;
            for j:=n-1 downto i do
              if a[j]>a[j+1] then
              begin
                change:=true;
                temp:=a[j]; a[j]:=a[j+1]; a[j+1]:=temp;
              end;
              if not(change) then exit;
          end;
       end;
    
    // 插入排序
    procedure insertsort(n:integer);
      var i,j:integer;
      begin
        for i:=2 to n do
        begin
          a[0]:=a[i];
          j:=i-1;
          while a[j]>a[0] do
          begin
            a[j+1]:=a[j];
            j:=j-1;
          end;
          a[j+1]:=a[0];
        end;
      end;
    
    
    /* this is a pseudocode sample */
    
    a := 1
    b ← a + 2
    c :=[100]
    
    if a ≥ 2 then
        goto Label_Print
    else
        for i := 0 to 100
            a := a + i
    
        do j := (a+b*i)/100
            c[j] = a+b*i
        until j>100
    
        return
    
    Label_Print:
        while b ≠ 3 and a = 4 do
            call log(b,a)
        end
    
    exit
    
    

    作者简介:常遇,现阿里巴巴高级技术专家。关注“全栈深入”微信公众号并回复 “全栈图谱” 下载高清全栈知识图谱压缩包。全栈深入提供全栈知识分享,包含不限于前端开发、后台开发、机器学习、云计算等。如需转载本文请注明作者:常遇 及 来源:“全栈深入”微信公众号。

    如需转载本文请注明作者:常遇 及 来源:“全栈深入”微信公众号。 加我微信 stacker1024,拉你进 『全栈开发架构』群一起学习交流!以下是公众号"全栈深入"最新文章。

    [推荐] 史上最全全栈技术知识导图 [可下载]
    [推荐] 硬核浏览器原理
    [推荐] 面试腾讯、阿里、头条,数据结构和算法就靠他了

    专注于机器学习、前端相关邻域。关注 全栈深入 公众号查看更多硬核文章。
  • 相关阅读:
    Python小白学习之路(五)—【类和对象】【列表】【列表相关功能】
    Python小白学习之路(四)——第一次练习题
    Python小白学习之路(三)—【数字功能】【字符串功能】
    Python小白学习之路(二)—【Pycharm安装与配置】【创建项目】【运算符】【数据类型】
    Python初体验(一)—【配置环境变量】【变量】【input】【条件语句】【循环语句】
    HTML下直接调用Less文件
    继承的几种方式
    sublime从官网纯净版到插件完整版
    bower工具的简单使用
    sublime修改代码字体颜色
  • 原文地址:https://www.cnblogs.com/janas/p/14883253.html
Copyright © 2011-2022 走看看