1、 C 语言课程设计报告 设 计 题 目: 简单计算器设计 学 院 名 称: 电子与信息工程学院 专 业: 计算机科学与技术 班 级: 计科 姓 名: 学 号 指 导 教 师: 定稿日期: 2013-5-28 2 一、 设计题目 简单计算器设计 二、 设计要求 在功能上功能尽量模拟 windows 操作系统中的计算器,系统界面不做强制要 求。 三、 设计目的 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能 力,能更好的巩固C 语言程序设计课程学习的内容,掌握 工程软件设 计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关! 更加了解了 c 语言的好处和其可用性!同
2、时增加了同学之间的团队合作精 神!更加也体会到以后在工作中团队合作的重要性和必要性! 通过 C 语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的 程序设计过程和技巧, 掌握基本的分析问题和利用计算机求解问题的能力, 具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业 设计打下坚实基础。 四、 设计思想及过程 由于需要使功能尽量模仿 Windows 下的计算器,而很多功能要以图形界面 实现,故用 Borland C+ Builder 编写。所以用的是面向对象程序设计。但 因为这是 C 语言的课程设计,所以除了面向对象的使用以外,所有语法都 是按照 C 语言的格式编写。 采
3、用工程模式,文件包括 calc.h(运算主函数头文件,包括各运算符的操作 以及其辅助函数)、Main.h(窗体类的声明头文件)、Calc.cpp(工程初始化文 件)、Main.cpp(代码主文件,包括各空间操作的函数)以及一些其它附属文 件,包括 dll动态链接库。 在参考了 Windows 里的计算器以后,决定在我的课程设计中实现: 09 的数字输入功能(小数点除外) 实现加、减、乘、整除、取模、阶乘、位运算左移、x的 y次方、与、 异或、x立方、x平方运算功能,二进制、八进制、十进制、十六进制 3 转换功能,正负转换功能,退格、归零等功能。 数字显示最多为 40 位,超过即用科学表示法表示
4、(例如 1E50) 。 运算时因最高能对 5000 位的数字进行运算,故所有功能建立在自行编 写代码的高精度运算基础上。 在按键操作中,先判断用户按的是数字键还是功能键。功能键分运算符键、 进制转换键以及清空键。然后记录下来用户当前的按键,然后对上次按的 功能键键进行运算。如按了 1、+、5,再按任何功能键即对 1+5 进行运算。 如果按的是进制转换键,就记录当前进制,则在以后每次操作中,都将显 示结果转换为当前进制再显示。 如:以下是按 5 以及*号时的函数代码 对于高精度,采用结构体 struct highint numMAXN;的形式,数组的一 个元素存一位。个位为 num1,将符号存在
5、 num0之中。 对于高精度加法,先判断两个数符号,如果为异号,则进行高精度减 法,否则将各位逐个相加,然后逐位进位,返回答案即可。 void _fastcall TMainForm : bt_5Click(TObject *Sender) /*输入 5*/ if(_lastKey = key_sym) initNum( /*初始化当前动作数字*/ if(_lastKey = key_sym /*让答案等于 0*/ lastSym = N; incMed( /*将活动数字加一位,并且最后一位是 5*/ ShowText(actNum); /*显示当前活动数字*/ _lastKey = key_
6、num; /*记录最后按键为数字键*/ void _fastcall TMainForm : bt_mulClick(TObject *Sender) /*输入*号*/ doAns( /*做出上一步答案(不是按乘号这一步)*/ ShowText(ans); /*显示答案*/ lastSym = nowSym; /*现在即将运算的符号赋值给最后的符号*/ nowSym = *; /*将*号现在即将运算*/ actNum = ans; /*将答案赋值给活动数字*/ /initNum( _lastKey = key_sym ; /*将最后的按键转换为符号按键*/ 4 对于高精度减法,先判断两个数符号,如果为异号,则进行高精度加 法,否则用大数减小数,逐个相减,然后逐位退位,判断符号、返回 答案即可。 对于高精度乘法,用第二个数的