我这里有源代码,VC++、MFC的,可以直接输入 abs(sqr(log(10*sin(pi/2)))-8)^2这样表达式,传不上来,可以给我发邮件或百度HI联系我
我刚刚做完这个课程设计,给你吧
#include
#include
#include
#include
#include
#include
using namespace std;
//从a[start]开始到下一个计算符号之间的数字,返回该数字,并将start改成end+1
float find_num(char a[],int n,int& start,int& end)
{
int i,j=0,flag=0;
char num[10]={0};
float a_num;
for(i=start;i
if((a[i]<'0'||a[i]>'9')&&a[i]!='.')//a[i]不是数字
{
end=i-1;//end是最后一个数字的下标
start=i-1;//
//if(i==n)
//start=n;
break;
}
else
{
num[j]=a[i];
j++;//此时的num[j]为空
}
}
a_num=atof(num);
return a_num;
}
//Calc计算,
float calc(char a[],int n,int& exception)
{
int i=0,j=0,k=0,end;
float result=0,topnum=0,sign=0;
exception=0;//无异常
stack
for(i=0;i
switch(a[i])
{
case '+':if(sta.size()==1)sta.push(1);break;
case '-':if(sta.size()==1)sta.push(2);break;
case '*':if(sta.size()==1)sta.push(3);break;
case '/':if(sta.size()==1)sta.push(4);break;
case '^':if(sta.size()==1)sta.push(5);break;
default:
if(sta.size()==0)
{
result=find_num(a,n,i,end);
sta.push(result);
}
if(sta.size()==2)
{
topnum=find_num(a,n,i,end);//新数
sign=sta.top();sta.pop();
result=sta.top();sta.pop();
switch((int)sign)
{
case 1:result=result+topnum;sta.push(result);break;
case 2:result=result-topnum;sta.push(result);break;
case 3:result=result*topnum;sta.push(result);break;
case 4:if(topnum==0)
{
exception=1;
return 1.0f;
}
else
{
result=result/topnum;
sta.push(result);
}
break;
case 5:result=pow(result,topnum);sta.push(result);break;
default:break;
}
break;
}
}//switch
}
return result;
}
int main()
{
string st[100];
char str[100];
int i,j,n,tot=0,error[100]={0};
int end=0,start=0,exception=0;
float x[100];
//输入
cin>>tot;
for(i=0;i
cin>>st[i];
n=st[i].length();
for(j=0;j
str[j]=st[i][j];
}
x[i]=calc(str,n,exception);
if(exception==1)
{
error[i]=1;
}
}
cout<
for(i=0;i
if(error[i]==1)
{
cout<
}
cout<
return 0;
}
如果有偿我就帮你写了。
我只学过c