/*输入一个个位数的数学表达式,如6+3*(9-5)/2-8,并将运行程序后将结果显示在屏幕上。/为什么输出不了结果,哪出错了?帮忙看看,多谢啦
/*输入一个个位数的数学表达式,如6+3*(9-5)/2-8,并将运行程序后将结果显示在屏幕上。*/为什么输出不了结果,哪出错了?帮忙看看,谢谢啦
#include<stdio.h>
#include<malloc.h>
typedef char type;
typedef struct node
{
type *base;
type *top;
}sqstack;
void initstack(sqstack *s)
{
s->base=(type *)malloc(sizeof(type));
s->top=s->base;
}
type push(sqstack *s,type x)
{
if(s->base==s->top)
*s->base=x;
else *s->top=x;
s->top=(type *)malloc(sizeof(type));
return x;
}
type gettop(sqstack *s,type x)
{
if(s->base==s->top)
return 0;
else x=*(--s->top);
return x;
}
type pop(sqstack *s,type x)
{
if(s->base==s->top)return 0;
else x=*(--s->top);
return x;
}
int firstvalue(char ch)
{
int k;
switch(ch)
{
case '+':k=0;break;
case '-':k=1;break;
case '*':k=2;break;
case '/':k=3;break;
case '(':k=4;break;
case ')':k=5;break;
case '#':k=6;break;
}
return k;
}
type sign(char ch1,char ch2)
{
int i,j;
char a[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};
i=firstvalue(ch1);
j=firstvalue(ch2);//调用函数两次,返回两个函数值
return a;
}
type count(char a,char b,char c)
{
int l;
switch(c)
{
case '+':l=(a-'0')+(b-'0');break;
case '-':l=(a-'0')-(b-'0');break;
case '*':l=(a-'0')*(b-'0');break;
case '/':l=(a-'0')/(b-'0');break;
}
return(l+'0');
}
void main()//主函数
{
char m,n;
char c,a,d,b,e='z';
sqstack s1,s2;
initstack(&s1);push(&s1,'#');
initstack(&s2);
printf("请输入表达式,以#结尾\n");
c=getchar();
while(c!='#'||gettop(&s1,e)!='#')
{
if(c<='9'&&c>='0')
{
push(&s2,c);
c=getchar();
}
else
switch(sign(gettop(&s1,e),c))
{
case'<':push(&s1,c);c=getchar();break;
case'=':pop(&s1,e);c=getchar();break;
case'>':d=pop(&s1,e);a=pop(&s2,e);b=pop(&s2,e);n=count(b,a,d);push(&s2,n);break;
}
}
m=gettop(&s2,e);
printf("结果为:%d\n",m-'0');
}
------解决方案--------------------
我这样修改楼主的代码 全部打印出error 楼主自己再研究一下吧
------解决方案--------------------
#include<stdio.h>
#include<malloc.h>
typedef char type;
typedef struct node
{
type *base;
type *top;
}sqstack;
void initstack(sqstack *s)
{
s->base=(type *)malloc(sizeof(type));
s->top=s->base;
}
type push(sqstack *s,type x)
{
if(s->base==s->top)
*s->base=x;
else *s->top=x;
s->top=(type *)malloc(sizeof(type));
return x;
}
type gettop(sqstack *s,type x)
{
if(s->base==s->top)
return 0;
else x=*(--s->top);
return x;
}
type pop(sqstack *s,type x)
{
if(s->base==s->top)return 0;
else x=*(--s->top);
return x;
}
int firstvalue(char ch)
{
int k;
switch(ch)
{
case '+':k=0;break;
case '-':k=1;break;
case '*':k=2;break;
case '/':k=3;break;
case '(':k=4;break;
case ')':k=5;break;
case '#':k=6;break;
}
return k;
}
type sign(char ch1,char ch2)
{
int i,j;
char a[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};
i=firstvalue(ch1);
j=firstvalue(ch2);//调用函数两次,返回两个函数值
return a;
}
type count(char a,char b,char c)
{
int l;
switch(c)
{
case '+':l=(a-'0')+(b-'0');break;
case '-':l=(a-'0')-(b-'0');break;
case '*':l=(a-'0')*(b-'0');break;
case '/':l=(a-'0')/(b-'0');break;
}
return(l+'0');
}
void main()//主函数
{
char m,n;
char c,a,d,b,e='z';
sqstack s1,s2;
initstack(&s1);push(&s1,'#');
initstack(&s2);
printf("请输入表达式,以#结尾\n");
c=getchar();
while(c!='#'||gettop(&s1,e)!='#')
{
if(c<='9'&&c>='0')
{
push(&s2,c);
c=getchar();
}
else
switch(sign(gettop(&s1,e),c))
{
case'<':push(&s1,c);c=getchar();break;
case'=':pop(&s1,e);c=getchar();break;
case'>':d=pop(&s1,e);a=pop(&s2,e);b=pop(&s2,e);n=count(b,a,d);push(&s2,n);break;
}
}
m=gettop(&s2,e);
printf("结果为:%d\n",m-'0');
}
c
sizeof
------解决方案--------------------
int firstvalue(char ch)
{
int k = 0;
switch(ch)
{
case '+':k=0;break;
case '-':k=1;break;
case '*':k=2;break;
case '/':k=3;break;
case '(':k=4;break;
case ')':k=5;break;
case '#':k=6;break;
default : printf("error");
}
return k;
}
type count(char a,char b,char c)
{
int l=0;
switch(c)
{
case '+':l=(a-'0')+(b-'0');break;
case '-':l=(a-'0')-(b-'0');break;
case '*':l=(a-'0')*(b-'0');break;
case '/':l=(a-'0')/(b-'0');break;
default : printf("error");
}
return(l+'0');
}
我这样修改楼主的代码 全部打印出error 楼主自己再研究一下吧
------解决方案--------------------
/* 在BC31下编译 或VC6.0*/
/* compile under Borland C++ 3.1 or Visual C++ 6.0*/
/*#include "stdafx.h"*/
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"
#define TRUE 1
#define FALSE 0
#define STACK_INIT_SIZE 100/*存储空间初始分配量*/
#define STACKINCREMENT 20/*存储空间分配增量*/
typedef struct
{
int *pBase;/*在构造之前和销毁之后,base的值为NULL*/
int *pTop;/*栈顶指针*/
int StackSize;/*当前已分配的存储空间,以元素为单位*/
}Stack;
typedef int BOOLEAN;
char Operator[8]="+-*/()#";/*合法的操作符存储在字符串中*/
char Optr;/*操作符*/
int Opnd=-1;/*操作符*/
int Result;/*操作结果*/
/*算符间的优先关系*/
char PriorityTable[7][7]=
{
{'>','>','<','<','<','>','>'},