首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言计算器,该如何解决

2013-07-04 
C语言计算器要求 是自己输入算式,要考虑括号,可以实现小数的加减乘除和幂运算下面这个是老师的示例,只能实

C语言计算器
要求 是自己输入算式,要考虑括号,可以实现小数的加减乘除和幂运算
下面这个是老师的示例,只能实现整数并且不能考虑括号
 
望大神赐教
 
奉献出100的分数 


#include <stdio.h>
#define smax 10
#define emax 255
int power(int x,int y)
{
 int t,s=1;
 for (t=0; t<x;t++)
  s=s*y;
 return s;
}
int calc(char op, int x, int y)
{
 int num;
 if (op=='+')
  num=x+y;
 else if (op=='-')
  num=y-x;
 else if (op=='*')
  num=y*x;
 else if (op=='/')
  num=y/x;
 else if (op=='^')
  num=power(x,y);
 return num;
}
int rank(char op)
{
 int r;
 if (op=='+') r=0;
 else if (op=='-') r=1;
 else if (op=='*') r=2;
 else if (op=='/') r=2;
 else if (op=='^') r=3;
 return r;
}
void main()
{
 //栈
 int s[smax];
 char op[smax];
 int top=0;
 int otop=0;
 //其他变量
 int i,num,x,y;
 int ans=0;
 int rtop,rinput;
 char o;
 //表达式存储
 char ex[emax];
 
 //实现计算器的功能
 //输入表达式
 scanf("%s", ex);
 i=0;
 num=0;
 //读出每个字符
 s[0]=0;
 top=1;
 op[0]='+';
 otop=1;
 while (1)
 {
  //分解每个数和符号
  if (ex[i] >=48 && ex[i]<58)
  {
   //读到数字
   num=num*10+ex[i]-48;
  }
  else
  {
   //前一个数字已经输入完毕
   //数字入栈
   s[top]=num;
   top=top+1;
   num=0;
   if (ex[i]==0) 
    break;
   else
   {
    //判断符号优先级
    //如果优先级低于当前栈顶的符号的优先级,计算栈顶符号对应的运算
    rinput=rank(ex[i]);
    //符号栈顶元素出栈
    otop=otop-1;
    o=op[otop];
    rtop=rank(o);
    
    while (rtop>=rinput && rtop!=0)
    {
     //计算
     //数字出战
     top=top-1;


     x=s[top];
     top=top-1;
     y=s[top];
     s[top]=calc(o,x,y);
     top=top+1;
     //读出下一个栈顶符号
     otop=otop-1;
     o=op[otop];
     if (o=='+') 
      rtop=0;
     else 
      if (o=='-') rtop=1; 
    }
    //原先的放回
    op[otop]=o;
    otop=otop+1;
    //新的符号入栈
    op[otop]=ex[i];
    otop=otop+1;
   }
  }
  i=i+1;
 }
 while (otop!=0)
 {
  //数字出战
  top=top-1;
  x=s[top];
  top=top-1;
  y=s[top];
 
  //符号出栈
  otop=otop-1;
  o=op[otop];
  s[top]=calc(o,x,y);
  top=top+1;
 }
 ans= s[0];
 //输出结果
 printf("%s=%d\n",ex,ans);
}


[解决办法]
坛子里搜搜,赵老师贴过
[解决办法]
C++ 之父 <<C++程序设计原理与实践>> 专门讲了计算器的实现.
[解决办法]
引用:
坛子里搜搜,赵老师贴过



小数部分和括号是否也要用到队列、栈、堆的知识?赵老师的计算器不记得有木有这些功能了。

热点排行