📄 polynominal.cpp
字号:
// term.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/*以下是定义多项式结点类*/
class Term{
public:
Term(int c,int e);
Term(int c,int e,Term* nxt);
/*
在this指针指示的项后插入新项当调用一个成员函数时,
系统保证this指针始终指向产生这个调用的对象。
*/
Term* InsertAfter(int c,int e);
//全部定义为public
//private:
int coef;
int exp;
Term *link;
};
Term::Term(int c,int e):coef(c),exp(e){
link = NULL;
}
Term::Term(int c, int e, Term *nxt):coef(c),exp(e){
link = nxt;
}
Term* Term::InsertAfter(int c, int e){
this->link=new Term(c,e,this->link); //link = new Term(c,e,link);
return link;
}
ostream &operator <<(ostream & out, const Term& val) // 重载输出运算符
{
if(val.coef==0)
return out;
out<<val.coef;
switch(val.exp){
case 0:break;
case 1:out<<"X"; break;
default:out<<"X^"<<val.exp; break;
}
return out;
}
/*以下是多项式类*/
class Polynominal
{
public:
Polynominal();
void AddTerms(istream& in);
void Output(ostream& out)const;
void PolyMultiply(Polynominal& r);
Term* theList, *theList2, *theList3; //指向循环链表的头结点
};
ostream& operator <<(ostream &out,const Polynominal &x)
{
x.Output(out); return out;
}
istream& operator >>(istream& in, Polynominal &x)
{
x.AddTerms(in); return in;
}
Polynominal operator *(Polynominal &a, Polynominal &b)
{
a.PolyMultiply(b);
return a;
}
Polynominal::Polynominal()
{
theList=new Term(0,-1);
theList->link=theList; //生成带头结点的空循环链表
theList2=new Term(0,-2);
theList2->link=theList2;
theList3=new Term(0,-3);
theList3->link=theList3;
}
void Polynominal:: AddTerms(istream & in)
{
Term* q=theList;
int c,e;
for(;;)
{
cout<<"Input a term(coef,exp):\n"<<endl;
in>>c>>e;
if (e<0) break;
q=q->InsertAfter(c,e);
}
}
void Polynominal::Output(ostream& out)const
{
int first=1;
Term *p=theList->link;
cout<<"The polynominal is:\n"<<endl;
for ( ; p!=theList; p=p->link){
if (!first && (p->coef>0))
out<<"+";
first=0;
out<<*p; // 调用Term类上重载的“<<”操作。
}
cout<<"\n"<<endl;
}
void Polynominal::PolyMultiply(Polynominal& r)
{
Term *q,*p,*z;
p=r.theList->link; q=theList->link; z=theList2; //p和q指向两个当前的项,z指向一个新的空表,用来存放结果
while(p->exp>=0){ //如果p多项式未结束,则继续
while(q->exp>=0){
z=z->InsertAfter(q->coef*p->coef,q->exp+p->exp); //把q与p相乘的结果存放在z中
q=q->link;
z=z->link;
}
q=theList->link; //将q重新指向第一个元素
p=p->link; //p指向下个项
}
theList=theList2;
}
int main()
{
Polynominal p,q; //创建两个多项式对象p、q
cout << "输入0 -1时结束"<<endl;
cin>>p; cout<<p; //输入和显示多项式p
cin>>q; cout<<q; //输入和显示多项式q
q=q*p; cout<<q; //多项式p和q相乘,显示q
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -