我是靠谱客的博主 大意雪碧,最近开发中收集的这篇文章主要介绍c++实现一个小型算术表达式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

/*************
输入表达式:
反复
读取一个操作数存到操作数数组中
读取一个运算符存到运算符数组中
如果运算符是=就跳出反复
计算:
在运算符数组中找优先级最低的运算符
从右向左找有没有+-
如果没有再从右向左找有没有*/
如果没有运算符,操作数数组第一个元素就是结果,计算完毕
以它为界把运算符数组分成两半
地址相减确定元素个数
同时把操作数数组也相应分成两半
计算左右两半的结果
再按这个运算符进行运算得到最后结果,计算完毕
输出:
*************/
#include <iostream>
using namespace std;
bool cal(double d[], char op[], int n, double* pVal);
bool cal(double* pVal);
bool cal(double lv, double rv, char op, double* pVal);
int main()
{
double val;
//输入并计算
bool ok=cal(&val);
//输出:
if(ok)
cout << val << endl;
else
cout << "无法计算" << endl;
}
bool cal(double* pVal)
{
//输入表达式:
double d[100];
char op[100];
int n=0;
//反复
for(;;){
//读取一个操作数存到操作数数组中
cin >> d[n];
if(!cin){
cin.clear();
char c;
cin >> c;
if(c!='(')
return false;
if(!cal(&d[n]))
return false;
}
//读取一个运算符存到运算符数组中
cin >> op[n];
//如果运算符是=就跳出反复
if(op[n]=='='||op[n]==')')
break;
n++;
}
//计算:
return cal(d,op,n+1,pVal);
}
//计算
bool cal(double d[], char op[], int n, double* pVal)
{
//如果没有运算符,操作数数组第一个元素就是结果,计算完毕
if(n==1) {
*pVal = d[0];
return true;
}
//在运算符数组中找优先级最低的运算符
int i;
//从右向左找有没有+-
for(i=n-2; i>=0&&op[i]!='+'&&op[i]!='-'; i--){}
//如果没有再从右向左找有没有*/
if(i<0) i=n-2;
//以它为界把运算符数组分成两半,同时把操作数数组也相应分成两半,计算左右两半的结果
double lv, rv;
if(!cal(d,op,i+1,&lv)||!cal(d+i+1,op+i+1,n-(i+1),&rv))
return false;
//再按这个运算符进行运算得到最后结果,计算完毕
return cal(lv,rv,op[i], pVal);
}
bool cal(double lv, double rv, char op, double* pVal)
{
switch(op){
case '+':
*pVal=lv+rv;
return true;
case '-':
*pVal=lv-rv;
return true;
case '*':
*pVal=lv*rv;
return true;
case '/':
if(rv==0)
return false;
*pVal=lv/rv;
return true;
}
return false;
}

计算结果如下:

最后

以上就是大意雪碧为你收集整理的c++实现一个小型算术表达式的全部内容,希望文章能够帮你解决c++实现一个小型算术表达式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部