#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]]