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

#define MAX_TERMS 101

typedef struct {
    float coef;
    int expon;
} polynomial;

polynomial terms[MAX_TERMS];
int avail = 0;

void attach(float coefficient, int exponent) {
    if (avail >= MAX_TERMS) {
        fprintf(stderr, "Too many terms in the polynomial\n");
        exit(EXIT_FAILURE);
    }
    terms[avail].coef = coefficient;
    terms[avail].expon = exponent;
    avail++;
}

void polynomial_add(polynomial *poly1, int terms1, polynomial *poly2, int terms2, polynomial *result[], int *terms_result) {
    int i = 0, j = 0;
    *terms_result = 0;
    while (i < terms1 && j < terms2) {
        if (poly1[i].expon == poly2[j].expon) {
            float coefficient = poly1[i].coef + poly2[j].coef;
            if (coefficient != 0.0) {
                attach(coefficient, poly1[i].expon);
                *result = terms + avail - 1;
                (*terms_result)++;
            }
            i++;
            j++;
        } else if (poly1[i].expon > poly2[j].expon) {
            attach(poly1[i].coef, poly1[i].expon);
            *result = terms + avail - 1;
            (*terms_result)++;
            i++;
        } else {
            attach(poly2[j].coef, poly2[j].expon);
            *result = terms + avail - 1;
            (*terms_result)++;
            j++;
        }
    }
    for (; i < terms1; i++) {
        attach(poly1[i].coef, poly1[i].expon);
        *result = terms + avail - 1;
        (*terms_result)++;
    }
    for (; j < terms2; j++) {
        attach(poly2[j].coef, poly2[j].expon);
        *result = terms + avail - 1;
        (*terms_result)++;
    }
}

void print_polynomial(polynomial *poly, int terms) {
    for (int i = 0; i < terms; i++) {
        printf("%.1fx^%d", poly[i].coef, poly[i].expon);
        if (i < terms - 1) {
            printf(" + ");
        }
    }
    printf("\n");
}

int main() {
    polynomial poly1[MAX_TERMS] = {{5, 4}, {4, 3}, {3, 2}, {2, 1}, {1, 0}};
    polynomial poly2[MAX_TERMS] = {{2, 4}, {4, 2}, {6, 1}, {8, 0}};
    polynomial *result[MAX_TERMS];
    int terms_result;
    polynomial_add(poly1, 5, poly2, 4, result, &terms_result);
    printf("Result: ");
    print_polynomial(*result, terms_result);
    return 0;
}

本文提供了一个用C语言实现一元多项式加法运算的完整代码示例,并详细解释了代码逻辑。该代码采用结构体和指针来存储和操作多项式,并通过函数实现加法运算功能。

代码解释:

  1. 结构体定义:
typedef struct {
    float coef;
    int expon;
} polynomial;

定义了一个名为polynomial的结构体,用于存储多项式的系数和指数。

  1. 全局数组和变量:
polynomial terms[MAX_TERMS];
int avail = 0;

定义了一个全局数组terms,用来存储多项式的项,并定义一个变量avail来记录当前数组中可用位置的数量。

  1. attach函数:
void attach(float coefficient, int exponent) {
    // ...
}

该函数将一个新的项添加到terms数组中,并将avail计数器加1。

  1. polynomial_add函数:
void polynomial_add(polynomial *poly1, int terms1, polynomial *poly2, int terms2, polynomial *result[], int *terms_result) {
    // ...
}

该函数接收两个多项式的指针、项数和指向结果多项式的指针,实现两个多项式的加法运算,并更新结果多项式的项数。

  1. print_polynomial函数:
void print_polynomial(polynomial *poly, int terms) {
    // ...
}

该函数接收一个多项式的指针和项数,将多项式以标准格式输出到控制台。

  1. main函数:
int main() {
    // ...
}

main函数定义了两个多项式poly1poly2,调用polynomial_add函数执行加法运算,并调用print_polynomial函数输出结果。

本代码示例演示了如何使用C语言实现一元多项式的加法运算,并通过结构体和指针来有效地操作多项式数据。该代码可以作为学习和参考,并可以进一步扩展实现其他多项式运算功能,例如减法、乘法等。

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

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

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