计算器程序的设计与实现
——数据结构课程设计
班级:计科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
实现计算器的主要功能以及很多计算器不能实现的功能。一些简单的日常运算如:实数范围内的加减乘除和乘方运算、三减函数及
反三角函数运算等等。还有矩阵的一些基本运算:如矩阵的加法、减法、乘法和求逆运算。也有更多高级功能,如计算学生的GPA绩点、求解固定形式函数定积分、解一元二次方程、求一些列数据的平均数与和数及回归方程。方便学生的日常使用。
一些简单的日常运算如:实数范围内的加减乘除和乘方运算、三减函数及反三角函数运算等等。还有矩阵的一些基本运算:如矩阵
的加法、减法、乘法和求逆运算。也有更多高级功能,如计算学生的GPA绩点、求解固定形式函数定积分、解一元二次方程、求一些列数据的平均
数与和数及回归方程。
DEV-C++ 4.9.9.0
1 2 3 4 5 9 0
栈的基本操作
一维数组
二维数组
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.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.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.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.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 计算和平均数
好用,拥有了一般计算器的功能,并且可以在“表达式求值”选项中直接输入例如 sin30 、
ln 8、3.23、PI、e之类的数进行运算。矩阵、GPA和回归方程之类的功能采用文件输入方式。用户可以更随心,更方便地输入计算量比较大的一系列数据。界面更亲和,方便用户使用。
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》 。
l 数据结构课程设计报告
l 课程设计报告——计算器.doc
l 课程设计——计算器.rar
l 使用说明——使用说明.chm
华东交通大学课程设计华东交通大学课程设计课程设计题目计算器设计课程题目年级专业学号姓名组员指导教师Java程序设计信息一班1华东交…
计算机综合课程设计报告小组编号06课题名称趣味贪吃蛇小组成员20xx年10月计算机综合课程设计报告目录目录11项目背景112系统目…
MFC计算器课程设计报告计算机应用3班黄锦湫罗洁饶益指导老师蒋鹏20xx315一题目利用MFC框架编写简易计算器要求使用MFC框架…
计算机网络课程设计报告一.课程设计的题目、目的及要求.......................................…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的…
中南大学本科生课程设计(实践)任务书、设计报告(大学计算机基础)计算机实践过程与体会题目学生姓名指导教师学院专业班级学生学号祁彦翔…
武汉理工大学专业课程设计2课程设计说明书目录1基本功能描述12设计思路13软件设计431设计步骤44结论与心得体会127附设计中的…
MFC计算器课程设计报告计算机应用3班黄锦湫罗洁饶益指导老师蒋鹏20xx315一题目利用MFC框架编写简易计算器要求使用MFC框架…
MFC表达式计算器课程设计报告班级5班学生姓名及学号丁健华020xx507李晓奇020xx513吴继超020xx516完成日期20…
计算机网络课程设计报告一.课程设计的题目、目的及要求.......................................…
实习名称:用汇编语言实现音乐程序设计专业:计算机科学与技术专业班级:200级计算机科学与技术专业班学号:姓名:指导教师:成绩:2x…