精华内容
下载资源
问答
  • 在 C语言中,有 5 种常用算法描述方法:自然语言、流程图、N-S 图、伪代码和程序设计语言。1. 自然语言描述算法上一讲《算法是什么》中给出的解决问题的算法 a、算法 b 和算法 c 都是用自然语言来表示算法的(见上...

    在 C语言中,有 5 种常用的算法描述方法:自然语言、流程图、N-S 图、伪代码和程序设计语言。

    1. 自然语言描述算法

    上一讲《算法是什么》中给出的解决问题的算法 a、算法 b 和算法 c 都是用自然语言来表示算法的(见上一节的图2)。自然语言就是我们日常使用的各种语言,可以是汉语、英语、日语等。

    用自然语言描述算法的优点是通俗易懂,当算法中的操作步骤都是顺序执行时比较直观、容易理解。缺点是如果算法中包含了判断结构和循环结构,并且操作步骤较多时,就显得不那么直观清晰了。

    2. 用流程图描述算法

    用流程图描述算法就可以解决上述缺点。所谓流程图(Flow Chart),是指用规定的图形符号来描述算法(见表 1)。

    表 1:流程图常用的图形符号

    图形符号

    名称

    含义

    e3cb355c169e675a083df34a7db1c6fe.gif

    起止框

    程序的开始或结束

    49c1ab243c831929adc357c319304ad1.gif

    处理框

    数据的各种处理和运算操作

    2c044909d85beec7cf6f28ea133a2647.gif

    输入/输出框

    数据的输入和输出

    66fae558402a283c22e6c8f0bdb04f4a.gif

    判断框

    根据条件的不同,选择不同的操作

    f917625baeea9a40de68dd9981a93fbf.gif

    连接点

    转向流程图的他处或从他处转入

    589616e71087e6a3c87622f361ce47df.gif

    流向线

    程序的执行方向

    结构化程序设计方法中规定的三种基本程序流程结构(顺序结构、选择结构和循环结构)都可以用流程图明晰地表达出来(见图 1)。

    28c5d8a31b3677a27b832fca32797650.gif

    图 1:用流程图表示的顺序结构、选择(条件分支)结构、循环结构三种流程

    3. 用 N-S 图描述算法

    虽然用流程图描述的算法条理清晰、通俗易懂,但是在描述大型复杂算法时,流程图的流向线较多,影响了对算法的阅读和理解。因此有两位美国学者提出了一种完全去掉流程方向线的图形描述方法,称为 N-S 图(两人名字的首字母组合)。

    N-S 图使用矩形框来表达各种处理步骤和三种基本结构(见图 2),全部算法都写在一个矩形框中。

    289f76de33098a37e7bf5684710fe077.gif

    图 2:用 N-S 图表示的顺序结构、选择(条件分支)结构、循环结构三种流程

    图 3 展示了分别用自然语言、流程图和 N-S 图解决同一问题的算法描述。

    f2ff8ae243c4182ff3f21e65d443f8f2.gif

    图 3:分别用自然语言、流程图和 N-S 图描述的算法

    4. 用伪代码描述算法

    伪代码是用在更简洁的自然语言算法描述中,用程序设计语言的流程控制结构来表示处理步骤的执行流程和方式,用自然语言和各种符号来表示所进行的各种处理及所涉及的数据(见图 4)。它是介于程序代码和自然语言之间的一种算法描述方法。这样描述的算法书写比较紧凑、自由,也比较好理解(尤其在表达选择结构和循环结构时),同时也更有利于算法的编程实现(转化为程序)。

    4b9356618fbc32bec2ef7f254a8d8567.gif

    图 4:常见的三种流程结构的伪代码

    5. 用程序设计语言来描述算法

    算法最终都要通过程序设计语言描述出来(编程实现),并在计算机上执行。程序设计语言也是算法的最终描述形式(见图 5)。无论用何种方法描述算法,都是为了将其更方便的转化为计算机程序。

    360e7cee69cb8d49b7e1e092b8c6419d.gif

    图 5:用伪代码和程序设计语言(C语言)描述的算法

    #include

    int main(){

    int S=0;

    int i=0;

    while(i<100)

    {

    i=i+1;

    S=S+i;

    }

    printf("1+2+3+…+100=%d",S);

    system("pause");

    }

    展开全文
  • 计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法算法数据结构是程序的两个重要方面。 算法是问题求解过程的...
  • 常用算法设计方法

    2018-04-13 08:55:36
    计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序 的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法算法数据 结构是程序的两个重要方面。
  • 常见算法C#描述

    2010-01-19 06:46:00
    冒泡排序 using System;class Program{ public static void Main() { int[] a = new int[10]; Random rand = new Random(); for (int i = 0; i ; i++) {

    冒泡排序

     

    展开全文
  • 常用算法设计方法.pdf

    2020-06-26 14:30:50
    常用算法设计方法 常用算法设计方法 要使计算机能完成人们预定的工作首先必须为如何完成预定的工作设计一个算法然后再根据算法 编写程序计算机程序要对问题的每个对象和处理规则给出正确详尽的描述其中程序的数据...
  • 五种常见的基本算法描述

    千次阅读 2020-04-18 17:25:22
    1.分治法 2.动态规划 3.贪心 4.回溯 5.分支限界法

    1.分治法

    分治法


    2.动态规划

    动归


    3.贪心

    贪心



    4.回溯

    回溯


    5.分支限界法

    分支限界

    展开全文
  • 算法描述---伪代码

    千次阅读 2017-11-23 14:13:40
     算法描述是指对设计出的算法,用一种方式进行详细的描述,以便与人交流。描述可以使用自然语言、伪代码,也可使用程序流程图,但描述的结果必须满足算法的五个特征。  使用自然语言描述算法显然很有吸引力,但是...

     算法描述

       算法描述是指对设计出的算法,用一种方式进行详细的描述,以便与人交流。描述可以使用自然语言、伪代码,也可使用程序流程图,但描述的结果必须满足算法的五个特征。

      使用自然语言描述算法显然很有吸引力,但是自然语言固有的不严密性使得要简单清晰的描述算法变得很困难。因此,使用伪代码来描述算法是一个很好的选择。

      算法的特征

    1. 输入:一个算法必须有零个或以上输入量。
    2. 输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
    3. 明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际运行结果是确定的。
    4. 有限性:依据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机器只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
    5. 有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。

      伪代码

      伪代码是自然语言和类编程语言组成的混合结构。它比自然语言更精确,描述算法很简洁;同时也可以很容易转换成计算机程序。虽然如此,但计算机科学家们从来就没有对伪代码的形式达成共识,不同作者的教材会设计他们自己的“方言”(伪代码)。幸运的是,这些伪代码都十分相似,任何熟悉一门现代变成语言的人都完全能够理解。

      使用伪代码描述算法可以让程序员很容易将算法转换成程序,同时还可以避开不同程序语言的语法差别,如Pascal语言使用“:=”作为赋值,使用“=”作为比较;又如C/C++的赋值使用“=”,而判断相等的比较则是用“==”。

      常用的微带关键词含义如下表所示:

     

    伪代码 含义 C/C++语言
    缩进 程序块 {}
    / / 行注释 / /
    赋值 =
    = 比较运算——等于 ==
    比较运算——不等于 !=
    比较运算——小于或等于 < =
    比较运算——大于或等于 >=
    for i←1 to n do For循环 for(i=1;i⇐n;i++){}
    for i←n downto 1 do For循环 for(i=n;i>=1;i–){}
    while i<n do Wihle循环 while(i<n){}
    do while i<n Do-While循环 do {} while(i<n)
    repeat until i<n Repeat循环
    if i<n else If-Else语句 if(i<n){} else {}
    return 函数返回值 return
    A[0..n-1] 数组定义 int A[n-1]
    A[i] 引用数组 A[i]
    SubFun() 函数调用 SubFun()
     

     

     

     

     

     

     

     

     

     

     

     

     

    伪代码(Pseudocode)是一种算法描述语言。使用伪代码的目的是为了使被描述的算法可以容易地以任何一种编程语言(Pascal,C,Java,etc)实现。因此,伪代码必须结构清晰、代码简单、可读性好,并且类似自然语言。 介于自然语言与编程语言之间。

      它以编程语言的书写形式指明算法的职能。相比于程序语言(例如Java, C++,C, Dephi 等等)它更类似自然语言。它是半角式化、不标准的语言。我们可以将整个算法运行过程的结构用接近自然语言的形式(这里,你可以使用任何一种你熟悉的文字,中文,英文 等等,关键是你把你程序的意思表达出来)描述出来. 使用伪代码, 可以帮助我们更好的表述算法, 不用拘泥于具体的实现.

      人们在用不同的编程语言实现同一个算法时意识到,他们的实现(注意:这里是实现,不是功能)很不同。尤其是对于那些熟练于不同编程语言的程序员要理解一个(用其他编程语言编写的程序的)功能时可能很难,因为程序语言的形式限制了程序员对程序关键部分的理解。这样伪代码就应运而生了。

      当考虑算法功能(而不是其语言实现)时,伪代码常常得到应用。计算机科学在教学中通常使用虚拟码,以使得所有的程序员都能理解。

      综上,简单的说,让人便于理解的代码。不依赖于语言的,用来表示程序执行过程,而不一定能编译运行的代码。在数据结构讲算法的时候用的很多。 

    语法规则

      例如,类Pascal语言的伪代码的语法规则是: 在伪代码中,每一条指令占一行(else if,例外)。指令后不跟任何符号(Pascal和C中语句要以分号结尾)。书写上的“缩进”表示程序中的分支程序结构。这种缩进风格也适用于if-then-else语句。用缩进取代传统Pascal中的begin和end语句来表示程序的块结构可以大大提高代码的清晰性;同一模块的语句有相同的缩进量,次一级模块的语句相对与其父级模块的语句缩进。

        算法的伪代码语言在某些方面可能显得不太正规,但是给我们描述算法提供了很多方便,并且可以使我们忽略算法实现中很多麻烦的细节。通常每个算法开始时都要描述它的输入和输出,而且算法中的每一行都给编上号码,在解释算法的过程中会经常使用算法步骤中的行号来指代算法的步骤。算法的伪代码描述形式上并不是非常严格,其主要特性和通常的规定如下:
            1) 算法中出现的数组、变量可以是以下类型:整数、实数、字符、位串或指针。通常这些类型可以从算法的上下文来看是清楚的,并不需要额外加以说明。
            2) 在算法中的某些指令或子任务可以用文字来叙述,例如,"设x是A中的最大项",这里A是一个数组;或者"将x插入L中",这里L是一个链表。这样做的目的是为了避免因那些与主要问题无关的细节使算法本身杂乱无章。
            3) 算术表达式可以使用通常的算术运算符(+,-,*,/,以及表示幂的^)。逻辑表达式可以使用关系运算符=,≠,<,>,≤和≥,以及逻辑运算符与(and),或(or),非(not)。
            4) 赋值语句是如下形式的语句:a<-b 。
    这里a是变量、数组项,b是算术表达式、逻辑表达式或指针表达式。语句的含义是将b的值赋给a。
            5) 若a和b都是变量、数组项,那么记号a<->b 表示a和b的内容进行交换。
            6) goto语句具有形式
                                            goto label(goto标号)
    它将导致转向具有指定标号的语句。
            7) 条件语句有以下两种形式:
                                                if c then s或者 
                                                   if c then s
                                                      else s′
    这里c是逻辑表达式,s和s′是单一的语句或者是被括在do和end之间的语句串。对于上述两种形式,假若c为真,则s被执行一次。假若c为假,则在第一种形式中,if语句的执行就完成了,而在第二种形式中,执行s′。在所有的情况下,控制就进行到了下一个语句,除非在s或s′中的goto语句使控制转向到其它地方。
             8) 有两种循环指令:while和for。
             while语句的形式是
                                                  while c do  
                                                        s
                                                      end
    这里c是逻辑表达式,而s是由一个或更多个语句组成的语句串。当c为真时,执行s。在每一次执行s之前,c都被检查一下;假若c为假,控制就进行到紧跟在while语句后面的语句。注意,当控制第一次达到while语句时,假若c为假,则s一次也不执行。 
           for语句的形式是
                                          for var init to limit by incr do
                                                            s
                                                          end
    这里var是变量,init、limit和incr都是算术表达式,而s是由一个或多个语句组成的语句串。初始时,var被赋予init的值。假若incr≥0,则只要var≤limit,就执行s并且将incr加到var上。(假若incr<0,则只要var≥limit,就执行s并且将incr加到var上)。incr的符号不能由s来该改变。
          9) exit语句可以在通常的结束条件满足之前,被用来结束while循环或者for循环的执行。exit导致转向到紧接在包含exit的(最内层)while或者for循环后面的一个语句。
         10) return用来指出一个算法执行的终点;如果算法在最后一条指令之后结束,它通常是被省略的;它被用得最多的场合是检测到不合需要的条件时。return的后面可以紧接被括在引号的信息。
          11) 算法中的注释被括在/* */之中。诸如read和output之类的各种输入或者输出也在需要时被用到。
         

    伪代码实例

      伪代码只是像流程图一样用在程序设计的初期,帮助写出程序流程。简单的程序一般都不用写流程、写思路,但是复杂的代码,最好还是把流程写下来,总体上去考虑整个功能如何实现。写完以后不仅可以用来作为以后测试,维护的基础,还可用来与他人交流。但是,如果把全部的东西写下来必定可能会让费很多时间,那么这个时候可以采用伪代码方式。比如:

      IF 九点以前 THEN

         do 私人事务;

      ELSE 9点到18点 THEN

      工作;

      ELSE

      下班;

      END IF

      这样不但可以达到文档的效果,同时可以节约时间. 更重要的是,使结构比较清晰,表达方式更加直观.

     

      下面介绍一种类Pascal语言的伪代码的语法规则。

      在伪代码中,每一条指令占一行(else if 例外,),指令后不跟任何符号(Pascal和C中语句要以分号结尾);

      书写上的“缩进”表示程序中的分支程序结构。这种缩进风格也适用于if-then-else语句。用缩进取代传统Pascal中的begin和end语句来表示程序的块结构可以大大提高代码的清晰性;同一模块的语句有相同的缩进量,次一级模块的语句相对与其父级模块的语句缩进; 

      在伪代码中,通常用连续的数字或字母来标示同一即模块中的连续语句,有时也可省略标号。

      符号△后的内容表示注释;

      在伪代码中,变量名和保留字不区分大小写,这一点和Pascal相同,与C或C++不同;

      在伪代码中,变量不需声明,但变量局部于特定过程,不能不加显示的说明就使用全局变量;

      赋值语句用符号←表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式(该表达式的结果与x同类型);多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价。

      例如:

      x←y

      x←20*(y+1)

      x←y←30

      以上语句用C分别表示为:

      x = y;

      x = 20*(y+1);

      x = y = 30;

      选择语句用if-then-else来表示,并且这种if-then-else可以嵌套,与Pascal中的if-then-else没有什么区别。

      例如:

      if (Condition1)

      then [ Block 1 ]

      else if (Condition2)

      then [ Block 2 ]

      else [ Block 3 ]

      循环语句有三种:while循环、repeat-until循环和for循环,其语法均与Pascal类似,只是用缩进代替begin - end;

     

      例如:

      1. x ← 0

      2. y ← 0

      3. z ← 0

      4. while x < N

      1. do x ← x + 1

      2. y ← x + y

      3. for t ← 0 to 10

      1. do z ← ( z + x * y ) / 100

      2. repeat

      1. y ← y + 1

      2. z ← z - y

      3. until z < 0

      4. z ← x * y

      5. y ← y / 2

       上述语句用C或C++来描述是:

      x = y = z = 0;

      while( z < N )

      {

      x ++;

      y += x;

      for( t = 0; t < 10; t++ )

      {

      z = ( z + x * y ) / 100;

      do {

      y ++;

      z -= y;

      } while( z >= 0 );
         }
      z = x * y;

      }

      y /= 2;

      数组元素的存取有数组名后跟“[下标]”表示。例如A[j]指示数组A的第j个元素。符号“ …”用来指示数组中值的范围。

      例如:

      A[1…j]表示含元素A[1], A[2], … , A[j]的子数组;

      复合数据用对象(Object)来表示,对象由属性(attribute)和域(field)构成。域的存取是由域名后接由方括号括住的对象名表示。

      例如:

      数组可被看作是一个对象,其属性有length,表示其中元素的个数,则length[A]就表示数组A中的元素的个数。在表示数组元素和对象属性时都要用方括号,一般来说从上下文可以看出其含义。

      用于表示一个数组或对象的变量被看作是指向表示数组或对象的数据的一个指针。对于某个对象x的所有域f,赋值y←x就使f[y]=f[x],更进一步,若有f[x]←3,则不仅有f[x]=3,同时有f[y]=3,换言之,在赋值y←x后,x和y指向同一个对象。

      有时,一个指针不指向任何对象,这时我们赋给他nil。

      函数和过程语法与Pascal类似。

      函数值利用 “return (函数返回值)” 语句来返回,调用方法与Pascal类似;过程用 “call 过程名”语句来调用;

      例如:

      1. x ← t + 10

      2. y ← sin(x)

      3. call CalValue(x,y)

      参数用按值传递方式传给一个过程:被调用过程接受参数的一份副本,若他对某个参数赋值,则这种变化对发出调用的过程是不可见的。当传递一个对象时,只是拷贝指向该对象的指针,而不拷贝其各个域。

    展开全文
  • C语言算法描述基础

    2020-05-09 21:21:50
    目录算法1. 算法 定义:算法是一些常见问题的通用解决方法 1.
  • 常用算法程序集(C语言描述),针对常见的数学公式和方法
  • 文章目录1 分治算法的一般性描述1.1 分支算法的时间分析1.2 两类常见的递推方程与求解方法2 总结 1 分治算法的一般性描述 设分治算法为:Divide-and-Conquer§ 设计要点 原问题可以划分或者规约为规模较小的...
  • 常用算法设计方法,用C语言描述,是算法与数据结构课程的有效辅导材料,也是参加程序设计竞赛的参考资料。
  • 要使计算机能完成人们预定...计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法算法数据结构是程序的两个重要方面。
  • 算法描述

    千次阅读 2012-08-26 21:04:59
    数据的运算通过算法(Algorithm)描述,讨论算法是数据结构课程的重要内容之一。 1.算法  非形式地说,算法是任意一个良定义的计算过程。它以一个或多个值作为输入,并产生一个或多个值作为输出。 (1)一个算法...
  • 要使计算机能完成人们预定...计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数据结构和变量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法算法数据结构是程序的两个重要方面。
  • 用流程图描述算法

    万次阅读 多人点赞 2018-07-18 08:41:11
    【前面了解了程序和算法的关系,知道了算法是解决问题的具体方法和步骤,也学会了用文字去描述算法。哪还有没有其它描述算法方式呢?毕竟文字看起来比较费劲。流程图就是一种描述算法的图形化描述,用流程图可以...
  • 论文中的算法描述 By 薛磊

    千次阅读 2015-02-08 23:02:00
    薛磊从《Writing for computer science》中整理了一份PPT,介绍几种常见算法描述方法。 下面是下载链接: Algorithms_writing.pdf 转载于:https://www.cnblogs.com/yulele/p/4280633.html...
  • 算法精解.C语言描述

    2018-11-03 11:55:34
    全书共分为三部分:部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础;...
  • 1.2算法和算法的描述目录A算法和程序设计的基本概念B算法描述的几种常用方法C小结A算法和程序设计的基本概念01算法的概念首先请大家思考并讨论这样一个有趣的问题有一桶水一个5毫升的量杯和一个3毫升的量杯杯上没有...
  • 单片机C语言常用算法

    2021-07-07 13:26:25
    单片机C语言常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。  算法描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)...
  • 编程常用算法

    2013-08-01 10:24:03
    编程常用算法,就是解决问题方法的精确描述
  • 0 可计算理论与常见面试算法分类 可计算理论又被称为算法理论。 1 什么是可计算的? 什么又是不可计算的? 这涉及到一个非常著名的问题:NPC NP和P 问题。 1 关于算法设计方法 2 “五大常用算法” ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 335,542
精华内容 134,216
关键字:

常用的算法描述方式