C语言实现一元多项式加法运算
#include <stdio.h> #include <stdlib.h>
// 定义一个结构体表示一元多项式 typedef struct node { float coefficient; // 系数 int exponent; // 指数 struct node *next; // 指向下一个节点的指针 } Polynomial;
// 创建一个新节点 Polynomial *createNode(float coefficient, int exponent) { Polynomial *newNode = (Polynomial *) malloc(sizeof(Polynomial)); newNode->coefficient = coefficient; newNode->exponent = exponent; newNode->next = NULL; return newNode; }
// 插入节点 void insertNode(Polynomial **head, float coefficient, int exponent) { Polynomial *newNode = createNode(coefficient, exponent);
if (*head == NULL) { // 如果链表为空,直接将新节点作为头节点
*head = newNode;
} else {
Polynomial *current = *head;
Polynomial *prev = NULL;
while (current != NULL && exponent < current->exponent) { // 找到插入位置
prev = current;
current = current->next;
}
if (prev == NULL) { // 如果插入位置在链表开头
newNode->next = *head;
*head = newNode;
} else { // 插入到中间或末尾
prev->next = newNode;
newNode->next = current;
}
}
}
// 读取多项式 void readPolynomial(Polynomial **head) { int n; // 多项式的项数 float coefficient; // 系数 int exponent; // 指数
printf('请输入多项式的项数:');
scanf('%d', &n);
for (int i = 0; i < n; i++) {
printf('请输入第 %d 项的系数和指数:', i + 1);
scanf('%f %d', &coefficient, &exponent);
insertNode(head, coefficient, exponent);
}
}
// 打印多项式 void printPolynomial(Polynomial *head) { Polynomial *current = head;
while (current != NULL) {
printf('%.2f*x^%d', current->coefficient, current->exponent);
current = current->next;
if (current != NULL) {
printf(' + ');
} else {
printf('
'); } } }
// 一元多项式加法 Polynomial *addPolynomial(Polynomial *head1, Polynomial *head2) { Polynomial *result = NULL; Polynomial *current1 = head1; Polynomial *current2 = head2;
while (current1 != NULL && current2 != NULL) {
if (current1->exponent > current2->exponent) { // 项的指数不同,较大的插入结果链表中
insertNode(&result, current1->coefficient, current1->exponent);
current1 = current1->next;
} else if (current1->exponent < current2->exponent) { // 项的指数不同,较大的插入结果链表中
insertNode(&result, current2->coefficient, current2->exponent);
current2 = current2->next;
} else { // 项的指数相同,系数相加后插入结果链表中
float coefficient = current1->coefficient + current2->coefficient;
if (coefficient != 0) { // 只有系数不为0时才插入结果链表中
insertNode(&result, coefficient, current1->exponent);
}
current1 = current1->next;
current2 = current2->next;
}
}
// 将剩余的节点插入结果链表中
while (current1 != NULL) {
insertNode(&result, current1->coefficient, current1->exponent);
current1 = current1->next;
}
while (current2 != NULL) {
insertNode(&result, current2->coefficient, current2->exponent);
current2 = current2->next;
}
return result;
}
int main() { Polynomial *head1 = NULL; // 第一个多项式的头节点 Polynomial *head2 = NULL; // 第二个多项式的头节点 Polynomial *result = NULL; // 结果多项式的头节点
printf('请输入第一个多项式:\n');
readPolynomial(&head1);
printf('第一个多项式为:');
printPolynomial(head1);
printf('请输入第二个多项式:\n');
readPolynomial(&head2);
printf('第二个多项式为:');
printPolynomial(head2);
result = addPolynomial(head1, head2); // 计算结果多项式
printf('两个多项式的和为:');
printPolynomial(result);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/lRHs 著作权归作者所有。请勿转载和采集!