📄 多项式.cpp
字号:
if (p->expn<0)
p->coef=0;
p=p->next;
}
purge(m1);
return(0);
}
//N阶导数(异地运算)
int derivative(int m1, int m2, int N){ //存在m2处
struct sq *z,*y,*p;
int i;
if(head[m1]==NULL){
cout<<"多项是不存在"<<endl;
return(0);
}
z=new struct sq;
p=head[m1];
head[m2]=z;
for(;p!=NULL;){
z->coef=p->coef;
for(i=0;i<N;i++)
z->coef*=(p->expn-i);
z->expn=p->expn-N;
if (z->expn<0)
z->coef=0;
p=p->next;
z->next=new struct sq;
y=z;
z=z->next;
}
delete z;
y->next=NULL;
purge(m2);
return(0);
}
//不定积分(就地运算)
int sum(int m1){ //存在m1处
struct sq *p;
if(head[m1]==NULL){
cout<<"多项是不存在"<<endl;
return(0);
}
p=head[m1];
for(;p!=NULL;){
p->coef/=(p->expn+1);
p->expn+=1;
p=p->next;
}
return(0);
}
//不定积分(异地运算)
int sum(int m1, int m2){ //存在m2处
struct sq *z,*y,*p;
if(head[m1]==NULL){
cout<<"多项是不存在"<<endl;
return(0);
}
z=new struct sq;
p=head[m1];
head[m2]=z;
for(;p!=NULL;){
z->coef=p->coef;
z->coef/=(p->expn+1);
z->expn=p->expn+1;
p=p->next;
z->next=new struct sq;
y=z;
z=z->next;
}
delete z;
y->next=NULL;
purge(m2);
return(0);
}
//定积分(运用不定积分于求值函数)
//销毁多项式
void destroy(int m){
struct sq *p,*q;
p=head[m];
for(;p!=NULL;){
q=p;
p=p->next;
delete q;
}
head[m]=NULL;
}
//求积(就地运算)
int multi(int m1, int m2){ ////存在m1处
struct sq *p,*q, *y, *z, *x;
p=head[m1];
q=head[m2];
if(p==NULL||q==NULL){
for(;p!=NULL;){
y=p->next;
delete p;
p=y;
}
head[m1]=NULL;
return(0);
}
y=new struct sq;
y->coef=p->coef*q->coef;
y->expn=p->expn+q->expn;
y->next=NULL;
for(;p!=NULL;){
if(p==head[m1]){
head[m1]=y;
q=q->next;
continue;
}
else for(;q!=NULL;){
z=new struct sq;
z->coef=p->coef*q->coef;
z->expn=p->expn+q->expn;
y=head[m1];
if(z->expn<y->expn){
head[m1]=z;
z->next=y;
q=q->next;
continue;
}
for (;(y->next!=NULL)&&(z->expn>y->expn);){
x=y;
y=y->next;
}
if(z->expn==y->expn){
y->coef=y->coef+z->coef;
q=q->next;
continue;
}
if(y->next==NULL)
if(z->expn>y->expn){
y->next=z;
z->next=NULL;
}
else {
x->next=z;
z->next=y;
}
else{
x->next=z;
z->next=y;
}
q=q->next;
}
x=p;
p=p->next;
delete x;
q=head[m2];
}
return(0);
}
//求积(异地运算)
int multi(int m1, int m2, int m3){ ////存在m3处
struct sq *p,*q, *y, *z, *x;
int i;
p=head[m1];
q=head[m2];
if(p==NULL||q==NULL)
return(0);
y=new struct sq;
y->coef=p->coef*q->coef;
y->expn=p->expn+q->expn;
y->next=NULL;
for(i=0;p!=NULL;i++){
if(i==0){
head[m3]=y;
q=q->next;
continue;
}
else for(;q!=NULL;){
z=new struct sq;
z->coef=p->coef*q->coef;
z->expn=p->expn+q->expn;
y=head[m3];
if(z->expn<y->expn){
head[m3]=z;
z->next=y;
q=q->next;
continue;
}
for (;(y->next!=NULL)&&(z->expn>y->expn);){
x=y;
y=y->next;
}
if(z->expn==y->expn){
y->coef=y->coef+z->coef;
q=q->next;
continue;
}
if(y->next==NULL)
if(z->expn>y->expn){
y->next=z;
z->next=NULL;
}
else {
x->next=z;
z->next=y;
}
else{
x->next=z;
z->next=y;
}
q=q->next;
}
p=p->next;
q=head[m2];
}
return(0);
}
//主函数
int main(){
char b='y';
int c,m, n, mc, m1, m2, m3, i,N;
double x,y;
for(i=0;i<=9;i++)
head[i]=NULL;
while (b=='y'){
cout<<"1.创建\t\t2.显示\t\t3.复制\n4.求和\t\t5.求值\t\t6.求差\n7.N阶导数\t8.不定积分\t9.定积分\n10.销毁多项式\t11.求积\t\t12.乘方\n"<<endl;
cin>>c;
switch (c)
{
case 1: //创建
cout<<"请输入存储多项式号(0---9):";
cin>>m;
cout<<"请输入多项式项数:";
cin>>n;
creat(m,n);
break;
case 2: //显示
cout<<"请输入需显示的多项式号(0---9):";
cin>>m;
print(m);
break;
case 3: //复制
cout<<"请输入需复制的多项式号(0---9):";
cin>>m;
cout<<"请输入将其复制到的多项式号(0---9):";
cin>>mc;
cpy(m,mc);
break;
case 4: //求和
cout<<"请输入被加数多项式号(0---9):";
cin>>m1;
cout<<"请输入加数多项式号(0---9):";
cin>>m2;
cout<<"请输入将结果存储到的多项式号(0---9):";
cin>>m3;
if(m3!=m2&&m3!=m1)
add(m1,m2,m3);
else if(m3==m2&&m3!=m1)
add(m2,m1);
else
add(m1,m2);
break;
case 5: //求值
cout<<"请输入多项式号:";
cin>>m;
cout<<"请输入x值:";
cin>>x;
cout<<"结果为:"<<ans(m, x)<<endl;
break;
case 6: //求差
cout<<"请输入被减数多项式号(0---9):";
cin>>m1;
cout<<"请输入减数多项式号(0---9):";
cin>>m2;
cout<<"请输入将结果存储到的多项式号(0---9):";
cin>>m3;
if(m3!=m2&&m3!=m1)
dev(m1,m2,m3);
else if(m3==m2&&m3!=m1)
dev(m2,m1);
else
dev(m1,m2);
break;
case 7: //N阶导数
cout<<"请输入多项式号:";
cin>>m1;
cout<<"请输入N值:";
cin>>N;
cout<<"请输入将结果存储到的多项式号(0---9):";
cin>>m2;
if(m1==m2)
derivative(m1, N);
else
derivative(m1, m2, N);
break;
case 8: //不定积分
cout<<"请输入多项式号:";
cin>>m1;
cout<<"请输入将结果存储到的多项式号(0---9):";
cin>>m2;
if(m1==m2)
sum(m1);
else
sum(m1, m2);
break;
case 9: //定积分(运用不定积分于求值函数)
cout<<"请输入多项式号:";
cin>>m1;
cout<<"请输入积分上限:";
cin>>x;
cout<<"请输入积分下限:";
cin>>y;
sum(m1,10);
cout<<"结果为:"<<(ans(10, x)-ans(10,y))<<endl;
break;
case 10: //销毁多项式
cout<<"请输入多项式号:";
cin>>m;
destroy(m);
break;
case 11:
cout<<"请输入被乘数多项式号(0---9):";
cin>>m1;
cout<<"请输入乘数多项式号(0---9):";
cin>>m2;
cout<<"请输入将结果存储到的多项式号(0---9):";
cin>>m3;
if(m3!=m2&&m3!=m1)
multi(m1,m2,m3);
else if(m3==m2&&m3!=m1)
multi(m2,m1);
else
multi(m1,m2);
break;
case 12:
cout<<"请输入底数多项式号(0---9):";
cin>>m1;
cout<<"请输入将结果存储到的多项式号(0---9):";
cin>>m2;
cout<<"请输入乘方次数";
cin>>N;
if(N==1)
cpy(m1,m2);
else{
for(i=1;i<N;i++)
if(head[10]==NULL)
multi(m1,m1,10);
else
multi(10,m1);
head[m2]=head[10];
head[10]=NULL;
}
}
do{
cout<<"是否继续进行(y/n):";
cin>> b;
}while(b!='y'&&b!='n');
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -