⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 多项式.cpp

📁 可进行多项式加
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      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 + -