C语言实现一元多项式加法运算
#include <stdio.h> #include <stdlib.h>
typedef struct node { int coef; // 系数 int exp; // 指数 struct node *next; } Node;
Node* create_poly() { Node head = (Node)malloc(sizeof(Node)); head->next = NULL; Node *tail = head; int coef, exp; printf('请输入多项式的系数和指数,以0 0结束:\n'); while (1) { scanf('%d %d', &coef, &exp); if (coef == 0 && exp == 0) { break; } Node new_node = (Node)malloc(sizeof(Node)); new_node->coef = coef; new_node->exp = exp; new_node->next = NULL; tail->next = new_node; tail = new_node; } return head; }
void print_poly(Node *head) { Node *p = head->next; while (p) { printf('%dX^%d', p->coef, p->exp); if (p->next != NULL && p->next->coef > 0) { printf('+'); } p = p->next; } printf('\n'); }
Node* add_poly(Node *p1, Node *p2) { Node head = (Node)malloc(sizeof(Node)); head->next = NULL; Node *tail = head; Node *q1 = p1->next; Node *q2 = p2->next; while (q1 && q2) { if (q1->exp > q2->exp) { Node new_node = (Node)malloc(sizeof(Node)); new_node->coef = q1->coef; new_node->exp = q1->exp; new_node->next = NULL; tail->next = new_node; tail = new_node; q1 = q1->next; } else if (q1->exp < q2->exp) { Node new_node = (Node)malloc(sizeof(Node)); new_node->coef = q2->coef; new_node->exp = q2->exp; new_node->next = NULL; tail->next = new_node; tail = new_node; q2 = q2->next; } else { Node new_node = (Node)malloc(sizeof(Node)); new_node->coef = q1->coef + q2->coef; new_node->exp = q1->exp; new_node->next = NULL; tail->next = new_node; tail = new_node; q1 = q1->next; q2 = q2->next; } } if (q1) { tail->next = q1; } if (q2) { tail->next = q2; } return head; }
int main() { printf('请输入第一个多项式:\n'); Node *p1 = create_poly(); printf('第一个多项式为:'); print_poly(p1); printf('请输入第二个多项式:\n'); Node *p2 = create_poly(); printf('第二个多项式为:'); print_poly(p2); Node *p3 = add_poly(p1, p2); printf('两个多项式相加的结果为:'); print_poly(p3); return 0; }
原文地址: https://www.cveoy.top/t/topic/lRG9 著作权归作者所有。请勿转载和采集!