用C语言利用线性表的顺序存储结构实现多项式加减乘运算。
时间: 2024-03-23 08:42:04 浏览: 95
好的,我会尽力回答你的问题。首先,我们需要定义多项式的结构体:
```c
#define MAX_LEN 100
typedef struct {
float coef[MAX_LEN]; // 存放系数
int expn[MAX_LEN]; // 存放指数
int len; // 多项式的长度
} Polynomial;
```
接下来,我们可以定义一些基本的操作,例如创建多项式、输出多项式等:
```c
// 创建多项式
void createPoly(Polynomial *p) {
int i = 0;
printf("请输入多项式的项数:");
scanf("%d", &(p->len));
printf("请输入多项式的系数和指数:\n");
for (i = 0; i < p->len; i++) {
scanf("%f %d", &(p->coef[i]), &(p->expn[i]));
}
}
// 输出多项式
void printPoly(Polynomial p) {
int i = 0;
for (i = 0; i < p.len; i++) {
if (i == 0) {
printf("%0.2fx^%d", p.coef[i], p.expn[i]);
} else {
printf(" + %0.2fx^%d", p.coef[i], p.expn[i]);
}
}
printf("\n");
}
```
接下来,我们可以实现多项式的加法、减法和乘法:
```c
// 多项式加法
void addPoly(Polynomial p1, Polynomial p2, Polynomial *p3) {
int i = 0, j = 0, k = 0;
while (i < p1.len && j < p2.len) {
if (p1.expn[i] == p2.expn[j]) {
p3->coef[k] = p1.coef[i] + p2.coef[j];
p3->expn[k] = p1.expn[i];
i++;
j++;
k++;
} else if (p1.expn[i] > p2.expn[j]) {
p3->coef[k] = p1.coef[i];
p3->expn[k] = p1.expn[i];
i++;
k++;
} else {
p3->coef[k] = p2.coef[j];
p3->expn[k] = p2.expn[j];
j++;
k++;
}
}
while (i < p1.len) {
p3->coef[k] = p1.coef[i];
p3->expn[k] = p1.expn[i];
i++;
k++;
}
while (j < p2.len) {
p3->coef[k] = p2.coef[j];
p3->expn[k] = p2.expn[j];
j++;
k++;
}
p3->len = k;
}
// 多项式减法
void subPoly(Polynomial p1, Polynomial p2, Polynomial *p3) {
int i = 0, j = 0, k = 0;
while (i < p1.len && j < p2.len) {
if (p1.expn[i] == p2.expn[j]) {
p3->coef[k] = p1.coef[i] - p2.coef[j];
p3->expn[k] = p1.expn[i];
i++;
j++;
k++;
} else if (p1.expn[i] > p2.expn[j]) {
p3->coef[k] = p1.coef[i];
p3->expn[k] = p1.expn[i];
i++;
k++;
} else {
p3->coef[k] = -p2.coef[j];
p3->expn[k] = p2.expn[j];
j++;
k++;
}
}
while (i < p1.len) {
p3->coef[k] = p1.coef[i];
p3->expn[k] = p1.expn[i];
i++;
k++;
}
while (j < p2.len) {
p3->coef[k] = -p2.coef[j];
p3->expn[k] = p2.expn[j];
j++;
k++;
}
p3->len = k;
}
// 多项式乘法
void mulPoly(Polynomial p1, Polynomial p2, Polynomial *p3) {
int i = 0, j = 0, k = 0;
float temp[MAX_LEN] = {0};
int expn[MAX_LEN] = {0};
for (i = 0; i < p1.len; i++) {
for (j = 0; j < p2.len; j++) {
int e = p1.expn[i] + p2.expn[j];
temp[e] += p1.coef[i] * p2.coef[j];
}
}
for (i = 0; i < MAX_LEN; i++) {
if (temp[i] != 0) {
expn[k] = i;
p3->coef[k] = temp[i];
k++;
}
}
p3->len = k;
memcpy(p3->expn, expn, k * sizeof(int));
}
```
最后,我们可以在 `main` 函数中进行测试:
```c
int main() {
Polynomial p1, p2, p3;
// 创建多项式
printf("请输入第一个多项式:\n");
createPoly(&p1);
printf("第一个多项式为:");
printPoly(p1);
printf("请输入第二个多项式:\n");
createPoly(&p2);
printf("第二个多项式为:");
printPoly(p2);
// 多项式加法
addPoly(p1, p2, &p3);
printf("多项式加法的结果为:");
printPoly(p3);
// 多项式减法
subPoly(p1, p2, &p3);
printf("多项式减法的结果为:");
printPoly(p3);
// 多项式乘法
mulPoly(p1, p2, &p3);
printf("多项式乘法的结果为:");
printPoly(p3);
return 0;
}
```
以上就是基于线性表的顺序存储结构实现多项式加减乘运算的示例代码。
阅读全文