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

📄 polyn.cpp

📁 多项式相加减 求导
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#define ERROR -1

typedef struct LNode{
	float  coef;
	int    expn;
	struct LNode	*next;
}*Link,*Position;//结点 

typedef struct {
	Link	head;
	int	len;
}polynomial;//链表 

int Welcome(void);
int CreatPolyn(polynomial &p); 
void PrintPolyn(polynomial p);
int AddPolyn(polynomial *a,polynomial *b);//a和b相加后,结果放进a中 
int SubtractPolyn(polynomial *a,polynomial *b);
void Derivative(polynomial *a);
//void Multiply(polynomial *a,polynomial *b);
void Evaluation(polynomial p);

int main()
{   
    Welcome();
	polynomial Pa,Pb;
	int c,s=1;
    while(s){
       scanf("%d",&c);
	   switch(c)
	   {
	    case 1:
	          printf("Input Pa");
              CreatPolyn(Pa);
              printf("Pa=");
              PrintPolyn(Pa);
               break;
        case 2:
              printf("\nInput Pa");
              CreatPolyn(Pa);
              printf("\nPa=");
              PrintPolyn(Pa);
              printf("\nInput Pb");
	          CreatPolyn(Pb);
	          printf("\nPb=");
              PrintPolyn(Pb);
              AddPolyn(&Pa,&Pb);
	          printf("\nPa+Pb=");
	          PrintPolyn(Pa);
	           break;
       case 3:
              printf("Input Pa");
              CreatPolyn(Pa);
              printf("Pa=");
              PrintPolyn(Pa);
              printf("Input Pb");
	          CreatPolyn(Pb);
	          printf("Pb=");
              PrintPolyn(Pb);
              SubtractPolyn(&Pa,&Pb);
              printf("\nPa-Pb=");
              PrintPolyn(Pa);
                break;
       case 4:
              printf("Input Pa");
              CreatPolyn(Pa);
              printf("Pa=");
              PrintPolyn(Pa);
              Derivative(&Pa);
              printf("\nThe derivative of Pa is :");
              PrintPolyn(Pa);
                break;
       case 5:
              printf("Input Pa");
              CreatPolyn(Pa);
              printf("Pa=");
              PrintPolyn(Pa);         
              Evaluation(Pa);
                break;
       case 6:
              s=0;
                break;         
       default:
         printf("\nERROR");
         break;
      }	
    }    
	return 0;
}



int Welcome(void)
{
    printf("                 *****************POLYNOMIAL*****************\n");
    printf("              *********多项式请以指数的降序排列输入*******\n\n\n");
    printf("请选择以下操作:\n");
    printf("[1]    输入一函数并用类数学表达式输出\n[2]    做加法运算\n");
    printf("[3]    做减法运算\n[4]    做求导运算\n[5]    求x处的值\n[6]    退出\n");
    return 0;
}

int CreatPolyn(polynomial &p)
{   
    int m;
    printf("\nInput the polynomial's len   ");
    scanf("%d",&m);
    if(m<=0)
      {
       printf("ERROR    I AN SO SORRY!  ");
       system("Pause");      
       exit(0);       
      }
	int i;
	Link  h,s;
	Position q;
	if(!(h=(Link)malloc(sizeof(LNode))))
	    return ERROR;
	else
	{
	    h->coef=0.0;
	    h->expn=-1;
	    h->next=NULL;
	}
	p.head=h;
	p.len=m;
	q=h;
	for(i=1;i<=m;++i)
	{
	    if(!(s=(Link)malloc(sizeof(LNode))))
		  return ERROR;
	    else
	      scanf("%f,%d",&s->coef,&s->expn);
        if(q->expn!=s->expn)
          {
             q->next=s;
             q=s;
           }
         else
           {
                (q->coef)+=(s->coef);
                free(s);
           }
	}
	q->next=NULL;
	return 0;
}

void PrintPolyn(polynomial p)
{
	Link t=p.head->next;
	if(t->expn>0)
      { 
         if(t->expn!=1)
           {
             if(t->coef!=1&&t->coef!=-1)
                 printf("%fx^%d",t->coef,t->expn);
             else if(t->coef==1)
                 printf("x^%d",t->expn);
             else 
                 printf("-x^%d",t->expn);
            }
         else
            {
              if(t->coef!=1&&t->coef!=-1)
                 printf("%fx",t->coef);
              else if(t->coef==1)
                 printf("x");
              else
                 printf("-x");
            }         
      }
    else if(t->expn==0)
       printf("%f",t->coef);
    t=t->next;
	for(;t;)
	{   
      if(t->expn!=0)
      {
         if(t->expn!=1)
	       {
             if(t->coef==-1)
                printf("-x^%d",t->expn);
             else if(t->coef==1)
                printf("+x^%d",t->expn);
             else if(t->coef>0&&t->coef!=1)
	            printf("+%fx^%d",t->coef,t->expn);
		     else if(t->coef<0&&t->coef!=-1)
		        printf("%fx^%d",t->coef,t->expn);
            }
          else 
            {
              if(t->coef==-1)
                printf("-x");
             else if(t->coef==1)
                printf("+x");
             else if(t->coef>0&&t->coef!=1)
	            printf("+%fx",t->coef);
		     else if(t->coef<0&&t->coef!=-1)
		        printf("%fx",t->coef);
            }
       }
       else
         {
         if(t->coef>0)
            printf("+%f",t->coef);
         else
            printf("%f",t->coef);
         }
		t=t->next;
	}
  	free(t);
  	printf("\n");
}

int AddPolyn(polynomial *a,polynomial *b)
{
        Link ha,hb,qa,qb;
        ha=a->head;
        hb=b->head;
        qa=ha->next;
        qb=hb->next;
        float sum;
        while(qa&&qb)
        {
                if(qa->expn>qb->expn)
                   {
                       ha=qa;  
                       qa=qa->next;
                   }
                else if(qa->expn<qb->expn)
                   {
                        hb->next=qb->next;
                        ha->next=qb;
                        qb->next=qa;                        
                        ha=ha->next;
                        qb=hb->next;                       
                   }
                else if(qa->expn==qb->expn)
                   {
                        sum=qa->coef+qb->coef;
                        if(sum!=0)
                           {
                               qa->coef=sum;
                               ha=qa;
                           }
                         else
                            {
                                ha->next=qa->next;
                                free(qa);                                
                            }
                         hb->next=qb->next;
                         free(qb);
                         qb=hb->next;
                         qa=ha->next;                         
                   }
        }
        if(hb->next)
           {
               ha->next=hb->next;              
           }
        free(hb);       
        return 0;
 } 

int SubtractPolyn(polynomial *a,polynomial *b)
{
        Link ha,hb,qa,qb;
        ha=a->head;
        hb=b->head;
        qa=ha->next;
        qb=hb->next;
        float sum;
        while(qa&&qb)
        {
                if(qa->expn>qb->expn)
                   {
                       ha=qa;  
                       qa=qa->next;
                   }
                else if(qa->expn<qb->expn)
                   {    
                        qb->coef=-(qb->coef);
                        hb->next=qb->next;
                        ha->next=qb;
                        qb->next=qa;                        
                        ha=ha->next;
                        qb=hb->next;                       
                   }
                else if(qa->expn==qb->expn)
                   {
                        sum=qa->coef-qb->coef;
                        if(sum!=0)
                           {
                               qa->coef=sum;
                               ha=qa;
                           }
                         else
                            {
                                ha->next=qa->next;
                                free(qa);                               
                            }
                         hb->next=qb->next;
                         free(qb);
                         qb=hb->next;
                         qa=ha->next;                         
                   }
        }
        if(hb->next)
           {
               ha->next=hb->next;
               qb=ha->next;
               for(;qb;)
                 {
                     qb->coef=-(qb->coef);
                     qb=qb->next;
                 }               
           }
        free(hb);        
        return 0;
 } 
 
 
 void Derivative(polynomial *a)
 {
        Link q;
        q=a->head->next;
        for(;q;)
        {
                 (q->coef)*=(q->expn);
                 --(q->expn);
                 q=q->next;
        }
        free(q);
 } 
 
 void Evaluation(polynomial p)
 {
      Link q;
      q=p.head->next;
      float Px,x,sum;
      sum=0;
      int i;
      printf("\nInput x=");
      scanf("%f",&x);      
      for(;q;)
         {   
             Px=1.0;
             for(i=1;i<=q->expn;++i)
                Px*=x;
             Px*=(q->coef);
             sum+=Px;
             q=q->next;  
         }
      printf("\nThe evaluation of P(%f) is %f",x,sum);         
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -