C 语言大作业说明文档
姓名:谢华梁
学号:2009012177
2011 年1 月1 日
1
目录
1. 选择的题目
2. 程序的设计
3. 实现的功能
4. 代码的说明
5. 总结与反思
2
1.选择的题目
表达式计算器,允许用户输入计算表达式,计算出相应结果。
【表达式定义】
1.数值:包括int,long,float,double 和biginteger (需自己实现大数
的基本运算)。
2.括号,只支持()。
3.运算符号包括加+、减-、乘*、除/、平方^、阶乘!
4 .支持的数学函数:(函数不考虑大数计算)
cos(), sin(), tg(), ctg(), abs(), sign(), sqrt(), ln(), sinh(),
cosh(), tanh(), coth()
(注意:当使用三角函数时,需要提示用户当前的输入的角度是弧度还是
角度,默认为弧度,允许用户进行设置,将弧度变为角度)
5.特殊的常数PI 为3.1415926,E 为2.71828
6.表达式可以是常数,加+、减-、乘*、除/、平方^、括号(),以及数学函
数的组合
【计算器功能】
1、用户输入表达式,回车,计算器计算出相应结果,允许用户设置结果精度。
2、程序可提示用户保存表达式的计算结果,通过选择菜单的相应选项,也可
以将保存结果显示给用户。(需进行文件读写)
【计算结果输出】
如果计算结果为整数,则直接输出整数。若计算结果为小数则根据用户设置
精度进行输出。(默认保留小数点后三位)
【示例】
1.用户输入
1+sin(30)
程序输出结果
0.012
2.用户输入
23+56/(102-100)*((36-24)/(8-6))
程序输出结果:
191
3
2.程序的设计
【总体思路】
考虑到计算符号的优先级,可以按照从高到低依次计算直到得出结果。
即沿着括号()、阶乘!、指数^、函数(三角函数、对数函数等)、乘除和加
减的次序依次计算。
【具体方法】
申请一个与输入算式等长的标记数组和存储数组对按优先级顺序进行的每一
个符号计算(其中括号时是把其中内容提取作为新的输入算式)的结果进行
保存,举例如下:
输入:
1+(3*5!)
初始化后:
标记数组为:
0 0 0 0 0 0 0 0
存储数组为:
0 0 0 0 0 0 0 0
按顺序计算括号之后为阶乘,则变为:
标记数组为:
0 0 0 0 0 1 1 0
存储数组为:
120 0 0 0 0 0 0 0
然后是乘法,括号:
标记数组为:
0 0 2 2 0 1 2 (