这又是以前的一篇文章,觉得有纪念价值。就发过来了。

去年暑假自己下了C语言实战105例,看了几个基础的,其中有一个是关于字符计算器的
我看起来蛮简单的,不过自己做起来我觉得还是做得少了,懵懵懂懂的。
现在想起那个觉得蛮有趣的(想想以前跟老大学做按钮计算器没做成,失败啊!~~~)
于是又重新写了一下,不过还是忍不住看了下源码,呵呵,真菜
不过发现里面有一点点错误,例如:不能计算 6 /4;只能计算 6/4 。
也许作者当时只想把原理展示出来,而把更多的细节留给了我们,不错的办法。
然后我自己也尝试着赶紧了一下:

#include
#include
#include
char token; //保存操作符
int error = 1;//error 为0表示计算中有错误
int mid();
int high();
int Match(char c)
{
//匹配成功则读入下一个字符并返回1
if(c == token)
{
while((token = getchar()) == ' ')
;
return 1;
}
//失败则返回0
else
return -1;
}
int low()
{
int result;
result = mid(); //读入操作数
while('+' == token || '-' == token) //计算多个加法与减法
if('+' == token) //计算加法
{
Match('+');
result += mid();
}
else if('-' == token) //计算减法
{
Match('-');
result -= mid();
}
return result;
}
int mid()
{
int result;
int div; //除数
result = high(); //读入操作数
while('*' == token || '/' == token) //计算多个乘法和除法
if('*' == token) //乘法
{
Match('*'); //匹配获取下一个字符
result *=high();
}
else if('/' == token) //除法
{
Match('/');
div = high(); //先读入除数
if(div) //除数不能为0
{
result /= div;
}
else
error = 0;
}
return result; //返回结果
}
int high()
{
int result;
if('(' == token)
{
Match('('); //获取输入中的下一个字符
result = low(); //计算括号内的表达式
Match(')'); //获取输入中的下一个字符
}
else if(token >= '0' && token <= '9')
{
ungetc(token,stdin); //如果token是数字,返还给输入流
scanf("%d",&result); //从输入中获取数字
while((token = getchar()) == ' ')
; // 消除空格符并读入下一个字符
}
else
error = 0;
return result; //返回结果
}
int main()
{
int result;
char title[] = "小小程序菜鸟野兔 qq:371514614 欢迎大家加我"; //做个小广告
SetConsoleTitle(title); //设置窗口标题
printf("*****************************************\n");
printf("**Welcome to use this simple calculator**\n");
printf("**Please input a multinomial like **\n");
printf("** 6-3*(5-1)/2+14/7 **\n");
printf("*****************************************\n");
while((token = getchar()) == ' ')
; //载入第一个字符
result = low(); //从低到高进行计算
if('\n' == token && (error != 0)) //按下回车则开始计算结果并判断计算过程中是否出错
printf("The answer is:%d\n",result);
else
printf("出错了\n");
getch(); //让屏幕停留一会
return 0;
}

我很佩服写出这个程序的人,刚开始拿到这程序的时候,我根本
就不相信它可以正确执行,后来直到自己运行了一下。然后我又想着它的工作
原理是什么呢(没办法,我就喜欢刨根问底。嘻嘻)。就自己看源码,根据注释慢慢看
。可那时候我刚学,递归都不是很懂,遇到不理解的,就把这里改一下在运行
看看有什么不同。就这样跌跌撞撞的弄懂了其中的原理,也让我自己成了一回计算机,
执行了一下这个程序。不过我真觉得自己模拟计算机执行代码很好。很能锻炼能力。

看看以前写的代码,心里还是挺有感触的。以前自己不怕死,不弄明白饭也不吃。
现在呢?我跟自己说想通了,不会就不会呗。锐气也就被磨掉了。
带着这样的想法,很久没有接触过编程了。昨天在群里被他们说成是“大牛”其实我
只是一个小菜鸟。

有个朋友说他以前是这个专业的,现在要重新拾起来。我也是这么想的,重新拾起来。
加油,大笨兔!!! :)

原文出自:http://www.dabentu.com