一元多項式相加程序(C語言)

/*
   2007-3-22
   一元多項式的加法
*/

 

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>

typedef struct  PolyNode
{
  int  coef;
  int  exp;
  struct  PolyNode *next;
}node;

 

node *CreatePoly(void)
{
  node *h,*tail,*s;
  int  coef, exp;

  h = (node *)malloc(sizeof(node));
  if (!h)
  {
    exit(-1);
  }
  h->next = NULL;
  tail = h;

  printf("請輸入每一項額係數和指數(中間以逗號隔開):/n");
  printf("coef,exp: ");
  scanf("%d,%d",&coef,&exp);
  while (coef)
  {
    s = (node *)malloc (sizeof(node));
    if (!s)
    {
      exit(-1);
    }
    s->coef = coef;
    s->exp = exp;
   
    s->next = tail->next;
    tail->next = s;
    tail = s;
   
    printf("ceof,exp: ");
    scanf("%d,%d",&coef,&exp);
  }

  return h;
}

 

void PolyAdd(node *polya, node *polyb)
{
  node *p, *q, *pre, *temp;
  int  sum = 0;;

  p = polya->next;
  q = polyb->next;
  pre = polya;

  while (p && q)
  {
    if (p->exp < q->exp)
    {
      pre->next = p;
      pre = p;
      p = p->next;
    }
    else if (p->exp > q->exp)
    {
      pre->next = q;
      pre = q;
      q = q->next;
    }
    else
    {
      sum = p->coef + q->coef;
      if (sum)
      {
        p->coef = sum;
        pre->next = p;
        pre = p;
        p = p->next;
 
        temp = q->next;
        free(q);
        q = temp;
      }
      else
      {
        temp = p->next;
        free(p);
        p = temp;

        temp = q->next;
        free(q);
        q = temp;
      }
    }
  }

  pre->next = p?p:q;
}


int Prin(node *h)
{
  node *p = h->next;

  while (p)
  {
    printf("%d*x^%d  ",p->coef, p->exp);
 p = p->next;
  }
  printf("/n");

  return 1;
}

 

int main(void)
{
  node *polya, *polyb;

  printf("請輸入第一個一元多項式的係數和指數(假定以輸入係數爲0來結束):/n");
  polya = CreatePoly();
  printf("請輸入的第一個一元多項式爲:/n");
  Prin(polya);

  printf("請輸入第二個一元多項式的係數和指數(假定以輸入係數爲0來結束):/n");
  polyb = CreatePoly();
  printf("請輸入的第二個一元多項式爲:/n");
  Prin(polyb);

  printf("這兩個一元多項式相加後的結果爲:/n");
  PolyAdd(polya, polyb);
  Prin(polya);

  return 1;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章