用C++语言设计一个简单计算器。用户输入四则运算表达式,程序输出正确结果(有追加)
设计一个简单计算器。用户输入四则运算表达式,程序输出正确结果。当表达式中数据格式或运算符输入错误,程序给出错误信息。要求:(1)表达式的左、右操作数可以为整数或实数。(2...
设计一个简单计算器。用户输入四则运算表达式,程序输出正确结果。当表达式中数据格式或运算符输入错误,程序给出错误信息。要求:
(1)表达式的左、右操作数可以为整数或实数。
(2)运算符限制为+,-,*,/
(3)输入表达式允许有前导空格,允许在运算符前后嵌入空格。
(4)检测表达式由以下函数完成:
void check(char *input, int &a, double &y, int &op, char * &err);
其中参数意义如下:
input 输入表达式的字符串。
x 返回表达式的左操作数转换结果数值。此题为简单起见,把数据统一转换成double类型。
y 返回表达式的右操作数转换结果数值。
op 返回对运算式的判断结果。若输入表达式左、右操作数和运算符都正确,则返回值为1、2、3、4,分别表示做+、-、*、/运算。若返回-1,表示左操作数错;若返回-2,表示右操作数错;若返回-3,表示操作符错。
err 返回显示错误信息的字符串。 展开
(1)表达式的左、右操作数可以为整数或实数。
(2)运算符限制为+,-,*,/
(3)输入表达式允许有前导空格,允许在运算符前后嵌入空格。
(4)检测表达式由以下函数完成:
void check(char *input, int &a, double &y, int &op, char * &err);
其中参数意义如下:
input 输入表达式的字符串。
x 返回表达式的左操作数转换结果数值。此题为简单起见,把数据统一转换成double类型。
y 返回表达式的右操作数转换结果数值。
op 返回对运算式的判断结果。若输入表达式左、右操作数和运算符都正确,则返回值为1、2、3、4,分别表示做+、-、*、/运算。若返回-1,表示左操作数错;若返回-2,表示右操作数错;若返回-3,表示操作符错。
err 返回显示错误信息的字符串。 展开
展开全部
已经过测试,完全满足你的要求哈。
#include "iostream"
#include "string"
using namespace std;
void check(char *input, double &x, double &y, int &op, char * &err);
double chage(char *ch);
int main()
{
double x,y;
int op;
char input[40],*err;
double result;
gets(input);
check(input,x,y,op,err);
if(op<0)
{cout<<err<<endl; return 0;}
switch(op)
{
case 1: result=x+y; break;
case 2: result=x-y; break;
case 3: result=x*y; break;
case 4: result=x/y; break;
}
cout<<input<<"="<<result<<endl;
return 0;
}
void check(char * input, double &x, double &y, int &op, char * &err)
{
int i=0,j=0,k;
int point=0;
char leftx[20],righty[20];
while(input[i]==' ') i++;
j=i;
if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9'))
{err="左操作数错误!"; op=-1; return;}
while((input[j]>='0'&&input[j]<='9')||input[j]=='.')
{
if(input[j]=='.') point++;
if(point>1) {err="左操作数错误!"; op=-1; return;}
j++;
}
k=0;
while(i<j) leftx[k++]=input[i++];
leftx[k]='\0';
x=chage(leftx);
while(input[i]==' ') i++;
switch(input[i])
{
case '+': op=1; i++; break;
case '-': op=2; i++; break;
case '*': op=3; i++; break;
case '/': op=4; i++; break;
default: op=-3;
err="运算符错误!";
return;
}
while(input[i]==' ') i++;
j=i;
point=0;
if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9'))
{err="右操作数错误!"; op=-2; return;}
while((input[j]>='0'&&input[j]<='9')||input[j]=='.')
{
if(input[j]=='.') point++;
if(point>1) {err="右操作数错误!"; op=-2; return;}
j++;
}
k=0;
while(i<j) righty[k++]=input[i++];
righty[k]='\0';
y=chage(righty);
if(op==4&&y==0)
{err="除数不能为0"; op=-2; return;}
}
double chage(char *ch)
{
int i=0,j,f=-1;
double result=0,wre;
while(ch[i])
{
if(ch[i]=='.') break;
i++;
}
f=i;
for(i=f-1;i>=0;i--)
{
wre=1;
j=0;
while(j<f-i-1) {wre*=10; j++;}
result+=(ch[i]-'0')*wre;
}
for(i=f+1;ch[f]&&ch[i];i++)
{
wre=1;
j=0;
while(j<i-f) {wre*=0.1; j++;}
result+=(ch[i]-'0')*wre;
}
return result;
}
#include "iostream"
#include "string"
using namespace std;
void check(char *input, double &x, double &y, int &op, char * &err);
double chage(char *ch);
int main()
{
double x,y;
int op;
char input[40],*err;
double result;
gets(input);
check(input,x,y,op,err);
if(op<0)
{cout<<err<<endl; return 0;}
switch(op)
{
case 1: result=x+y; break;
case 2: result=x-y; break;
case 3: result=x*y; break;
case 4: result=x/y; break;
}
cout<<input<<"="<<result<<endl;
return 0;
}
void check(char * input, double &x, double &y, int &op, char * &err)
{
int i=0,j=0,k;
int point=0;
char leftx[20],righty[20];
while(input[i]==' ') i++;
j=i;
if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9'))
{err="左操作数错误!"; op=-1; return;}
while((input[j]>='0'&&input[j]<='9')||input[j]=='.')
{
if(input[j]=='.') point++;
if(point>1) {err="左操作数错误!"; op=-1; return;}
j++;
}
k=0;
while(i<j) leftx[k++]=input[i++];
leftx[k]='\0';
x=chage(leftx);
while(input[i]==' ') i++;
switch(input[i])
{
case '+': op=1; i++; break;
case '-': op=2; i++; break;
case '*': op=3; i++; break;
case '/': op=4; i++; break;
default: op=-3;
err="运算符错误!";
return;
}
while(input[i]==' ') i++;
j=i;
point=0;
if(input[j]=='0'&&(input[j+1]>='0'&&input[j+1]<='9'))
{err="右操作数错误!"; op=-2; return;}
while((input[j]>='0'&&input[j]<='9')||input[j]=='.')
{
if(input[j]=='.') point++;
if(point>1) {err="右操作数错误!"; op=-2; return;}
j++;
}
k=0;
while(i<j) righty[k++]=input[i++];
righty[k]='\0';
y=chage(righty);
if(op==4&&y==0)
{err="除数不能为0"; op=-2; return;}
}
double chage(char *ch)
{
int i=0,j,f=-1;
double result=0,wre;
while(ch[i])
{
if(ch[i]=='.') break;
i++;
}
f=i;
for(i=f-1;i>=0;i--)
{
wre=1;
j=0;
while(j<f-i-1) {wre*=10; j++;}
result+=(ch[i]-'0')*wre;
}
for(i=f+1;ch[f]&&ch[i];i++)
{
wre=1;
j=0;
while(j<i-f) {wre*=0.1; j++;}
result+=(ch[i]-'0')*wre;
}
return result;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询