源码如下
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(Poly)
typedef struct term {
float coef;
int expn;
struct term* next;
}Poly, * Link;
void CreatePolyn(Link* p, int m);
void PrintPolyn(Link p);
int cmp(Link p1, Link p2);
Link AddPolyn(Link pa, Link pb);
int main()
{
Link P1, P2;
int L1, L2;
printf("请输入第一个多项式的项数:");
scanf_s("%d", &L1);
CreatePolyn(&P1, L1);
printf("第一个多项式为:");
PrintPolyn(P1);
printf("请输入第二个多项式的项数:");
scanf_s("%d", &L2);
CreatePolyn(&P2, L2);
printf("第二个多项式为:");
PrintPolyn(P2);
printf("\n");
printf("两个一元多项式相加的结果为:");
PrintPolyn(AddPolyn(P1, P2));
}
void CreatePolyn(Link* p, int m)
{
Link r, s;
int i;
*p = (Link)malloc(LEN);
r = *p;
for (i = 0; i < m; i++)
{
s = (Link)malloc(LEN);
printf("输入系数和指数(以空格隔开):");
scanf_s("%f %d", &s->coef, &s->expn);
r->next = s;
r = s;
}
r->next = NULL;
}
void PrintPolyn(Link p)
{
Link s;
s = p->next;
while (s)
{
printf("%.2f X^%d", s->coef, s->expn);
s = s->next;
if (s != NULL)
if (s->coef >= 0) printf("+");
}
printf("\n");
}
int cmp(Link a, Link b)
{
if (a->expn < b->expn) return -1;
else if (a->expn == b->expn) return 0;
else return 1;
}
Link AddPolyn(Link pa, Link pb)
{
Link newp, p, q, s, pc;
float sum;
p = pa->next;
q = pb->next;
newp = (Link)malloc(LEN);
pc = newp;
while (p && q) {
switch (cmp(p, q))
{
case -1:
s = (Link)malloc(LEN);
s->coef = p->coef;
s->expn = p->expn;
pc->next = s;
pc = s;
p = p->next;
break;
case 0://若比较两项的指数相等,则将两项系数相加后得到的项放入头结点为newp的链表中 ,且p,q同时向后遍历
sum = p->coef + q->coef;
if (sum != 0.0)
{
s = (Link)malloc(LEN);
s->coef = sum;
s->expn = p->expn;
pc->next = s;
pc = s;
}
p = p->next;
q = q->next;
break;
case 1:
s = (Link)malloc(LEN);
s->coef = q->coef;
s->expn = q->expn;
pc->next = s;
pc = s;
q = q->next;
break;
}
}
while (p)
{
s = (Link)malloc(LEN);
s->coef = p->coef;
s->expn = p->expn;
pc->next = s;
pc = s;
p = p->next;
}
while (q)
{
s = (Link)malloc(LEN);
s->coef = q->coef;
s->expn = q->expn;
pc->next = s;
pc = s;
q = q->next;
}
pc->next = NULL;
return newp;
}
运行结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0932c4fa34911f904e8020a7cc741f50.png)