计算机编程 算法 求n!.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机编程 算法 求n!.doc

算法:求n! 任务 通过对“n!”(n阶乘)这个算法的描述以及程序实现的方法,了解循环结构算法的特征,掌握“累乘器”的算法及程序设计。 对于“求n!”这个问题,高中学生不是很清楚,所以应该对n!的定义进行一个说明。并理解用计算机来求解n!的一种算法, 一、什么是n! 在函数型计算器上有一个特殊的按钮,就是“n!”,称为“阶乘”,在数学上表示从1一直累乘到n,即n!=1*2*3*……*n,在高中数学的排列组合运算中会大量运用。视窗系统附件中的“计算器”面板上也有阶乘的按钮“n!”。 在这个算法中,首先要得到n的值,然后必须对一些变量进行初始化,一般情况下用于乘法的变量初值必须为1。试想,如果用于乘法的变量初值是0的话,那么根据乘法的一个规则,“任何数乘以0,则相乘的结果仍然是0”,因此,这个累乘的算法就没有意义了。因此,在计算时,必须从1开始每次乘上一个递增的自然数,直到n为止。其中每次乘上一个自然数的过程就是一个重复的过程,所以我们可以使用循环结构来实现。 二、n!的算法流程图 下面的流程图就给出了用计算机程序实现阶乘的一种思路。 流程图中通过一个条件判断,如果条件成立就重复一次已经做过的语句,直至条件不成立。 实现上面流程图算法的循环语句可以用“Do....Loop While”语句,也可以使用“For/Next”循环语句,由于n是确定的,即循环次数是已知的,所以用“for/Next”较为方便。 对n!来说,计数变量的初值应该是1,终值必须为n,由于n!中循环变量值每次增加1,所以步长值为1,而当步长值为1时,则步长这部分可以省略。 三、算法的程序实现 为了实现这个算法,则需要用计算机程序设计语言来编制相应的程序,在程序中除了需要用到赋值语句、输入输出语句、其它计算语句外,还必须用到循环语句。 范例:我使用VB来编写程序实现这个算法。 算法中用到了一条输入语句、一个循环语句、一个输出语句。其中输入语句和输出语句与顺序结构的例题中的语句一致。 (1)建立窗体和输入、输出、命令按钮组件对象。 方法与前二节一样,注意将lable组件对象的宽度设置得大些,以便能完整地显示阶乘的结果。 (2)编写“Command1”触发的程序代码。 在“Private Sub command1_click()”和“End Sub”之间输入以下的程序代码。 Dim S As Single, n As Integer, I As Integer n = Text1.Text S = 1 For I = 1 To n S = S * I Next Label1.Caption = S 第一行,定义了两个整数类型的数值变量n,I。还定义了一个单精度浮点类型的变量S。 第二行,将text1文本框中的数据转换为整型数值并赋值给整型变量n.。 第三行,将一个初始值1赋值给代表阶乘结果的变量S,因为在累乘算法中如果初始值是0的话,那么累乘的结果永远是0,这就没有任何累乘的意义了。 第四行,将1赋值给代表每次累乘值的变量I,因为阶乘是从1开始累乘的,所以累乘变量的初值应该是1。 第五行,S=S*I,表示一个累乘算法,它将变量S的原值乘以变量I的值,然后将乘法运算的结果重新赋值给变量S作为S的新值。这里的“=”不是相等的意思,而是“赋值”的意思,即将“=”号右侧的算式进行计算后,把计算的结果赋值给“=”号左侧的变量。 第六行,“NEXT”有两层含义。 首先是进行I=I+1操作,表示一个累加算法,即每进行一次累加的运算,I就在原来的基础上增加1。 然后,判断“I=n”是否成立,如I=n成立时继续循环,从第四行“For”的下面一行继续执行。如果I=n不成立,即I比n大时,则不再循环,直接执行下一行即第七行的语句,从而结束循环。 第七行,则表示阶乘最终值的变量S的值赋值给“Label1”组件对象的“Caption”属性,输出n!的结果。 (3)运行程序。 将第一个文本框中的“Text1”删除,重新输入“5”;然后单击“Command1”,就能在原来“Label1”的位置上输出5!的值“120”。 请用计算机来验证一下,看看5!是否等于120? 尝试用其它的正整数来测试该程序,发现当n取到比较大时,如大于35时,VB会发出数值溢出的警告。这说明,n!的值是很大的,我们这个程序只能对比较小的值进行阶乘运算。事实上,一般的计算器都能运算到69!而不溢出。 (4)保存工程。 开始 输入正整数n S=1 I=1 S=S*I I=I+1 Yes I=N? No 输出S 结束 活动建议 n!有一个特殊情况,就是0!=1,你能将这个算法的流程图补充完整吗? 活动建议 想一想:为什么n!的那个特例不能用这个程序来实现?

文档评论(0)

changlipo2019 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档