为了账号安全,请及时绑定邮箱和手机立即绑定

求使用单运算符表达式实现计算的功能?该怎么操作?

求使用单运算符表达式实现计算的功能?该怎么操作?

largeQ 2022-05-12 13:11:09
1)具备整型数据、浮点型数据的算术(加、减、乘、除)运算功能。依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数,然后输出结果。结果可以作为下一个运算的第一运算数。按‘C’清屏,按‘R’返回 菜单。例如:输入:2+5输出:72)实现单运算符表达式计算的功能。输入的操作数可以包含整数或浮点数。输入表达式如下:例如:输入:2+5输出:7
查看完整描述

3 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

#include <windows.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;

const char NUM[]={'0','1','2','3','4','5','6','7','8','9','.'};
const char OPERATION[]={'+','-','*','/'};
const double PI=3.14159265358979;
const double EE=2.71828182818281;

class Fun //处理系统数学函数的类
{
public:
Fun(string o,int t,double l=0.0,double r=0.0):op(o),type(t),lvalue(l),rvalue(r){}
static string FUN[];
double calc();
private:
int type; //666 0 1 sin90 2 3! 3 3C2
string op; //函数类型
double lvalue; //函数左边的值
double rvalue; //函数右边的值
static int FunNum;
};

int Fun::FunNum=8;
string Fun::FUN[]={"!","sin","cos","tan","log","ln","C","A","^"};
/*
函数说明:
1:log是以10为底的工程对数
2:ln 是以e为底的自然对数
3:C 计算组合数 输入规则 如计算 3取2的组合 输入表达式 3C2
4:A 计算排列数 输入规则 如计算 3取2的排列 输入表达式 3A2
5:! 计算阶乘
6:^ x的y次方 输入 x^y
*/

int factorial(int n) //阶乘函数
{
int i,s=1;
for(i=1;i<=n;i++)
s*=i;
return s;
}

int C(int a,int b)
{
return factorial(a)/(factorial(b)*factorial(a-b));
}

int A(int a,int b)
{
return factorial(a)/factorial(b);
}

double Fun::calc() //计算系统函数的值
{
if(type==0)
return lvalue;
else
{
if(op=="!")
return factorial(lvalue);
if(op=="sin")
return sin(rvalue/180*PI);
if(op=="cos")
return cos(rvalue/180*PI);
if(op=="tan")
return tan(rvalue/180*PI);
if(op=="log")
return log10(rvalue);
if(op=="ln")
return log10(rvalue)/log10(EE);
if(op=="C")
return C(lvalue,rvalue);
if(op=="A")
return A(lvalue,rvalue);
if(op=="^")
return pow(lvalue,rvalue);
else
{
string err="暂时没有函数"+op;
MessageBox(NULL,err.c_str(),"错误",MB_OK);
return 0;
}
}
}

struct Unit //双向链表保存运算单元
{
Unit(int p,char o,string c,double v,int t,Unit * pr=NULL,Unit * n=NULL)
:PRI(p),Operation(o),Code(c),value(v),Type(t),Pre(pr),Next(n){}
int PRI; //优先级

char Operation; //操作符
string Code; //原始代码
double value; //数据



查看完整回答
反对 回复 2022-05-16
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

#include "TypeDef.h"
#pragma once

class Error
{ //错误类
error_msg err;
public:
Error(error_msg e) { err = e; }
error_msg GetError() { return err; }
};

class Calculator;
class Token
{
friend class Calculator;
public:
int mark;//mark=1操作符,mark=2浮点数
union {Token_Item ttitem;double dvalue;};
const Token& operator = (const Token&);
};

class Calculator
{
private:
char expression[MAX_LENGTH+1];
int exp_length;
Token tempexpression[MAX_LENGTH+1];
int telength;
Token postexpression[MAX_LENGTH+1];
int pelength;
Token temp;

double dresult;
int IsZero(double d);//判断是否为0
int GetIcp(Token_Item& ti) const;//栈内优先级
int GetIsp(Token_Item& ti) const;//栈外优先级
int GetOpeNum(Token_Item& ti) const;//返回操作数的个数
int IsDigital(char t);//是不是数字
void PreScan();//预扫描,检查括号匹配情况
void GetPostFix();//后缀表达式
void Eval();//表达式计算
public:
Calculator():exp_length(0) {};
void CalValue(const char*);//根据输入的表达式计算其值
void ErrorReport(Error e);//错误报告
double GetResult(){return dresult;};//返回计算结果
};



查看完整回答
反对 回复 2022-05-16
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

1、
#include <iostream>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
float a, b;
char op;

cout << "依次输入第一个运算数、运算符(+,-,*,/)、第二个运算数"<< endl;
cin >> a >> op >> b;

if (b == 0)
{
cout << "第二个数不能是0" <<endl;
exit(-1);
}

switch(op)
{
case '+' :
cout << a + b << endl;
break;
case '-' :
cout << a - b << endl;
break;
case '*' :
cout << a * b << endl;
break;
case '/' :
cout << a / b << endl;
break;
}

return 0;
}



查看完整回答
反对 回复 2022-05-16
  • 3 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号