网站大量收购闲置独家精品文档,联系QQ:2885784924

北京工业大学高级语言程序设计课件第三章 算法初步.ppt

北京工业大学高级语言程序设计课件第三章 算法初步.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3讲 算法初步 一、解题方法 二、算法举例---穷举法 三、算法举例---递推与迭代法 四、良好的编程风格 一、解题方法 分析问题,想出策略;自顶向下,逐步求精。 例如,编写一个通讯录程序 通讯录需要存储什么数据?存在什么地方? 程序的功能 输入一个新名字 删除一个名字 显示整个通讯录 搜索一个名字 进入、退出程序等 ……。具体到每一项功能 菜单,将这些功能分类别设计 用计算机解决问题的步骤 分析问题 选择解决方案 编写程序 调试程序 测试程序 数据结构 数据对象:分析所研究问题,提炼出性质相同的数据元素。 对象之间的关系 通讯录数据 用于管理的数据 在此基础上,想出处理的方法---算法 算法 算法是指用计算机解决问题的程序或步骤,这些程序或步骤必须是明确和有效的,而且能够在有限步之内完成。 算法的特征: 确定性 逻辑性 有穷性 用程序流程图描述算法 描述算法的方法有很多 程序流程图:图形化的描述程序执行过程(图是工程师的语言) 使得思想集中于算法设计,不受语言细节干扰 再依据算法,用语言编写程序 程序流程图的图形符号:P60 例:求一元二次方程ax2+bx+c=0 的解 #include stdio.h #include math.h main( ) { int a, b, c,t; printf( Input a,b,c: ); scanf( %d%d%d, a, b, c ); t = b*b - 4*a*c; if (t0) printf( No solution\n ); else if ( t==0 ) printf( X = %lf\n, -b/(2.0*a) ); else { double t0; t0 = sqrt( (double)t ); printf( X1 = %lf, X2= %lf\n, (-b+t0)/(2*a), (-b-t0)/(2*a) ); } } 二、算法举例---穷举法 列出所有可能情况,逐个排查,从中找出符合条件的解。 关键是明确问题所有可能性,注意可能情况是有限的。 用什么基本控制结构? 优点?缺点? 例:判断给定整数是否是素数 问题分析 利用素数的定义来判别。对于给定整数x,用2~x-1之间的每个整数试除,若都不能整除则是素数,否则不是素数。 一次试除成功(不能整除),并不能说明x是素数,只有所有试除都成功,才能断定x是素数;但一次试除失败(能整除),则可断定x不是素数 例:判断给定整数是否是素数 解决方案 数据结构设计 整型变量存储素数:int x ; 算法设计 穷举的范围---循环开始和结束:2~x-1 数据元素的关系---循环的步进:1 逐个排查的过程---循环的内容:试除 #include stdio.h main( ) { int x, t; printf( Enter an integer: ); scanf( %d, x ); for (t = 2; tx; t++ ) if ( x%t == 0 ) break; if ( t == x ) printf( %d is prime\n, x ); else printf( %d isnt prime\n, x ); } 例:百钱买百鸡 问题描述 某人有钱百枚,希望买一百只鸡;公鸡5枚钱一只,母鸡3枚钱一只,而小鸡3只1枚钱。试问:如果用百枚钱买百只鸡,可以包含几只公鸡、几只母鸡和几只小鸡 问题分析 公鸡、母鸡和小鸡的数量之和为100。 采用穷举法,将100只鸡中的所有公鸡、母鸡和小鸡的组合枚举一遍,找出价钱正好是100的组合。 解决方案 数据结构 设: x——公鸡的个数 y——母鸡的个数 z——小鸡的个数 算法 遍历x、y、z,三层循环嵌套 循环起止:x:0~100/5;y:0~100/3; z:0~100 步进:1 循环内容:排查条件: 5x+3y+z/3=100 x+y+z=100 #include stdio.h main( ) { int x, y, z; /* 公鸡、母鸡、小鸡的个数 */ for( x=0; x=100/5; x++ ) for( y=0; y=100/3; y++ ) for( z=0; z=100; z++ ) { if (x+y+z ==100 15*x+9*y+z==30

文档评论(0)

ormition + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档