#include<malloc.h> #include<stdio.h> #include<ctype.h>//判断是否为字符函数的头文件 #include<stdlib.h> #define MAXSIZE 100 typedef int boo1; #define ture 1 #define false 0 typedef int elemtype; char ch[7]={'+','-','*','/','(',')','#'};//把符号转换成一个字符数组 int f1[7]={3,3,5,5,1,6,0};//栈内元素优先级 int f2[7]={2,2,4,4,6,1,0};//栈外元素优先级 int n=0; typedef struct sqstack {//顺序结构 elemtype stack[MAXSIZE]; int top; }sqstack; //1.把操作的字符转化成相应的字符。 elemtype cton(char c) { switch(c) { case '+': return 0; case '-': return 1; case '*': return 2; case '/': return 3; case '(': return 4; case ')': return 5; default: return 6; } } //2.按设定比较两个字符的优先级。 char Compare(char c1,char c2) { int i1=cton(c1); int i2=cton(c2);//把字符变成数字 if(f1[i1]>f2[i2]) return '>';//通过原来的设定找到优先级 else if(f1[i1]<f2[i2]) return '<'; else return '='; }//end Compare //3.进行四则运算,并返回计算结果。 int Operate(elemtype a,elemtype t,elemtype b) { int sum; switch(t) { case 0: sum=a+b; break; case 1: sum=a-b; break; case 2: sum=a*b; break; default: sum=a/b; } return sum; } //4.主要的表达式计算函数,返回表达式的计算结果。 int EvaluateExpression() char c; int i=0,sum=0; int k=1,j=1;//设置了开关变量 elemtype x,t,a,b; sqstack OPTR,OPND; Initstack(&OPTR);//初始化操作符栈 Push(&OPTR,cton('#'));//#符号压入操作符栈 Initstack(&OPND);//初始化操作数栈 c=getchar(); while(c!='#'||ch[Gettop(OPTR)]!='#') { if(isdigit(c)) { sum=0; while(isdigit(c))//判断c是否为数字 { if(!j)//j用来进行数字串的转换判断,j为0转换 { sum=sum*10-(c-'0'); } else sum=sum*10+(c-'0');//字符c转换成了对应的数字 c=getchar(); }//当前c不为数字,则把之前的数字串转化成十进制数字再压栈 Push(&OPND,sum); j=1; } else if(k) { switch(Compare(ch[Gettop(OPTR)],c)) { case'<':Push(&OPTR,cton(c));//把字符整型化,然后入操作栈 c=getchar(); break; case'=':Pop(&OPTR,&x);//操作符栈顶元素出栈 c=getchar(); break; case'>':Pop(&OPTR,&t);//操作符栈栈顶元素出栈 Pop(&OPND,&b);//操作数栈栈顶元素出栈 Pop(&OPND,&a);//操作数栈栈顶元素出栈 Push(&OPND,Operate(a,t,b)); break; } } }//endwhile return(Gettop(OPND)); //endEvaluateExpression //5.取栈顶元素 elemtype Gettop(sqstack s) { if(s.top==0) { printf("ERROR,underflow\n"); return 0; } else return s.stack[s.top]; } //6.初始化栈 void Initstack(sqstack*s) { s->top=0; } //7.出栈 void Pop(sqstack*s,elemtype*x) { if(s->top==0) printf("ERROR,Underflow!\n"); else { *x=s->stack[s->top]; s->top--; } } //8.入栈 void Push(sqstack*s,elemtype x) { if(s->top==MAXSIZE-1) printf("ERROR,Overflow!\n"); else { s->top++; s->stack[s->top]=x; } }//end Push //9.若S为空栈,则返回TURE,否则返回FALSE bool StackEmpty(sqstack S) { if(S.top==0) return ture; else return false; } //10.主函数。设定界面的颜色大小,调用计算模块函数 main() { int result; system("color 1f"); system("mode con:cols=80 lines=35"); printf("************欢迎使用表达式求值小程序************\n\n"); printf("请输入您的算术表达式(以#号结束):"); result=EvaluateExpression(); printf("表达式的计算结果是:%d",result); printf("************感谢您的使用,再见!************\n\n"); // return 0; }
这个编程的第57行一直显示有2个错误和一个警告,有没有大神帮我看下!!
慕spring
相关分类