• 回答数

    7

  • 浏览数

    147

红色高跟鞋H
首页 > 职称论文 > 毕业论文栈计算器

7个回答 默认排序
  • 默认排序
  • 按时间排序

官官8809

已采纳

一个完整的表达式计算程序,用栈数据结构实现表达式求值 能够计算:加、减、乘、除、括号 要求表达式以 #结束 #define N 200 #include <> #include <> typedef struct{ int top; double array[N]; }NumStack; typedef struct{ int top; char array[N]; }OpStack; int Cint(char mychar){ return (mychar-48); } void PushNum(NumStack *numstack,double num){ numstack->top++; numstack->array[numstack->top-1]=num; } void PopNum(NumStack *numstack,double *num){ *num=numstack->array[numstack->top-1]; numstack->top--; } void PushOp(OpStack *opstack,char op){ opstack->top++; opstack->array[opstack->top-1]=op; } void PopOp(OpStack *opstack,char *op){ *op=opstack->array[opstack->top-1]; opstack->top--; } double Calc(double a,double b,char c){ double result; switch(c){ case '+':result=a+b;break; case '-':result=a-b;break; case '*':result=a*b;break; case '/':result=a/b;break; } return result; } char Priority(char y,char x){ char priority='<'; switch(x){ case '+': case '-':if(y=='(' || y=='#')priority='>';break; case '*': case '/':if(y=='(' || y=='#'|| y=='+' || y=='-')priority='>';break; case '(':priority='>';break; case ')':if(y=='(')priority='=';break; case '#':if(y=='#')priority='=';break; default:priority='E'; } return priority; } void Process(NumStack *numstack,OpStack *opstack,char x){ double a,b;char c; static double tempnum=;static int len=10;static int dot=0,flags=0; if(isdigit(x) || x=='.'){ if(x=='.')dot=1; else{ if(dot==0) tempnum=tempnum*10+Cint(x); else{ tempnum=tempnum+(double)Cint(x)/len; len*=10; } } } else{ if(flags==0 && x!='('){PushNum(numstack,tempnum);tempnum=;len=10;dot=0;} switch(Priority(opstack->array[opstack->top-1],x)){ case '>':PushOp(opstack,x);flags=0;break; case '<': PopOp(opstack,&c); PopNum(numstack,&b); PopNum(numstack,&a); PushNum(numstack,Calc(a,b,c));flags=1; Process(numstack,opstack,x);break; case '=':PopOp(opstack,&c);flags=1;break; default:printf("Wrong Express!");exit(0); } } } int main() { NumStack numstack;OpStack opstack;char s[N];int i=0; ;; PushOp(&opstack,'#'); printf("\nEnter your expression and end it with #:");scanf("%s",s); for(i=0;i

269 评论

冬日恋鬼

支持 加减乘除括号负数开根乘方#include<>#include<>#include<>double jisuan(char a[]){ int i=1,j,k,m,cnt=0,t1=0,t2=0,t3=0; char nibo[50],zhan2[50]; double x,n,l,z=0,zhan3[50]; typedef struct { double d1; int d2; }dd; typedef struct { dd data[50]; int top; }zhan1; zhan1 *shu; shu=(zhan1 *)malloc(sizeof(zhan1)); shu->top=0; while(a[i]!='\0') { if(a[i]>='0'&&a[i]<='9') { z=0; j=i+1; while(a[j]>='0'&&a[j]<='9') {j++;} j--; for(k=i;k<=j;k++) { z=z*10+a[k]-'0'; } j=j+1; x=z; if(a[j]=='.') { l=1; i=j+1; j=i+1; while(a[j]>='0'&&a[j]<='9') {j++;} j--; for(k=i;k<=j;k++) { n=pow(); l=l+1; x=x+n*(a[k]-'0'); } i=j+1; } else i=j; shu->data[++shu->top].d1=x; shu->data[shu->top].d2=++cnt; nibo[++t1]='0'+shu->data[shu->top].d2; nibo[t1+1]='\0'; } else if(a[i]=='(') { zhan2[++t2]=a[i]; i++; } else if(a[i]==')') { j=t2; while(zhan2[j]!='(') { nibo[++t1]=zhan2[j]; nibo[t1+1]='\0'; j--; } t2=j-1; i++; } else if(a[i]=='+') { while(t2>0&&zhan2[t2]!='(') { nibo[++t1]=zhan2[t2]; nibo[t1+1]='\0'; t2--; } zhan2[++t2]=a[i]; i++; } else if(a[i]=='-') { if(a[i-1]=='$') { a[0]='0'; i=0; } else if(a[i-1]=='(') { a[i-1]='0'; a[i-2]='('; i=i-2; t2--; } else { while(t2>0&&zhan2[t2]!='(') { nibo[++t1]=zhan2[t2]; nibo[t1+1]='\0'; t2--; } zhan2[++t2]=a[i]; i++; } } else if(a[i]=='*'||a[i]=='/') { while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#') { nibo[++t1]=zhan2[t2]; nibo[t1+1]='\0'; t2--; } zhan2[++t2]=a[i]; i++; } else if(a[i]=='^'||a[i]=='#') { while(zhan2[t2]=='^'||zhan2[t2]=='#') { nibo[++t1]=zhan2[t2]; nibo[t1+1]='\0'; t2--; } zhan2[++t2]=a[i]; i++; } } while(t2>0) { nibo[++t1]=zhan2[t2]; nibo[t1+1]='\0'; t2--; } j=1;t3=0; while(j<=t1) { if(nibo[j]>='0'&&nibo[j]!='^'&&nibo[j]!='#')// { for(i=1;i<=shu->top;i++) { if((int)(nibo[j]-'0')==shu->data[i].d2) { m=i; break; } } zhan3[++t3]=shu->data[m].d1; } else if(nibo[j]=='+') { zhan3[t3-1]=zhan3[t3-1]+zhan3[t3]; t3--; } else if(nibo[j]=='-') { zhan3[t3-1]=zhan3[t3-1]-zhan3[t3]; t3--; } else if(nibo[j]=='*') { zhan3[t3-1]=zhan3[t3-1]*zhan3[t3]; t3--; } else if(nibo[j]=='/') { zhan3[t3-1]=zhan3[t3-1]/zhan3[t3]; t3--; } else if(nibo[j]=='^') { zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]); t3--; } else if(nibo[j]=='#') { zhan3[t3]=sqrt(zhan3[t3]); } j++; } return zhan3[t3];}void main(){ for(;;) { char x,a[50]; double jieguo; int i=0; a[0]='$'; printf("#表示开方,^表示乘方(支持负数)\n"); printf("请输入表达式,退出请输入q:\n\n"); scanf("%c",&x); if(x=='q') break; while(x!='\n') { a[++i]=x; scanf("%c",&x); } a[i+1]='\0'; jieguo=jisuan(a); printf("\n"); printf("结果为:%lf",jieguo); printf("\n\n\n\n\n"); }}

185 评论

晓晓彤儿

计算器做毕业论文??有才。。。。。

252 评论

红颜一笑吧

请我写,钱不算多

117 评论

boboyoung1983

#define N 200 #include <> #include <> #include <>#include ""typedef struct{ int top; double array[N]; }NumStack; typedef struct{ int top; char array[N]; }OpStack; int Cint(char mychar){ return (mychar-48); } void PushNum(NumStack *numstack,double num){ numstack->top++; numstack->array[numstack->top-1]=num; } void PopNum(NumStack *numstack,double *num){ *num=numstack->array[numstack->top-1]; numstack->top--; } void PushOp(OpStack *opstack,char op){ opstack->top++; opstack->array[opstack->top-1]=op; } void PopOp(OpStack *opstack,char *op){ *op=opstack->array[opstack->top-1]; opstack->top--; } double Calc(double a,double b,char c){ double result; switch(c){ case '+':result=a+b;break; case '-':result=a-b;break; case '*':result=a*b;break; case '/':result=a/b;break; } return result; } char Priority(char y,char x){ char priority='<'; switch(x){ case '+': case '-':if(y=='(' || y=='#')priority='>';break; case '*': case '/':if(y=='(' || y=='#'|| y=='+' || y=='-')priority='>';break; case '(':priority='>';break; case ')':if(y=='(')priority='=';break; case '#':if(y=='#')priority='=';break; default:priority='E'; } return priority; } void Process(NumStack *numstack,OpStack *opstack,char x){ double a,b;char c; static double tempnum=;static int len=10;static int dot=0,flags=0; if(isdigit(x) || x=='.'){ if(x=='.')dot=1; else{ if(dot==0) tempnum=tempnum*10+Cint(x); else{ tempnum=tempnum+(double)Cint(x)/len; len*=10; } } } else{ if(flags==0 && x!='('){PushNum(numstack,tempnum);tempnum=;len=10;dot=0;} switch(Priority(opstack->array[opstack->top-1],x)){ case '>':PushOp(opstack,x);flags=0;break; case '<': PopOp(opstack,&c); PopNum(numstack,&b); PopNum(numstack,&a); PushNum(numstack,Calc(a,b,c));flags=1; Process(numstack,opstack,x);break; case '=':PopOp(opstack,&c);flags=1;break; default:printf("Wrong Express!");exit(0); } } } int main() { NumStack numstack;OpStack opstack;char s[N];int i=0; ;; PushOp(&opstack,'#'); printf("\nEnter your expression and end it with #:");scanf("%s",s); for(i=0;i

111 评论

七彩娃娃豆

一般来说的话,涉及到括号匹配的问题,用两个栈,一个接收数字,一个接受运算符号,之前定义运算符号的优先级然后边读入边判断优先级,考虑是否要压栈还是如栈...

222 评论

海上花的故事

参考编程原理

358 评论

相关问答

  • 计算器毕业论文java

    这是要神马 要程序还是?

    susanwangyue 6人参与回答 2023-12-07
  • 计算机毕业论文代码生成器

    写论文还是不要摘自百度百科吧,百度百科是由网友自行编写的,一部内容开放、自由的网络百科全书,并不权威,并且带有免责声明,不建议写论文摘自百度百科,可以参考~~

    金弓木小火 4人参与回答 2023-12-05
  • 换热器计算毕业论文

    随着科技负效应的显现,工程伦理越来越受的人们的重视。化学工程有着与其他工程不同的特点。下面是我为大家整理的化学工程应用 毕业 论文,供大家参考。 《 化学工

    lily完美lily 2人参与回答 2023-12-06
  • 计算器的设计与实现毕业论文

    1 KM-1 键混器的设计 1 Sw3204V监控器的设计 1 基于射频遥控型(单片机)交通灯的设计1 Sw802V视频切换器的设计 1 无线数控多

    CENGUODIAN13247606080 6人参与回答 2023-12-06
  • 客栈民宿毕业论文

    如果是计算机相关专业的话,毕业设计民宿的相关选题可以是民宿订购系统或者是民宿评分小程序;毕业设计难度不可以选得太高或者太低,太高的话自己无法完成,开题导师不给过

    维基先生Wiki 5人参与回答 2023-12-11