C语言实现一元多项式加减乘除运算
当然可以帮你实现一元多项式的加减乘除!以下是使用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, "ient, "ientSize, &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);
}
这段代码实现了一元多项式的加减乘除运算,并在主函数中进行了演示。你可以根据自己的需求,输入多项式的系数和指数,然后查看运算结果。
请注意,这只是一个简单的示例,可能并不涵盖所有的边界情况和错误处理。在实际应用中,你可能需要进行更多的验证和优化。
原文地址: https://www.cveoy.top/t/topic/j9j 著作权归作者所有。请勿转载和采集!