当前位置: 代码迷 >> C语言 >> 多项式合并同类项问题
  详细解决方案

多项式合并同类项问题

热度:272   发布时间:2008-03-28 12:40:50.0
可以考虑c++里面的vector加pair做..也许没那么烦...
----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <malloc.h>
typedef struct danxiang
{
        int c,e;
        struct danxiang * next;
}pn;
pn * create()
{
     pn * head, * p;
     int n,i=1;
     printf("输入多项式的个数n\n");
     printf("n= ");
     scanf("%d",&n);
     
     head=p=(pn*)malloc(sizeof(pn));
     while(n)
     {
             p->next=(pn*)malloc(sizeof(pn));
             p=p->next;
             printf("输入第%d单项式的系数和指数,以空格分开\n",i);
             scanf("%d %d",&p->c,&p->e);
             n--;
             i++;
     }
     p->next=NULL;
     return head;
}

pn * tongleixiang(pn * head)
{
     pn *p,*temp;
     p=head->next;
     while(p)
     {

             temp=p->next;
             if(temp!=NULL&&p->e==temp->e)//这里如果不判断temp是不是为空,当用到temp->e就会引发错误
             {
                  p->c+=temp->c;
                  p->next=temp->next;
                  free(temp);
             }
              else p=p->next;
     }
     return head;
}
void print(pn * head)
{
     pn * p=head->next;
     printf("F(x) = ");
     while(p)
     {
            
             if(p->c==1)
             {
                  if(p->e==0)
                  printf("%d",p->c);
                  else if(p->e==1)
                        printf("X");
                        else printf("X^%d",p->e);
             }
             else
             {
                  if(p->e==0)
                  printf("%d",p->c);
                  else if(p->e==1)
                       printf("%dX",p->c);
                       else printf("%dX^%d",p->c,p->e);
             }     
             p=p->next;
             if(p) printf(" + ");
     }
}
void freememory(pn * head)
{
     pn * q=head;
     while(q)
     {
     head=head->next;
     free(q);
     q=head;
     }
}
int main()
{
    pn *p,*q;
    p=create();
    q=tongleixiang(p);
    print(q);
    freememory(p);
    getchar();
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-3-28 13:03 编辑 [/it]]
----------------解决方案--------------------------------------------------------
多谢高手指教 终于明白了   可是这种错误在turbo c++3.0下为什么能够运行   在它下面运行就正确   是不是tc在内存管理上比较不同。?
----------------解决方案--------------------------------------------------------
我不用tc一直都用vc++6.0...你提的问题我不是很清楚..设计词法和语法分析..
----------------解决方案--------------------------------------------------------
  相关解决方案