C语言计算器源代码.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
本文档如对你有帮助,请帮忙下载支持! 本文档如对你有帮助,请帮忙下载支持! 本文档如对你有帮助,请帮忙下载支持! 本文档如对你有帮助,请帮忙下载支持! C++ 语言编写。 。 #include<iostream> #include<cmath> #include<string> using namespace std; const double pi = 3.; const double e = 2.7; const int SIZE = 1000; typ edef 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

您可能关注的文档

文档评论(0)

ailuojue + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档