课程设计报告——计算器

计算器程序的设计与实现

——数据结构课程设计

班级:计科1001

北京化工大学

信息科学与技术学院计算机科学与技术专业

20##12.


目        录

一、功能描述.............................................................................................................................................. 2

1.1 系统实现的目的和意义.................................................................................................................. 3

1.2 系统实现的功能............................................................................................................................. 3

1.3 系统开发的环境............................................................................................................................. 3

二、总体结构.............................................................................................................................................. 2

2.1 文件清单(按文件系统树型方式排列).......................................................................................... 3

2.2 系统的总流程图(标明每个模块的文件名)................................................................................... 4

三、详细设计(均需注释)......................................................................................................................... 2

3.1 数据结构....................................................................................................................................... 2

3.2 各模块(或算法)流程图(标明函数名)...................................................................................... 2

四、系统实现.............................................................................................................................................. 5

4.1模块一(写出模块的名字)............................................................................................................ 5

4.2模块二(写出模块的名字)............................................................................................................ 5

五、程序的过程展示................................................................................................................................... 9

5.1 程序运行过程展示......................................................................................................................... 9

5.2 程序结果展示及分析...................................................................................................................... 9

六、软件的辅助说明................................................................................................................................. 14

6.1 本软件的优点............................................................................................................................... 14

6.2 本软件的缺点............................................................................................................................... 14

6.3 本软件的BUG.............................................................................................................................. 14

七、课程设计结论(意见、建议、心得、申报成绩…)............................................................................. 14

八、参考文献(参考网站)....................................................................................................................... 16

九、附录——提交文档.............................................................................................................................. 16

9.1 书面形式清单............................................................................................................................... 16

9.2 电子形式清单............................................................................................................................... 16

9.3 文档命名要求............................................................................................................................... 16


一、功能描述

1.1 系统实现的目的和意义

实现计算器的主要功能以及很多计算器不能实现的功能。一些简单的日常运算如:实数范围内的加减乘除和乘方运算、三减函数及

反三角函数运算等等。还有矩阵的一些基本运算:如矩阵的加法、减法、乘法和求逆运算。也有更多高级功能,如计算学生的GPA绩点、求解固定形式函数定积分、解一元二次方程、求一些列数据的平均数与和数及回归方程。方便学生的日常使用。

1.2 系统实现的功能

                           一些简单的日常运算如:实数范围内的加减乘除和乘方运算、三减函数及反三角函数运算等等。还有矩阵的一些基本运算:如矩阵

的加法、减法、乘法和求逆运算。也有更多高级功能,如计算学生的GPA绩点、求解固定形式函数定积分、解一元二次方程、求一些列数据的平均

数与和数及回归方程。

1.3 系统开发的环境

                            DEV-C++ 4.9.9.0

二、总体结构

2.1 文件清单(按文件系统树型方式排列)

   


2.3 系统的总流程图

 

 

 

 

 

 

 

 


                                           1                                        2                                         3                                                    4                                                             5                                        9                                         0

 

三、详细设计(均需注释)

3.1 数据结构

栈的基本操作

一维数组

二维数组

四、系统实现

4.1模块一:简易运算(该子模块为屏幕输入和屏幕输出显示)

4.1.1 输入:

4.1.1.1:3*8+7-9

4.1.1.2:6*7+7+5*2-3

4.1.2 输出

4.1.2.1逆波兰式:38*7+9-

            求值结果:22

4.1.2.2逆波兰式:67*7+52*3-+

            求值结果:56

4.2模块二:矩阵运算(该子模块为文件读入和文件输出,不执行屏幕输入和输出显示)

4.2.1 输入:

在根目录matrix.txt下按如下格式输入=>输入矩阵的行(中间空格)列,然后输入矩

阵的各元素值。

根目录matrix.txt下的输入:(例子如:3*3矩阵两个矩阵的运算)

3 3

           1.0 2.3 3.4

           2.4 4.6 5.7

           2.4 5.6 7.9

            

3 3

           2.4 5.6 3.5

           2.6 4.6 6.2

           1.2 0.4 5.6

4.2.2输出:

                  在根目录matrx.txt下输入完数据并保存后,执行程序,选择相应的功能(加、减、乘、逆),执行完后,根据相应提示,然后打开根目录result.txt。(输出如下:)

                  (若矩阵相乘)

                  The result is:

 12.46  17.54  36.80

                                24.56  36.88  68.84

                                29.80  42.36  87.36

                  (若矩阵相加)

The result is:

                               3.40   7.90   6.90

                               5.00   9.20  11.90

                               3.60   6.00  13.50

                  (若矩阵相减)

The result is:

 -1.40  -3.30  -0.10

 -0.20   0.00  -0.50

  1.20   5.20   2.30

                  (若矩阵求逆)

行列式的值为 :   0.44

The result is:

 10.14   2.00  -5.80

-12.11  -0.60   5.64

 5.50  -0.18  -2.11

4.3模块三:表达式求值(该子模块为屏幕输入和屏幕输出显示)

4.1.1 输入:〈注:三角函数的输入是以角度制输入的。〉

4.1.1.1:sin23.5+cos89*(ln67/arctan2.4)=

4.1.1.2:7^5+3*(2-lg45/(4.37-23.4))=

4.1.1.3:e^2-4.4*PI*(sin32.4-24.56+12.004)=

4.1.1.4:=

4.1.2 输出:

4.1.2.1: sin23.5+cos89*(ln67/arctan2.4)=-0.818314

      4.1.2.2:7^5+3*(2-lg45/(4.37-23.4))=35080.4

4.1.1.3:e^2-4.4*PI*(sin32.4-24.56+12.004)=-348.87

4.1.1.4:按任意键返回主菜单……

4.4模块四:GPA计算器(该子模块为文件读入数据,执行结果屏幕显示)

4.4.1输入: 在执行程序前会有提示,确保在根目录GPA.txt下输入数据,输入完后并保存,然后按相应提示执行操作。

(根目录GPA.txt下输入,例子如下:)

高数 5.5 A+,

物理 4.0 84,

英语 4.0 78,

物理实验 1.5 C+,

离散数学 2.5 C+,

思修 2.5 79,

语言 4.0 87,

金工实习 1.0 C+,@

4.4.1输出:

         您今年的GPA为 3.04

4.5模块五:高级选项

       4.5.1:计算回归方程(该子模块为文件读入数据,结果屏幕输出显示)

       4.5.1.1输入:在根目录data.txt下输入数据并保存,输入形式如:<元素数量n><元素1><元素2><元素3>……<元素n>。例子如下:

8

0.00 2.00 4.00 6.00 8.00 10.00 12.00 14.00

8

14.21 14.84 15.43 16.02 16.66 17.23 18.10 18.69

       4.5.1.1输出:

                            相关系数δ = 0.998806

                            回归方程为:y = 0.320x + 14.16

       4.5.2:计算定积分(该子模块为屏幕输入和屏幕输出显示)

       4.5.2.1输入:所求定积分的被积函数的形式已限定且最高次幂为4次,根据提示进行相关操作,依次输入系、常数,完成后会有提示,然后依次输入上下限。例子如下:

              1 2 3 4 5 6 7 8 9

              输入上下限:

              2 3

       4.5.2.1输出:

              算得定积分为: I = 110.8038 ± 0.0082

       4.5.3:一元二次方程求解(该子模块为屏幕输入和屏幕输出显示)

       4.5.3.1输入:所求解方程形式已经限定,形如:a x^2 + b x + c1 = c2。注:系数为整型数据。例子如下:

              6 5 1 4

       4.5.3.2输入:

              7 3 2 1

       4.5.3.1输出:

              方程 6 x^2 + 5 x + 1 = 4的解为:

    X1 = -1.2374

    X2 = 0.404071

4.5.3.2输出:

              方程 7 x^2 +3 x + 2 = 1的解为:

    X1 = -0.214186 + 0.31135 i

    X2 = -0.214186 - 0.31135 i

       4.5.4:求和及平均数(该子模块为文件读入数据,屏幕输出显示)

       4.5.4.1输入:在根目录data.txt下输入数据并保存,输入形式如:<元素数量n><元素1><元素2><元素3>……<元素n>。例子如下:

    (data.txt文件下输入,例子如下:)

    8

0.00 2.00 4.00 6.00 8.00 10.00 12.00 14.00

4.5.4.2输入:

       6

1 2 3 4 5 6

       4.5.4.1输出:

              数据的和为:56.00

              平均数为:7.00

4.5.4.2输出:

              数据的和为:21.00

              平均数为:3.5

五、程序的过程展示

主界面如下

图1 主界面

在主界面选择 1 操作,显示下界面,输入算式后按回车显示结果

图 2 简易运算界面

在主界面选择2操作,界面如下所示,请根据提示在根目录下输入数据如下右图所示

图 3 矩阵的界面

可以再根目录下的 result.txt 中查看结果(以下依次为乘、求逆的结果)

图 4矩阵运算结果

在主界面选择3选项,则界面如下所示 具体使用运算符参数,请参看所附帮助文件

图 5 表达式

在主界面选择4选项,界面如下所示,在 GPA.txt 中输入绩点格式为:

图 6 GPA计算器

在主界面选择5 ,选择功能界面如有所示,共有4 个功能选项。

5.1计算回归方程,在根目录 data.txt 中输入数据,先输入数据的长度再输入数据。

图5.1 回归方程

5.2 计算定积分,只能输入形如:

的方程式的定积分求解。先输入9 个系数,再输入上下限之后便可以计算积分

图5.2 计算定积分

5.3 一元二次方程求解功能,输入方程项  的各项的系数,利用方程求解的一般方法解出  、       ≥ 0的情况)或

        、     < 0的情况)

图5.3 二元一次方程求解

5.4 计算平均数 和 和数

在根目录下的 data.txt 中,先输入数据长度再依次输入数据,即可算出一系列数据的和、平均数

图5.4 计算和平均数

六、软件的辅助说明

6.1 本软件的优点

好用,拥有了一般计算器的功能,并且可以在“表达式求值”选项中直接输入例如 sin30 、

ln 8、3.23、PI、e之类的数进行运算。矩阵、GPA和回归方程之类的功能采用文件输入方式。用户可以更随心,更方便地输入计算量比较大的一系列数据。界面更亲和,方便用户使用。

6.2 本软件的局限性以及BUG

      1.所有的操作请严格按照要求的格式进行输入,否则可能会造成程序报错的情况;

     2.简易运算只能计算一位整数运算;

3.在“矩阵运算”的功能选项中,矩阵只能在文件下输入,而且一旦有非法操作(如2x2阶矩

阵不能与3x2阶矩阵相乘),程序会马上终止,result.txt    中会显示相应的错误提示。

4.在“表达式求值”的功能选项中,该功能不能计算以多项式为参数的函数,如sin(3*34)、

ln e等问题,使用时请注意。

5. 在“表达式求值”的功能选项中,亦不能计算 复数 以及 负数。

6.有时进入副菜单时会出现错误提示,此时是由于您的误操作造成的,请尝试返回主菜单再进

入,或者重新启动程序。

7.只能计算固定形式方程的定积分和求解;

8.在“表达式求值”中不能计算以括号项为首的形如 (3-4)= 类型的算式;

更多BUG 正在发现中,如用户发现问题,请及时联系我们。

七、课程设计结论

王悦晨:    不得不说,这次课设收获很大。正如伟大徐晓明老师所言:“你们在课程设计的时候学到

的东西比你们平时课上学的东西要多得多得多。”真是这样。平时上课,学的都是一些理论,并没有

实际的算法描述和代码实现,对我们的编程能力其实没有太多的什么建树。真正的能力是建立在思考

和运用的基础上的。为了实现“计算器”功能,我必须把书上那些有板有眼的文字信息整理过滤,写

成我自己能理解的算法描述,而之后的代码实现就自然十分简单了。现在回想,为了这个课设,曾经

因为出现的BUG伤心沮丧过,也会因为程序的实现的成功而欢喜过;我会记得为了想出一个算法苦心

竭虑到废寝忘食(真的因为些程序一直从早上8点到晚上9点左右才罢休),也会记得为了赌那么一

口气要写出算法曾经一宿未眠。回头看来,并没有觉得一丝酸楚或其他什么的,我只觉得十分欣慰,

因为这是我一生的财富。最终,程序是完成了,虽然还是又BUG,有局限性;但是也有很多优点。我

觉得在这行中,这正重要的并不是所谓的什么“记住那么多的数据结构的用法”,又是徐晓明老师说

的:“学习计算机,就应该努力忘掉书本上的内容。”这这好似“大盈若冲”“无招胜有招”之类的哲

理其实到现在我也不是很明白,但在这课设过程中,也稍有感悟。起先照书照搬,生搬硬套,反而给

自己带来不上的困扰;而之后来,干脆放弃通过修改书本上的伪代码实现功能。我通过总结出了算法

描述,用自己的想法居然能够一气呵成,油然而生行云流水的快感。也许这才是计算机作为艺术的魅

力所在。我知道我的算法不一定是效率最高的,但却有一股自信说,我的算法一定是独特的。开句玩

笑说:“这是你们百度不到的~”至此,课程设计到此结束,这么多天的忙碌也到此结束。但是,继续

学习的路没有结束。我知道我的各方面的能力十分有限,能做出这样的成绩,我也深感欣慰了。毕竟

这是我第一次这么多的时间和精力做出的第一个程序,按说成绩我想申请‘A’。事实上,按程序的功

能和复杂度来说,与诸位大神们的无论是B树(真心敬佩 支瑞 和 高培航 两位大神)也好,还是类

似MatLab的制作界面也好,比之也相差甚远,成绩给‘B’甚至‘C’也无妨。在我看来,这些成绩

已然不如开始看的那么重要了。倒也不是假清高真虚伪,事实也是如此。各种题外话到此结束,心得

到此不为止而为我继续保留,以提出对自己的希冀和鼓励。感谢观看。

任倩茹:    在此次课程设计中,收获知识的同时,还收获了阅历,收获了成熟,在此过程中培养了

独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,体会到了很多些写较大

程序的方法。而这是日后最实用的,真的是受益匪浅。锻炼自己的C语言编程能力。

在此次课程设计中,我做的和GPA有关的内容。本来以为很简单,很容易做,但是实际

做的过程中还是出现了各种各样的问题。有过没有考虑周全的时候,比如说忽略了有的科目是按照等级记成绩的,没有编写分数与等级相对应的部分。也出现过多次的编译错误。的确让我看到了自身存在的巨大差距。通过这个做的课程设计,也的确让我学到了很多东西。在我们组同学的帮助下,学会了很多东西也完善了很多。我觉得,课程设计是一个平台,通过这个平台,我们有机会将平时不太懂的东西与同学交流讨论。平时没有机会问的,不好意思问的,通过这次课程设计都可以在一定程度上得到解答。经过这次课设的操作之后,我觉得自己对数据结构的认识更多了,我们不是把它看做一门学科,一次任务,我们能从中获取很多的乐趣,如果很多东西是我们自己创造的,那么我们怎么会不乐于这种创造的工作,还有就是不能气馁,不能烦躁,一定要有耐心,有毅力的坚持,即使不能成功,想法也很重要,拿我们的想法去与别人交流,我们的想法就会变得更丰满,更切合实际。

在这次的课程设计中,我们组的同学齐心协力,大家都在努力做好自己的工作,我们组

编程比较厉害的王悦晨同学给了我们很多耐心的讲解和指导,使我们每一个人都受益匪浅。当我们组的程序基本成型时,面对电脑屏幕上的程序,界面,我内心有说不出的激动,忘不了一天干几个小时的时候,也忘不了为某个问题而苦苦纠结的时候,虽然曾出现过很多次BUG,虽然有过一次次修改的过程,但当这一切过去之后,我收获的不仅仅是知识,还有很多人生道理,这个团队给了我很大帮助,我学习了很多,我也付出了,路还很长,收拾行装,继续前进!

:     这是第一次做课程设计,第一次写这么大的程序(可能现在看来还算不了什么,但比起之

前些的那些程序已经很多了),同时也是第一次进行团队合作,虽然比起那些出名的编程团队算不了

什么,可对初出茅庐的我们来说,也算是真真正正地体会了一次团队编程,真的真的很值得,让我学

到的不仅有知识上的东西,还明白了一些道理。

我们的团队有四个人,各有分工,而我的任务则是做矩阵的运算,分加减乘逆。在这次的

编程里,我们花了两个星期的时间进行编写程序,在这个期间里,真的很烦,每天花很多时间去写,有的时候遇到某个问题困扰了半天,或是程序中某个地方出了错,调试了好长时间才发现,真的很头疼。但是,当把某个功能完善的时候,没有什么明显的BUG的时候,确实很欣慰。从这个过程中,我也深刻地认识到一个简单的道理,凡是作任何事都要有耐心,不能半途而废,否则将前功尽弃,贵在坚持;其次,还要有信心,不仅是对自己,对自己的团队成员也是一样,因为我们是一个集体,一个团队,我们各自的任务是紧密相联,缺了任何一块都不行,所以在整个编程过程中,尽管有困难,但我们还是充满信心和耐心,这样才能达到预期的

自己有学到了很多,这是值得欣慰的……、

总之,在这次课程设计中,确实受益匪浅,尤其是团队合作意识,对于自己所学的专业,

今后不可能是一个人去独立完成一个项目,而是一个团队。并且,在团队合作的过程中,通过互相交流,您会从队友那里学到跟多东西,这也会让自己进步一大截。

最后,我想申报的成绩是良,同时,也希望老师以后上课稍微放慢速度点,其实理解真

的很难的。我也做一个自我评价吧:对于这个专业,我觉得自己的投入不够训练太少和自己也很难学懂这些知识,好些知识还没真正掌握,导致现在的编程水平还很低。通过这次的课设,不仅从我们这个小组里学到了很多,从其他小组那里,我还看到的是“投入”,这一让我深刻反省了自己。一切尚未成功,我还须更加努力,相信在同学的帮助下和自己的努力下,我会慢慢地跨过这道坎,真正地融入其中,并坚信自己会好的。。。

赵姗姗    这次课设我们做的是计算器,我们是四个人一组,各有分工,我负责的是简易计算的部

分,主要是输入一个表达式的值,然后能实现逆波兰式转换和求职。因为我之前学的不是很好,编起

程序来很有难度,我从网站上我下载了一些程序,借鉴和参考,慢慢的,和几个同学一起,在他们的

帮助下我慢慢的把程序慢慢的编出来,在这个过程中,我受益颇大。我的程序可能还是不是很好,但

在这个过程中,我学会了很多,自己动手的能力,感觉当程序编出来的时候很有成就感,可能程序还

有错误,但是我进步了,虽然程序可能不是很好,但我相信以后我会越来越好的!每天进步一小点,

积攒起来就是很大的进步。我想成长的道路上肯定会有曲曲折折,但我相信,踏过了,我就离成功又

近了一步,我不会把这些困难当做挫折,而会把他们当做成功的垫脚石,相信我将来能越来越完善……

我会加油!!

还有就是,这次不是个人编程序,而是几个人一组,我们之间慢慢的建立起来的革命友谊

,我们各自分工,但在最后要把每个人的程序合起来,我们在其中都付出了很多的努力,每天在机房,几个人讨论,然后每个人再各自回去完善自己的部分,我们每天都在进步,慢慢的程序一点点的出来了。我们你每个人脸上的笑脸也越来越大,我们在其中收获了很多,个人的能力有所提高,团队合作的能力也渐渐地提高了,这对我们以后的发展奠定了基础。虽然只是几个人,但相信将来的队伍肯定会越来越大,而我们也将在其中慢慢提高。

这次课设带给我们很多的收获,虽然编程的时候有点小辛苦,但成绩出来的时候,我们都

很欣慰,很快乐,我们现在可能不是最好,甚至都算不上好,但我相信我们以后会变得好、更好,只要我们努力,等着我们的就是更大的成功,我们会继续努力,加油的!!!

这次的课设成绩,给自己“C”吧,我自己感觉自己做的还不是很好,感觉自己还有很多

努力的地方。心得就写这么多吧。谢谢!

八、参考文献(参考网站)

            参考 K&R 的 《The C Program Language》 。

九、附录——提交文档

9.1 书面形式清单

l  数据结构课程设计报告

9.2 电子形式清单

l  课程设计报告——计算器.doc

l  课程设计——计算器.rar

l  使用说明——使用说明.chm

相关推荐