算式计算器C++实现代码(顺序栈结构 增加了一些功能 比如三角函数 求指教)

数据结构课上学习栈结构的时候 根据老师的实验要求用VC++6.0平台写了这段代码除了加减乘除乘方,稍微自己加了一些好玩的小功能,比如计算阶乘"!",三角函数,比如正弦 "sin",对数"log"与"ln",常量pi(圆周率),自然对数底数"e"也加进去了,算是初步模仿中学用的科学计算器吧~~~~可惜有一个小缺陷,就是减号与负号没法区别T_T 只好投机取巧用"-"表示减号,用下划线"_"表示负号^_^用我们老师的话说,我这太不地道了……有没有哪位高手可以告诉我怎么样可以变“地道”的????跪求教。可能还有好多bug没发现呢~~大家多多找茬哦~~谢谢~~~~

 

算式计算器.cpp

 

#include<iostream>
#include<cmath>
#include<string>
#include<iomanip>
using namespace std;

void menu();//位于calculate函数后面的菜单函数声明
void guide();//位于主函数后面的指导函数的声明

double D_Operate(double x,char op,double y)//双目运算符的运算定义
{
 double a;//计算结果
 switch(op)
 {
  case'+': a=x+y;break;
  case'-': a=x-y;break;
  case'*': a=x*y;break;
  case'/': a=x/y;break;
  case'^': a=pow(x,y);break;//幂运算包括乘方和开方
 }//因为都是利用double进行运算 因此不定义取模运算
 return a;
}

double S_Operate(char op,double x)//前缀单目运算符的运算定义
{
 double a;//计算结果
 switch(op)
 {
  case's': a=sin(x);break;
  case'c': a=cos(x);break;
  case't': a=tan(x);break;
  case'l': a=log10(x);break;//以10为底的对数
  case'n': a=log(x);break;//以e(2.718281828)为底的对数
  case'_': a=-x;break;//取负用下划线代替负号 定义为一元运算
 }
 return a;
}

char Precede(char op1,char op2) //判断符号的优先级 op1在返回的结果符的左边 op2在右边
//用于判定运算符的优先级 以决定是把运算符压栈 还是把栈内的运算符弹出来进行计算
{
  if(((op1=='+'||op1=='-')&&(op2=='+'||op2=='-'||op2==')'||op2=='='))||/
   ((op1=='*'||op1=='/')&&(op2=='+'||op2=='-'||op2=='*'||op2=='/'||op2==')'||op2=='='))/
   ||(op1=='^'&&(op2=='+'||op2=='-'||op2=='*'||op2=='/'||op2==')'||op2=='='||op2=='s'||op2=='c'||op2=='t'||op2=='_'||op2=='l'||op2=='n'))/
   ||((op1=='_'||op1=='s'||op1=='c'||op1=='t'||op1=='l'||op1=='n')&&(op2=='+'||op2=='-'||op2=='*'||op2=='/'||op2==')'||op2=='='||op2=='s'||op2=='c'||op2=='t'||op2=='_'||op2=='l'||op2=='n')))
  return '>';//上述情况下 栈顶运算符优先级高于待定运算符 需弹栈
  if((op1=='('&&op2==')')||(op1=='='&&op2=='='))
  return '=';
  else
     return '<';
}

int illegal_char(string s,int i)//非法输入字符判定函数
{
 int j=0;
 while(j<i)
 {
  if(s[j]>='0'&&s[j]<='9')
   j++;
  
  else if(s[j]=='+'||s[j]=='-'||s[j]=='*'||s[j]=='/'||s[j]&

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值