33,311
社区成员
发帖
与我相关
我的任务
分享
#ifndef POLY_H
#define POLY_H
#include<iostream>
using namespace std;
struct term
{
double coef;
int exp;
};
class poly
{
public:
poly(const int n);
poly(const poly& p);
poly();
~poly();
friend poly operator +(const poly p1, const poly p2);
friend poly operator -(const poly p1, const poly p2);
friend poly operator *(const poly p1, const poly p2);
void operator = (const poly p);
double result(double x);
void getCoef();
void setCoef();
private:
int max;
term* expression;
};
#endif
#include<iostream>
#include<cmath>
#include"poly.h"
using namespace std;
poly::poly(const int n)
{
max = n;
expression = new term [max];
}
poly::poly()
{
max = 1;
expression = new term [max];
expression[0].coef=expression[0].exp =0;
}
void poly::operator =(const poly p)
{
int i = 0;
max = p.max;
while(i<max)
{
expression[i].coef = p.expression[i].coef;
expression[i].exp = p.expression[i].exp;
i++;
}
}
poly::poly(const poly &p)
{
max = p.max;
expression = new term [max];
int i = 0;
while(i < max)
{
expression[i].coef = p.expression[i].coef;
expression[i].exp = p.expression[i].exp;
i++;
}
}
poly::~poly()
{
delete [] expression;
}
poly operator +(const poly p1, const poly p2)
{
int n;
if(p1.max>p2.max)
n = p1.max;
else
n = p2.max;
poly temp(n);
int i = 0,j = 0,t =0;
while(t <temp.max)
{
if(p1.expression[i].exp < p2.expression[j].exp)
{
temp.expression[t].coef = p2.expression[j].coef;
temp.expression[t].coef = p2.expression[j].coef;
t++;
j++;
}
else if(p1.expression[i].exp> p2.expression[j].exp)
{
temp.expression[t].coef = p1.expression[i].coef;
temp.expression[t].exp = p1.expression[i].exp;
t++;
i++;
}
else
{
temp.expression[t].coef = p1.expression[i].coef+p2.expression[j].coef;
temp.expression[t].exp = p1.expression[i].exp+p2.expression[j].exp;
t++;
i++;
j++;
}
}
while(i <p1.max)
{
temp.expression[t].coef = p1.expression[i].coef;
temp.expression[t].exp = p1.expression[i].exp;
t++;
i++;
}
while(j<p2.max)
{
temp.expression[t].coef = p2.expression[j].coef;
temp.expression[t].exp = p2.expression[j].exp;
t++;
j++;
}
return temp;
}
poly operator -(const poly p1, const poly p2)
{
int n;
if(p1.max>p2.max)
n = p1.max;
else
n = p2.max;
poly temp(n);
int i = 0,j = 0,t =0;
while(t <temp.max)
{
if(p1.expression[i].exp < p2.expression[j].exp)
{
temp.expression[t].coef = -p2.expression[j].coef;
temp.expression[t].exp = -p2.expression[j].exp;
t++;
j++;
}
else if(p1.expression[i].exp> p2.expression[j].exp)
{
temp.expression[t].coef = p1.expression[i].coef;
temp.expression[t].exp = p1.expression[i].exp;
t++;
i++;
}
else
{
temp.expression[t].coef = p1.expression[i].coef-p2.expression[j].coef;
temp.expression[t].exp = p1.expression[i].exp-p2.expression[j].exp;
t++;
i++;
j++;
}
}
while(i <p1.max)
{
temp.expression[t].coef = p1.expression[i].coef;
temp.expression[t].exp = p1.expression[i].exp;
t++;
i++;
}
while(j<p2.max)
{
temp.expression[t].coef = -p2.expression[j].coef;
temp.expression[t].exp = -p2.expression[j].exp;
t++;
j++;
}
return temp;
}
/*poly operator *(const poly p1, const poly p2);*/
double poly::result(double x)
{
double sum = 0;
int i = 0;
while(i<max)
{
sum += pow(x, expression[i++].exp);
}
return sum;
}
void poly::getCoef()
{
int i = 0;
while(i<max)
{
cout<<expression[i++].coef<< " ";
}
cout<<endl;
}
void poly::setCoef()
{
int i = 0;
while(i<max)
{
cin>>expression[i++].coef;
}
}
#include<iostream>
#include"poly.h"
using namespace std;
int main()
{
poly p1(5);
p1.setCoef();
poly p2(p1);
p1.getCoef();
p2.getCoef();
poly p3;
p3 = p1+p2;
p3.getCoef();
return 0;
}
poly::poly()
{
max = 1;//这里才一个空间
expression = new term [max];
expression[0].coef=expression[0].exp =0;
}
int main()
{
poly p1(5);
p1.setCoef();
poly p2(p1);
p1.getCoef();
p2.getCoef();
poly p3;//调用构造函数poly(),或改为poly p3(5),或修改无参构造函数poly()
p3 = p1+p2;//相加后空间越界了
p3.getCoef();
return 0;
}
poly::~poly()
{
//delete [] expression;注释掉
}