C语言实现一元多项式相乘
时间: 2024-04-14 08:10:23 浏览: 86
以下是一元多项式相乘的C语言程序:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
float coef; // 系数
int expn; // 指数
} Term;
typedef struct {
Term terms[MAX_SIZE]; // 多项式项
int n; // 项数
} Poly;
void init_poly(Poly *p) {
p->n = 0;
}
void append_term(Poly *p, float coef, int expn) {
p->terms[p->n].coef = coef;
p->terms[p->n].expn = expn;
p->n++;
}
void input_poly(Poly *p) {
int expn, n;
float coef;
printf("请输入多项式的项数:");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
printf("请输入第%d项的系数和指数:", i + 1);
scanf("%f%d", &coef, &expn);
append_term(p, coef, expn);
}
}
void output_poly(Poly *p) {
for (int i = 0; i < p->n; i++) {
if (i > 0) {
printf("+");
}
printf("%.2f*x^%d", p->terms[i].coef, p->terms[i].expn);
}
printf("\n");
}
void add_term(Poly *p, float coef, int expn) {
for (int i = 0; i < p->n; i++) {
if (p->terms[i].expn == expn) {
p->terms[i].coef += coef;
return;
}
}
append_term(p, coef, expn);
}
void multiply_poly(Poly *p1, Poly *p2, Poly *result) {
init_poly(result);
for (int i = 0; i < p1->n; i++) {
for (int j = 0; j < p2->n; j++) {
float coef = p1->terms[i].coef * p2->terms[j].coef;
int expn = p1->terms[i].expn + p2->terms[j].expn;
add_term(result, coef, expn);
}
}
}
int main() {
Poly p1, p2, result;
init_poly(&p1);
init_poly(&p2);
init_poly(&result);
printf("请输入第一个多项式:\n");
input_poly(&p1);
printf("请输入第二个多项式:\n");
input_poly(&p2);
printf("第一个多项式:");
output_poly(&p1);
printf("第二个多项式:");
output_poly(&p2);
multiply_poly(&p1, &p2, &result);
printf("相乘的结果是:");
output_poly(&result);
return 0;
}
```
程序先定义了两个结构体,一个是Term,表示多项式的一项,包括系数和指数;另一个是Poly,表示多项式,包括多项式的各项和项数。
接着定义了一些辅助函数,如init_poly用于初始化多项式;append_term用于向多项式中添加一项;input_poly用于从用户输入中读取多项式;output_poly用于输出多项式;add_term用于将一项加入到多项式中。
最主要的函数是multiply_poly,它实现了两个多项式相乘的功能。它首先初始化了结果多项式result,然后对于p1和p2的每一项,计算出它们的系数和指数的积,然后将积加入到结果多项式中。
最后在main函数中,先初始化三个多项式p1、p2和result,然后输入p1和p2,输出它们,调用multiply_poly函数计算它们的积,输出结果。
阅读全文