设计一个函数 void add_poly(Polylist pa, Polylist pb) ,其功能是pb和pb的多项式进行相加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <stdio.h>
#define NULL 0

//其中Polylist是如下结构体:
typedef struct Polynode {
int coef; //因子
int exp; //幂
struct Polynode* next;
}Polynode, * Polylist;

//创建多项式的函数如下:
Polylist polycreate()
{
Polynode* rear, * head, * s;

int c, e;

rear = head = (Polynode*)malloc(sizeof(Polynode));
scanf("%d%d", &c, &e);
while (c != 0)
{
s = (Polynode*)malloc(sizeof(Polynode));
s->coef = c;
s->exp = e;
rear->next = s;
rear = s;
scanf("%d%d", &c, &e);
}
rear->next = NULL;
return(head);
}

/*设计一个函数
void add_poly(Polylist pa, Polylist pb)
其功能是pb和pb的多项式进行相加。*/
void add_poly(Polylist pa, Polylist pb)
{
Polylist p, q, pre, temp;
int sum;

p = pa->next;
q = pb->next;
pre = pa;
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 != 0)
{
pre->coef = sum;
pre->next = q;
pre = p;
p = p->next;
}
else
{
temp = p;
p = p->next;
free(temp);
}

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

if (q != NULL)
{
pre->next = q;
}
else
{
pre->next = p;
}

free(pb);
}

//显示多项式的函数如下
void print(Polylist p)
{
int j;

p = p->next;
while (p)
{
printf("%d", p->coef);
for (j = 0; j < p->exp; j++)
printf("*x");
if (p->next != NULL)
printf(" + ");
p = p->next;
}
printf("\n");
}

//当执行如下的main函数后
void main(int argc, char* argv[])
{
Polylist pa, pb; //定义两个表示多项式的链表

pa = polycreate(); //创建pa链表
pb = polycreate(); //创建pb链表
add_poly(pa, pb); //做加法,结果保存在pa链表上
print(pa); //将加法的结果用一个多项式格式显示在输出设备上
}
/*
如果从键盘输入的值如下:
5 0
3 5
4 8
0 0
5 0
3 5
4 8
0 0

则执行的结果为
10 + 6 * x * x * x * x * x + 8 * x * x * x * x * x * x * x * x
*/