问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一元多项式简单计算器

发布网友 发布时间:2022-05-03 02:13

我来回答

1个回答

热心网友 时间:2022-07-01 12:31

#include <iostream>
#include <cstdlib>
#include <cctype>
using namespace std;

void eatspaces(char* str);
double expr(char* str);
double term(char* str,int& index);
double number(char* str,int& index);
char* extract(char* str, int& index);

const int MAX = 80;

int main()
{
char buffer[MAX] = {0};
cout<< endl
<< "欢迎使用计算器"<<endl
<<"请输入表达式进行计算或者输入空白行退出"<<endl;
for(;;)
{
cin.getline(buffer,sizeof buffer);
eatspaces(buffer);

if(!buffer[0])
return 0;

cout<<"\t="<<expr(buffer)
<<endl<<endl;
}
}

void eatspaces(char* str)
{
int i = 0;
int j = 0;

while((*(str + i)= *(str + j++)) !='\0')
if(*(str + i) != ' ')
i++;
return;
}

double expr(char* str)
{
double value = 0.0;
int index = 0;

value = term(str,index);

for(;;)
{
switch(*(str + index++))
{
case '\0':
return value;

case '+':
value += term(str,index);
break;

case '-':
value -= term(str,index);
break;

default:
cout<<endl
<<"输入错误"
<<endl;
exit(1);
}
}
}

double term(char* str, int& index)
{
double value = 0.0;

value = number(str, index);

while((*(str + index) == '*')||(*(str + index) == '/'))
{
if(*(str + index) == '*')
value *= number(str, ++index);
if(*(str + index) == '/')
value /= number(str,++index);
}
return value;
}

double number(char* str,int& index)
{
double value = 0.0;

if(*(str + index) == '(')
{
char* psubstr = 0;
psubstr = extract(str,++index);
value = expr(psubstr);
delete[]psubstr;
return value;
}

while(isdigit(*(str + index)))
value = 10*value + (*(str + index++) - 48);

if(*(str + index)!= '.')
return value;

double factor = 1.0;
while(isdigit(*(str + (++index))))
{
factor = value + (*(str + index) - 48)*factor;
}

return value;
}

char* extract(char* str, int& index)
{
char buffer[MAX];
char* pstr = 0;
int numL = 0;
int bufindex = index;

do
{
buffer[index - bufindex] = *(str + index);
switch(buffer[index - bufindex])
{
case ')':
if(numL == 0)
{
buffer[index - bufindex] = '\0';
++index;
pstr = new char[index - bufindex];
if(!pstr)
{
cout<<"输入错误"<<endl;
exit(1);
}
strcpy_s(pstr,index-bufindex,buffer);
return pstr;
}
else
numL--;
break;
case '(':
numL++;

break;
}
}while(*(str + index++) != '\0');

cout<<"输入错误"<<endl;
exit(1);
return pstr;
}

----------------------------------
本人也是学生,不是高手,大家共同学习,共同进步。回答可能不是完全正确,希望原谅。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
齿瓣延胡索选方 延胡索粉是与开水服用还是与中药服用 延胡索细粉一次吃多少 青少年为什么会得抑郁症 为什么越来越多的青少年抑郁了? 游戏账号重新注册了一个,以前的老号为什么就没有了? 老爸做60大寿,要用手机发信息接朋友呷酒怎么说 老爸做60大寿,要用手机发信息接朋友呷酒怎么写 老爸60大寿请朋友来呷酒用短信通知发些什么 雷克萨斯es200和300的区别 雷克萨斯es200和300的区别哪个好 设计一个一元多项式简单的计算器(C语言) 能用U盘播放MP4吗 u盘上能装啥播放器? 老百姓念雨宝陀罗尼心咒算盗法吗 U盘能放播放器吗? 雨宝陀罗尼心咒怎么读音/雨宝陀罗尼心咒怎么读音 雨宝陀罗尼心咒的正确读音是什么,目前就是驮隶和达咧不知道哪个对,应该怎么读 雨宝陀罗尼心咒怎么念才是正确发音 怎么念雨宝陀罗尼咒心真言/怎么念雨宝陀罗尼咒心真言 室内容易成活的绿植有什么 怎么念雨宝陀罗尼心咒/怎么念雨宝陀罗尼心咒 适合放室内的绿植有哪些 为什么重新下载QQ厘米秀没有了 药物流产,没流干净是什么反应 药流几天后小腹痛是不是没有流干净 想给男友起个特别的外号 ,叫什么好呢 大家有什么好听点的外号吗? 药流没流干净肚子疼痛怎么办 药流后第十八天没干净,肚子也没感觉不舒服 求给男朋友特殊的外号? 药流没有流干净会有什么具体表现??肚子会疼吗?? - 信息提示 有多项式合并和因式分解的计算器没 编写一元多项式的计算器程序 基本内容:设计一个一元稀疏多项式简单计算器。输入并建立多项式、按指数降序输出多项式、多项式相加、多 windows PE 是什么系统 计算器casio fx-991ES如何展开二项式 谁能给个一元多项式的计算器的程序? 多项式的化简(求详解) 求c语言课程设计【一元多项式简单的计算器】 多项式化简求值的方法 用C语言设计一个一元多项式简单的计算器 关于适用mathematica化简多项式,求教简单快速的方法 计算器能化简代数式吗 (数学题)多项式的化简求值 卫生间门窗关好,排气扇后叶打不开什么原因 基金定投知识详解:什么是基金定投 排风扇打开外面圆门打不开 总是梦到被人喜欢是什么意思? 基金定投知识 为什么我总是梦见有那么多人喜欢我 而且不是同一个 我都结婚了