一个关于C++的问题——用链表实现多项式的加法
怎样用链表实现多项式的加法,请把代码发来看看,本人到目前为止只学了10周,要我看得懂的,最好不要出现模板啊,类啊之类的东西,请大家帮帮忙啊!!我的代码——http://u...
怎样用链表实现多项式的加法,请把代码发来看看,本人到目前为止只学了10周,要我看得懂的,最好不要出现模板啊,类啊之类的东西,请大家帮帮忙啊!!
我的代码——http://user.qzone.qq.com/546488173/blog/1218804831
大家帮帮忙,找找是哪里错了啊,感激不尽!!!!!!!!! 展开
我的代码——http://user.qzone.qq.com/546488173/blog/1218804831
大家帮帮忙,找找是哪里错了啊,感激不尽!!!!!!!!! 展开
2个回答
展开全部
/* 多项式加法和乘法示例 */
#include <list>
#include <iostream>
#include <cassert>
using namespace std;
//定义多项式的项类
class term {
public:
int coef; //多项式系数
int exp; //多项式指数
//初始化项的系数和指数
term( int c=0,int e=0):coef(c),exp(e){}
};
//定义多项式类
class PolyArith {
private:
list<term> m_poly_list_first; //存储第一个多项式
list<term> m_poly_list_second; //存储第二个多项式
list<term> m_poly_list_result; //用以存储运算结果
//多项式私有成员函数,用以乘法时的调用
list<term> Poly_add(list<term>&poly_list_first,\
list<term>&poly_list_second)
{
list<term> poly_list_result; //用以存储运算结果
list<term>::iterator iter_first = poly_list_first.begin();
list<term>::iterator iter_second = poly_list_second.begin();
//该while循环针对两个链表迭代器都没有指到结尾的情形
while(iter_first != poly_list_first.end()&&\
iter_second != poly_list_second.end())
{
term t_temp;
term t_first = (term)*iter_first;
term t_second = (term)*iter_second;
if(t_first.exp>t_second.exp)
{
poly_list_result.push_back(t_first);
iter_first++;
}
else if(t_second.exp>t_first.exp)
{
poly_list_result.push_back(t_second);
iter_second++;
}
else
{
t_temp.coef=t_first.coef+t_second.coef;
t_temp.exp=t_first.coef;
poly_list_result.push_back(t_temp);
iter_first++;
iter_second++;
}
}
//该for循环针对第一个多项式的迭代器没有指到结尾
//第二个指到结尾的情形
for(;iter_first != poly_list_first.end();iter_first++)
{
poly_list_result.push_back(*iter_first);
}
//该for循环针对第二个多项式的迭代器没有指到结尾
//第一个指到结尾的情形
for(;iter_second != poly_list_second.end();iter_second++)
{
poly_list_result.push_back(*iter_second);
}
return poly_list_result;
}
public:
//输入函数,用以输入多项式
void Poly_input()
{
int n;
cout<<"请输入第一个多项式的项数:"<<endl;
cin>>n;
cout<<"按降幂输入第一个多项式的每一项的系数和指数:";
cout<<endl;
for(int i=1;i<=n;i++)
{
term t_temp;
cout<<"请输入第"<<i <<"项系数和指数,以'enter'为界:";
cout<<endl;
cin>>t_temp.coef;
cin>>t_temp.exp;
m_poly_list_first.push_back(t_temp);
}
n = 0;
cout<<"请输入第二个多项式的项数:"<<endl;
cin>>n;
cout<<"按降幂输入第二个多项式的每一项的系数和指数:";
cout<<endl;
for(int j=1;j<=n;j++)
{
term t_temp;
cout<<"请输入第"<<j <<"项系数和指数,以'enter'为界:";
cout<<endl;
cin>>t_temp.coef;
cin>>t_temp.exp;
m_poly_list_second.push_back(t_temp);
}
}
//输出函数,用以输出多项式
void Poly_output()
{
//用以指向输出多项式的第一个元素
list<term>::iterator iter = m_poly_list_result.begin();
//输出多项式的每一项
for(;iter!=m_poly_list_result.end();)
{
term t_temp=*iter;
cout<<t_temp.coef<<"x^"<<t_temp.exp;
if(++iter!=m_poly_list_result.end())
cout<<"+";
}
cout<<endl;
}
//加法函数,其基本思想同上边的私有成员函数Poly_add()
//此处不带参数,多项式运算对象为私有数据成员
void Poly_add()
{
list<term>::iterator iter_first = m_poly_list_first.begin();
list<term>::iterator iter_second =\
m_poly_list_second.begin();
while(iter_first != m_poly_list_first.end()&&\
iter_second != m_poly_list_second.end())
{
term t_temp;
term t_first = (term)*iter_first;
term t_second = (term)*iter_second;
if(t_first.exp>t_second.exp)
{
m_poly_list_result.push_back(t_first);
iter_first++;
}
else if(t_second.exp>t_first.exp)
{
m_poly_list_result.push_back(t_second);
iter_second++;
}
else
{
t_temp.coef=t_first.coef+t_second.coef;
t_temp.exp=t_first.exp;
m_poly_list_result.push_back(t_temp);
iter_first++;
iter_second++;
}
}
for(;iter_first != m_poly_list_first.end();iter_first++)
{
m_poly_list_result.push_back(*iter_first);
}
for(;iter_second != m_poly_list_second.end();iter_second++)
{
m_poly_list_result.push_back(*iter_second);
}
}
//乘法函数,用以作多项式乘法
void Poly_multi()
{
list<term> poly_list_result;
list<term>::iterator iter_first = m_poly_list_first.begin();
for(;iter_first!=m_poly_list_first.end();iter_first++)
{
list<term> poly_list_temp; //用以存储多项式的中间运算结果
list<term>::iterator iter_second =\
m_poly_list_second.begin();
for(;iter_second!=m_poly_list_second.end();\
iter_second++)
{
term t_temp; //用以存储项的中间运算结果
term t_first = (term)*iter_first;
term t_second = (term)*iter_second;
//此处实现多项式项的相乘
t_temp.coef = t_first.coef*t_second.coef; //系数相乘
t_temp.exp = t_first.exp + t_second.exp; //指数相加
poly_list_temp.push_back(t_temp);
}
//此处调用私有成员函数Poly_add()
poly_list_result =\
Poly_add(poly_list_temp,poly_list_result);
}
//将运算结果赋值给私有数据成员,用以输出
m_poly_list_result = poly_list_result;
}
};
//测试函数
int main()
{
cout<<"************本程序实现多项式的加法与乘法************";
cout<<endl;
PolyArith poly_a;
poly_a.Poly_input(); //输入多项式
poly_a.Poly_add(); //多项式加法
cout<<"多项式加法的运算结果:"<<endl;
poly_a.Poly_output(); //输出多项式
cout<<endl;
poly_a.Poly_multi(); //多项式乘法
cout<<"多项式乘法的运算结果:"<<endl;
poly_a.Poly_output();
system("pause");
return 0;
}
看不懂了就问,我继续为你解答o(∩_∩)o...
#include <list>
#include <iostream>
#include <cassert>
using namespace std;
//定义多项式的项类
class term {
public:
int coef; //多项式系数
int exp; //多项式指数
//初始化项的系数和指数
term( int c=0,int e=0):coef(c),exp(e){}
};
//定义多项式类
class PolyArith {
private:
list<term> m_poly_list_first; //存储第一个多项式
list<term> m_poly_list_second; //存储第二个多项式
list<term> m_poly_list_result; //用以存储运算结果
//多项式私有成员函数,用以乘法时的调用
list<term> Poly_add(list<term>&poly_list_first,\
list<term>&poly_list_second)
{
list<term> poly_list_result; //用以存储运算结果
list<term>::iterator iter_first = poly_list_first.begin();
list<term>::iterator iter_second = poly_list_second.begin();
//该while循环针对两个链表迭代器都没有指到结尾的情形
while(iter_first != poly_list_first.end()&&\
iter_second != poly_list_second.end())
{
term t_temp;
term t_first = (term)*iter_first;
term t_second = (term)*iter_second;
if(t_first.exp>t_second.exp)
{
poly_list_result.push_back(t_first);
iter_first++;
}
else if(t_second.exp>t_first.exp)
{
poly_list_result.push_back(t_second);
iter_second++;
}
else
{
t_temp.coef=t_first.coef+t_second.coef;
t_temp.exp=t_first.coef;
poly_list_result.push_back(t_temp);
iter_first++;
iter_second++;
}
}
//该for循环针对第一个多项式的迭代器没有指到结尾
//第二个指到结尾的情形
for(;iter_first != poly_list_first.end();iter_first++)
{
poly_list_result.push_back(*iter_first);
}
//该for循环针对第二个多项式的迭代器没有指到结尾
//第一个指到结尾的情形
for(;iter_second != poly_list_second.end();iter_second++)
{
poly_list_result.push_back(*iter_second);
}
return poly_list_result;
}
public:
//输入函数,用以输入多项式
void Poly_input()
{
int n;
cout<<"请输入第一个多项式的项数:"<<endl;
cin>>n;
cout<<"按降幂输入第一个多项式的每一项的系数和指数:";
cout<<endl;
for(int i=1;i<=n;i++)
{
term t_temp;
cout<<"请输入第"<<i <<"项系数和指数,以'enter'为界:";
cout<<endl;
cin>>t_temp.coef;
cin>>t_temp.exp;
m_poly_list_first.push_back(t_temp);
}
n = 0;
cout<<"请输入第二个多项式的项数:"<<endl;
cin>>n;
cout<<"按降幂输入第二个多项式的每一项的系数和指数:";
cout<<endl;
for(int j=1;j<=n;j++)
{
term t_temp;
cout<<"请输入第"<<j <<"项系数和指数,以'enter'为界:";
cout<<endl;
cin>>t_temp.coef;
cin>>t_temp.exp;
m_poly_list_second.push_back(t_temp);
}
}
//输出函数,用以输出多项式
void Poly_output()
{
//用以指向输出多项式的第一个元素
list<term>::iterator iter = m_poly_list_result.begin();
//输出多项式的每一项
for(;iter!=m_poly_list_result.end();)
{
term t_temp=*iter;
cout<<t_temp.coef<<"x^"<<t_temp.exp;
if(++iter!=m_poly_list_result.end())
cout<<"+";
}
cout<<endl;
}
//加法函数,其基本思想同上边的私有成员函数Poly_add()
//此处不带参数,多项式运算对象为私有数据成员
void Poly_add()
{
list<term>::iterator iter_first = m_poly_list_first.begin();
list<term>::iterator iter_second =\
m_poly_list_second.begin();
while(iter_first != m_poly_list_first.end()&&\
iter_second != m_poly_list_second.end())
{
term t_temp;
term t_first = (term)*iter_first;
term t_second = (term)*iter_second;
if(t_first.exp>t_second.exp)
{
m_poly_list_result.push_back(t_first);
iter_first++;
}
else if(t_second.exp>t_first.exp)
{
m_poly_list_result.push_back(t_second);
iter_second++;
}
else
{
t_temp.coef=t_first.coef+t_second.coef;
t_temp.exp=t_first.exp;
m_poly_list_result.push_back(t_temp);
iter_first++;
iter_second++;
}
}
for(;iter_first != m_poly_list_first.end();iter_first++)
{
m_poly_list_result.push_back(*iter_first);
}
for(;iter_second != m_poly_list_second.end();iter_second++)
{
m_poly_list_result.push_back(*iter_second);
}
}
//乘法函数,用以作多项式乘法
void Poly_multi()
{
list<term> poly_list_result;
list<term>::iterator iter_first = m_poly_list_first.begin();
for(;iter_first!=m_poly_list_first.end();iter_first++)
{
list<term> poly_list_temp; //用以存储多项式的中间运算结果
list<term>::iterator iter_second =\
m_poly_list_second.begin();
for(;iter_second!=m_poly_list_second.end();\
iter_second++)
{
term t_temp; //用以存储项的中间运算结果
term t_first = (term)*iter_first;
term t_second = (term)*iter_second;
//此处实现多项式项的相乘
t_temp.coef = t_first.coef*t_second.coef; //系数相乘
t_temp.exp = t_first.exp + t_second.exp; //指数相加
poly_list_temp.push_back(t_temp);
}
//此处调用私有成员函数Poly_add()
poly_list_result =\
Poly_add(poly_list_temp,poly_list_result);
}
//将运算结果赋值给私有数据成员,用以输出
m_poly_list_result = poly_list_result;
}
};
//测试函数
int main()
{
cout<<"************本程序实现多项式的加法与乘法************";
cout<<endl;
PolyArith poly_a;
poly_a.Poly_input(); //输入多项式
poly_a.Poly_add(); //多项式加法
cout<<"多项式加法的运算结果:"<<endl;
poly_a.Poly_output(); //输出多项式
cout<<endl;
poly_a.Poly_multi(); //多项式乘法
cout<<"多项式乘法的运算结果:"<<endl;
poly_a.Poly_output();
system("pause");
return 0;
}
看不懂了就问,我继续为你解答o(∩_∩)o...
参考资料: http://zhidao.baidu.com/question/48437210.html?fr=qrl&fr2=query
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询