c语言计算器程序源代码

来源:百度知道 编辑:UC知道 时间:2024/07/01 04:19:06
我想编译一个计算器,用c语言
要求能将用户输入的任意数学表达式语句正确理解,并编程实现表达式运算结果的正确输出,用户界面可以是基于字符型的Dos界面或图形界面。要求实现以下内容(其中第二部分为附加内容)
1) 四则算术运算表达式的词法分析
如:-3.14*34+(8-45+3)+9*3.4
2) 包含函数的任意数学表达式词法分析(附加部分)
如:sqrt(3.14*34+ 8)*cos(sin(45)/3)+4.9^3
其中函数包括:sin(正弦函数)、cos(余弦函数)、tg(正切函数)、ctg(余切函数)、sqrt(平方根函数)、^(幂函数)、abs(绝对值函数)、exp(指数函数)、ln(对数函数)
请高手指点,最好网上没有的自己做出来的

栈操作~
输入的弄成字符串。
如:a+(b+c*(d+e))
先检索“(”入栈,b入栈,+入栈,c入栈,*入栈,后面的不是数字那么“(”入栈,+,入栈,e入栈,
“)”入栈,遇到“)”,出栈操作,直到遇到第一个“(”。
得到字符:d+e,通过算法计算出值D,然后把D入栈。那么栈中的字符为:a+(b+c*D
向后判断一步看是不是乘或除,不是继续向后入栈,是就出栈。
得到c*D,通过算法计算值为C,入栈,那么栈中的字符为:a+(b+C,向后判断,无乘或除运算,继续入栈:“)”,遇到“)”,出栈操作,直到遇到第一个“(”,得到字符串:b+c,算法计算值为B,入栈
栈中字符串为:a+B 字符串结束,出栈操作计算出a+B,值。
如果字符串的式子很长的话,就反复的入栈出栈计算。
思路是这样的......
关于COS,SIN类的关键字,也是上面的思路,
(入栈,直到遇到)出栈,先计算出括号里的,然后后退一步判断前面的是乘除或者关键字,
如:sin(0.1+0.2)
操作得出sin0.3然后判断前面的是不是关键字,是那句计算sin0.3。
但是遇到关键字的时候不是一个一个字符在一起的,你可以入栈的时候判断是不是字母,是字母,那么入栈直到不是字母为止,出栈判断关键字也是一样......
不明白的继续问~

#include "std_lib_facilities.h"
#include "math.h"
class Token {
public:
char kind; // what kind of token
double value; // for numbers: a value
Token(char ch) // make a Token from a char
:kind(ch), value(0) { }
Token(char ch, double val) // make a Toke