【晨哥的C语言之旅】逆波兰表达式实现计算器功能
2012-12-06 13:28
435 查看
/*逆波兰表达式实现简单的计算器功能*/ #include <stdio.h> #include <stdlib.h> #include <ctype.h> #define MAXOP 100 #define NUMBER '0' #define MAXVAL 100 #define BUFSIZE 100 int getop(char []); void push(double); double pop(void); int getch(void); void ungetch(int); main(){ int type; double op2; char s[MAXOP]; while((type = getop(s)) != EOF){ switch (type){ case NUMBER: push(atof(s)); break; case '+': push(pop() + pop()); break; case '*': push(pop() + pop()); break; case '-': push(pop() + pop()); break; case '/': op2 = pop(); if (op2 != 0.0) push(pop() /op2); else printf("error: zero divisor\n"); break; default: printf("error: unknown command %s\n", s); } } return 0; } int sp = 0; double val[MAXVAL]; void push(double f){ if(sp < MAXVAL) val[sp++] = f; else printf("error: stack full, can't push %g\n", f); } double pop(void){ if (sp > 0) return val[--sp]; else{ printf("error: stack empty\n"); return 0.0; } } int getop(char s[]){ int i, c; while((s[0] = c = getch()) == ' ' || c == '\t') ; s[1] = '\0'; if (!isdigit(c) && c != '.') return c; i = 0; if(isdigit(c)) while (isdigit(s[++i] = c = getch())) ; if(c == '.') while (isdigit(s[++i] = c = getch())) ; s[i] = '\0'; if(c != EOF) ungetch(c); return NUMBER; } char buf[BUFSIZE]; int bufp = 0; int getch(void){ return (bufp > 0)? buf[--bufp] : getchar(); } void ungetch(int c){ if(bufp >= BUFSIZE) printf("ungetch: too many characters\n"); else buf[bufp++] = c; }
相关文章推荐
- 利用正则表达式实现计算器功能
- C语言实现逆波兰表达式
- 一个逆波兰表达式实现的四则混合运算计算器
- 分享一个Swift语言的逆波兰表达式计算器的实现
- C语言用函数指针的数组简单实现计算器功能
- 逆波兰 计算器 C语言实现
- 逆波兰表达式C语言实现
- Python-正则表达式实现计算器功能
- Python-正则表达式实现计算器功能
- 栈_逆波兰表达式_计算器实现_Golang版本
- 逆波兰 计算器 C语言实现代码
- JS实现可针对算术表达式求值的计算器功能示例
- Python 正则表达式实现计算器功能
- C++实现计算器功能(包括计算含未知量的式子),输出后缀表达式
- MFC计算器 用vector实现和计算逆波兰表达式
- 逆波兰表达式实现计算器(附c++代码)
- [ Python - 6 ] 正则表达式实现计算器功能
- 用python的正则表达式实现简单的计算器功能
- 用C语言实现Ping程序功能
- 运用PHP写计算器(实现加减乘除 取余数)功能