- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 算法 一个程序应包括两方面内容: 对数据的描述;(数据类型及其组织形式) 对操作的描述。(算法) 2.1 算法的概念 算法的概念 广义的说,为解决一个问题而采用的方法和步骤,就称为算法。不只是计算问题才有算法! 选择合适的算法。例如求和问题:1+2+…+n 算法分两类:数值算法和非数值算法 2.2 简单算法举例 例:求5! 1*2=2 2*3=6 6*4=24 24*5=120 即:1*2*3*4*5=… 解决方法及步骤 必须知道闰年的条件,假设年份用变量x表示,闰年满足的条件: 能被4整除,但不能被100整除; 须同时满足:y1=x%4, y2=x%100;y1=0,y2≠0 能被100整除,且也能被400 整除。 须同时满足:y1=x%100,y2=x%400;y1=0,y2=0 但以上两个条件,只需满足其中一个就是闰年。 2.3 算法的特性 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto) 结构化程序:指由三种基本结构反复嵌套构成的程序 优点:结构清晰,易读,提高程序设计质量和效率 程序的三种基本结构三种基本结构 顺序结构 三种基本结构总结 顺序结构 选择结构(选取结构、分支结构) 循环结构(重复结构) 当型循环结构(While型) 直到型循环结构(Until型) 三种结构的特点: 只有一个入口和出口 结构内的每一部分都有机会被执行到 结构内不存在死循环 * * 程序=算法+数据结构+程序设计方法+语言环境 灵魂 加工对象 工具 结构化程序设计 (顺序、循环、选择) 可用下式简单描述程序的内涵: 可见,算法是完成一个程序的主要要素之一。 例1. 求∑100=1+2+3+……+100 一般的解决方法及步骤: step1:1+2=3;step2:3+3=6; step3:6+4=10;step4:10+5=15; ……;step99:4950+100=5050; 计算机通用的方法和步骤(算法): 定义两个变量i和j,i代表加数,j代表被加数,两数相加后的和仍然存放在其中一个变量中(i) ,该值将作为下一个求和运算的一个加数;再执行i=i+j;被加数增加一,即:j++; 步骤:step1:定义两个变量i,j; int i,j; step2:令i=1,j=2; i=1;j=2; step3:完成计算i+j,(1+2=3), 并将和赋给变量i; i=i+j; step4:令j的值加1,(2→3); j++; step5:返回step3,重新执行i=i+j,此时i=6,顺序执行到step4,则j的值3→4,只要j的值≤100,就重复执行step3和step4,最后得到i的值就是本题要求计算的结果。 以上方法:采用循环控制语句。 思考1:写出1×2×3…×100的算法(步骤) 步骤:step1: int i,j; step2: i=1;j=2; step3: i=i*j; step4: j++; step5:若j ≤100,返回step3,重新执行i=i*j,否则,结束。 以上方法:采用循环控制语句 思考2:写出1×3×5×…×11的算法(步骤) ★步骤:step1:int i,j; step2:i=1;j=3; step3:i=i*j; step4:j=j+2; step5:若j ≤ 11,返回step3,重新执行i=i*j,否则,结束。 我们把以上几个问题可以看成一类“求和问题”,解决的方法和步骤类似,根据具体问题,具体解决。 分析:这是求和类的问题。 设两个变量,一个表示加数,同时表示和(sum=1),另一个表示被加数(term=-1/2); 问题是:term复杂,如何表示? 符号:设一个变量sign=-1,则-sign=+1; 分数:1/deno,deno初值为2;deno++; term=sign*(1/demo); sum=sum+term; sign=-sign;deno++; 若deno≤100返回上一步;否则算法结束。 例2 求1-1/2+1/3-1/4+…+1/99-1/100 例3. 判断2000~2500年中的每一年是否是闰年,并将判断结果输出。 算法: S1:int x=2000; S2:(x%4= =0 and x%100 !=0)or (x%100==0 and x%400 ==0) ,那么,输出“x年是闰年” ,否则,输出“x年不是闰年”, S3:x++; S4:若x2500,结束程序,否则转到S2。 思考:请看书分析p16的算法。算法实现可参考p106。 一个算法应
文档评论(0)