计算机编程 算法 求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!的那个特例不能用这个程序来实现?

用计算机程序求n,计算机编程 算法 求n!.doc相关推荐

  1. 计算机设计大赛感言,计算机编程比赛获奖感言.doc

    计算机编程比赛获奖感言 尊敬的各位领导.各位老师.同学们: 早上好!今天我非常高兴能代表参加计算机编程比赛获奖的同学站在这里发表获奖感言.在这次比赛中我获得了二等奖,虽然不是十分满意,但仍然感到高兴. ...

  2. python求雅可比矩阵_雅可比算法求矩阵的特征值和特征向量

    目的 求一个实对称矩阵的所有特征值和特征向量. 前置知识 对于一个实对称矩阵\(A\),必存在对角阵\(D\)和正交阵\(U\)满足$$D=U^TAU$$\(D\)的对角线元素为\(A\)的特征值,\ ...

  3. php求完数,php算法:求完全数 | 学步园

    完全数:如果一个数的所有因数(不包括本身)的和刚好等于这个数自身,那么这个数就叫完全数 求完全数 function get_mul($num) { for($i=1;$i<=$num;$i++) ...

  4. 计算机算法英语表示,计算机编程算法常用英语术语

    导语:算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.下面是YJBYS小编收集整理的有关计算机算法的英语词汇,欢迎参考! Median a ...

  5. C++floyd warshall算法求最短路径(附完整源码)

    C++floyd warshall算法求最短路径 floyd warshall算法求最短路径的完整源码(定义,实现,main函数测试) floyd warshall算法求最短路径的完整源码(定义,实现 ...

  6. 计算机编程英语发音,计算机编程常用英语

    Data Structures 基本数据结构 Dictionaries 字典 Priority Queues 堆 Graph Data Structures 图 Set Data Structures ...

  7. 计算机编程求最大公约数与最小公倍数,这是一个常见的简单算法

    计算最大公约数和最小公倍数是简单常见的算法,他有多种方式实现,比如:穷举法.辗转相除法.相减法等等,方法很多,目的相同,下面就用其中一种方法,辗转相除法来完成这个算法,下面将用计算机编程的方式实现. ...

  8. [计算机数值分析]利用秦九韶算法求多项式的值

    Spring-_-Bear 的 CSDN 博客导航 例:利用秦九韶算法求 p ( x ) = x 5 − 3 x 4 + 4 x 2 − x + 1 p(x)=x^{5}-3x^{4}+4x^{2}- ...

  9. 计算机算法对程序设计的作用,算法计算机论文,关于数学算法对计算机编程优化相关参考文献资料-免费论文范文...

    导读:本论文主要论述了算法计算机论文范文相关的参考文献,对您的论文写作有参考作用. (重庆人文科技学院 理工学院数学系,重庆 401572) 摘 要:数学算法是一种将很多问题进行归纳总结,然后采用统一 ...

最新文章

  1. 随着“造车时代”的企业网络推广之下,富士康也想入圈造车?
  2. iphone编译时的注意事项
  3. LeetCode之Two Sum
  4. 使用多线程的方式调用chineseocr_API
  5. 【转载】浅谈 看图软件 的设计与实现
  6. jqGrid专题:jqGrid原理
  7. python取列表中位数_Python如何获取列表(List)的中位数
  8. 【Redis】Redis 替代方案
  9. 1、varargout与nargout区别
  10. 数学建模--预测方法
  11. c语言单片机避障小车应用,51单片机控制寻迹避障小车各种源程序(功能很多)
  12. 政府黑客使用无文件技术投放远程控制木马
  13. stack smashing detected(c++报错)
  14. 8、虚拟串口(VSPT)使用小记
  15. 计算机无法读取配置文件,由于权限不足,无法读取配置文件
  16. 【2021 ICPC Gran Premio de Mexico 2da Fecha F】Flipped Factorization 题解
  17. 产品碳足迹ISO14067认证
  18. 江民KV2007离线包和安装包下载
  19. Breez.LocalAPK.v1.8.1.x86.WinALL.Regged-BLiZZARD
  20. [转载]HEVC的快速模式选择(一)

热门文章

  1. QT5开发及实例学习之三字符串类
  2. mysql中的各种函数(日期函数、字符串函数、数学函数...)
  3. mysql 5.6.34 二进制下载_mysql 5.6.34 二进制
  4. 构建安全的计算机网络报告,计算机网络与安全实践设计报告 矿大资料.doc
  5. 【力扣】NO.13.罗马数字转整数
  6. Spring Ioc创建对象的方式
  7. java并发:interrupt进程终止
  8. 001.常见监控简介
  9. Android 通过URL scheme 实现点击浏览器中的URL链接,启动特定的App,并调转页面传递参数...
  10. Homework1_3015218130_许鹏程