当前位置:文档之家› 精品-清华大学C语言课件 第3章02 描述算法

精品-清华大学C语言课件 第3章02 描述算法

本讲大纲
描述算法
1.用自然语言描述 2. 用流程图描述 3.三种基本结构 4.绘制N-S流程图 5.用伪代码描述算法
实例3 任意输入三个数,求这三个数中的最大数 实例4 判断2000~2500年中的年份是否为闰年 实例5 用伪代码描述n!
用自然语言描述
所谓自然语言就是日常生活中的语言,它可以是汉语,英语,日语等,一般描述一些简单问题步 骤可以通俗简单易懂。下面通过具体实例来介绍自然语言。 【例3.1】 求正整数a和b的最大公约数。 第一步:输入a和b的值; 第二步:求a除以b的余数c; 第三步:若c等于0,则b为最大公约数,算法结束;否则执行第四步; 第四步:将b的值放在a中,将c的值放在b中; 第五步:重新执行第二步。
【例3.6】 从键盘中输入一个数n,求n!。 该程序流程图如图3.16所示。
图3.16 求n!
该程序的N-S流程图如图3.17所示。
输入一个数赋给变量n
Y s=1 n>0
Y i=1
i<=n
n>=0
N
N 输出 error
s=s*i i=i+1 输出s
图3.17 求n!的N用介于自然语言和计算机语言之间的文字和符号来描述算法。它采用某一程序设计语言 的基本语法,如操作指令可以结合自然语言来设计。而且,它不用符号,书写方便,没有固定的语法 和格式,具有很大的随意性,便于向程序过渡。 下面通过一个例子用伪代码描述算法。 【例3.7】 用伪代码描述两个正整数a和b最大公约数的算法。
图3.12 顺序结构 (2)选择结构的N-S流程图如图3.13所示。
图3.13 选择结构
(3)当型循环的N-S流程图如图3.14所示。 当P成立
图3.14 当型循环 (4)直到型循环的N-S流程图如图3.15所示。
当P成立
图3.15 直到型循环 说明:
这三种基本结构都只有一个入口一个出口,结构内的每一部分都有可能被执行,且不会出现无终止 循环的情况。
顺序结构是最简单的线性结构,在顺序结构的程序里,各操作是按照他们出现的先后顺序执行的。 如图3.3所示。
图3.3 顺序结构 说明: 在执行完A框指定的操作后,必须接着执行B框所指定的操作。
【例3.3】 输入两个数分别赋给变量i和j,再将这两个数分别输出。本实例流程图可以采用顺序 结构来实现,如图3.4所示:
图3.4 输入两变量的值
绘制N-S流程图
既然任何算法都是由前面介绍的三种结构组成,所以各基本结构之间的流程线就是多余的。这是由 美国人I.Nassi和B.Shneiderman共同提出的,故以他们的名字的首字母命名。N-S流程图去掉了原来的 所有的流程线,将全部的算法写在一个矩形框内。它也是算法的一种结构化描述方法,同样也有三种基 本结构。下面分别介绍: (1)顺序结构的N-S流程图如图3.12所示。
图3.2 用流程图描述算法
三种基本结构
经过研究发现,任何复杂的算法,都可以由顺序结构、选择结构和循环结构这三种基本结构组成, 这三种基本结构之间可以并列、可以相互包含,但不允许交叉,不允许从一个结构直接转到另一个结构 的内部去。
整个算法都是由三种基本结构组成的,所以只要规定好三种基本结构的流程图的画法,就可以画出 任何算法的流程图。 1.顺序结构
起止框
输入输出框
判断框
处理框
图3.1 流程图的图元表示方法
其中起止框是用来标识算法开始和结束的;判断框的作用是对一个给定的条件进行判断,根据给定 的条件是否成立来决定如何执行后面的操作;连接点是将画在不同地方的流程线连接起来;下面通过几 个例子来看下这些图框如何来使用。
【例3.2】 有如下函数,输入X值,求Y值。 当X>=0时,Y=X; 当X<0时,Y=-1; 分析这个函数,用流程图表示算法。如图3.2所示。
图3.19 判断闰年的N-S流程图
实例5 用伪代码描述n!
伪代码描述n!如下:
开始 如果n=0,输出s=1; 如果n>0, s=1,i=1; 循环直到i>n s=s*i; i=i+1; 输出s; 结束
自然语言最大的优有点就是容易理解,适用于比较简单的问题。对于比较复杂的问题或者在描述 包括分支或循环的算法时一般会很冗长,所以不用自然语言描述表示算法,避免出现二义性。
用流程图描述
流程图是一种传统的算法表示法,它用一些图框来代表各种不同性质的操作,用流程线来指示算法 的执行方向。由于它简单直观,易于理解,所以应用广泛。下面介绍下常见的流程图符号及流程图的例 子,如图3.1所示。
开始 c=a%b; 循环直到c=0 a=b; b=c; c=a%b; 输出b; 结束
说明: 伪代码虽然不是一种实际的编程语言,但表达能力上类似编程语言,同时避免了描述技术细节带来
的麻烦,所以伪代码更适合描述算法,故被称作“算法语言”或“第一语言”。
实例3 任意输入三个数,求这三个数中的 最大数
用自然语言描述算法: 第一步:定义四个变量分别为x、y、z以及max。 第二步:输入大小不同的三个数分别赋给x、y、z。 第三步:判断x是否大于y,如果大于,则将x的值赋给max,否则将y的值赋给max。 第四步:判断max是否大于z,如果大于,则执行步骤五,否则将z的值赋给max。 第五步:将max的值输出。
实例4 判断2000~2500年中的年份是否 为闰年
该程序流程图如图3.18所示。
图3.18 判断闰年
该程序的N-S流程图如图3.19所示。
m=2000
m/4的余数为0


m/100的余数不为0


输出m 是闰年
m/400的余数为0


输出m是闰年
输出m不 是闰年
输出m不是 闰年
m=m+1 直到m>2500
相关主题