• PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 3KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 8
    下载次数
  • 2010-11-30 18:19
    上传日期
使用键盘输入表达式,计算表达式的值并输出;将表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。
sthg.rar
  • 转化为后缀并求值.cpp
    4.1KB
  • 中缀求值.cpp
    3.7KB
内容介绍
#include<stdio.h> #include<string.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define STACK_SIZE 30 char operater[7]={'+','-','*','/','(',')','#'}; int cmp[7][7]={{3,3,1,1,1,3,3},{3,3,1,1,1,3,3},{3,3,3,3, 1,3,3},{3,3,3,3, 1,3,3,},{1,1,1,1,1,2,0},{3,3,3,3,0,3,3},{1,1,1,1,1,0,2}}; //算符优先矩阵,3代表>,2代表=,1代表<,0代表不可比 typedef struct { char elem[STACK_SIZE]; int top; }optr;//操作符栈 typedef struct { int elem[STACK_SIZE]; int top; }opnd;//操作数栈 void initstack(optr *s)//初始化运算符栈 { s->top=-1; }; void initopnd(opnd *s)//初始化操作数栈 { s->top=-1; } void empty(optr *s) { int i; for(i=0;i<STACK_SIZE;i++) s->elem[i]='\0'; } int isempty(optr *s)//判断运算符栈是否为空,为空返回1 { if(s->top==-1) return TRUE; else return FALSE; } /*int isemptyn(nstack *s)//判断后缀表达式栈是否为空,为空返回1 { return(s->top==-1?TRUE:FALSE); }*/ int isfull(optr *s)//判断运算符栈是否为满,为满返回1 { return(s->top==(STACK_SIZE-1)?TRUE:FALSE); } int isfullnd(opnd *s)//判断操作数栈是否为满,为满返回1 { return(s->top==(STACK_SIZE-1)?TRUE:FALSE); } int push(optr *s,char c)//运算符入栈 { if(s->top==STACK_SIZE-1) { printf("stack is full!\n"); return FALSE; } else { s->top++; s->elem[s->top]=c; return TRUE; } } int pushnd(opnd *s,int x)//操作数入栈 { if(s->top==STACK_SIZE-1) { printf("stack is full!\n"); return FALSE; } else { s->top++; s->elem[s->top]=x; return TRUE; } } int pop(optr *s,char *c)// 运算符出栈 { if(s->top==-1) { printf("stack is empty!\n"); return FALSE; } else { *c=s->elem[s->top]; s->top--; return TRUE; } } int popnd(opnd *s,int *x)//操作数出栈 { if(s->top==-1) { printf("stack is empty!\n"); return FALSE; } else { *x=s->elem[s->top]; s->top--; return TRUE; } } char gettop(optr *s)//取操作符栈顶元素 { if(s->top==-1) { printf("stack is empty!\n"); return FALSE; } else { return s->elem[s->top]; } } int gettopnd(opnd *s)//取操作数栈顶元素 { if(s->top==-1) { printf("stack is empty!\n"); return FALSE; } else { return s->elem[s->top]; } } int isoptr(char ch)// 判断是否为运算符,是则返回1 { int i; for(i=0;i<7;i++) { if(operater[i]==ch)return TRUE; } return FALSE; } int compare(char ch1,char ch2)// 运算符优先级比较 { int i,m,n; for(i=0;i<7;i++) { if(ch1==operater[i]) m=i; if(ch2==operater[i]) n=i; } return cmp[m][n]; } int execute(int a,char op,int b)//运算函数 { int result; switch(op) { case'+': result=a+b; break; case'-': result=b-a; break; case'*': result=a*b; break; case'/': result=b/a; break; } return result; } int creatsuffix()//产生后缀 { int i=0; char ch,op; char *str; optr optr,suffix; initstack(&optr); initstack(&suffix); empty(&suffix); push(&optr,'#'); str=(char*)malloc(30*sizeof(char)); printf("请输入表达式(以#结束)\n"); gets(str); ch=str[i]; i++; while(ch!='#'||gettop(&optr)!='#') { if(!isoptr(ch)) { push(&suffix,ch); ch=str[i]; i++; } else { switch(compare(gettop(&optr),ch)) {case 1: push(&optr,ch); ch=str[i]; i++; break; case 2: pop(&optr,&op); ch=str[i]; i++; break; case 3: pop(&optr,&op); push(&suffix,op); break; case 0: printf("wrong input!\n"); return FALSE; } } } puts(suffix.elem); return TRUE; } int exesuffix()//求解后缀表达式 { int i=0,a,b,v,result; char ch; char *str; opnd opnd; initopnd(&opnd); str=(char*)malloc(30*sizeof(char)); printf("请输入后缀表达式(以#结束)\n"); gets(str); ch=str[i]; i++; while(ch!='#') { if(!isoptr(ch)) { pushnd(&opnd,ch-'0'); ch=str[i]; i++; } else { popnd(&opnd,&a); popnd(&opnd,&b); v=execute(a,ch,b); pushnd(&opnd,v); ch=str[i]; i++; } } result=gettopnd(&opnd); printf("运算结果:%d\n",result); return TRUE; } void main() { creatsuffix(); exesuffix(); }
评论
    相关推荐
    • 计算表达式代码
      山东大学软件学院数据结构课程设计——计算表达式 功能:单步演示,动画演示
    • 表达式
      中序表达式,c++。。。编译器codeblocks hust赵明
    • 表达式
      NULL 博文链接:https://lufeng369.iteye.com/blog/1679115
    • 表达式
      用c语言实现表达式,printf("\t表达式 : \n\t %s\b = %d\n", expression, result);
    • 表达式
      数据结构算术表达式,还可用于《程序设计方法学》(第2版)胡正国出版的习题
    • 表达式
      数据结构,利用栈进行表达式,可计算多位数
    • 数据结构计算表达式
      山东大学 数据结构实验 计算表达式 堆栈
    • 计算表达式.rar
      结构清晰地介绍了用栈计算表达式的方法,附带详细的注释,希望像能对 和我一样入门级的朋友们有所帮助
    • 利用正则式计算表达式
      修正后的源代码 博文链接:https://eastsun.iteye.com/blog/55852
    • 实习二之表达式计算.zip
      可实现数据结构练习——表达式自动检查和计算的C++代码