你可以写一段基于c语言的一元多项式加法计算吗
时间: 2024-05-12 22:19:16 浏览: 10
当然,下面是一段基于c语言的一元多项式加法计算代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式的结构体
typedef struct PolyNode *Polynomial;
struct PolyNode {
int coef; // 系数
int expon; // 指数
Polynomial link; // 指向下一项的指针
};
// 初始化多项式
Polynomial initPoly() {
Polynomial p;
p = (Polynomial)malloc(sizeof(struct PolyNode));
p->link = NULL;
return p;
}
// 输出多项式
void printPoly(Polynomial p) {
if (!p) {
printf("0 0\n");
return;
}
while (p) {
printf("%d %d", p->coef, p->expon);
p = p->link;
if (p) printf(" ");
}
printf("\n");
}
// 多项式加法
Polynomial addPoly(Polynomial p1, Polynomial p2) {
Polynomial front, rear, temp;
int sum;
rear = (Polynomial)malloc(sizeof(struct PolyNode));
front = rear;
while (p1 && p2) {
if (p1->expon == p2->expon) {
sum = p1->coef + p2->coef;
if (sum) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = sum;
temp->expon = p1->expon;
rear->link = temp;
rear = temp;
}
p1 = p1->link;
p2 = p2->link;
} else if (p1->expon > p2->expon) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = p1->coef;
temp->expon = p1->expon;
rear->link = temp;
rear = temp;
p1 = p1->link;
} else {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = p2->coef;
temp->expon = p2->expon;
rear->link = temp;
rear = temp;
p2 = p2->link;
}
}
while (p1) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = p1->coef;
temp->expon = p1->expon;
rear->link = temp;
rear = temp;
p1 = p1->link;
}
while (p2) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = p2->coef;
temp->expon = p2->expon;
rear->link = temp;
rear = temp;
p2 = p2->link;
}
rear->link = NULL;
temp = front;
front = front->link;
free(temp);
return front;
}
int main() {
// 初始化多项式p1和p2
Polynomial p1, p2;
p1 = initPoly();
p2 = initPoly();
// 输入多项式p1和p2
int n1, n2;
scanf("%d", &n1);
for (int i = 0; i < n1; i++) {
int coef, expon;
scanf("%d %d", &coef, &expon);
Polynomial temp;
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = coef;
temp->expon = expon;
temp->link = NULL;
p1->link = temp;
p1 = temp;
}
scanf("%d", &n2);
for (int i = 0; i < n2; i++) {
int coef, expon;
scanf("%d %d", &coef, &expon);
Polynomial temp;
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = coef;
temp->expon = expon;
temp->link = NULL;
p2->link = temp;
p2 = temp;
}
// 输出多项式p1和p2
printPoly(p1->link);
printPoly(p2->link);
// 计算多项式p1和p2的和并输出
Polynomial sum;
sum = addPoly(p1->link, p2->link);
printPoly(sum);
return 0;
}
```
输入格式:
第一行:第一个多项式的项数n1
接下来n1行:每行两个整数,表示第一个多项式的一项的系数和指数
接下来一行:第二个多项式的项数n2
接下来n2行:每行两个整数,表示第二个多项式的一项的系数和指数
输出格式:
第一行:第一个多项式
第二行:第二个多项式
第三行:两个多项式的和
例如,输入:
```
3
3 5
2 3
5 2
2
-1 3
3 2
```
则输出:
```
3 5 2 3 5 2
-1 3 3 2
3 5 2 3 8 2
```