多项式的操作

 #include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct xiang)
#define NULL 0
struct xiang
{
    long num;
    long mi;
    struct xiang*next;
};
int n;

struct xiang*creat(void)
{
    struct xiang*head;
    struct xiang*p1,*p2;
    n=0;
    p1=p2=(struct xiang * )malloc(LEN);
    scanf("%ld,%ld",&p1->num,&p1->mi);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)head=p1;
        else p2->next=p1;
        p2=p1;
        p1=(struct xiang *)malloc(LEN);
        scanf("%ld,%ld",&p1->num,&p1->mi);
    }
    p2->next=NULL;

 

    LLLL:return(head);
}

struct xiang*add(struct xiang*head)
{
    int temp;
    temp=n;
    struct xiang*q,*p,*p2;
    q=head;
    LA:if(head==NULL)
      {
      printf("请输入原式:/n");
      head=creat();
      q=head;
      if(head==NULL)
      goto LA;
      }
    else
    printf("请输入加式/n");
    head=creat();
    if(head==NULL)
      {
      n=temp;
      head=q;
      goto LL;
      }
    else
      p=head;


     if((p->mi)>(q->mi))
      {
       p2=(struct xiang *)malloc(LEN);
       p2->mi=q->mi;
       p2->num=q->num;
       head=p2;
       q=q->next;
       p2->next=NULL;
       n=1;
      }
     else if((p->mi)<(q->mi))
      {
       p2=(struct xiang *)malloc(LEN);
       p2->mi=p->mi;
       p2->num=p->num;
       head=p2;
       p=p->next;
       p2->next=NULL;
       n=1;
       }
     else
      {
       p2=(struct xiang *)malloc(LEN);
       p2->mi=q->mi;
       (p2->num)=(p->num)+(q->num);
       head=p2;
       p=p->next;
       q=q->next;
       p2->next=NULL;
       n=1;
      }

    if(p==NULL&&q!=NULL)
     {
        while(q!=NULL)
        {
            (p2->next)=(struct xiang *)malloc(LEN);
            p2=p2->next;
            p2->next=NULL;
            p2->mi=q->mi;
            p2->num=q->num;
            q=q->next;
            n=n+1;
        }
        goto LL;
     }
     else if(p!=NULL&&q==NULL)
      {
       while(p!=NULL)
        {
              (p2->next)=(struct xiang *)malloc(LEN);
              p2=p2->next;
              p2->next=NULL;
              p2->mi=p->mi;
              p2->num=p->num;
              p=p->next;
              n=n+1;
        }
        goto LL;
      }
     
      if(p==NULL&&q==NULL)
      goto LL;

    do
    {

     if((p->mi)>(q->mi))
     {

       (p2->next)=(struct xiang *)malloc(LEN);
       p2=p2->next;
       p2->next=NULL;
       p2->mi=q->mi;
       p2->num=q->num;
       q=q->next;
       n=n+1;
     }
     else if((p->mi)<(q->mi))
      {
       (p2->next)=(struct xiang *)malloc(LEN);
       p2=p2->next;
       p2->next=NULL;
       p2->mi=p->mi;
       p2->num=p->num;
       p=p->next;
       n=n+1;
       }
     else
      {
       (p2->next)=(struct xiang *)malloc(LEN);
       p2=p2->next;
       p2->next=NULL;
       p2->mi=p->mi;
       p2->num=(p->num)+(q->num);
       p=p->next;
       q=q->next;
       n=n+1;
      }

     if(p==NULL&&q!=NULL)
     {
        while(q!=NULL)
        {
            (p2->next)=(struct xiang *)malloc(LEN);
            p2=p2->next;
            p2->next=NULL;
            p2->mi=q->mi;
            p2->num=q->num;
            q=q->next;
            n=n+1;
        }
     }
     else if(p!=NULL&&q==NULL)
      {
       while(p!=NULL)
        {
              (p2->next)=(struct xiang *)malloc(LEN);
              p2=p2->next;
              p2->next=NULL;
              p2->mi=p->mi;
              p2->num=p->num;
              p=p->next;
              n=n+1;
        }
      }

    }while(p!=NULL&&q!=NULL);

    LL:return(head);
}

 

 


struct xiang*sub(struct xiang*head)
{
    int temp;
    struct xiang*q,*p,*p2;
    q=head;
    LS:if(head==NULL)
      {
      printf("请输入原式:/n");
      head=creat();
      q=head;
      if(head==NULL)
      goto LS;
      }
    else
    printf("请输入减式/n");
    temp=n;
    head=creat();

    if(head==NULL)
      {
      n=temp;
      head=q;
      goto LLL;
      }
    else
      p=head;


     if((p->mi)>(q->mi))
      {
       p2=(struct xiang *)malloc(LEN);
       p2->mi=q->mi;
       p2->num=q->num;
       head=p2;
       q=q->next;
       p2->next=NULL;
       n=1;
      }
     else if((p->mi)<(q->mi))
      {
       p2=(struct xiang *)malloc(LEN);
       p2->mi=p->mi;
       p2->num=-p->num;
       head=p2;
       p=p->next;
       p2->next=NULL;
       n=1;
       }
     else
      {
       p2=(struct xiang *)malloc(LEN);
       p2->mi=q->mi;
       (p2->num)=(q->num)-(p->num);
       head=p2;
       p=p->next;
       q=q->next;
       p2->next=NULL;
       n=1;
      }

    if(p==NULL&&q!=NULL)
     {
        while(q!=NULL)
        {
            (p2->next)=(struct xiang *)malloc(LEN);
            p2=p2->next;
            p2->next=NULL;
            p2->mi=q->mi;
            p2->num=q->num;
            q=q->next;
            n=n+1;
        }
        goto LLL;
     }
     else if(p!=NULL&&q==NULL)
      {
       while(p!=NULL)
        {
              (p2->next)=(struct xiang *)malloc(LEN);
              p2=p2->next;
              p2->next=NULL;
              p2->mi=p->mi;
              p2->num=-p->num;
              p=p->next;
              n=n+1;
        }
        goto LLL;
      }

      if(p==NULL&&q==NULL)
      goto LLL;

    do
    {

     if((p->mi)>(q->mi))
     {

       (p2->next)=(struct xiang *)malloc(LEN);
       p2=p2->next;
       p2->next=NULL;
       p2->mi=q->mi;
       p2->num=q->num;
       q=q->next;
       n=n+1;
     }
     else if((p->mi)<(q->mi))
      {
       (p2->next)=(struct xiang *)malloc(LEN);
       p2=p2->next;
       p2->next=NULL;
       p2->mi=p->mi;
       p2->num=-p->num;
       p=p->next;
       n=n+1;
       }
     else
      {
       (p2->next)=(struct xiang *)malloc(LEN);
       p2=p2->next;
       p2->next=NULL;
       p2->mi=p->mi;
       p2->num=(q->num)-(p->num);
       p=p->next;
       q=q->next;
       n=n+1;
      }

     if(p==NULL&&q!=NULL)
     {
        while(q!=NULL)
        {
            (p2->next)=(struct xiang *)malloc(LEN);
            p2=p2->next;
            p2->next=NULL;
            p2->mi=q->mi;
            p2->num=q->num;
            q=q->next;
            n=n+1;
        }
     }
     else if(p!=NULL&&q==NULL)
      {
       while(p!=NULL)
        {
              (p2->next)=(struct xiang *)malloc(LEN);
              p2=p2->next;
              p2->next=NULL;
              p2->mi=p->mi;
              p2->num=-p->num;
              p=p->next;
              n=n+1;
        }
      }

    }while(p!=NULL&&q!=NULL);

    LLL:return(head);
}

struct xiang*cheng(struct xiang*head)
{
    struct xiang *p,*q,*r,*q1;
    p=head;
    LM:if(head==NULL)
    {
        printf("请输入原式:/n");
        head=creat();
        p=head;
        if(head==NULL)
        goto LM;
    }
    printf("请输入乘式/n");
    head=creat();
    if(head==NULL)
    {
      printf("没有乘式?/n");
      head=p;
      goto LN;
    }
    else
    q=head;

    r=(struct xiang*)malloc(LEN);
    r->num=(p->num)*(q->num);
    r->mi=(p->mi)+(q->mi);
    head=r;
    r->next=NULL;
    q1=q;
    q=q->next;
    n=1;
    while(p!=NULL)
    {
        while(q!=NULL)
        {
            r->next=(struct xiang*)malloc(LEN);
            r=r->next;
            r->next=NULL;
            r->num=(p->num)*(q->num);
            r->mi=p->mi+q->mi;
            q=q->next;
            n=n+1;
        }
        p=p->next;
        q=q1;
    }

    LN:return(head);

}


struct xiang*print(struct xiang*head)
{
    struct xiang*p,*q,*p1;
    long a,b;
   
    p1=head;
    while(p1->next!=NULL)
    {
    p=head;
    while(p->next!=NULL)
    {
       q=p->next;
       if(p->mi>q->mi)
       {
          a=p->mi;
          b=p->num;
          p->mi=q->mi;
          p->num=q->num;
          q->mi=a;
          q->num=b;
       }
       else if(p->mi==q->mi)
       {
          (p->num)=(p->num)+(q->num);

          if(q->next!=NULL)
          {
          p->next=q->next;
          n=n-1;
          goto L1;
          }
          else
          {
          p->next=NULL;
          n=n-1;
          goto L1;
          }
       }
       else
          ;
       p=p->next;
    }
    if(p1->next==NULL)
        goto L2;
      else
        p1=p1->next;

     L1:
        ;
    }
   
    L2: p=head;
    while(p->num==0)
    {
    if(p->next!=NULL)
    {
    head=p->next;
    p=p->next;
    n=n-1;
    }
    else
    {
        head=NULL;
        goto L;
    }
    }
   
    if(head==NULL)
    goto L;
   
    while(p->next!=NULL)
    {
        if(p->num==0)
        {
        q->next=p->next;
        n=n-1;
        }
        q=p;
        p=p->next;
       
    }

 

 


    if(head==NULL){goto L;}
    else
    printf("这是%d项多项式/n",n);
    printf("Y=");
    p=head;
        printf("%ld",p->num);
        printf("X");
        printf("^");
        printf("%ld",p->mi);
        p=p->next;
    while(p!=NULL)
    {
        if((p->num)>=0)
        {
        printf("+");
        printf("%ld",p->num);
        printf("X");
        printf("^");
        printf("%ld",p->mi);
        p=p->next;
        }
        else
        {
        printf("%ld",p->num);
        printf("X");
        printf("^");
        printf("%ld",p->mi);
        p=p->next;
        }
    }
    return(head);
    L:printf("链表为空/n");
}


main()
{
  struct xiang*head;
  head=NULL;

  l:printf("请选择操作/n");
  printf("0 退出/n1 创建/n2 输出/n3 加法/n4 减法/n5 乘法/n");
  int m;
  scanf("%d",&m);
  if(m==0)goto l0;
  else if(m==1)goto l1;
  else if(m==2)goto l2;
  else if(m==3)goto l3;
  else if(m==4)goto l4;
  else if(m==5)goto l5;
  else
  {printf("输入错误,请重新输入");
   goto l;
  }
  l1:  printf("输入多项式/n");
       head=creat();
       print(head);
       goto l;
  l2:  print(head);
       goto l;
  l3:  head=add(head);
       print(head);
       goto l;
  l4:  head=sub(head);
       print(head);
       goto l;
  l5:  head=cheng(head);
       print(head);
       goto l;
  l0:  printf("结束");
}

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值