《C语言程序设计课件及程序代码第2章算法.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计课件及程序代码第2章算法.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序的灵魂算法 uu算法的概念uu简单算法举例 uu算法的特性uu怎样表示一个算法uu结构化程序方法uu总结 1 12.1 算法的概念n n程序通常包含的内容有程序通常包含的内容有程序通常包含的内容有程序通常包含的内容有:(1 1)数据的描述数据的描述数据的描述数据的描述:指定数据的类型和组织形式(数据结构):指定数据的类型和组织形式(数据结构):指定数据的类型和组织形式(数据结构):指定数据的类型和组织形式(数据结构)(2 2)操作的描述操作的描述操作的描述操作的描述:编程的操作步骤,也称算法(:编程的操作步骤,也称算法(:编程的操作步骤,也称算法(:编程的操作步骤,也称算法(algorit
2、hm)algorithm)n n操作的目的操作的目的操作的目的操作的目的:对数据进行加工处理,以便得到结果。:对数据进行加工处理,以便得到结果。:对数据进行加工处理,以便得到结果。:对数据进行加工处理,以便得到结果。n n厨师做菜肴厨师做菜肴厨师做菜肴厨师做菜肴:(1 1)配料:制作菜肴所需的原料)配料:制作菜肴所需的原料)配料:制作菜肴所需的原料)配料:制作菜肴所需的原料 (2 2)步骤:制作某项菜肴时将原料按规定的步骤加工成所需)步骤:制作某项菜肴时将原料按规定的步骤加工成所需)步骤:制作某项菜肴时将原料按规定的步骤加工成所需)步骤:制作某项菜肴时将原料按规定的步骤加工成所需的菜肴的菜肴的
3、菜肴的菜肴2 22.1 算法的概念n n著名计算机科学家沃思提出一个公式:数据结构+算法=程序n n再加上程序设计方法和语言环境 程序程序=算法算法+数据结构数据结构+程序设计方法程序设计方法+语言工具和环境语言工具和环境3 32.1 算法的概念n n做任何事情都有一定的步骤。做任何事情都有一定的步骤。为解决一个问题而采为解决一个问题而采取的方法和步骤取的方法和步骤,就称为算法。就称为算法。n n计算机算法:计算机算法:计算机能够执行的算法计算机能够执行的算法。n n计算机算法可分为两大类:计算机算法可分为两大类:数值运算算法数值运算算法:求数值的解:求数值的解 ;非数值运算算法非数值运算算法
4、:事务管理领域。:事务管理领域。4 42.2 简单算法举例n n例例例例2.12.1:12345 12345 原始算法原始算法原始算法原始算法:S1:S1:求求求求1212得结果得结果得结果得结果2 2 S2:S2:将将将将2323得结果得结果得结果得结果6 6 S3:S3:将将将将6464得结果得结果得结果得结果24 24 S4:S4:将将将将245245得结果得结果得结果得结果120 120 上述方法虽正确上述方法虽正确上述方法虽正确上述方法虽正确,但较烦琐但较烦琐但较烦琐但较烦琐n n解决此类问题的通用方法是解决此类问题的通用方法是解决此类问题的通用方法是解决此类问题的通用方法是:设两个
5、变量:设两个变量:设两个变量:设两个变量:p p 存放被乘数和结果存放被乘数和结果存放被乘数和结果存放被乘数和结果 i i 存放乘数存放乘数存放乘数存放乘数 S1 S1:p=1 p=1 S2 S2:i=2 i=2 S3 S3:pipip p S4 S4:i+1i+1i i S5 S5:若:若:若:若i=5 i=5 返回返回返回返回s3 s3 否则算法结束。否则算法结束。否则算法结束。否则算法结束。此算法较上面的算法具有通用性和灵活性此算法较上面的算法具有通用性和灵活性此算法较上面的算法具有通用性和灵活性此算法较上面的算法具有通用性和灵活性5 52.2 简单算法举例n n例例例例2.4 2.4
6、求求求求1-1/2+1/3-1/4+.+1/99-1/1001-1/2+1/3-1/4+.+1/99-1/100 算法如下算法如下算法如下算法如下 :S1:sign=1 S1:sign=1 S2:sum=1 S2:sum=1 S3:deno=2 S3:deno=2 S4:sign=(-1)sign S4:sign=(-1)sign S5:term=sign(1/deno)S5:term=sign(1/deno)S6:sum=sum+term S6:sum=sum+term S7:deno=deno+1 S7:deno=deno+1 S8:S8:若若若若deno=100deno=100返回返回返
7、回返回s4,s4,否则算法结束。否则算法结束。否则算法结束。否则算法结束。6 62.2 简单算法举例【例例2.52.5】对一个大于或等于对一个大于或等于3 3的正整数,判断它是的正整数,判断它是不是一个素数。不是一个素数。S1:S1:输入输入n n的值的值 S2:i=2 S2:i=2 S3:n S3:n被被i i除,得余数除,得余数r r S4:S4:如果如果r=0r=0,表示,表示n n能被能被i i整除,则打印整除,则打印n“n“不是素不是素数数”,算法结束;否则执行,算法结束;否则执行S5S5 S5:i+1 S5:i+1i i S6:S6:如果如果in-1in-1,返回,返回S3S3;否
8、则打印;否则打印n“n“是素数是素数”;然后算法结束。;然后算法结束。7 72.2 简单算法举例【例例2.52.5】对一个大于或等于对一个大于或等于3 3的正整数,判断它是的正整数,判断它是不是一个素数。不是一个素数。S1:S1:输入输入n n的值的值 S2:i=2 S2:i=2 S3:n S3:n被被i i除,得余数除,得余数r r S4:S4:如果如果r=0r=0,表示,表示n n能被能被i i整除,则打印整除,则打印n“n“不是素不是素数数”,算法结束;否则执行,算法结束;否则执行S5S5 S5:i+1 S5:i+1i i 改进:改进:S6:S6:如果如果i sqrt(n)i sqrt(
9、n),返回,返回S3S3;否则打印;否则打印n“n“是素是素数数”;然后算法结束然后算法结束8 82.3 算法的特性n n有穷性:有限的操作步骤和合理的计算时间。n n确定性:不应当产生“歧义性”。n n有零个或多个输入n n有一个或多个输出:算法的输出不一定就是计算机的打印输出。n n有效性:如除数不得为零。9 92.4 怎样表示一个算法怎样表示一个算法 n n自然语言表示n n传统流程图表示n nN-S流程图表示 n n伪代码表示 n n计算机语言表示 10102.4 怎样表示一个算法怎样表示一个算法 自然语言:世界上男人没有了女人就慌了。世界上男人没有了,女人就慌了。世界上,男人没有了女
10、人,就慌了。11112.4 怎样表示一个算法怎样表示一个算法n n用流程图表示算法用流程图表示算法 n nANSIANSI规定的流程图符号,已为世界各国采用,规定的流程图符号,已为世界各国采用,用图框表示操作,用图形表示算法。用图框表示操作,用图形表示算法。12122.4 怎样表示一个算法怎样表示一个算法n n【例【例2.62.6】将例】将例2.12.1的算的算法用流程图表示。法用流程图表示。123451234513132.4 怎样表示一个算法怎样表示一个算法n n例例2.9 2.9 用流程图算法求用流程图算法求2.4 2.4 14142.4 怎样表示一个算法怎样表示一个算法n n例例 2.1
11、0:2.10:用流程图算法判断素数用流程图算法判断素数此处应该填写什此处应该填写什么?么?15152.4 怎样表示一个算法怎样表示一个算法n n例例 2.10:2.10:用流程图算法判断素数用流程图算法判断素数n-1,sqr(n)n-1,sqr(n)16162.4 怎样表示一个算法怎样表示一个算法n n可以看出流程图所包含的部分可以看出流程图所包含的部分:(1 1)图框图框:表示相应操作;:表示相应操作;(2 2)流程线流程线:表示操作的先后顺序;:表示操作的先后顺序;(3 3)框内外必要的文字说明。框内外必要的文字说明。n n流程图表示算法:流程图表示算法:优点优点:形象直观、表示清晰,各框
12、之间逻辑关系:形象直观、表示清晰,各框之间逻辑关系清楚清楚 缺点缺点:流程图占篇幅较多,当算法复杂时,画流:流程图占篇幅较多,当算法复杂时,画流程图费时且不方便程图费时且不方便 17172.4 怎样表示一个算法怎样表示一个算法n n算法的三种基本结构算法的三种基本结构 (1)(1)顺序结构顺序结构 18182.4 怎样表示一个算法怎样表示一个算法n n算法的三种基本结构算法的三种基本结构 (2)(2)选择结构选择结构 19192.4 怎样表示一个算法怎样表示一个算法n n算法的三种基本结构算法的三种基本结构-循环结构循环结构 当(当(whilewhile)型循环结构)型循环结构 当(while
13、)型循环结构 功能:给定条件P1成立时,执行A,执行完后再判断条件是否成立,如 此反复,直到某次P1条件不成立为止三种结构的共点:当型循环实现当型循环实现5 5个数的个数的打印打印 输出用传统流程输出用传统流程图算法实现图算法实现确实可以?确实可以?确实可以?确实可以?20202.4 怎样表示一个算法怎样表示一个算法n n算法的三种基本结构算法的三种基本结构-循环结构循环结构 直到型(直到型(UntilUntil)循环)循环 当(while)型循环结构 功能:给定条件P1成立时,执行A,执行完后再判断条件是否成立,如 此反复,直到某次P1条件不成立为止三种结构的共点:直到型循环实直到型循环实现
14、现5 5个数的打个数的打印印 输出用传统输出用传统流程图算法实流程图算法实现现21212.4 怎样表示一个算法怎样表示一个算法n n三种结构的共点三种结构的共点:(1)(1)只有一个入口只有一个入口 (2)(2)只有一个出口只有一个出口.(3)(3)结构内的每一部分都有机会被执行到结构内的每一部分都有机会被执行到每一框内应有一条从入口到出口的路径通过每一框内应有一条从入口到出口的路径通过 (4)(4)结构内不能存在死循环结构内不能存在死循环 22222.4 怎样表示一个算法怎样表示一个算法n n用用N-SN-S流程图表示顺序结构流程图表示顺序结构n n用用N-SN-S流程图表示选择结构流程图表
15、示选择结构n n用用N-SN-S流程图表示循环结构流程图表示循环结构23232.4 怎样表示一个算法怎样表示一个算法n n用用N-SN-S流程图表示算法讨论上述各例流程图表示算法讨论上述各例24242.4 怎样表示一个算法怎样表示一个算法算法用伪代码表示:n n例例2.16 2.16 求求5!5!算法用伪代码表示算法用伪代码表示 n nBEGINBEGIN(算法开始)(算法开始)n n1 1t t n n2 2i i n nWhile i=5 While i=5 n n n n ti ti t t n n i+1 i+1 i i n n n n print t print t n nENDEN
16、D(算法结束)(算法结束)25252.4 怎样表示一个算法怎样表示一个算法n n用计算机语言表示算法 26262.5结构化程序结构化程序n n结构化程序结构化程序:就是用高级语言表示的算法,三种基:就是用高级语言表示的算法,三种基本结构组成的程序必然是结构化程序。本结构组成的程序必然是结构化程序。n n设计思路设计思路 自顶向下、逐步细化、模块化设计、结构化编码。自顶向下、逐步细化、模块化设计、结构化编码。n n 程序结构程序结构:按功能划分为若干个基本模块,形成一个树状结构。按功能划分为若干个基本模块,形成一个树状结构。各模块间的关系尽可能简单,功能上相对独立;每一模各模块间的关系尽可能简单
17、,功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成。块内部均是由顺序、选择和循环三种基本结构组成。其模块化实现的具体方法是使用子函数(子程序)。其模块化实现的具体方法是使用子函数(子程序)。27272.5结构化程序结构化程序n n例例2.222.22将将1 1到到10001000之间的素数打印出来。埃拉托色尼筛法之间的素数打印出来。埃拉托色尼筛法1 12 23 34 45 56 67 78 89 9101011111212131314141515161617171818 23 5 7 9 11 13 15 17 23456789101112131415161718 23 5
18、7 11 13 17 28282.5结构化程序结构化程序n n例例2.222.22将将1 1到到10001000之间的素数打印出来。之间的素数打印出来。1 12 23 34 45 56 67 78 89 9101011111212131314141515161617171818 1)1)1)1)挖去挖去挖去挖去1 1 1 1;2)2)2)2)用下一个未被挖去的数用下一个未被挖去的数用下一个未被挖去的数用下一个未被挖去的数P P P P去除后面的各数,把去除后面的各数,把去除后面的各数,把去除后面的各数,把P P P P的倍数挖掉;的倍数挖掉;的倍数挖掉;的倍数挖掉;3)3)3)3)检查检查检查
19、检查P P P P是否小于是否小于是否小于是否小于 sqrt(n)sqrt(n)sqrt(n)sqrt(n)的整数部分,如果是,则返回(的整数部分,如果是,则返回(的整数部分,如果是,则返回(的整数部分,如果是,则返回(2 2 2 2)继续执行,否)继续执行,否)继续执行,否)继续执行,否则就结束。则就结束。则就结束。则就结束。4)4)4)4)纸上剩下的数就是素数。纸上剩下的数就是素数。纸上剩下的数就是素数。纸上剩下的数就是素数。29292.5结构化程序结构化程序输入输入1 1n n把所有非素数去掉把所有非素数去掉打印全部素数打印全部素数ABC30302.5结构化程序结构化程序输入输入1 1n
20、 n把所有非素数去掉把所有非素数去掉打印全部素数打印全部素数ABC输入输入n ni=1i=1当当i=ni=nXi=iXi=ii=i+1i=i+131312.5结构化程序结构化程序输入输入1 1n n把所有非素数去掉把所有非素数去掉打印全部素数打印全部素数ABC将将X1X1去掉(使去掉(使X1X10 0)i=2i=2当当isqrt(n)isqrt(n)的整数部分的整数部分如果如果XiXi未去掉,则未去掉,则将将Xi+1Xi+1到到XnXn间的全间的全部是部是XiXi倍数的数去倍数的数去掉掉i=i+1i=i+132322.5结构化程序结构化程序将将X1X1去掉(使去掉(使X1X10 0)i=2i=
21、2当当isqrt(n)isqrt(n)的整数部分的整数部分如果如果XiXi未去掉,则未去掉,则将将Xi+1Xi+1到到XnXn间的全间的全部是部是XiXi倍数的数去倍数的数去掉掉i=i+1i=i+1将将Xi+1Xi+1到到XnXn间间的全部是的全部是XiXi倍数倍数的数去掉的数去掉否否是是Xi=0Xi=033332.5结构化程序结构化程序j=i+1j=i+1j=nj=n将能被将能被XiXi整除的整除的XjXj去掉去掉j=j+1j=j+1将将Xi+1Xi+1到到XnXn间的间的全部是全部是XiXi倍数的倍数的数去掉数去掉否否是是Xi=0Xi=034342.5结构化程序结构化程序j=i+1j=i+
22、1j=nj=n将能被将能被XiXi整除的整除的XjXj去掉去掉j=j+1j=j+1是是否否是是否否使使Xj=0Xj=0Xj=0Xj=0XjXj能被能被XiXi整除整除35352.5结构化程序结构化程序3636复习要点 n n对于一个给定的问题,懂得如何设计算法来解决,并用一对于一个给定的问题,懂得如何设计算法来解决,并用一对于一个给定的问题,懂得如何设计算法来解决,并用一对于一个给定的问题,懂得如何设计算法来解决,并用一种常用方法表示该算法;种常用方法表示该算法;种常用方法表示该算法;种常用方法表示该算法;n n了解面向过程的结构化程序设计思想,对于一个复杂的问了解面向过程的结构化程序设计思想,对于一个复杂的问了解面向过程的结构化程序设计思想,对于一个复杂的问了解面向过程的结构化程序设计思想,对于一个复杂的问题,懂得如何划分模块,设计算法题,懂得如何划分模块,设计算法题,懂得如何划分模块,设计算法题,懂得如何划分模块,设计算法;n n程序设计语言是次要的,算法是关键算法是关键。程序设计语言是次要的,算法是关键算法是关键。程序设计语言是次要的,算法是关键算法是关键。程序设计语言是次要的,算法是关键算法是关键。3737