大学计算机C++语言计算器源代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++语言编写。。

#include

#include

#include

using namespace std;

const double pi = 3.14159265;

const double e = 2.718281828459;

const int SIZE = 1000;

typedef struct node//为了处理符号而建立的链表(如: 1+(-2))

{

char data;

node *next;

}node;

typedef struct stack_num//存储数的栈

{

double *top;

double *base;

}stack_num;

typedef struct stack_char//存储运算符号的栈

{

char *top;

char *base;

}stack_char;

stack_num S_num;//定义

stack_char S_char;//定义

char fu[18] = {'\n', ')', '+', '-', '*', '/', '%', '^',

'Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '('};

int compare[1000];//表现出各运算符号的优先级

double shu[1000];//存储"数" 的数组

double dai_result;//运算的结果,是为了处理M 运算(简介函数里有M的定义) int biao = 0;//和dia_result 一样,为了处理M 运算

char line[SIZE];//输入的所要计算的表达式

void init()//初始化

{

compare[fu[0]] = -2;//用数字的大小表现出符号的优先级

compare[fu[1]] = -1;

compare[fu[2]] = 2;

compare[fu[3]] = 2;

compare[fu[4]] = 4;

compare[fu[5]] = 4;

compare[fu[6]] = 4;

compare[fu[7]] = 5;

for(int i = 8; i <= 15; i++)

compare[fu[i]] = 6;

compare[fu[16]] = 7;

S_num.base = (double*)malloc(sizeof(double)*SIZE);//为栈开辟空间S_char.base = (char*)malloc(sizeof(char)*SIZE);//同上

S_num.top = S_num.base;

S_char.top = S_char.base;

}

void push_num(double n)//数字进栈

{

* ++S_num.top = n;

}

void push_char(char c)//运算符号进栈

{

* ++S_char.top = c;

}

double pop_num()//数字出栈

{

double m = *S_num.top;

S_num.top--;

return m;

}

char pop_char()//运算符号出栈

{

char cc = *S_char.top;

S_char.top--;

return cc;

}

char get_top_char()//得到运算符号的栈中最顶端的运算符号

{

return *S_char.top;

}

double operate(double y, char c, double x)//对两个数计算(含是双目运算符:如*, / 等等)

{

double r;

if(c == '-')

r = x - y;

else if(c == '+')

r = x + y;

else if(c == '/' && y != 0)

r = x / y;

else if(c == '*')

r = x * y;

else if(c == '^')

{

r = 1;

for(int i = 1; i <= y; i++)

r *= x;

}

else if(c == '%')

{

int r0 = (int)x % (int)y;

r = double(r0);

}

return r;

}

double operate_one(double one, char cc)//对一个数运算(含单目运算符:如log(L), sin(S) 等等) {

double r;

if(cc == 'Q')

r = sqrt(one);

else if(cc == 'C')

r = cos(one);

else if(cc == 'S')

r = sin(one);

else if(cc == 'T')

r = tan(one);

else if(cc == 'c')

r = acos(one);

else if(cc == 's')

r = asin(one);

else if(cc == 't')

r = atan(one);

相关文档
最新文档