#include <stdio.h> #include <stdlib.h>

typedef struct node { float coef; // 系数 int expn; // 指数 struct node *next; // 指向下一个节点的指针 } node, *pnode;

void create_poly(pnode *p); // 创建多项式 void add_poly(pnode *p1, pnode *p2, pnode *p3); // 多项式相加 void print_poly(pnode p); // 输出多项式

int main() { pnode p1, p2, p3; printf('请输入第一个多项式:\n'); create_poly(&p1); printf('第一个多项式为:\n'); print_poly(p1); printf('请输入第二个多项式:\n'); create_poly(&p2); printf('第二个多项式为:\n'); print_poly(p2); printf('两个多项式相加的结果为:\n'); add_poly(&p1, &p2, &p3); print_poly(p3); return 0; }

void create_poly(pnode *p) { *p = (pnode) malloc(sizeof(node)); // 创建头节点 (*p)->next = NULL; pnode ptr = *p; int n; float coef; int expn; printf('请输入多项式的项数:\n'); scanf('%d', &n); printf('请依次输入每一项的系数和指数:\n'); for (int i = 0; i < n; i++) { pnode new_node = (pnode) malloc(sizeof(node)); // 创建新节点 scanf('%f %d', &coef, &expn); new_node->coef = coef; new_node->expn = expn; new_node->next = NULL; ptr->next = new_node; ptr = new_node; } }

void add_poly(pnode *p1, pnode *p2, pnode *p3) { *p3 = (pnode) malloc(sizeof(node)); // 创建结果多项式的头节点 (*p3)->next = NULL; pnode ptr1 = (*p1)->next; pnode ptr2 = (*p2)->next; pnode ptr3 = *p3; while (ptr1 && ptr2) { // 两个多项式都未遍历完 if (ptr1->expn > ptr2->expn) { // p1的指数大于p2的指数 pnode new_node = (pnode) malloc(sizeof(node)); // 创建新节点 new_node->coef = ptr1->coef; new_node->expn = ptr1->expn; new_node->next = NULL; ptr3->next = new_node; ptr3 = new_node; ptr1 = ptr1->next; } else if (ptr1->expn < ptr2->expn) { // p1的指数小于p2的指数 pnode new_node = (pnode) malloc(sizeof(node)); // 创建新节点 new_node->coef = ptr2->coef; new_node->expn = ptr2->expn; new_node->next = NULL; ptr3->next = new_node; ptr3 = new_node; ptr2 = ptr2->next; } else { // p1和p2的指数相等 pnode new_node = (pnode) malloc(sizeof(node)); // 创建新节点 new_node->coef = ptr1->coef + ptr2->coef; new_node->expn = ptr1->expn; new_node->next = NULL; ptr3->next = new_node; ptr3 = new_node; ptr1 = ptr1->next; ptr2 = ptr2->next; } } while (ptr1) { // 遍历p1剩余项 pnode new_node = (pnode) malloc(sizeof(node)); // 创建新节点 new_node->coef = ptr1->coef; new_node->expn = ptr1->expn; new_node->next = NULL; ptr3->next = new_node; ptr3 = new_node; ptr1 = ptr1->next; } while (ptr2) { // 遍历p2剩余项 pnode new_node = (pnode) malloc(sizeof(node)); // 创建新节点 new_node->coef = ptr2->coef; new_node->expn = ptr2->expn; new_node->next = NULL; ptr3->next = new_node; ptr3 = new_node; ptr2 = ptr2->next; } }

void print_poly(pnode p) { pnode ptr = p->next; while (ptr) { if (ptr->coef > 0 && ptr != p->next) { // 系数为正数且不是第一项 printf('+'); } printf('%.2f', ptr->coef); if (ptr->expn > 1) { // 指数大于1 printf('x^%d', ptr->expn); } else if (ptr->expn == 1) { // 指数等于1 printf('x'); } ptr = ptr->next; } printf('\n'); }

C语言实现一元多项式加法运算

原文地址: https://www.cveoy.top/t/topic/lRHz 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录