该程序包括三个部分:头文件,多项式功能函数,主函数
`polynomial.h:定义了多项式相关的结构体和函数声明。 `Term` 结构体用于表示多项式的每一项 `Polynomial` 结构体用于表示整个多项式。同时定义了创建多项式、插入项、显示多项式、释放多项式、多项式相加和多项式相乘等函数的声明。
`polynomial.c`:实现了多项功能的函数。其中 `createPolynomial` 函数用于创建多项式,`insertTerm` 函数用于插入新的项到多项式中,按照项的次数从低到高排序。`displayPolynomial` 函数用于显示多项式的每一项。`freePolynomial` 函数用于释放多项式所占用的内存。`addPolynomials` 函数用于计算两个多项式的和。`multiplyPolynomials` 函数用于计算两个多项式的乘积。
3. `main.c`:主程序文件,包含了 `main` 函数。在 `main` 函数中,首先创建两个空的多项式 `polyA` 和 `polyB`,然后要求用户输入每个多项式的非零项的个数及系数和次数。接着将用户输入的项依次插入到多项式中。然后显示输入的两个多项式。接下来计算两个多项式的和和乘积,分别保存在新的多项式中,并显示结果。最后释放所有多项式占用的内存。
以下是代码部分:
`polynomial.h
#ifndef POLYNOMIAL_H
#define POLYNOMIAL_H
// 多项式结构体创建 定义了一个多项式和项的结构体
//Term 结构体包含了一个项的系数和指数,以及一个指向下一个项的指针。=
typedef struct Term {
int coefficient;
int power;
struct Term* next;
} Term;
//Polynomial 结构体包含指向多项式的第一个项的指针。
typedef struct Polynomial {
Term* head;
} Polynomial;
//声明了一些函数来操作多项式
//createPolynomial: 用于创建一个新的多项式。
Polynomial* createPolynomial();
//insertTerm: 用于向多项式中插入一个新的项。
void insertTerm(Polynomial* poly, int coeff, int power);
//displayPolynomial: 用于显示多项式的内容。
void displayPolynomial(Polynomial* poly);
//freePolynomial: 用于释放多项式所占用的内存。
void freePolynomial(Polynomial* poly);
//addPolynomials: 用于将两个多项式相加。
Polynomial* addPolynomials(Polynomial* polyA, Polynomial* polyB);
//multiplyPolynomials: 用于将两个多项式相乘
Polynomial* multiplyPolynomials(Polynomial* polyA, Polynomial* polyB);
#endif /* POLYNOMIAL_H */
polynomial.c
#include <stdio.h>
#include <stdlib.h>
#include "polynomial.h"
//实现了多项式的基本操作
//createPolynomial() 函数用于创建一个空的多项式,
//分配了一个 Polynomial 结构体,并初始化其中的 head 为 NULL。
Polynomial* createPolynomial() {
Polynomial* poly = (Polynomial*)malloc(sizeof(Polynomial));
if (poly == NULL) {
printf("内存分配失败.\n");
exit(1);
}
poly->head = NULL;
return poly;
}
//insertTerm() 函数用于向多项式中插入一个新的项,分配了一个多项式结构体,按照指数从小到大的顺序插入到多项式中。
void insertTerm(Polynomial* poly, int coeff, int power) {
Term* newTerm = (Term*)malloc(sizeof(Term));
if (newTerm == NULL) {
printf("内存分配失败.\n");
exit(1);
}
newTerm->coefficient = coeff;
newTerm->power = power;
newTerm->next = NULL;
if (poly->head == NULL || power < poly->head->power) {
newTerm->next = poly->head;
poly->head = newTerm;
} else {
Term* current = poly->head;
while (current->next != NULL && current->next->power <= power) {
current = current->next;
}
newTerm->next = current->next;
current->next = newTerm;
}
}
//displayPolynomial() 函数用于显示多项式的内容,按照项的格式 (系数)x^指数 逐项打印多项式的各项。
void displayPolynomial(Polynomial* poly) {
if (poly == NULL || poly->head == NULL) {
printf("多项式为空.\n");
return;
}
Term* current = poly->head;
while (current != NULL) {
printf("(%d)x^%d ", current->coefficient, current->power);
if (current->next != NULL) {
printf("+ ");
}
current = current->next;
}
printf("\n");
}
//释放多项式所占的内存
void freePolynomial(Polynomial* poly) {
if (poly == NULL) {
return;
}
Term* current = poly->head;
while (current != NULL) {
Term* temp = current;
current = current->next;
free(temp);
}
free(poly);
}
//addPolynomials() 函数用于实现多项式的加法,按照指数的大小合并两个多项式的项,并返回结果多项式。
Polynomial* addPolynomials(Polynomial* polyA, Polynomial* polyB) {
Polynomial* result = createPolynomial();
Term* currentA = polyA->head;
Term* currentB = polyB->head;
while (currentA != NULL && currentB != NULL) {
if (currentA->power > currentB->power) {
insertTerm(result, currentA->coefficient, currentA->power);
currentA = currentA->next;
} else if (currentA->power < currentB->power) {
insertTerm(result, currentB->coefficient, currentB->power);
currentB = currentB->next;
} else {
insertTerm(result, currentA->coefficient + currentB->coefficient, currentA->power);
currentA = currentA->next;
currentB = currentB->next;
}
}
while (currentA != NULL) {
insertTerm(result, currentA->coefficient, currentA->power);
currentA = currentA->next;
}
while (currentB != NULL) {
insertTerm(result, currentB->coefficient, currentB->power);
currentB = currentB->next;
}
return result;
}
//multiplyPolynomials() 函数用于实现多项式的乘法,将两个多项式的各项相乘并相加得到结果多项式。
Polynomial* multiplyPolynomials(Polynomial* polyA, Polynomial* polyB) {
Polynomial* result = createPolynomial();
Term* currentA = polyA->head;
while (currentA != NULL) {
Term* currentB = polyB->head;
while (currentB != NULL) {
int coeff = currentA->coefficient * currentB->coefficient;
int power = currentA->power + currentB->power;
insertTerm(result, coeff, power);
currentB = currentB->next;
}
currentA = currentA->next;
}
return result;
}
main.c
#include <stdio.h>
#include "polynomial.h"
//导入头文件"polynomial.h"
//创建多项式
//插入多项式的项
//显示多项式
//多项式相加
//多项式相乘
int main() {
//创建了两个多项式polyA和polyB
Polynomial* polyA = createPolynomial();
Polynomial* polyB = createPolynomial();
//交互界面
//多项式A和B的项数和系数幂值对。
int termsA, termsB;
printf("请输入多项式A的项数: ");
scanf("%d", &termsA);
printf("请入多项式A的系数幂值对:\n");
for (int i = 0; i < termsA; i++) {
int coeff, power;
scanf("%d %d", &coeff, &power);
insertTerm(polyA, coeff, power);
}
printf("请输入多项式B的项数: ");
scanf("%d", &termsB);
printf("请输入多项式B的系数幂值对:\n");
for (int i = 0; i < termsB; i++) {
int coeff, power;
scanf("%d %d", &coeff, &power);
insertTerm(polyB, coeff, power);
}
printf("多项式A: ");
displayPolynomial(polyA);
printf("多项式B: ");
displayPolynomial(polyB);
Polynomial* sum = addPolynomials(polyA, polyB);
printf("多项式的和: ");
displayPolynomial(sum);
Polynomial* product = multiplyPolynomials(polyA, polyB);
printf("多项式的乘积: ");
displayPolynomial(product);
//释放了内存并结束程序。
freePolynomial(polyA);
freePolynomial(polyB);
freePolynomial(sum);
freePolynomial(product);
return 0;
}