第2章算法--C语言程序设计(谭浩强第三版).ppt
《第2章算法--C语言程序设计(谭浩强第三版).ppt》由会员分享,可在线阅读,更多相关《第2章算法--C语言程序设计(谭浩强第三版).ppt(36页珍藏版)》请在冰豆网上搜索。
1第二章算法算法的概念算法的特性算法的表示方法结构化程序设计方法2引言:
引言:
一、一个程序应包括两个方面的内容一、一个程序应包括两个方面的内容:
对数据的对数据的描述:
数据结构描述:
数据结构(datastructure)(datastructure)对操作的描述:
算法对操作的描述:
算法(algorithm)(algorithm)著名计算机科学家沃思提出一个公式著名计算机科学家沃思提出一个公式:
数据结构数据结构+算法算法=程序程序数据结构算法程序设计方法语言工具数据结构算法程序设计方法语言工具完整的程序设计应该是完整的程序设计应该是:
描述描述数据的数据的类型、类型、数据的组织形式数据的组织形式描述对数据的描述对数据的操作步骤操作步骤程序设计方法:
结构化程序设计方法程序设计方法:
结构化程序设计方法语言工具:
语言工具:
c语言语言3二、简单的程序设计一般包括:
二、简单的程序设计一般包括:
1、确定数据结构、确定数据结构2、确定算法、确定算法3、编码、编码4、调试程序、调试程序5、整理并写出文档资料、整理并写出文档资料42.1算法的概念例如:
描述太极拳动作的图解,就是太极拳的算法。
一首歌曲的乐谱,也可以称为该歌曲的算法。
1、算法定义:
广义地说,为解决一个问题而采取的方法和步算法定义:
广义地说,为解决一个问题而采取的方法和步骤,就称为骤,就称为“算法算法”。
2、对同一个问题,可以有不同的解题方法和步骤。
算法、对同一个问题,可以有不同的解题方法和步骤。
算法决定决定事情的成败、效率和代价的高低。
事情的成败、效率和代价的高低。
算法的时空效率算法的时空效率选择既运算快、内存开销小的算法选择既运算快、内存开销小的算法33、计算机算法可分为两大类别:
、计算机算法可分为两大类别:
数值运算算法:
求数值解,例如求方程的根非数值运算算法:
包括的面十分广泛,如图书检索、人事管理、行车调度管理等。
高斯算法高斯算法52.2算法的特性
(1)有穷性有穷性。
一个算法应包含有限的操作步骤,不能是无限的。
一个算法应包含有限的操作步骤,不能是无限的。
(2)确定性确定性。
算法中的每一个步骤都应当是确定的,而不应当是。
算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。
对于相同输入必须得到相同结果。
含糊的、模棱两可的。
对于相同输入必须得到相同结果。
(3)有零个或多个输入有零个或多个输入。
所谓输入是指在执行算法时需要从外界。
所谓输入是指在执行算法时需要从外界取得必要的信息。
取得必要的信息。
(4)有一个或多个输出有一个或多个输出。
算法的目的是为了求解,。
算法的目的是为了求解,“解解”就是输就是输出。
出。
(5)有效性有效性。
算法中的每一个步骤都应当能有效地执行,并得到。
算法中的每一个步骤都应当能有效地执行,并得到确定的结果。
确定的结果。
62.3算法的表示为了表示一个算法,可以用不同的方法。
归纳为两大类为了表示一个算法,可以用不同的方法。
归纳为两大类:
(1)文字)文字
(2)图形(符号)图形(符号)常用的方法有:
常用的方法有:
自然语言自然语言传统流程图传统流程图N-S流程图流程图伪代码伪代码PAD图等。
图等。
72.3.1用带序号的自然语言直接表示算法用带序号的自然语言直接表示算法(例例2.1-例例2.5)自然语言就是人们日常使用的语言,可以是汉语或英语自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。
用自然语言表示通俗易懂,但文字冗长,容易或其它语言。
用自然语言表示通俗易懂,但文字冗长,容易出现出现“歧义性歧义性”。
8例例2.1求求12345算法1:
步骤1:
先求12,得到结果2。
步骤2:
将步骤1得到的乘积2再乘以3,得到结果6。
步骤3:
将6再乘以4,得24。
步骤4:
将24再乘以5,得120。
如果要求121000,则要写999个步骤算法2:
上述算法太繁琐,我们找一种通用的表示方法。
s1:
设变量p,代表被乘数,p=1;s2:
设变量i,代表乘数,i=2;s3:
使pi,乘积仍放在被乘数变量p中,可表示为:
pip;s4:
使i的值加1,即i+1i;s5:
如果i不大于5,返回重新执行步骤s3以及其后的s4、s5;否则,算法结束。
最后得到的p就是5!
的值。
9求求1357911上述算法稍作改动:
s1:
1p;s2:
3i;s3:
pip;s4:
i+2is5:
若i11,返回s3;否则,结束。
用这种方法表示的算法具有通用性、灵活性。
s3到s5组成一个循环,在实现算法时,要反复多次执行s3、s4、s5等步骤,直到某一时刻,执行s5步骤时经过判断,乘数i已超过规定的数值而不返回s3步骤为止。
此时,算法结束,变量P的值就是结果。
计算机实现循环是轻而易举。
所有高级语言中都有实现循环的语句。
10例例2.2有有50个学生,要求将他们之中成绩在个学生,要求将他们之中成绩在80分以上的学号和分以上的学号和成绩输出成绩输出nnii代表第代表第ii个学生学号。
个学生学号。
ggii代表第代表第ii个学生成绩,算法如下:
个学生成绩,算法如下:
SS11:
11iiSS22:
如果:
如果ggii8080,则输出,则输出nnii和和ggii;否则不输出;否则不输出SS33:
ii+1+1iiSS44:
如果:
如果ii5050,返回,返回SS22,继续执行;否则,算法结束。
,继续执行;否则,算法结束。
本例中,变量本例中,变量ii作为下标,用它来控制序号(第几个学生,第作为下标,用它来控制序号(第几个学生,第几个成绩)。
当几个成绩)。
当ii超过超过5050时,表示已对时,表示已对5050个学生的成绩处理完个学生的成绩处理完毕,算法结束。
毕,算法结束。
11例2.3判定2000-2500年中的每一年是否是闰年闰年的条件是:
(1)能被4整除,但不能被100整除的年份是闰年,如1996年、2004年;
(2)能被400整除的年份是闰年,如1600年、2000年。
设y为被检测的年份。
可采用以下步骤:
S1:
2000yS2:
若y不能被4整除,则输出“y不是闰年”。
然后转到S6S3:
若y能被4整除,不能被100整除,则输出“y是闰年”。
然后转到S6S4:
若y能被400整除,输出“y是闰年”,然后转到S6S5:
输出“y不是闰年”S6:
y+1yS7:
当y2500时,转S2继续执行,否则算法停止。
12例2.4求1-1/2+1/3-1/4+1/99-1/100算法如下:
S1:
sign=1;/作为加数符号S2:
sum=1;/sum作为累加变量S3:
deno=2;/作为加数分母S4:
sign=(-1)*signS5:
term=sign*(1/deno)/term作为加数S6:
sum=sum+termS7:
deno=deno+1S8:
若deno100返回S4;否则算法结束。
132.3.2用流程图表示算法用流程图表示算法流程图:
用一些约定的几何图形来描述算法。
用某种图框表示某种操作,用箭头表示算法流程。
美国国家标准化协会ANSI(AmericanNationalStandardInstitute)规定了一些常用的流程图符号:
起止框起止框判断框判断框处理框处理框输入输入/输出框输出框注释框注释框流向线流向线连接点连接点14例例2.6将例将例2.1求求5!
的算法用流程图表示的算法用流程图表示用图框来表示各种算法:
灵用图框来表示各种算法:
灵活、自由、直观、形象、直活、自由、直观、形象、直观,可表示任何算法。
观,可表示任何算法。
152.3.3三种基本结构和改进的流程图三种基本结构和改进的流程图1.传统流程图的弊端传统流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。
因此,使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律。
如图:
解决办法:
必须限制箭头的滥用,即不允许无规律地使流程随意解决办法:
必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序地进行下去,改进为:
只有三种基本结构的流程图转向,只能顺序地进行下去,改进为:
只有三种基本结构的流程图162.2.三种基本结构三种基本结构19661966年,年,BohraBohra和和JacopiniJacopini提出了以下三种基本结构:
提出了以下三种基本结构:
顺序结构、顺序结构、选择结构、选择结构、循环结构循环结构用这三种基本结构作为表示一个良好算法的基本单元。
用这三种基本结构作为表示一个良好算法的基本单元。
现在:
任何复杂的算法都是由这三种基本结构按一定规现在:
任何复杂的算法都是由这三种基本结构按一定规律组成。
律组成。
17三种基本结构的图示:
三种基本结构的图示:
顺序结构顺序结构18选择结构选择结构菱形代表条件判断分段函数intmax(intx,inty)if(xy)z=x;elsez=y;19循环循环结构的图示:
结构的图示:
当型当型(While型型)循环结构循环结构直到型直到型(Until型型)循环循环20三种基本结构,有以下共同点:
三种基本结构,有以下共同点:
(1)
(1)只有一个入口:
不得从结构外随意转入结构中某点。
只有一个入口:
不得从结构外随意转入结构中某点。
(2)
(2)只有一个出口:
不得从结构内某个位置随意转出(跳出)。
只有一个出口:
不得从结构内某个位置随意转出(跳出)。
(请注意:
一个菱形判断框有两个出口,而一个选择结构只有一(请注意:
一个菱形判断框有两个出口,而一个选择结构只有一个出口。
不要将菱形框的出口和选择结构的出口混淆。
)个出口。
不要将菱形框的出口和选择结构的出口混淆。
)(3)(3)结构中的每一部分都有机会被执行到。
(没有结构中的每一部分都有机会被执行到。
(没有“死语句死语句”)(4)(4)结构内不存在结构内不存在“死循环死循环”(无终止的循环)(无终止的循环)已经证明:
由三种基本结构顺序组成的算法结构,可以解决任何已经证明:
由三种基本结构顺序组成的算法结构,可以解决任何复杂问题。
由基本结构组成的算法属于复杂问题。
由基本结构组成的算法属于“结构化结构化”算法。
算法。
21扩展:
扩展:
只要具有上述四个特点只要具有上述四个特点的都可以作为基本结构。
的都可以作为基本结构。
可以自己定义基本结构,可以自己定义基本结构,并由这些基本结构组成并由这些基本结构组成结构化程序结构化程序。
22例例2.6将求将求5!
的算法用流程图表示的算法用流程图表示如果需要将最后结果打印出来,可在菱形框的下面加一个输出框。
232.3.4用N-S流程图表示算法19731973年美国学者年美国学者I.NassiI.Nassi和和B.ShneidermanB.Shneiderman提出了一种提出了一种新的流程图形式。
在这种流程图中,完全去掉了带箭头的新的流程图形式。
在这种流程图中,完全去掉了带箭头的流程线。
全部算法写在一个矩形框内,在该框内还可以包流程线。
全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。
这种流程图又称个大的框。
这种流程图又称N-SN-S结构化流程图。
结构化流程图。
24
(1)顺序结构:
顺序结构:
A和和B两个框组成一个顺序结构。
两个框组成一个顺序结构。
(2)选择结构:
当条件选择结构:
当条件p成立时执行操作成立时执行操作A,条件,条件p不成立则不成立则执行操作执行操作B。
25(3)循环结构:
循环结构:
当型循环结构下,图符表示先判断后执行,当条件p成立时反复执行操作A,直到条件p不成立为止。
直到型循环结构下,图符表示先执行后判断,当条件p不成立时反复执行A操作,直到p条件成立为止。
26用三种用三种N-SN-S流程图中的基本框,可以组成复杂的流程图中的基本框,可以组成复杂的N-SN-S流程图。
流程图。
图中的图中的AA框或框或BB框,可以是一个简单的操作,也可以是三个基本框,可以是一个简单的操作,也可以是三个基本结构之一。
结构之一。
A框可以是一个选择结构B框可以是一个循环结构27例例2.112.11求求5!
5!
算法用算法用N-SN-S