- 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 程序的灵魂-算法 - 黄淮学院
2 程序的灵魂-算法 - 黄淮学院
值得拥有的资料
是来自平时学习积累总结的
有问题的地方肯定有的
还请大家批评指正!
2 程序的灵魂-算法
一个程序应包括:
z 对数据的描述
在程序中要指定数据的类型和数据的组织形式
即数据结构(data structure)
z 对操作的描述
即操作步骤
也就是算法(algorithm)
Nikiklaus Wirth 提出的公式:数据结构+算法=程序
教材认为: 程序=算法+数据结构+程序设计方法+语言工具和环境
这 4 个方面是一个程序涉及人员所应具备的知识
本课程的目的是使同学知道怎样编写一个 C 程序
进行编写程序的初步训练
因此
只介绍算法的初步知识
2.1 算法的概念
做任何事情都有一定的步骤
为解决一个问题而采取的方法和步骤
就称为算法
计算机算法:计算机能够执行的算法
计算机算法可分为两大类:
数值运算算法:求解数值;
非数值运算算法:事务管理领域
2.2 简单算法举例
【例 2.1】求1×2×3×4×5
最原始方法:
步骤 1:先求 1×2
得到结果 2
步骤 2:将步骤 1 得到的乘积 2 乘以3
得到结果 6
步骤 3:将6再乘以 4
得 24
步骤 4:将24 再乘以5
得 120
这样的算法虽然正确
但太繁
改进的算法:
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;否则
算法结束
如果计算 100!只需将 S5:若 i=5 改成 i=100 即可
如果该求 1×3×5×7×9×11
算法也只需做很少的改动:
S1: 1→t
S2: 3→i
S3: t×i→t
S4: i+2→t
S5:若 i=11, 返回 S3
否则
结束
该算法不仅正确
而且是计算机较好的算法
因为计算机是高速运算的自动机器
实现循环
轻而易举
思考:若将 S5 写成:S5:若 i<11, 返回 S3;否则
结束
【例 2.2】有50 个学生
要求将他们之中成绩在 80 分以上者打印出来
如果
n表示学生学号
ni表示第个学生学号;g表示学生成绩
gi表示第个学生成绩;
则算法可表示如下:
S1: 1→i
S2: 如果gi=80
则打印ni和gi
否则不打印
S3: i+1→i
S4:若 i=50, 返回 S2
否则
结束
【例 2.3】判定 2000 - 2500 年中的每一年是否闰年
将结果输出
润年的条件:
1) 能被 4 整除
但不能被 100 整除的年份;
2) 能被 100 整除
又能被 400 整除的年份;
设 y为被检测的年份
则算法可表示如下:
S1: 2000→y
S2:若 y不能被 4 整除
则输出 y不是闰年
然后转到 S6
S3:若 y能被4 整除
不能被 100 整除
则输出 y是闰年
然后转到 S6
S4:若 y能被100 整除
又能被 400 整除
输出 y是闰年 否则输出 y不是闰年
然后转到 S6
S5:输出 y不是闰年
S6:y+1→y
S7:当 y=2500 时, 返回 S2 继续执行
否则
结束
【例 2.4】求 100
1
99
1
...
4
1
3
1
2
1
1 ?++?+?
算法可表示如下:
S1: sigh=1
S2: sum=1
S3: deno=2
S4: sigh=(-1)×sigh
S5: term= sigh×(1/deno )
S6: term=sum+term
S7: deno= deno +1
S8:若 deno=100
返回 S4;否则
结束
【例 2.5】对一个大于或等于 3 的正整数
判断它是不是一个素数
算法可表示如下:
S1: 输入n 的值
S2: i=2
S3: n 被 i 除
得余数 r
S4:如果 r=0
表示 n 能被 i 整除
则打印 n不是素数
算法结束;否则执行 S5
S5: i+1→i
S6:如果 i=n-1
返回 S3;否则打印 n是素数;然后算法结束
改进:
S6:如果i= n
返回S3;否则打印n是素数;然后算法结束
2.3 算法的特性
z 有穷性:一个算法应包含有限的操作步骤而不能是无限的
z 确定性:算法中每一个步骤应当是确定的
而不能应当是含糊的、模棱两可的
z 有零个或多个输入
z 有一个或多个输出
z 有效性:算法中每一个步
文档评论(0)