设有一元多项式Am(x) 和Bn(x)。 Am(x) = A0+A1x1+A2x2+A3x3+… +Amxm Bn(x) = B0+B1x1+B2x2+B3x3+… +Bnxn 试利用C语言实现求M(x)= Am(x)+Bn(x)、N(x)= Am(x)-Bn(x)。 (1)要求结果M(x)中无重复阶项和无零系数项。 (2)要求输出结果的升幂和降幂两种排列情况。
时间: 2023-08-11 19:03:40 浏览: 44
以下是一个实现过程:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_DEGREE 100
typedef struct {
int degree; // 多项式的最高次数
int coef[MAX_DEGREE + 1]; // 多项式每一项的系数
} Polynomial;
// 初始化多项式
void initPolynomial(Polynomial *p) {
p->degree = 0;
for (int i = 0; i <= MAX_DEGREE; i++) {
p->coef[i] = 0;
}
}
// 读取多项式
void readPolynomial(Polynomial *p) {
printf("请输入多项式的最高次数:");
scanf("%d", &(p->degree));
printf("请输入多项式每一项的系数(从低次到高次):");
for (int i = 0; i <= p->degree; i++) {
scanf("%d", &(p->coef[i]));
}
}
// 输出多项式
void printPolynomial(Polynomial *p, int isAscend) {
if (p->degree < 0) {
printf("0\n");
return;
}
if (!isAscend) { // 降幂排列
printf("%d", p->coef[p->degree]);
if (p->degree > 0) {
printf("x^%d", p->degree);
}
for (int i = p->degree - 1; i >= 0; i--) {
if (p->coef[i] == 0) {
continue;
}
if (p->coef[i] > 0) {
printf(" + ");
} else {
printf(" - ");
}
printf("%d", abs(p->coef[i]));
if (i > 0) {
printf("x^%d", i);
}
}
} else { // 升幂排列
for (int i = 0; i <= p->degree; i++) {
if (p->coef[i] == 0) {
continue;
}
if (p->coef[i] > 0 && i != 0) {
printf(" + ");
} else if (p->coef[i] < 0) {
printf(" - ");
}
printf("%d", abs(p->coef[i]));
if (i > 0) {
printf("x^%d", i);
}
}
}
printf("\n");
}
// 求和多项式
Polynomial addPolynomial(Polynomial *p1, Polynomial *p2) {
Polynomial result;
initPolynomial(&result);
int maxDegree = p1->degree > p2->degree ? p1->degree : p2->degree;
result.degree = maxDegree;
for (int i = 0; i <= maxDegree; i++) {
result.coef[i] = p1->coef[i] + p2->coef[i];
}
// 去除重复项和零系数项
for (int i = maxDegree; i >= 0; i--) {
if (result.coef[i] == 0) {
result.degree--;
} else {
break;
}
}
return result;
}
// 求差多项式
Polynomial subPolynomial(Polynomial *p1, Polynomial *p2) {
Polynomial result;
initPolynomial(&result);
int maxDegree = p1->degree > p2->degree ? p1->degree : p2->degree;
result.degree = maxDegree;
for (int i = 0; i <= maxDegree; i++) {
result.coef[i] = p1->coef[i] - p2->coef[i];
}
// 去除重复项和零系数项
for (int i = maxDegree; i >= 0; i--) {
if (result.coef[i] == 0) {
result.degree--;
} else {
break;
}
}
return result;
}
int main() {
Polynomial A, B, M, N;
initPolynomial(&A);
initPolynomial(&B);
initPolynomial(&M);
initPolynomial(&N);
printf("请输入第一个多项式A(x):\n");
readPolynomial(&A);
printf("请输入第二个多项式B(x):\n");
readPolynomial(&B);
M = addPolynomial(&A, &B);
N = subPolynomial(&A, &B);
printf("M(x) = ");
printPolynomial(&M, 1); // 升幂排列
printf("M(x) = ");
printPolynomial(&M, 0); // 降幂排列
printf("N(x) = ");
printPolynomial(&N, 1); // 升幂排列
printf("N(x) = ");
printPolynomial(&N, 0); // 降幂排列
return 0;
}
```
该程序通过结构体实现了多项式,使用 `initPolynomial` 初始化多项式,使用 `readPolynomial` 读取多项式,使用 `printPolynomial` 输出多项式。`addPolynomial` 和 `subPolynomial` 分别实现了求和和求差操作,并且在操作后去除了重复项和零系数项。最后的 `main` 函数读取两个多项式,求和和求差并输出结果。其中,输出结果分别升幂排列和降幂排列。