📄 poly88.cpp
字号:
delete hb;
hb=qb;
qb=qb->next;
break;
case 1:
DelFirst(hb,qb);
ha->next=qb;
qb->next=qa;
qb=hb->next;
ha=ha->next;
qa=ha->next;
break;
}//switch
}//while
if(hb->next!=NULL)
ha->next=qb;
freeNode(hb);
return pc;
}
polynomail * polynomail::Mulpolyn(polynomail *pb)
{
polynomail *p11 ;
p11=new polynomail;
polynelem *e1;
e1=pb->head->next;
while (e1!=NULL)
{
p11= p11->Addpolyn(itemlist(this,e1));
e1=e1->next;
}
return p11;
}
polynomail* polynomail::itemlist(polynomail *p1, polynelem *e )
{
polynomail* pd=p1->Copy();
polynelem *e1;
e1=pd->head;
if(e->coef==0)
{
p1->head->next=NULL;
}
else
while (e1!=NULL)
{e1->coef=e1->coef*e->coef;
e1->expn=e1->expn+e->expn;
e1=e1->next;
}
return pd;
}
void polynomail::polyncreat()//OK
{ //创建有头节点多项式
polynelem *p1,*p2;
p1=p2=head;
int length;
length=0; //输入系数
cout<<"请输入系数,要以0结束:(只输入系数)"<<endl;
while(1)
{
p1=new polynelem;
cin>>p1->coef;
p1->next=NULL;
if(!p1->coef)
break;
p2->next=p1;
p2=p1;
length++;
} //输入指数
p1=head;
cout<<endl<<"输入"<<length<<"项指数:"<<"(只输入指数)"<<endl;
while(p1->next!=NULL)
{
p1=p1->next;
cin>>p1->expn;
}//排序并合并同类项
p1=head->next;
while(p1!=NULL)
{
polynelem *min;
min=p1;
p2=p1->next;
while(p2!=NULL)
{
if(min->expn>p2->expn)
{
min=p2;
p2=p2->next;
continue;
}//if
if(min->expn==p2->expn)
{//合并同类项
min->coef=min->coef+p2->coef;
polynelem *p3;
p3=p2;
p2=p2->next;
polyndelete(p3);
continue;
}//if
p2=p2->next;
}//while
if(min!=p1)
{ //交换数据
float CHcoef;
int CHexpn;
CHcoef=min->coef;
min->coef=p1->coef;
p1->coef=CHcoef;
CHexpn=min->expn;
min->expn=p1->expn;
p1->expn=CHexpn;
}//if
p1=p1->next;
}//while
//删除系数为零的项
p1=head->next;
while(p1!=NULL)
{
if(!p1->coef)
{
polynelem *pe;
pe=p1;
p1=p1->next;
polyndelete(pe);
continue;
}//if
p1=p1->next;
} //while
} //polyncreat
void polynomail::printpolyn()
{//输出已创建的多项式
polynelem *p;
p=head;
while(p->next)
{
p=p->next;
if(head->next==p)
{
if(p->expn==0)
cout<<p->coef;
else
if(p->expn==1)
{
if(p->coef==1)
cout<<"x";
else
cout<<p->coef<<"x";
}
else
{
if(p->coef==1)
cout<<"x^"<<p->expn;
else
cout<<p->coef<<"x^"<<p->expn;
}
continue ;
}
if(p->coef>0)
{
if(p->expn==0)
cout<<'+'<<p->coef;
else if(p->expn==1)
{
if(p->coef==1)
cout<<'+'<<"x";
else
cout<<'+'<<p->coef<<"x";
}
else
{
if(p->coef==1)
cout<<'+'<<"x^"<<p->expn;
else
cout<<'+'<<p->coef<<"x^"<<p->expn;
}
}
else if(p->coef<0)
{
if(p->expn==0)
cout<<p->coef;
else if(p->expn==1)
{
if(p->coef==-1)
cout<<"-x";
else
cout<<p->coef<<"x";
}
else
{
if(p->coef==-1)
cout<<"-x^"<<p->expn;
else
cout<<p->coef<<"x^"<<p->expn;
}
}
else
{
}
} //while
if(head->next==0)
cout<<'0';
} //printpolyn
void main(int argc, char* argv[])
{
polynomail *C;
polynomail A,B;
double sum1;
int option,loop1;
option=0;
sum1=0;
while(loop1)
{
loop1=0;
sign:
cout<<"<------请选择多项式的操作---->"<<endl;
cout<<"<============MENU============>"<<endl;
cout<<" 1、链式存储处理多项式"<<endl;
cout<<" 2、顺序存储处理多项式"<<endl;
cout<<" 3、退出主菜单 "<<endl;
cout<<"<============================>"<<endl;
cout<<"请输入您的选择:(1 or 2 or 3)"<<endl;
cin>>option;
if(option==3)
sign1: break;
switch(option)
{
case 1:
{
cout<<"多项式A(x)与B(x)"<<endl;
cout<<"请输入多项式A(x):"<<endl;
A.polyncreat();
cout<<endl<<"A(x)=";
A.printpolyn();
cout<<endl;
cout<<endl<<"请输入多项式B(x) :"<<endl;
B.polyncreat();
cout<<endl<<"B(x)=";
B.printpolyn();
cout<<endl;
int select,loop; //select为菜单选择变量,loop为循环变量
loop=1;
select=0;
while(loop)
{
loop=0;
cout<<"<------链式处理多项式的操作---->"<<endl;
cout<<"<============MENU============>"<<endl;
cout<<" 1、多项式加法"<<endl;
cout<<" 2、多项式减法"<<endl;
cout<<" 3、多项式乘法"<<endl;
cout<<" 4、多项式求导"<<endl;
cout<<" 5、多项式求值"<<endl;
cout<<" 6、退出到主菜单"<<endl;
cout<<"<============================>"<<endl;
cout<<"请输入您的选择:(1~6)"<<endl;
cin>>select;
if(select==6)goto sign;
switch(select)
{
case 1: //add
cout<<endl<<"A(x)=";
A.printpolyn();
cout<<endl<<"B(x)=";
B.printpolyn();
cout<<endl;
cout<<endl;
C=A.Addpolyn(&B);
cout<<"A(x)+B(x)=";
C->printpolyn();
cout<<endl;
break;
case 2: //sub
cout<<endl<<"A(x)=";
A.printpolyn();
cout<<endl<<"B(x)=";
B.printpolyn();
cout<<endl<<endl;
C=A.Substractpolyn(&B);
cout<<"A(x)-B(x)=";
C->printpolyn();
cout<<endl;
break;
case 3: //mul
cout<<endl<<"A(x)=";
A.printpolyn();
cout<<endl<<"B(x)=";
B.printpolyn();
cout<<endl;
cout<<endl;
C=A.Mulpolyn(&B);
cout<<"A(x)*B(x)=";
C->printpolyn();
cout<<endl;
break;
case 4: //derivative
cout<<endl<<"A(x)=";
A.printpolyn();
cout<<endl<<endl;
A.daoshu(*C);
cout<<"A(x)导数:";
C->printpolyn();
cout<<endl;
break;
case 5: //value
double sum,x;
cout<<"请输入x的值"<<endl;
cout<<"x=";
cin>>x;
cout<<endl<<"A(x)=";
A.printpolyn();
cout<<endl<<endl;
sum=A.Resultpolyn(x);
cout<<"A(x)函数值为"<<sum;
cout<<endl;
break;
default:
cout<<"ERROR!! Selection Out Of Menu!"<<endl;
loop=1;
break;
}
if(!loop)
{ cout<<"<******************************>"<<endl;
cout<<"**"<<" 返回子菜单, 请按 1 "<<endl;
cout<<"**"<<" 返回主菜单, 请按 0 "<<endl;
cout<<"**"<<" 退出本程序, 请按 7 "<<endl;
cout<<"<******************************>"<<endl;
cout<<"请输入您的选择:(1 or 0 or 7)"<<endl;
cin>>loop;
}
if(loop==0) goto sign;
if(loop==7) goto sign1;
}
break;
}
case 2:
{
int select2,loop2;
//select2为菜单选择变量,power为求导阶数,loop为循环变量
double x,sum2;//sum为所求函数值
sum2=0;
loop2=1;
select2=0;
// power=0;
cout<<"请输入每一项的系数coef和指数exp"<<endl;
cout<<"注意:系数与指数要隔项输入,以(0,0)结束"<<endl;
cout<<"请输入多项式A(x):"<<endl;
CreatPloyn(pa);
cout<<"请输入多项式B(x):"<<endl;
CreatPloyn(pb);
while(loop2)
{
loop2=0;
cout<<"<------用数组处理多项式------>"<<endl;
cout<<"<============MENU============>"<<endl;
cout<<" 1、多项式加法"<<endl;
cout<<" 2、多项式减法"<<endl;
cout<<" 3、多项式乘法"<<endl;
cout<<" 4、多项式求值"<<endl;
cout<<" 5、多项式求导"<<endl;
cout<<" 6、退出到主菜单"<<endl;
cout<<"<============================>"<<endl;
cout<<"请输入您的选择:(1~6)"<<endl;
cin>>select2;
if(select2==6)goto sign;
switch(select2)
{
case 1:
p=AddPloyn(pa,pb);
cout<<"A(x)+B(x)=";
PrintPloyn(p);
cout<<endl;
break;
case 2:
cout<<"A(x)-B(x)=";
SubtractPloyn(pa,pb);
cout<<endl;
break;
case 3:
cout<<"A(x)*B(x)=";
MultiPloyn(pa,pb);
cout<<endl;
break;
case 4:
cout<<"请输入数值x:"<<endl;
cin>>x;
cout<<"多项式 A(x)";
PrintPloyn(pa);
cout<<endl;
sum2=ValuePloyn(pa,x);
cout<<"x="<<x<<"时,A(x)值为:"<<sum2<<endl;
cout<<endl;
break;
case 5:
cout<<"请输入多项式求导的阶数:"<<endl;
// cin>>power;
DerivativePloyn(pa,1);
cout<<endl;
break;
////////////////////////////////////////////////////
default:
cout<<"ERROR!! Your Selection Is Out Of The Menu!"<<endl;
loop2=1;
break;
}
if(!loop2)
{ cout<<"<******************************>"<<endl;
cout<<"**"<<" 返回子菜单, 请按 1 "<<endl;
cout<<"**"<<" 返回主菜单, 请按 0 "<<endl;
cout<<"**"<<" 退出本程序, 请按 7 "<<endl;
cout<<"<******************************>"<<endl;
cout<<"请输入您的选择:(1 or 0 or 7)"<<endl;
cin>>loop2;
}
if(loop2==0) goto sign;
if(loop2==7) goto sign1;
}
break;
}
/////////////////////////////////////////////////////////////////////////////
default:
{
cout<<"ERROR!! Your Selection Is Out Of The Menu!"<<endl;
loop1=1;
break;
}
if(!loop1)
{
cout<<"要继续多项式处理吗?1/0"<<endl;
cin>>loop1;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -