具体注释以及输入规则请点击该链接:https://blog.csdn.net/goodboydan/article/details/78409281
————————————————
node.h文件代码
#ifndef NODE_H_INCLUDED
#define NODE_H_INCLUDED
#include <stdio.h>
typedef struct Node
{
float coef;
int expo;
struct Node* Next;
}Node;
typedef struct Node* PNode;
void PolySort(PNode head,PNode qNode);
void printfPoly(PNode head);
PNode AddPoly(PNode pa,PNode pb);
PNode checkPoly(PNode p);
#endif // NODE_H_INCLUDED
node.c文件代码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <node.h>
// 本函数引用原创作者代码(略有修改)
void PolySort(PNode head,PNode qNode)
{
PNode p=head;
while(p->Next)
{
if(p->Next->expo < qNode->expo)
{
qNode->Next=p->Next;
p->Next=qNode;
break;
}
else if(p->Next->expo == qNode->expo)
{
float sum=p->Next->coef+qNode->coef;
p->Next->coef=sum;
break;
}
p=p->Next;
}
if(p->Next==NULL)
{
p->Next=qNode;
}
}
// 本函数引用原创作者代码(略有修改)
void printfPoly(PNode head)
{
PNode tmp=head->Next;
if(tmp->coef==0) printf("%.3f",tmp->coef);
else printf("%.3fX^%d",tmp->coef,tmp->expo);
tmp=tmp->Next;
while(tmp)
{
if(tmp->coef>0)
{
printf("+%.3fX^%d",tmp->coef,tmp->expo);
}
else if(tmp->coef<0)
{
printf("%.3fX^%d",tmp->coef,tmp->expo);
}
tmp=tmp->Next;
}
}
// 多项式相加
PNode AddPoly(PNode pa,PNode pb)
{
Node *p=pa->Next;
Node *q=pb->Next;
Node *Head=(PNode)malloc(sizeof(struct Node));
Head->Next=NULL;
Node *current=Head;
while(p&&q)
{
Node *snode=(PNode)malloc(sizeof(struct Node));
snode->Next=NULL;
if(p->expo > q->expo)
{
snode->coef=p->coef;
snode->expo=p->expo;
p=p->Next;
}
else if(p->expo==q->expo)
{
float x=p->coef+q->coef;
snode->coef=x;
snode->expo=p->expo;
p=p->Next;
q=q->Next;
}
else
{
snode->coef=q->coef;
snode->expo=q->expo;
q=q->Next;
}
current->Next=snode;
current=snode;
}
while(p)
{
Node* snode=(PNode)malloc(sizeof(struct Node));
snode->Next=NULL;
snode->coef=p->coef;
snode->expo=p->expo;
current->Next=snode;
current=snode;
p=p->Next;
}
while(q)
{
Node* snode=(PNode)malloc(sizeof(struct Node));
snode->Next=NULL;
snode->coef=q->coef;
snode->expo=q->expo;
current->Next=snode;
current=snode;
q=q->Next;
}
return Head;
}
// 用于除去多项式中的零
PNode checkPoly(Node* p)
{
Node* saveHead=p;
Node* current=p->Next;
Node* tmp;
while(current)
{
if(current->coef==0 && current->Next==NULL && p==saveHead)
{
return saveHead;
}
else if(current->coef==0)
{
tmp=current;
p->Next=current=current->Next;
free(tmp);
if(!current) break;
}
else
{
p=current;
current=current->Next;
}
}
return saveHead;
}
main.c文件代码
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <node.h>
int main()
{
float coef;
int expo,n;
PNode polysum;
PNode head1=(PNode)malloc(sizeof(struct Node));
PNode head2=(PNode)malloc(sizeof(struct Node));
PNode tem=NULL;
head1->Next=NULL;
head2->Next=NULL;
printf("n:\n");
scanf("%d",&n);
printf("input(Poly1):\n");
while(n--)
{
scanf("%f,%d",&coef,&expo);
tem=(PNode)malloc(sizeof(struct Node));
tem->coef=coef;
tem->expo=expo;
tem->Next=NULL;
PolySort(head1,tem);
}
printf("Poly:\n");
head1=checkPoly(head1);
printfPoly(head1);
printf("\n");
printf("n:\n");
scanf("%d",&n);
printf("input(Poly2:)\n");
while(n--)
{
scanf("%f,%d",&coef,&expo);
tem=(PNode)malloc(sizeof(struct Node));
tem->coef=coef;
tem->expo=expo;
tem->Next=NULL;
PolySort(head2,tem);
}
printf("Poly2:\n");
head2=checkPoly(head2);
printfPoly(head2);
printf("\n Sum:\n");
polysum=AddPoly(head1,head2);
printfPoly(polysum);
return 0;
}
本代码使用Code::Blocks 20.03软件测试通过,如有错误,恳请各位批评指正!