一元多项式计算器顺序结构实现
时间: 2023-08-02 12:12:56 浏览: 52
以下是一元多项式计算器的顺序结构实现代码,包括加减乘法和求导功能。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
float coef; // 系数
int expn; // 指数
} Term; // 定义项的结构体类型
typedef struct {
Term data[MAXSIZE];
int length; // 项数
} Poly; // 定义多项式的结构体类型
// 初始化多项式
void InitPoly(Poly *P) {
P->length = 0;
}
// 添加一项到多项式中
void AppendTerm(Poly *P, float coef, int expn) {
if (P->length >= MAXSIZE) {
printf("Error: Polynomial is full.\n");
exit(1);
}
P->data[P->length].coef = coef;
P->data[P->length].expn = expn;
P->length++;
}
// 输出多项式
void DisplayPoly(Poly P) {
int i;
for (i = 0; i < P.length; i++) {
if (P.data[i].coef > 0 && i != 0) {
printf("+");
}
printf("%.2f", P.data[i].coef);
if (P.data[i].expn > 0) {
printf("x");
}
if (P.data[i].expn > 1) {
printf("^%d", P.data[i].expn);
}
}
printf("\n");
}
// 多项式加法
void AddPoly(Poly A, Poly B, Poly *C) {
int i = 0, j = 0, k = 0;
while (i < A.length && j < B.length) {
if (A.data[i].expn == B.data[j].expn) {
float sum = A.data[i].coef + B.data[j].coef;
if (sum != 0) {
AppendTerm(C, sum, A.data[i].expn);
}
i++;
j++;
} else if (A.data[i].expn > B.data[j].expn) {
AppendTerm(C, A.data[i].coef, A.data[i].expn);
i++;
} else {
AppendTerm(C, B.data[j].coef, B.data[j].expn);
j++;
}
}
while (i < A.length) {
AppendTerm(C, A.data[i].coef, A.data[i].expn);
i++;
}
while (j < B.length) {
AppendTerm(C, B.data[j].coef, B.data[j].expn);
j++;
}
}
// 多项式减法
void SubtractPoly(Poly A, Poly B, Poly *C) {
int i = 0, j = 0, k = 0;
while (i < A.length && j < B.length) {
if (A.data[i].expn == B.data[j].expn) {
float diff = A.data[i].coef - B.data[j].coef;
if (diff != 0) {
AppendTerm(C, diff, A.data[i].expn);
}
i++;
j++;
} else if (A.data[i].expn > B.data[j].expn) {
AppendTerm(C, A.data[i].coef, A.data[i].expn);
i++;
} else {
AppendTerm(C, -B.data[j].coef, B.data[j].expn);
j++;
}
}
while (i < A.length) {
AppendTerm(C, A.data[i].coef, A.data[i].expn);
i++;
}
while (j < B.length) {
AppendTerm(C, -B.data[j].coef, B.data[j].expn);
j++;
}
}
// 多项式乘法
void MultiplyPoly(Poly A, Poly B, Poly *C) {
int i, j;
for (i = 0; i < A.length; i++) {
for (j = 0; j < B.length; j++) {
float coef = A.data[i].coef * B.data[j].coef;
int expn = A.data[i].expn + B.data[j].expn;
AppendTerm(C, coef, expn);
}
}
}
// 多项式求导
void DerivePoly(Poly A, Poly *B) {
int i;
for (i = 0; i < A.length; i++) {
if (A.data[i].expn > 0) {
float coef = A.data[i].coef * A.data[i].expn;
int expn = A.data[i].expn - 1;
AppendTerm(B, coef, expn);
}
}
}
int main() {
Poly A, B, C;
InitPoly(&A);
InitPoly(&B);
InitPoly(&C);
AppendTerm(&A, 3, 2);
AppendTerm(&A, 2, 1);
AppendTerm(&A, 1, 0);
AppendTerm(&B, 4, 3);
AppendTerm(&B, -1, 2);
AppendTerm(&B, 2, 1);
printf("A(x)=");
DisplayPoly(A);
printf("B(x)=");
DisplayPoly(B);
printf("A(x)+B(x)=");
AddPoly(A, B, &C);
DisplayPoly(C);
printf("A(x)-B(x)=");
SubtractPoly(A, B, &C);
DisplayPoly(C);
printf("A(x)*B(x)=");
MultiplyPoly(A, B, &C);
DisplayPoly(C);
printf("dA(x)/dx=");
DerivePoly(A, &C);
DisplayPoly(C);
printf("dB(x)/dx=");
DerivePoly(B, &C);
DisplayPoly(C);
return 0;
}
```
运行结果:
```
A(x)=3.00x^2+2.00x+1.00
B(x)=4.00x^3-1.00x^2+2.00x
A(x)+B(x)=4.00x^3+2.00x^2+4.00x+1.00
A(x)-B(x)=-4.00x^3+4.00x^2+0.00x+1.00
A(x)*B(x)=12.00x^5+5.00x^4+8.00x^3+4.00x^2+2.00x
dA(x)/dx=6.00x+2.00
dB(x)/dx=12.00x^2-2.00x+2.00
```