收藏 分销(赏)

C语言2-1 100307.ppt

上传人:xrp****65 文档编号:13336023 上传时间:2026-03-03 格式:PPT 页数:60 大小:1.62MB 下载积分:10 金币
下载 相关 举报
C语言2-1 100307.ppt_第1页
第1页 / 共60页
C语言2-1 100307.ppt_第2页
第2页 / 共60页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,2.2,简单算法举例,例2.1,:求12345,原始方法:,步骤,1,:先求,12,,得到结果,2,步骤,2,:将步骤,1,得到的乘积,2,再乘以,3,,得到结果,6,步骤,3,:将,6,再乘以,4,,得,24,步骤,4,:将,24,再乘以,5,,得,120,如果要求,121000,,则要写,999,个步骤,可以设两个变量,:,一个变量代表被乘数,一个变量代表乘数。,S1,:,使,t=1,。,S2,:使,i=2,。,S3,:,使,t,i,,,乘积仍放在变量,t,中,可表示为:,t,i,t,S4,:使,i,的值加,1,,即,i+1 i,。,S5,:,如果,i,不大于,5,,返回重新执行步骤,S3,以及 其后的步骤,S4,和,S5,;,否则,算法结束。最后得到,t,的值就是,5!,的值。,设,p,为被乘数,,i,为乘数。,用循环算法来求结果,算法可改写:,S1,:,1t,S2,:,3 i,S3,:,ti,t,S4,:,i+2 i,S5,:若,i11,,,返回,S3,。,否则,结束。,如果题目改为:求,13511,算法简练,i11,结束;否则返回,S3,用这种方法表示的算法具有通用性、灵活性。,S3,到,S5,组成一个循环,在实现算法时 要反复多次执行,S3,,,S4,,,S5,等步骤,直到某一时刻,执行,S5,步骤时经过判断,乘数,i,已超过规定的数值而不返回,S3,步骤为止。此时算法结束,变量,t,的值就是所求结果。,例,2.2,有,50,个学生,要求将他们之中成绩在,80,分以上者打印出来。,S1,:,1 i,S2,:,如果,g,i,80,,则打印,n,i,和,g,i,,否则不打印,S3,:,i+1 i,S4,:,如果,i50,,,返回,S2,。否则结束,变量,i,作为下标,用来控制序号,i,:第个学生学号,i,:第个学生成绩,当,i,超过,50,时,表示已对,50,个学生的成绩处理完毕,算法结束。,例,2.3,判定,2000,2500,年中的每一年是否闰年,将结果输出。,闰年,(Leap Year),是为了弥补因人为,历法,规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。闰年共有,366,天,判定公历闰年遵循的一般规律为,:,四年一闰,百年不闰,四百年再闰,.,例,2.3,判定,2000,2500,年中的每一年是否闰年,将结果输出。,分析:,闰年的条件是:,(1),能被,4,整除,但不能被,100,整除的年份,如:,1996,2004,年是闰年;,(2),能被,100,整除,又能被,400,整除的年份,如:,1600,2000,年是闰年。,S1,:,2000 y,S2,:若,y,不能被,4,整除,则输出,y“,不是闰年”。然后转到,S6,S3,:若,y,能被,4,整除,不能被,100,整除,则输出,y“,是闰年”。然后转到,S6,。,S4,:若,y,能被,100,整除,又能被,400,整除,输出,y“,是闰年”,否则输出“不是闰年”。然后转到,S6,。,S5:,输出,y“,不是闰年”。,S6,:,y+1 y,S7,:当,y2500,时,转,S2,继续执行,否则,结束,设,y,为被检测的年份,算法可表示如下:,以上算法中每做一步都分别分离出一些范围,(,巳能判定为闰年或非闰年,),,逐步缩小范围,直至执行,S5,时,只可能是非闰年。,“其它”包括能被,4,整除,又能被,100,整除,而不能被,400,整除的那些年份,(,如,1900),是非闰年。,例2.4,求,算法如下:,S1,:,sign=1,S2,:,sum=1,S3,:,deno,=2,S4,:,sign=(-1)sign,S5,:,term=sign(1/deno),S6,:,sum=sum+term,S7,:,deno,=deno+1,S8,:若,deno100,返回,S4,,,否则结束。,单词作变量名,以使算法更易于理解:,sum,表示累加和,,deno,是英文分母(,denominator,),缩写,,sign,代表数值的符号,,term,代表某一项。,反复执行,S4,到,S8,步骤,,直到,分母大于,100,为止。,一共执行,99,次循环,向,sum,累加入了,99,个分数。,sum,最后的值就是多项式的值。,例,2.5,对一个大于或等于,3,的正整数,判断它是不是一个素数。,概念:,所谓素数,是指除了,1,和该数本身之外,不能被其它任何整数整除的数。例如,,13,是素数。因为它不能被,2,,,3,,,4,,,,,12,整除。,分析:,判断一个数,n(n3),是否素数的方法:,将,n,作为被除数,将,2,到,(n-1),各个整数轮流作为除数,如果都不能被整除,则,n,为素数。,算法如下:,S1,:,输入,n,的值,S2,:,i=2 ,(,i,作为除数),S3,:,n,被,i,除,得余数,r,S4,:,如果,r=0,,,表示,n,能被,i,整除,则打印,n“,不是素数”,算法结束。否则执行,S5,S5,:,i+1i,S6,:,如果,in-1,,,返回,S3,。,否则打印,n“,是素数”。然后结束。,改进:,S6:,如果,i n/2,,返回,S3,。,或,S6:,如果,i,,返回,S3,。,2.3,算法的特性,有穷性:,包含有限的操作步骤。,确定性:,算法中的每一个步骤都应当是确定的。,有零个或多个输入:,输入是指在执行算法时需要从外界取得必要的信息。,有一个或多个输出:,算法的目的是为了求解,“解”就是输出。,有效性:,算法中的每一个步骤都应当能有效地执行,并得到确定的结果。,一个算法应该具有以下特点:,2.4,算法的表示,用不同的方法表示算法:,自然语言,传统流程图,结构化流程图,伪代码,2.4.2,用流程图表示算法,美国国家标准化协会,ANSI(American National Standard Institute),规定了一些常用的流程图符号:,起止框,判断框,处理框,输入,/,输出框,注释框,流向线,连接点,一个输入两个输出,例,2.6,将求,5!,的算法用流程图表示,如果需要将最后结果打印出来,可在菱形框的下面加一个输出框。,例,2.7,将例,2.2,的算法用流程图表示。打印,50,名 学生中成绩在,80,分以上者的学号和成绩。,如果包括这个输入数据的部分,流程图为,例,2.8,将例,2.3,判定闰年的算法用流程图表示,用流程图表示算法要比用文字描述算法逻辑清晰、易于理解。,例,2.9,将例,2.4,的算法用流程图表示,例,2.10,将例,2.5,判断素数的算法用流程图表示,小结:,流程图是表示算法的较好的工具。,一个流程图包括以下几部分:,(1),表示相应操作的框;,(2),带箭头的流程线;,(3),框内外必要的文字说明。,2.4.3,三种基本结构和改进的流程图,1.,传统流程图的弊端,传统流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律,阅读者要花很大精力去追踪流程,使人难以理解算法的逻辑。如图:,传统流程图的流程可以是:,这种如同乱麻一样的算法称为,BS,型算法,,意为一碗面条,(A Bowl of Spaghetti),,,乱无头绪。,缺点:,难以阅读、修改,使算法的可靠性和可维护性难以保证。,解决办法:,必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序地进行下去。,2.,三种基本结构,选择结构,循环结构,顺序结构,三种基本结构的图示:,顺序结构,选择结构,or,不执行操作,循环结构,当型,(While,型,),循环结构,直到型,(Until,型,),循环,三种基本结构的共同特点,:,(1),只有一个入口。,(2),只有一个出口。,(,请注意:,不要将菱形框的出口和选择结构的出口混淆。),(3),结构内的每一部分都有机会被执行到。,即每一个框,都应当有一条从入口到出口的路径通过它,(4),结构内不存在“死循环”,。,不正确的流程表示:,流程内的死循环,小结:,由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。,扩展:,只要具有上述四个特点的都可以作为基本结构。可以自己定义基本结构,并由这些基本结构组成结构化程序。,此图符合基本结构的特点,这是一个多分支选择结构,根据表达式的值决定执行路线。虚线框内的结构是一个入口一个出口,并且有上述全部的四个特点。由此构成的算法结构也是结构化的算法。可以认为这是由三种基本结构所派生出来的。,作业,2.2,2.4,之:,2.4.1,2.4.3,2.4.6,2.4.7,2.4.8,2.4.4,用,N-S,流程图表示算法,1973,年美国学者,I.Nassi,和,B.Shneiderman,提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称,N-S,结构化流程图。,N-S,流程图符号:,(1),顺序结构,(2),选择结构,图中的,A,框或,B,框,可以是一个简单的操作,也可以是三个基本结构之一。,N-S,流程图符号:,(3),循环结构,用三种,N-S,流程图中的基本框,可以组成复杂的,N-S,流程图。,A,框选择结构,B,框循环结构,例,2.11,将例,2.1,的求,5!,算法用,N-S,图表示,例,2.12,将例,2.2,的算法用,N-S,图表示。(打印,50,名学生中成绩高于,80,分的学号和成绩),没有输入数据,例,2.12,将例,2.2,的算法用,N-S,图表示。(打印,50,名学生中成绩高于,80,分的学号和成绩),有输入数据,例,2.13,将例,2.3,判定闰年的算法用,N-S,图表示,例,2.14,将例,2.4,的算法用,N-S,图表示,例,2.15,将例,2.5,判别素数的算法用,N-S,流程图表示。,传统流程图分析:,出口,1,出口,2,此图不符合基本结构特点!,由于不能分解为三种基本结构,就无法直接用,N-S,流程图的三种基本结构的符号来表示。因此,应当先作必要的变换。,例,2.15,将例,2.5,判别素数的算法用,N-S,流程图表示。,传统流程图变换为:,一个出口,用,N-S,流程图表示:,N-S,图表示算法的优点,比文字描述直观、形象、易于理解;,比传统流程图紧凑易画。,尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,,N-S,流程图中的上下顺序就是执行时的顺序。用,N-S,图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。,小结:,一个结构化的算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内,(,如循环中流程的跳转,),;一 个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。,2.4.5,用伪代码(,pseudo code,)表示算法,概念:,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。,特点:,它如同一篇文章一样,自上而下地写下来。每一行,(,或几行,),表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,也便于向计算机语言算法,(,即程序,),过渡。,用处:,适用于设计过程中需要反复修改时的流程描述。,IF x is positive THEN,print x,ELSE,print-x,也可以用汉字伪代码表示:,若,x,为正,打印,x,否则,打印,-x,也可以中英文混用,如:,IF x,为正,print x,ELSE,print-x,例:,“,打印,x,的绝对值”的算法可以用伪代码表示为:,开始,置,t,的初值为,1,置,i,的初值为,2,当,i=5,,,执行下面,操作:,使,t=ti,使,i=i+1,循环体到此结束,输出,t,的值,结束,也可以写成以下形式:,BEGIN,算法开始,1,t,2,i,while i5,ti,t,i+1,i,print t,END,算法结束,例,2.16,求,5!,。用伪代码表示算法:,例,2.17,输出,50,个学生中成绩高于,80,分者的学号和成绩。,用伪代码表示算法:,BEGIN,算法开始,1,i,while i50,input n,i,and g,i,i+1,I,1,i,while i50,if g,i,80,print n,i,and g,i,i+1,I ,END,算法结束,2.4.6,用计算机语言表示算法,概念:,用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行。因此在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。,特点:,用计算机语言表示算法必须严格遵循所用的语言的语法规则,这是和伪代码不同的。,用处:,要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。,#include,void main(),int,i,t;,t=1;,i=2;,while(i=5),t=t*i;,i=i+1;,printf(,%dn,t,);,例,2.20,将例,2.16,表示的算法(求,5!,)用,C,语言表示。,应当强调说明:,写出了,C,程序,仍然只是描述了算法,并未实现算法。只有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执行的算法。,2.5,结构化程序设计方法,一个结构化程序 就是用高级语言表示的结构化算法。,用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修改和维护。,结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。,结构化程序设计方法的基本思路是:,把一个复杂问题的求解过程 分阶段进行,,每个阶段处理的问题都控制在人们容易理解和处理的范围内。,采取以下方法来保证得到结构化的程序:,自顶向下;,逐步细化;,模块化设计;,结构化编码。,两种不同的方法:,自顶向下,逐步细化;,自下而上,逐步积累。,用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字语句为止。这种方法就叫 做,“,自顶向下,逐步细化,”,。,自顶向下,逐步细化方法的优点:,考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发现某一部分中有一段内容不妥,需要修改,只需找出该部分修改有关段落即可,与其它部分无关。我们提倡用这种方法设计程序。这就是用工程的方法设计程序。,模块设计的方法:,模块化设计的思想实际上是一种,“,分而治之,”,的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单了。,在拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。,子模块一般不超过,50,行。,划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服