电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

[C语言]简易科学计算器源代码(链栈的应用)VIP免费

[C语言]简易科学计算器源代码(链栈的应用)_第1页
1/11
[C语言]简易科学计算器源代码(链栈的应用)_第2页
2/11
[C语言]简易科学计算器源代码(链栈的应用)_第3页
3/11
用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C 语言版)的3.2.5 章来详细说明算符优先法的思想: (摘抄结束) 我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘!,正弦sin,余弦cos,正切tan,以10 为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法) #inclu de #inclu de #inclu de #inclu de #inclu de //引用请注明出处: http://hi.baidu.com/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html #define MAX_TOKEN_LEN 100 //标记最大长度 #define EXPR_INCREMENT 20//表达式长度的增量 typedef struct { double opnd; //操作数 char optr[11]; //运算符 int flag; //若为1,则为单目运算符,2 则是双目运算符 } SElemType; //栈元素类型 typedef struct SNode { //栈 SElemType date; struct SNode * next; } SNode, *Stack; struct { //用来存储一个操作数或运算符 char str[MAX_TOKEN_LEN]; int type; //类型,若为0,则为操作数,若为1 则为运算符 } token; struct { //expression,用来存储表达式 char *str; int cur; //标记读取 expr 的当前位置 }expr; Stack OPND, OPTR; //操作数栈operand,运算符栈operator int expr_size; //表达式长度 void InitStack(Stack *S) { //初始化栈 *S = (Stack)malloc(sizeof(SNode)); if(!(*S)) { printf("动态申请内存失败!\n"); exit(0); } //if (*S)->next = NULL; } //InitStack void DestroyStack(Stack *S) { //销毁栈 SNode *p; while(p = *S) { *S = p->next; free(p); } //while } //DestroyStack void Push(Stack S, SElemType e) { //入栈 SNode *p; p = (SNode *)malloc(sizeof(SNode)); if(! p) { printf("动态申请内存失败!\n"); exit(0); } //if strcpy(p->date.optr,e.optr); p->date.opnd = e.opnd; p->date.flag = e.flag; p->next = S->next; S->next = p; } //Push void Pop(Stack S,SElemType *e) { //出栈 SNode *p; p = S->next; if(! p) { printf("栈为空,不能出栈!\n"); exit(0); } //if S->next = p->next; strcpy(e->optr,p->date.optr)...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

[C语言]简易科学计算器源代码(链栈的应用)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部