第二章 算法.docx
- 文档编号:24352384
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:20
- 大小:18.70KB
第二章 算法.docx
《第二章 算法.docx》由会员分享,可在线阅读,更多相关《第二章 算法.docx(20页珍藏版)》请在冰豆网上搜索。
第二章算法
第二章 程序的灵魂――算法
一个程序应包括以下两方面的内容:
1.对数据的描述。
在程序中要指定数据的类型和数据的组织形式,
即数据结构。
⑵.对操作的描述。
即操作步骤,也就是算法。
数据结构+算法=程序
程序=算法+数据结构+程序设计方法+语言工具和环境
2.1 算法的概念
做任何事情都有一定的步骤.这些步骤都是按一定的顺序进行的,缺一不可,次序错了也不行.对同一个问题,可以有不同的解题方法和步骤.
计算机算法可分为两大类别:
数值运算算法和非数值运算算法.数值运算的目的是求数值解,例如求方程的根,求一个函数的定积分等.非数值运算包括的面十分广泛,例如图书检索、人事管理、行车调度管理等。
2.2 简单算法举例
例2.1求1×2×3×4×5
例2.3判定2000---2500年中的每一年是否闰年,将结果输出.
例2.5对一个大于或等于3的正整数,判断它是不是一个素数.
用传统流程图描述:
开始
1t
2i
t×it
i+1i
i>5
N
y
结束
开始
2000Y
Y不能被4
整除
y
n
Y不能被100
整除
n
y
Y不能被400
整除
打印y
“是闰年”
yn
打印y
“不是闰年”
打印y
“是闰年”
打印y
“不是闰年”
y+1y
y>2500
nN
y
结束
开始
输入n的值
2i
n能被i整除
y
n
i+1i
i≤n-1
y
n
打印n是素数
结束
三种基本结构:
1.顺序结构:
如右图所示,虚线框内是一个顺序___________
A
结构。
其中A和B两个框是顺序执行的。
||
即在执行完A框所指定的操作后,必然||
接着执行B框所指定的操作。
顺序结构||
B
是最简单的一种基本结构。
||
||
|__________|
2.选择结构:
或称分支结构。
如下图所示:
_______________________________________________
P
P
|yn||yn|
||||
||||
A
B
A
||||
||||
|_______________________||______________________|
虚线框内是一个选择结构。
此结构中必包含一个判断框,根据给定的条件P是否成立而选择执行A框或B框。
无论P条件是否成立,只能执行A框或B框之一,不可能既执行A框又执行B框。
无论走哪一条路径,在执行完A或B之后,都脱离本选择结构。
A或B两个框中可以有一个是空的,即不执行任何操作。
3.循环结构
又称重复结构,即反复执行某一部分的操作。
有两类循环结构:
①.当型(While型)循环结构
见下图(a)。
它的功能是当给定的条件P成立时,执行A框操作,执行完A后,再判断条件P是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次P条件不成立为止,此时不执行A框,脱离本循环结构。
②.直到型(Until型)循环结构
见下图(b)。
它的功能是先执行A框,然后判断给定的P条件是否成立,如果P条件不成立,则再执行A,然后再对P条件作判断,如果P条件仍然不成立,又执行A......如此反复执行A,直到给定的P条件成立为止,此时不再执行A,脱离本循环结构。
______________________________________
||||
A
A
||||
||||
||||
P
P
|y||n|
||||
|_______n__________||_______y_________|
(a)(b)
如下面的例子:
图(a)是当型循环,图(b)是直到型循环,它们的作用都是打印5个数:
1,2,3,4,5。
可以看到,对同一个问题既可以用当型循环来处理,也可以用直到型循环来处理。
___________________________________________
0x
||||
0x
||||
||||
x+1x
打印x值
||||
||||
打印x值
||||
x+1x
||||
||||
X≥5?
x<5?
|y||n|
||||
|_________n______________||_________y_______|
(a)(b)
以上三种基本结构,有以下共同特点:
⑴.只有一个入口。
⑵.只有一个出口。
⑶.结构内的每一部分都有机会被执行到。
⑷.结构内不存在“死循环”。
已经证明,由以上三种基本结构顺序组成的算法结构,可以解决任何复杂的问题.由基本结构所构成的算法属于"结构化"的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转.
基本结构不一定只限于上面三种,只要具有上述4个特点的都可以作为基本结构.人们可以自己定义基本结构,并由这些基本结构组成结构化程序
用N-S流程图表示算法
既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就属多余的了。
1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。
在这种流程图中,完全去掉了带箭头的流程线。
全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框,或者说,由一些基本的框组成一个大的框。
这种流程图又称N-S结构化流程图。
这种流程图适于结构化程序设计,因而很受欢迎。
N-S流程图用以下的流程图符号:
⑴.顺序结构:
用下图(a)形式表示.
⑵.选择结构:
用下图(b)形式表示.
2.循环结构:
当型循环结构用下图(c)形式表示.
直到型循环结构用下图(d)形式表示.
P
成立 不成立
AB
A
B
(a) (b)
当p成立
A
A
直到p成立
(c) (d)
通过下面几个例子,比较传统流程图与N-S流程图表示算法的不同:
例2.11
1t
2i
t×it
i+1i
直到i>5
打印t
例2.13
2000y
y/4的余数为0
是否
y/100的余数不为0
是否
y/400的余数为0打印y
打印y是否“非闰年”
“是闰年”
打印y打印y
“是闰年”“非闰年”
y+1y
直到y>2500
例2.15
我们先改变一下算法,把前面的流程图改成如下图所示。
这个算法将比前面的算法运算次数大大减少。
例如,要判断10000是不是素数。
2100500099999
N=N×N
10000=100×10010000=50×20010000=20×500
由这两种传统流程图可以看出,它们都不是由三种基本结构组成的。
图中间那个循环部分,有两个出口(一个从第二个菱形框下面出口,另一个在第一个菱形框右边出口),不符合基本结构的特点。
由于不能分解为三种基本结构,就无法直接用N-S流程图的三种基本结构的符号来表示。
因此,应当先对它做必要的变换。
要将第一个菱形框(“r=0”)的两个出口汇合在一点,以解决两个出口问题。
输入n的值
2i
n/i的余数r
开始
r=0?
y
n
打印n
“不是素数”
i+1i
i>n
n
y
打印n是素数
结束
输入n的值
2i0w
n/i的余数r
r=0?
y
n
1w
i+1i
i≤n
和w=0
y
n
开始
w=0
yn
打印n
“不是素数”
打印n
“是素数”
结束
其相应的N-S流程图如下:
输入n
0w
2i
n/i的余数r
r=0
是否
1wi+1i
直到i>n或w≠0
是w=0否
打印n“是素数”打印n“不是素数”
用伪代码表示算法
用传统的流程图和N-S图表示算法,直观易懂,但画起来比较麻烦,在设计一个算法时,可能要反复修改,而修改流程图是比较麻烦的。
因此流程图适宜表示一个算法,但在设计算法过程中使用不时很理想(尤其是当算法比较复杂,需要反复修改时)。
为了设计算法时方便,常用一种称为伪代码(pseudocode)的工具。
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。
它如同一篇文章,自上而下地写下来。
每一行(或几行)表示一个基本算法。
它不用图形符号,因此书写方便,格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。
例2.16求5!
。
用伪代码表示的算法如下:
BEGIN(算法开始)
1t
2i
whilei<=5
{t×it
i+1i}
printt
END(算法结束)
例2.15的源程序如下:
Line17Col17InsertIndentTabFillUnindentC:
C2-15B.C
#include
main()
{
intw;floatn,i,r;
scanf("%f",&n);
w=0;i=2;
do
{
r=fmod(n,i);
if(r==0){w=1;i=i+1;}
elsei=i+1;
}
while(i if(w==0)printf("shi%f\n",n); elseprintf("fei%f\n",n); } Line4Col19InsertIndentTabFillUnindentC: C2-15C.C #include main() {intw;floatn,i,r; scanf("%f",&n);w=0;i=2; do {r=fmod(n,i); if(r==0)w=1; i=i+1; } while(i if(w==0)printf("shi%f\n",n); elseprintf("fei%f\n",n); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二章 算法 第二