#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define MAXBUFFER 10
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
}SqStack;
void InitStack(SqStack *s)
{
s->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));
if(!s->base)
exit(0);
s->top=s->base;
s->stacksize=STACK_INIT_SIZE;
}//组建
void Push(SqStack *s,ElemType e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(ElemType *)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
exit(0);
s->top=s->base+s->stacksize;
s->stacksize=s->stacksize+STACKINCREMENT;
}
*(s->top)=e;
s->top++;
}//入栈操作
void Pop(SqStack *s,ElemType *e)
{
if(s->top==s->base)
{
return ;
}
*e=*--(s->top);
}
int Stacklen(SqStack s)
{
return (s.top-s.base);
}
int main()
{
SqStack s;
char c;
double d,e;
char str[MAXBUFFER];
int i=0;
InitStack(&s);//初始化
printf("请按照逆波兰表达式输入待计算数据,数据与运算符之间空格隔开已#结束\n");
scanf("%c",&c);
while(c!="#")
{
while(isdigit(c)||c==".")//用于过滤数字
{
str[i++]=c;
str[i]="\0";
if(i>=10)
{
printf("输入的单个数据过大\n");
return -1;
}
scanf("%c",&c);
if(c==" ")
{
d=atof(str);
Push(&s,d);
i=0;
break;
}
}////头文件ctype
switch(c)
{
case "+":
Pop(&s,&e);
Pop(&s,&d);
Push(&s,d+e);
break;
case "-":
Pop(&s,&e);
Pop(&s,&d);
push(&s,d-e);
break;
case "*":
Pop(&s,&e);
Pop(&s,&d);
push(&s,d*e);
break;
case "/":
Pop(&s,&e);
Pop(&s,&d);
if(e!=0)
{
push(&s,d/e);
}
else
{
printf("\n出错除数为0");
return -1;
}
}
scanf("%c",&c);
}
Pop(&s,&d);
printf("最终的计算结果为%d",d);
return 0;
}
感觉写的挺完整的,但是还是有错 不知道怎么改了 帮本人改改吧!
解决方案
40
你Push函数第二个参数的类型是ElemType,但Push(&s,d);这句中的d是double类型
Pop(&s,&d); 第二个参数类型也不对
push(&s,d-e); 第一个p是大写的
Pop(&s,&d); 第二个参数类型也不对
push(&s,d-e); 第一个p是大写的
2
关于本人能否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自本人感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
假如想从A变成B的话,到本人的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自本人感觉很有成就感
A不适合编程(理由:打字准确度偏低、粗心大意)
B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念)
C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证)
D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!)
假如想从A变成B的话,到本人的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”