c++写一个简单的计算器程序,反复让用户输入只有一个运算(+-*/)的表达式,输出计
展开全部
程序如下:
(注:鉴于判断方式不能有负数操作数,你自己加个循环即可反复计算)
#include<iostream>
using namespace std;
double compute(double,double,char); //用于计算
double GetNum1(char*,char*); //提取第一个操作数
double GetNum2(char*); //提取第二个操作数
int main(){
double number1,number2,result;
char ch,*pCh=NULL;
char s[100];
cout<<"请输入表达式:"<<endl;
cin>>s;
for(int i=0;i<strlen(s);i++){
ch=*(s+i);
if('+'==ch||'-'==ch||'*'==ch||'/'==ch){
pCh=s+i; //记录运算符的位置
break;
}
}
if(!pCh){
cout<<"没有检测到运算符!"<<endl;
return 1;
}
number1=GetNum1(s,pCh);
number2=GetNum2(pCh);
if(!number2&&'/'==ch){
cout<<"除数不能为零!"<<endl;
return 1;
}
result=compute(number1,number2,ch);
cout<<"结果是:"<<result<<endl;
return 0;
}
double compute(double num1,double num2,char c){
switch(c){
case '+':
return num1+num2;
break;
case '-':
return num1-num2;
break;
case '*':
return num1*num2;
break;
case '/':
if(num2!=0)
return num1/num2;
else
return 0;
break;
default:
return 0;
break;
}
}
double GetNum1(char*s,char* p){
char r[100];
int i=0;
for(i=0;s+i<p;i++){
r[i]=s[i];
}
r[i]='\0';
return atof(r);
}
double GetNum2(char* p){
char r[100];
strcpy(r,p+1);
return atof(r);
}
(注:鉴于判断方式不能有负数操作数,你自己加个循环即可反复计算)
#include<iostream>
using namespace std;
double compute(double,double,char); //用于计算
double GetNum1(char*,char*); //提取第一个操作数
double GetNum2(char*); //提取第二个操作数
int main(){
double number1,number2,result;
char ch,*pCh=NULL;
char s[100];
cout<<"请输入表达式:"<<endl;
cin>>s;
for(int i=0;i<strlen(s);i++){
ch=*(s+i);
if('+'==ch||'-'==ch||'*'==ch||'/'==ch){
pCh=s+i; //记录运算符的位置
break;
}
}
if(!pCh){
cout<<"没有检测到运算符!"<<endl;
return 1;
}
number1=GetNum1(s,pCh);
number2=GetNum2(pCh);
if(!number2&&'/'==ch){
cout<<"除数不能为零!"<<endl;
return 1;
}
result=compute(number1,number2,ch);
cout<<"结果是:"<<result<<endl;
return 0;
}
double compute(double num1,double num2,char c){
switch(c){
case '+':
return num1+num2;
break;
case '-':
return num1-num2;
break;
case '*':
return num1*num2;
break;
case '/':
if(num2!=0)
return num1/num2;
else
return 0;
break;
default:
return 0;
break;
}
}
double GetNum1(char*s,char* p){
char r[100];
int i=0;
for(i=0;s+i<p;i++){
r[i]=s[i];
}
r[i]='\0';
return atof(r);
}
double GetNum2(char* p){
char r[100];
strcpy(r,p+1);
return atof(r);
}
展开全部
用pascal行么?
var a,b:longint;
s:string;
begin
readln(s);
write(s,'=');
if pos('+',s)<>0 then begin val(copy(s,1,pos('+',s)-1),a); val(copy(s,pos('+',s)+1,length(s)),b); write(a+b); end else
if pos('-',s)<>0 then begin val(copy(s,1,pos('-',s)-1),a); val(copy(s,pos('-',s)+1,length(s)),b); write(a-b); end else
if pos('*',s)<>0 then begin val(copy(s,1,pos('*',s)-1),a); val(copy(s,pos('*',s)+1,length(s)),b); write(a*b); end else
if pos('/',s)<>0 then begin val(copy(s,1,pos('/',s)-1),a); val(copy(s,pos('/',s)+1,length(s)),b); if b=0 then write('error b=0') else write(a/b); end else write('error not + or - or * or /');
readn;
end.
var a,b:longint;
s:string;
begin
readln(s);
write(s,'=');
if pos('+',s)<>0 then begin val(copy(s,1,pos('+',s)-1),a); val(copy(s,pos('+',s)+1,length(s)),b); write(a+b); end else
if pos('-',s)<>0 then begin val(copy(s,1,pos('-',s)-1),a); val(copy(s,pos('-',s)+1,length(s)),b); write(a-b); end else
if pos('*',s)<>0 then begin val(copy(s,1,pos('*',s)-1),a); val(copy(s,pos('*',s)+1,length(s)),b); write(a*b); end else
if pos('/',s)<>0 then begin val(copy(s,1,pos('/',s)-1),a); val(copy(s,pos('/',s)+1,length(s)),b); if b=0 then write('error b=0') else write(a/b); end else write('error not + or - or * or /');
readn;
end.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是模拟计算器?计算器是没有除法指令的。
追问
能 可以算就行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询