当然可以帮你实现一元多项式的加减乘除!以下是使用C语言实现的示例代码:

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

// 结构体定义多项式的每一项
typedef struct {
    int coefficient;  // 系数
    int exponent;     // 指数
} Term;

// 函数声明
void readPolynomial(Term **poly, int *size);
void displayPolynomial(Term *poly, int size);
void addPolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **result, int *resultSize);
void subtractPolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **result, int *resultSize);
void multiplyPolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **result, int *resultSize);
void dividePolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **quotient, int *quotientSize, Term **remainder, int *remainderSize);
void destroyPolynomial(Term *poly);

int main() {
    Term *poly1 = NULL, *poly2 = NULL, *result = NULL, *quotient = NULL, *remainder = NULL;
    int size1 = 0, size2 = 0, resultSize = 0, quotientSize = 0, remainderSize = 0;

    printf("--- Polynomial 1 ---\n");
    readPolynomial(&poly1, &size1);
    printf("--- Polynomial 1 Entered ---\n");
    displayPolynomial(poly1, size1);

    printf("--- Polynomial 2 ---\n");
    readPolynomial(&poly2, &size2);
    printf("--- Polynomial 2 Entered ---\n");
    displayPolynomial(poly2, size2);

    // 加法
    addPolynomials(poly1, size1, poly2, size2, &result, &resultSize);
    printf("--- Polynomial Addition ---\n");
    displayPolynomial(result, resultSize);

    // 减法
    subtractPolynomials(poly1, size1, poly2, size2, &result, &resultSize);
    printf("--- Polynomial Subtraction ---\n");
    displayPolynomial(result, resultSize);

    // 乘法
    multiplyPolynomials(poly1, size1, poly2, size2, &result, &resultSize);
    printf("--- Polynomial Multiplication ---\n");
    displayPolynomial(result, resultSize);

    // 除法
    dividePolynomials(poly1, size1, poly2, size2, &quotient, &quotientSize, &remainder, &remainderSize);
    printf("--- Polynomial Division ---\n");
    printf("Quotient: ");
    displayPolynomial(quotient, quotientSize);
    printf("Remainder: ");
    displayPolynomial(remainder, remainderSize);

    // 释放内存
    destroyPolynomial(poly1);
    destroyPolynomial(poly2);
    destroyPolynomial(result);
    destroyPolynomial(quotient);
    destroyPolynomial(remainder);

    return 0;
}

// 读取多项式的每一项
void readPolynomial(Term **poly, int *size) {
    printf("Enter the number of terms: ");
    scanf("%d", size);

    *poly = (Term*)malloc((*size) * sizeof(Term));

    for (int i = 0; i < *size; i++) {
        printf("Enter coefficient and exponent for term %d: ", i + 1);
        scanf("%d%d", &((*poly)[i].coefficient), &((*poly)[i].exponent));
    }
}

// 显示多项式
void displayPolynomial(Term *poly, int size) {
    for (int i = 0; i < size; i++) {
        printf("%dx^%d ", poly[i].coefficient, poly[i].exponent);

        if (i != size - 1) {
            if (poly[i + 1].coefficient >= 0)
                printf("+ ");
            else
                printf("- ");
        }
    }

    printf("\n");
}

// 多项式加法
void addPolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **result, int *resultSize) {
    int resultCapacity = size1 + size2;
    *result = (Term*)malloc(resultCapacity * sizeof(Term));

    int i = 0, j = 0, k = 0;
    while (i < size1 && j < size2) {
        if (poly1[i].exponent > poly2[j].exponent) {
            (*result)[k++] = poly1[i++];
        } else if (poly1[i].exponent < poly2[j].exponent) {
            (*result)[k++] = poly2[j++];
        } else {
            (*result)[k].coefficient = poly1[i].coefficient + poly2[j].coefficient;
            (*result)[k].exponent = poly1[i].exponent;
            i++;
            j++;
            k++;
        }
    }

    while (i < size1) {
        (*result)[k++] = poly1[i++];
    }

    while (j < size2) {
        (*result)[k++] = poly2[j++];
    }

    *resultSize = k;
}

// 多项式减法
void subtractPolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **result, int *resultSize) {
    int resultCapacity = size1 + size2;
    *result = (Term*)malloc(resultCapacity * sizeof(Term));

    int i = 0, j = 0, k = 0;
    while (i < size1 && j < size2) {
        if (poly1[i].exponent > poly2[j].exponent) {
            (*result)[k++] = poly1[i++];
        } else if (poly1[i].exponent < poly2[j].exponent) {
            (*result)[k].coefficient = -poly2[j].coefficient;
            (*result)[k].exponent = poly2[j].exponent;
            j++;
            k++;
        } else {
            (*result)[k].coefficient = poly1[i].coefficient - poly2[j].coefficient;
            (*result)[k].exponent = poly1[i].exponent;
            i++;
            j++;
            k++;
        }
    }

    while (i < size1) {
        (*result)[k++] = poly1[i++];
    }

    while (j < size2) {
        (*result)[k].coefficient = -poly2[j].coefficient;
        (*result)[k].exponent = poly2[j].exponent;
        j++;
        k++;
    }

    *resultSize = k;
}

// 多项式乘法
void multiplyPolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **result, int *resultSize) {
    int resultCapacity = size1 * size2;
    *result = (Term*)malloc(resultCapacity * sizeof(Term));

    int k = 0;
    for (int i = 0; i < size1; i++) {
        for (int j = 0; j < size2; j++) {
            (*result)[k].coefficient = poly1[i].coefficient * poly2[j].coefficient;
            (*result)[k].exponent = poly1[i].exponent + poly2[j].exponent;
            k++;
        }
    }

    *resultSize = k;
}

// 多项式除法
void dividePolynomials(Term *poly1, int size1, Term *poly2, int size2, Term **quotient, int *quotientSize, Term **remainder, int *remainderSize) {
    *quotient = (Term*)malloc(size1 * sizeof(Term));
    *remainder = (Term*)malloc(size1 * sizeof(Term));

    int quotientIndex = 0, remainderIndex = 0;
    for (int i = 0; i < size1; i++) {
        int coeff = poly1[i].coefficient / poly2[0].coefficient;
        int expon = poly1[i].exponent - poly2[0].exponent;

        (*quotient)[quotientIndex].coefficient = coeff;
        (*quotient)[quotientIndex].exponent = expon;
        quotientIndex++;

        for (int j = 0; j < size2; j++) {
            poly1[i + j].coefficient -= (coeff * poly2[j].coefficient);
        }
    }

    for (int i = 0; i < size1; i++) {
        if (poly1[i].coefficient != 0) {
            (*remainder)[remainderIndex++] = poly1[i];
        }
    }

    *quotientSize = quotientIndex;
    *remainderSize = remainderIndex;
}

// 释放多项式内存
void destroyPolynomial(Term *poly) {
    free(poly);
}

这段代码实现了一元多项式的加减乘除运算,并在主函数中进行了演示。你可以根据自己的需求,输入多项式的系数和指数,然后查看运算结果。

请注意,这只是一个简单的示例,可能并不涵盖所有的边界情况和错误处理。在实际应用中,你可能需要进行更多的验证和优化。

C语言实现一元多项式加减乘除运算

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

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