#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;

}

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

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

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