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

📄 polyadd.txt

📁 一元多项式相加程序
💻 TXT
字号:
//一元多项式相加程序
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define  LEN  sizeof(node)

typedef struct polynode                   /*用单链表存储多项式的结点结构*/
{
      int coef;                                   /*多项式的系数*/
      int exp;                                    /*指数*/
      struct polynode *next;               /*next是struct polynode类型中的一个成员,它又指向struct polynode类型的数据,以此建立链表*/
}node;                                           /*若定为"node,*list;",意即node*与list同为结构指针类型*/

node * create(void)                         /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/
{
     node *h,*r,*s;
     int c,e;
     h=(node *)malloc(LEN);              /*建立多项式的头结点,为头结点分配存储空间*/
     r=h;                                         /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
     printf("coef:");
     scanf("%d",&c);                         /*输入系数*/
     printf("exp: ");
     scanf("%d",&e);                        /*输入指针*/
     while(c!=0)                               /*输入系数为0时,表示多项式的输入结束*/
    {
          s=(node *)malloc(LEN);         /*申请新结点*/
          s->coef=c;                           /*申请新结点后赋值*/
          s->exp=e;                           /*申请新结点后赋值*/
          r->next=s;                          /*做尾插,插入新结点*/
          r=s;                                    /*r始终指向单链表的表尾*/
          printf("coef:");
          scanf("%d",&c);
          printf("exp: ");
          scanf("%d",&e);
    }
    r->next=NULL;                          /*将表的最后一个结点的next置NULL,以示表结束*/
    return(h);
}

void polyadd(node *polya, node *polyb)/*一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除*/
{
       node *p,*q,*pre,*temp;
       int sum;
       p=polya->next;                          /*令p和q分别指向polya和polyb多项式链表中的第一个结点*/
       q=polyb->next;
       pre=polya;                                 /*位置指针,指向和多项式polya*/
       while(p!=NULL&&q!=NULL)          /*当两个多项式均未扫描结束时,执行以下操作*/
      {
            if(p->exp<q->exp)                /*若p指向的多项式指数小于q指的指数*/
            {
                   pre->next=p;                /*将p结点加入到和多项式中*/
                   pre=pre->next;
                   p=p->next;
            }
            else if(p->exp==q->exp)       /*若指数相等,则相应的系数相加*/
            {
                   sum=p->coef+q->coef;
                   if(sum!=0)
                   {
                        p->coef=sum;
                        pre->next=p;pre=pre->next;p=p->next;
                        temp=q;q=q->next;free(temp);
                    }
                  else                             /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/
                 {
                       temp=p->next;free(p);p=temp;
                       temp=q->next;free(q);q=temp;
                 }
           }
          else                                    /*若p指数大于q指数*/
          {
                pre->next=q;                /*p结点不动,将q结点加入到和多项式中*/
                pre=pre->next;
                q=q->next;
          }
    }
    if(p!=NULL)                              /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/
           pre->next=p;
    else                                         /*否则将B的结点加入到和多项式中*/
           pre->next=q;                                                        
}

void print(node * p)                       /*输出函数,打印出一元多项式*/
{                                                                                                     
    while(p->next!=NULL)
    {  
        p=p->next;
        printf("     %d*x^%d",p->coef,p->exp);  
          
    }
}  

main()                                        /*主函数*/
{
      node * polya,* polyb;
      printf("Welcome to use!\n");
      printf("\nPlease input the polya include coef && exp:\n");
      polya=create();                    /*调用建立链表函数,创建多项式A*/
      print(polya);
      printf("\nPlease input the polyb include coef && exp:\n");
      polyb=create();                    /*同理,创建B*/
      print(polyb);
      printf("\nSum of the poly is:\n");
      polyadd(polya,polyb);            /*调用一元多项式相加函数*/
      print(polya);                        /*调用输出函数,打印结果*/
      printf("\n");
}
 

⌨️ 快捷键说明

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