多项式加法

  1. /*多项式(Polyomial)加法
  2.     code by zzr 
  3. http://blog.csdn.net/ZhengZhiRen/   */
  4. #include <stdio.h>
  5. #include <malloc.h>
  6. #include <stdlib.h>
  7. #define LEN sizeof(node)
  8. typedef   struct  node
  9. {
  10.      float  coef;      /*系数(coefficient)*/
  11.      int  exp;         /*指数(exponent)*/
  12.      struct  node *next;
  13. }node;
  14. node * create_poly()     /*建立多项式*/
  15. {
  16.     node *head;
  17.     node *p;
  18.     node *pt;
  19.     head=(node *)malloc(LEN);    /*头结点*/
  20.     p=head;
  21.     pt=(node *)malloc(LEN);
  22.     scanf( "%f%d" ,&pt->coef,&pt->exp);
  23.      while (pt->coef!=0)
  24.     {
  25.         p->next=pt;
  26.         p=pt;
  27.         pt=(node *)malloc(LEN);
  28.         scanf( "%f%d" ,&pt->coef,&pt->exp);
  29.     }
  30.     p->next=NULL;
  31.      return  head;
  32. }
  33. int  cmp(node *pa,node *pb)
  34. {
  35. /*比较两个项的指数大小*/
  36.      if (!pa||!pb)
  37.          return  -2;   /*返回错误*/
  38.      if (pa->exp>pb->exp)
  39.          return  1;
  40.      else   if (pa->exp==pb->exp)
  41.          return  0;
  42.      else
  43.          return  -1;
  44. }
  45. void  add_poly(node *ha,node *hb)         /*两个多项式相加*/
  46. {
  47.     node *pa;
  48.     node *pb;
  49.     node *pt;
  50.     pa=ha->next;
  51.     pb=hb->next;
  52.      while (pa&&pb)
  53.     {
  54.          switch (cmp(pa,pb))
  55.         {
  56.          case  1:      /*pa指数大*/
  57.             pt=pb;
  58.             hb->next=pt->next;
  59.             pt->next=pa;
  60.             ha->next=pt;
  61.              /*指针后移*/
  62.             ha=ha->next;
  63.             pa=ha->next;
  64.             pb=hb->next;
  65.              break ;
  66.          case  0:      /*指数相等*/
  67.             pa->coef+=pb->coef;
  68.             pt=pb;
  69.              /*指针后移*/
  70.             ha=ha->next;
  71.             pa=ha->next;
  72.             hb->next=pb->next;
  73.             pb=hb->next;
  74.             free(pt);
  75.              break ;
  76.          case  -1:     /*pb指数大*/
  77.             ha=pa;
  78.             pa=ha->next;
  79.              break ;
  80.         }
  81.     }
  82.      if (NULL==pa)
  83.         ha->next=pb;
  84. }
  85. void  print_poly(node *poly)      /*输出多项式*/
  86. {
  87.      int  i;   /*控制是否打印加号*/
  88.      for (i=0,poly=poly->next;poly;poly=poly->next,i++)
  89.     {
  90.          if (i>0)
  91.             printf( "+" );
  92.         printf( "%gX%d" ,poly->coef,poly->exp);
  93.     }
  94. }
  95. void  main()
  96. {
  97.     node *poly_a;
  98.     node *poly_b;
  99.      /*创建多项式A、B*/
  100.     printf( "请输入多项式A项的系数和指数/n" );
  101.     poly_a=create_poly();
  102.     printf( "请输入多项式B项的系数和指数/n" );
  103.     poly_b=create_poly();
  104.      /*输出多项式A、B*/
  105.     printf( "A=" );
  106.     print_poly(poly_a);
  107.     printf( "/n" );
  108.     printf( "B=" );
  109.     print_poly(poly_b);
  110.     printf( "/n" );
  111.      /*A、B相加*/
  112.     add_poly(poly_a,poly_b);
  113.      /*输出结果*/
  114.     printf( "A+B=" );
  115.     print_poly(poly_a);
  116.     printf( "/n" );
  117. }
 

你可能感兴趣的:(多项式加法)