C语言实现一元多项式加法运算
以下是用C语言解决一元多项式的加法运算的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
float coef; // 系数
int exp; // 指数
struct Node *next; // 指向下一个节点的指针
} Node, *Polynomial;
// 创建一个新的节点
Node *createNode(float coef, int exp) {
Node *p = (Node*)malloc(sizeof(Node));
p->coef = coef;
p->exp = exp;
p->next = NULL;
return p;
}
// 创建一个多项式
Polynomial createPolynomial() {
Polynomial p = createNode(0, 0); // 头节点
Node *last = p; // 尾节点
int n;
printf("请输入多项式的项数:");
scanf("%d", &n);
printf("请依次输入每一项的系数和指数(以空格分隔):\n");
while (n--) {
float coef;
int exp;
scanf("%f %d", &coef, &exp);
Node *node = createNode(coef, exp);
last->next = node;
last = node;
}
return p;
}
// 打印一个多项式
void printPolynomial(Polynomial p) {
Node *node = p->next;
if (!node) {
printf("0\n");
return;
}
while (node) {
if (node->coef > 0 && node != p->next) {
printf("+");
}
printf("%0.2f", node->coef);
if (node->exp == 1) {
printf("x");
} else if (node->exp != 0) {
printf("x^%d", node->exp);
}
node = node->next;
}
printf("\n");
}
// 释放一个多项式的内存
void freePolynomial(Polynomial p) {
Node *node = p;
while (node) {
Node *next = node->next;
free(node);
node = next;
}
}
// 多项式相加
Polynomial add(Polynomial p1, Polynomial p2) {
Polynomial p = createNode(0, 0);
Node *last = p;
Node *node1 = p1->next;
Node *node2 = p2->next;
while (node1 && node2) {
if (node1->exp > node2->exp) {
last->next = createNode(node1->coef, node1->exp);
node1 = node1->next;
} else if (node1->exp < node2->exp) {
last->next = createNode(node2->coef, node2->exp);
node2 = node2->next;
} else {
float coef = node1->coef + node2->coef;
if (coef != 0) {
last->next = createNode(coef, node1->exp);
}
node1 = node1->next;
node2 = node2->next;
}
last = last->next;
}
while (node1) {
last->next = createNode(node1->coef, node1->exp);
node1 = node1->next;
last = last->next;
}
while (node2) {
last->next = createNode(node2->coef, node2->exp);
node2 = node2->next;
last = last->next;
}
return p;
}
int main() {
printf("请输入第一个多项式:\n");
Polynomial p1 = createPolynomial();
printf("请输入第二个多项式:\n");
Polynomial p2 = createPolynomial();
printf("第一个多项式为:");
printPolynomial(p1);
printf("第二个多项式为:");
printPolynomial(p2);
printf("它们的和为:");
Polynomial p = add(p1, p2);
printPolynomial(p);
freePolynomial(p1);
freePolynomial(p2);
freePolynomial(p);
return 0;
}
运行结果:
请输入第一个多项式:
请输入多项式的项数:3
请依次输入每一项的系数和指数(以空格分隔):
1 2
-2.5 1
3 0
请输入第二个多项式:
请输入多项式的项数:2
请依次输入每一项的系数和指数(以空格分隔):
-1.5 1
2 0
第一个多项式为:1.00x^2-2.50x+3.00
第二个多项式为:-1.50x+2.00
它们的和为:1.00x^2-4.00x+5.00
原文地址: https://www.cveoy.top/t/topic/lRHx 著作权归作者所有。请勿转载和采集!