C语言实现一元多项式加法运算 - 详细代码示例
#include <stdio.h> #include <stdlib.h>
typedef struct poly_node { int coef; // 系数 int expo; // 指数 struct poly_node *next; // 指向下一个节点的指针 } PolyNode;
PolyNode *create_poly_node(int coef, int expo) { PolyNode *node = (PolyNode *)malloc(sizeof(PolyNode)); node->coef = coef; node->expo = expo; node->next = NULL; return node; }
PolyNode *create_poly() { PolyNode *head = create_poly_node(0, 0); // 头节点 PolyNode *tail = head; // 尾节点 int n, coef, expo; printf("请输入多项式的项数:"); scanf("%d", &n); for (int i = 0; i < n; i++) { printf("请输入第%d项的系数和指数:", i + 1); scanf("%d%d", &coef, &expo); tail->next = create_poly_node(coef, expo); tail = tail->next; } return head; }
void print_poly(PolyNode *poly) { PolyNode *p = poly->next; while (p) { printf("%dX^%d", p->coef, p->expo); if (p->next) { printf(" + "); } p = p->next; } printf("\n"); }
PolyNode *add_poly(PolyNode *poly1, PolyNode *poly2) { PolyNode *head = create_poly_node(0, 0); // 头节点 PolyNode *tail = head; // 尾节点 PolyNode *p1 = poly1->next; PolyNode *p2 = poly2->next; while (p1 && p2) { if (p1->expo > p2->expo) { tail->next = create_poly_node(p1->coef, p1->expo); p1 = p1->next; } else if (p1->expo < p2->expo) { tail->next = create_poly_node(p2->coef, p2->expo); p2 = p2->next; } else { int coef = p1->coef + p2->coef; if (coef != 0) { tail->next = create_poly_node(coef, p1->expo); } p1 = p1->next; p2 = p2->next; } tail = tail->next; } while (p1) { tail->next = create_poly_node(p1->coef, p1->expo); p1 = p1->next; tail = tail->next; } while (p2) { tail->next = create_poly_node(p2->coef, p2->expo); p2 = p2->next; tail = tail->next; } return head; }
int main() { printf("请输入第一个多项式:\n"); PolyNode *poly1 = create_poly(); printf("第一个多项式为:"); print_poly(poly1);
printf("请输入第二个多项式:\n");
PolyNode *poly2 = create_poly();
printf("第二个多项式为:");
print_poly(poly2);
PolyNode *poly = add_poly(poly1, poly2);
printf("两个多项式的和为:");
print_poly(poly);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/lRHd 著作权归作者所有。请勿转载和采集!