一个简单的计算器程序
2010-01-04 15:20
423 查看
前段时间写了一个简单的计算器程序,可以支持+-*/()和数字构成的表达式,每个表达式以分号结束,运行时向下面这样:
有兴趣的可以编译后玩玩,源代码如下:
$ ./a.out (2+3)*(-2+5); 15.000
有兴趣的可以编译后玩玩,源代码如下:
#include <stdio.h> #include <stdlib.h> #define NONE -1 enum {NUM=256}; int lookahead; double token_val; int get_token() { int t; while(1){ t = getchar(); if(t == ' ' || t == '/t') ; else if( t == '/n') ; else if (isdigit(t)){ ungetc(t, stdin); scanf("%lf", &token_val); return NUM; }else if ( t == EOF) return t; else{ token_val = NONE; return t; //operators, parenthesis etc. } } } void match(int type) { if(lookahead == type) lookahead = get_token(); else printf("syntax error/n"); } double term(); double factor(); double expr() { double left = term(); while(1){ if(lookahead == '+'){ match('+'); left += term(); }else if(lookahead =='-'){ match('-'); left -= term(); }else return left; //lookahead not for expr, return current value. } } double term() { double left = factor(); while(1){ if(lookahead == '*'){ match('*'); left *= factor(); } else if(lookahead =='/'){ match('/'); double right = factor(); if(right) left /= right; else{ printf("divided by zero!/n"); exit(0); } }else return left; //lookahead not for term, return current value. } } double factor() { double left; if(lookahead == '('){ match('('); left = expr(); match(')'); }else if(lookahead == NUM){ left = token_val; match(NUM); }else if(lookahead == '-'){ match('-'); left = -factor(); } else{ printf("error: what's this?/n"); exit(0); } return left; } int main() { lookahead = get_token(); while(lookahead != EOF) { printf("%.3lf/n", expr()); match(';'); //end this expr } return 0; }
相关文章推荐
- 我的第一个Windows Phone7程序----------一个简单的计算器
- javascript写一个简单的计算器程序
- QT入门-一个简单的计算器程序
- 用c++写一个简单的计算器程序
- J2EE实践第一部分-创建一个简单的JSF Web程序(简单网页计算器)
- MFC一个简单的计算器程序
- 用C# WinForm写的一个简单的计算器程序(可以输入复杂的表达式),欢迎大家指出Bug
- 使用面向对象的编程思想写一个简单的控制台计算器程序,放松一下
- 一个简单的计算器程序(C++)
- 一个简单的计算器模拟程序-2011腾讯笔试填空题
- MFC一个简单的计算器程序
- 微信小程序入门之构建一个简单TODOS应用
- 基于JUnit3.8的一个简单的测试程序
- 发一个php简单的伪原创程序,配合商城采集用的
- 一个简单的死锁程序
- 反汇编一个简单的C程序并分析
- 关于提高qn画面质量的一个简单方法,美工和程序来瞧瞧
- 利用x64_dbg破解一个最简单的64位小程序
- 一个简单程序演示container_of的原理
- MAC COCOA一个简单的多线程程序[2]