大整数阶乘程序设计B09040121.docx

上传人:b****5 文档编号:7553259 上传时间:2023-01-24 格式:DOCX 页数:10 大小:188.52KB
下载 相关 举报
大整数阶乘程序设计B09040121.docx_第1页
第1页 / 共10页
大整数阶乘程序设计B09040121.docx_第2页
第2页 / 共10页
大整数阶乘程序设计B09040121.docx_第3页
第3页 / 共10页
大整数阶乘程序设计B09040121.docx_第4页
第4页 / 共10页
大整数阶乘程序设计B09040121.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

大整数阶乘程序设计B09040121.docx

《大整数阶乘程序设计B09040121.docx》由会员分享,可在线阅读,更多相关《大整数阶乘程序设计B09040121.docx(10页珍藏版)》请在冰豆网上搜索。

大整数阶乘程序设计B09040121.docx

大整数阶乘程序设计B09040121

程序设计报告

(2010/2011学年第一学期)

 

题目:

大整数阶乘

 

专业计算机科学与技术

学生姓名张赛

班级学号B09040121

指导教师杨一涛

指导单位计算机学院 

日期

评分细则

评分项

优秀

良好

中等

遵守机房规章制度

上机时的表现

学习态度

程序准备情况

程序设计能力

团队合作精神

课题功能实现情况

算法设计合理性

用户界面设计

报告书写认真程度

内容详实程度

文字表达熟练程度

回答问题准确度

简短评语

 

教师签名:

年月日

评分等级

备注

评分等级有五种:

优秀、良好、中等、及格、不及格

大整数阶乘

一、课题内容和要求

1、系统的基本功能及要求

(1)写一个类BigInteger,并有如下成员函数operator+/operator-/operator*/operator\,即整数的四则运算并重载运算符。

(2)用该大整数计算n的阶乘并显示出来。

(n∈[1,100])

注:

为了简化,可不考虑负数,则遇上形如“2-4”这样的表达式需要报错。

 

2、程序执行过程

(1)系统从键盘读入自然数n,直到输入了合法的n为止。

(2)输出运算的结果,为便于观察结果,每输出四位中间插入空格,格式如下(例如,n=12):

12!

=479001600

(3)询问用户是否继续进行,用户选择“是”,直到输入合法为止,转

(1),否则退出程序。

3、算法要求及提示

(1)因为n较大时,n!

的结果将超出长整形的保存范围,因此结果不能用longint型的变量来保存。

本算法要求用链表来存储。

(2)链表的每一个节点存储结果的一位数字,因此结果的输出实际上是链表的遍历问题,同时要先考虑用多少位来表示大整数。

 

4、其他要求

(1)输入时具备一定的容错性判断,如输入的不是数字,或输入的数超过范围等等。

(2)变量、函数命名符合规范。

(3)注释详细:

每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。

(4)程序的层次清晰,可读性强。

 

二、需求分析

1)课题要求已说明结果不能用longint型的变量来保存,要求用链表来存储。

,首先要定义一个节点类,在这里定义一个双向节点类。

2)定义一个BigInteger大整数类,使其能够存放大数阶乘,并实现其的四则运算。

3)对输入整数的合法性进行检查,必须考虑用户各种输入情况。

 

三.概要设计

1.使用单链表存储数据,结点类定义如下:

classNode

{

intdata;

Node*next;用大整数类来进行大整数四则算法的重载,在主函数中通过定义大整数对象调用,大整数类定义如下:

classBigInteger法设计说明:

因为n较大时,n!

的结果将超出长整形的保存范围,因此结果不能用longint型的变量来保存。

本算法数据用单链表来存储。

链表的每一个节点存储结果的一位数字,因此结果的输出实际上是链表的遍历问题,同时要先考虑用多少位来表示大整数。

首先申请一个结点类并赋数据域初值1,然后遍历单链表逐个的数据域与i(1到n)相乘;

乘完后重新遍历,对每个结点的数据域处理,若小于10则跳过;

否则,判断下一结点是否存在,若存在则该数据域除10取余,下一结点的数据域加上该数据域除10的结果,若不存在则申请新结点空间,处理同上;

全部乘完并处理完后,遍历单链表并输出各自的数据域即可,注意每四个输出一个空格。

4、流程图

 

 

结束

 

四.详细设计

1.阶乘函数作为BigInteger类中的函数,在主函数通过定义大整数类对象调用,阶乘函数的定义如下:

voidBigInteger:

:

jiecheng()

{

Node*cur,*cc;

Node*head=newNode;

果分析:

刚开始运行,程序首先提示用户程序是计算大整数的阶乘及其四则运算的功能,并提示用户按照输入一个自然数;

如果输入的数大于100或小于1,则提示用户输入错误;

若输入正确,则进行阶乘运算,输出结果,然后提示用户是否继续,若继续,则提示用户输入自然数n,继续进行阶乘运算,否则,则以下进入大整数阶乘的四则运算,提示输入第一运算对象的n值;

若输入不正确,则提示用户重新输入,直至正确为止,然后提示用户输入第二运算对象的n值,若输入不正确,则提示用户重新输入,直至正确为止,然后则输出四则运算的结果。

六、调试过程中的问题

1.主函数执行过程中,即便选择了n,程序总提示输入。

While循环中忘了加break语句,导致while语句一直执行。

2.重载减法运算时,当第一操作数比第二操作数大时,困惑了好一会儿,后来经过讨论和自己的思考,解决了这个问题,依然拿大的操作数减小的操作数,输出的时候只要在结果前加一个‘-’即可。

3.在阶乘函数中,误将if(cur->next==NULL)写成if(cur==NULL),导致结果出错,还是太粗心。

4.主函数中,输出四则运算结果时,由于对重载运算符掌握不是很好,写成cout<

七、课程设计总结

这次程序设计让我清醒的认识到自己知识上的缺陷与漏洞,对过去学的单链表的操作不是很熟悉,从而让我回归书本,认真看书,回顾了以前所学的单链表的操作,熟悉单链表的使用,不会像以前那样生疏。

这次程序设计也让我了解到合作对编程是多么重要,大家互相讨论,灵感碰撞,有了很多意想不到的收获。

拿到问题要找到核心,找到突破口,只有针对问题认真思考好了之后,再动手编程就会简单得多了,而不能图快,这次的算法核心是阶乘算法,抓准问题的实质,先集中精力突破核心的算法,这样就能极大地提高效率。

还需要进行大量的调试,不能浮躁,要根据调试中出现的问题进行分析,修改需要改动的程序,后期再不断完善。

总之,这次程序设计让我受益匪浅,让我清醒的认识到了不足与差距,也给了我很大的动力,对我编程能力也有较大的提升,我相信通过努力我一定也会成功的。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1