【C语言】简易科学计算器源代码(链栈的应用).docVIP

【C语言】简易科学计算器源代码(链栈的应用).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想:

(摘抄结束)

我给出的计算器功能有:支持欧拉数e,支持圆周率pi,支持运算符=,-,*,/,求幂符号^,阶乘!,正弦sin,余弦cos,正切tan,以10为底的对数函数lg,以欧拉数为底的对数函数ln,优先级表为:(!表示不合法)

#includestdio.h

#includestdlib.h

#includectype.h

#includestring.h

#includemath.h

//引用请注明出处:://hi.baidu/liangxiaowen1989/blog/item/af972310f7119670ca80c413.html

#defineMAX_TOKEN_LEN100//标记最大长度

#defineEXPR_INCREMENT20//表达式长度的增量

typedefstruct{

doubleopnd;//操作数

charoptr[11];//运算符

intflag;//若为1,则为单目运算符,2则是双目运算符

}SElemType;//栈元素类型

typedefstructSNode{//栈

SElemTypedate;

structSNode*next;

}SNode,*Stack;

struct{//用来存储一个操作数或运算符

charstr[MAX_TOKEN_LEN];

inttype;//类型,若为0,则为操作数,若为1则为运算符

}token;

struct{//expression,用来存储表达式

char*str;

intcur;//标记读取expr的当前位置

}expr;

StackOPND,OPTR;//操作数栈operand,运算符栈operator

intexpr_size;//表达式长度

voidInitStack(Stack*S){//初始化栈

*S=(Stack)malloc(sizeof(SNode));

if(!(*S)){

printf(动态申请内存失败!\n);

exit(0);

}//if

(*S)-next=NULL;

}//InitStack

voidDestroyStack(Stack*S){//销毁栈

SNode*p;

while(p=*S){

*S=p-next;

free(p);

}//while

}//DestroyStack

voidPush(StackS,SElemTypee){//入栈

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

voidPop(StackS,SElemType*e){//出栈

SNode*p;

p=S-next;

if(!p){

printf(栈为空,不能出栈!\n);

exit(0);

}//if

S-next=p-next;

strcpy(e-optr,p-date.optr);

e-opnd=p-date.opnd;

e-flag=p-date.flag;

free(p);

}//Pop

voidget_expr(){//获取expr字符串

char*p;

intsize;

expr.cur=0;

expr_size=100;

expr.str=(char*)malloc(expr_size*sizeof(char));

if(!expr.str){

printf(内存分配失败!\n);

exit(0);

}//if

size=0;

p=expr.str;

while((*p=getchar())!=\n){

if(*p!=.huisheliren){

if((*p=A)(*p=Z)){

*p=*p+32;//将大写转换成小写

}//if

p++;

size++;

if(size==ex

文档评论(0)

聚好信息咨询 + 关注
官方认证
服务提供商

本公司能够提供如下服务:办公文档整理、试卷、文档转换。

认证主体鹤壁市淇滨区聚好信息咨询服务部
IP属地河南
统一社会信用代码/组织机构代码
92410611MA40H8BL0Q

1亿VIP精品文档

相关文档