编程实现一元多项式的加法运算。第一个一元多项式A; 第二个一元多项式B。 以(0,0)作为输入结束。多项式A和多项式B的和。使用指针
时间: 2023-05-29 13:05:37 浏览: 47
#include <stdio.h>
#include <stdlib.h>
typedef struct poly_node {
int coef; // 系数
int expn; // 指数
struct poly_node *next;
} PolyNode, *Poly;
Poly create_poly() {
Poly p = (Poly)malloc(sizeof(PolyNode));
p->next = NULL;
return p;
}
void append(Poly p, int coef, int expn) {
PolyNode *node = (PolyNode *)malloc(sizeof(PolyNode));
node->coef = coef;
node->expn = expn;
node->next = NULL;
while (p->next != NULL) {
p = p->next;
}
p->next = node;
}
void add_poly(Poly A, Poly B, Poly C) {
PolyNode *pa = A->next, *pb = B->next;
while (pa != NULL && pb != NULL) {
if (pa->expn == pb->expn) {
int coef = pa->coef + pb->coef;
if (coef != 0) {
append(C, coef, pa->expn);
}
pa = pa->next;
pb = pb->next;
} else if (pa->expn > pb->expn) {
append(C, pa->coef, pa->expn);
pa = pa->next;
} else {
append(C, pb->coef, pb->expn);
pb = pb->next;
}
}
while (pa != NULL) {
append(C, pa->coef, pa->expn);
pa = pa->next;
}
while (pb != NULL) {
append(C, pb->coef, pb->expn);
pb = pb->next;
}
}
void print_poly(Poly p) {
PolyNode *node = p->next;
while (node != NULL) {
printf("%dx^%d", node->coef, node->expn);
node = node->next;
if (node != NULL && node->coef > 0) {
printf("+");
}
}
printf("\n");
}
int main() {
Poly A = create_poly();
Poly B = create_poly();
Poly C = create_poly();
int coef, expn;
printf("请输入多项式A的系数和指数(以0,0结束):\n");
while (scanf("%d,%d", &coef, &expn) == 2 && coef != 0 && expn != 0) {
append(A, coef, expn);
}
printf("请输入多项式B的系数和指数(以0,0结束):\n");
while (scanf("%d,%d", &coef, &expn) == 2 && coef != 0 && expn != 0) {
append(B, coef, expn);
}
add_poly(A, B, C);
printf("多项式A:");
print_poly(A);
printf("多项式B:");
print_poly(B);
printf("多项式A+B:");
print_poly(C);
return 0;
}