pta7-1一元多项式的加法 C语言
时间: 2024-05-07 11:18:29 浏览: 177
C语言实现一元多项式相加
以下是一元多项式的加法 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int coef; // 系数
int exp; // 指数
struct node *next;
} Node;
Node *createNode(int coef, int exp) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->coef = coef;
newNode->exp = exp;
newNode->next = NULL;
return newNode;
}
Node *addPoly(Node *poly1, Node *poly2) {
Node *head = createNode(0, 0);
Node *p = head;
while (poly1 && poly2) {
if (poly1->exp > poly2->exp) {
p->next = createNode(poly1->coef, poly1->exp);
poly1 = poly1->next;
} else if (poly1->exp < poly2->exp) {
p->next = createNode(poly2->coef, poly2->exp);
poly2 = poly2->next;
} else {
int sum = poly1->coef + poly2->coef;
if (sum != 0) {
p->next = createNode(sum, poly1->exp);
}
poly1 = poly1->next;
poly2 = poly2->next;
}
p = p->next;
}
p->next = poly1 ? poly1 : poly2;
return head->next;
}
void printPoly(Node *poly) {
while (poly) {
printf("%dx^%d", poly->coef, poly->exp);
if (poly->next && poly->next->coef > 0) {
printf("+");
}
poly = poly->next;
}
printf("\n");
}
int main() {
int n, coef, exp;
Node *poly1 = createNode(0, 0);
Node *poly2 = createNode(0, 0);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", &coef, &exp);
Node *node = createNode(coef, exp);
node->next = poly1->next;
poly1->next = node;
}
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d%d", &coef, &exp);
Node *node = createNode(coef, exp);
node->next = poly2->next;
poly2->next = node;
}
Node *sum = addPoly(poly1->next, poly2->next);
printPoly(sum);
return 0;
}
```
在这个代码中,我们首先定义了一个结构体 `Node` 来存储一元多项式中的每一项。其中,`coef` 表示系数,`exp` 表示指数,`next` 表示指向下一项的指针。
然后,我们通过 `createNode` 函数来创建一个新的节点,并将 `coef` 和 `exp` 初始化为指定的值。
接下来,我们定义了一个 `addPoly` 函数来实现多项式的加法。该函数输入两个多项式的头节点指针 `poly1` 和 `poly2`,并返回一个新的多项式的头节点指针。
在 `addPoly` 函数中,我们先创建一个新的头节点 `head`,然后使用指针 `p` 指向 `head`,依次遍历 `poly1` 和 `poly2` 中的每一项,将它们相加并存储在一个新的节点中,将该节点插入到新多项式的尾部。最后,将剩余的多项式直接连接到新多项式的尾部。
最后,我们定义了一个 `printPoly` 函数来输出一元多项式,然后在 `main` 函数中读入两个多项式,并调用 `addPoly` 函数来求和,最后输出结果。
阅读全文