#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里面下载“适合程序员的键盘练习”