一元多项式的乘法与加法运算用C语言帮我写出相应代码
时间: 2024-05-07 13:23:37 浏览: 13
一元多项式可以用一个结构体表示,结构体中包含两个成员:系数和指数。下面是一元多项式的加法和乘法运算的C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 一元多项式结构体
typedef struct {
double coef; // 系数
int exp; // 指数
} POLYNOMIAL;
// 创建一元多项式
void create_poly(POLYNOMIAL *p, int n) {
int i;
printf("请输入%d个一元多项式,每个一元多项式包含系数和指数:\n", n);
for (i = 0; i < n; i++) {
printf("请输入第%d个一元多项式的系数和指数:", i+1);
scanf("%lf%d", &p[i].coef, &p[i].exp);
}
}
// 显示一元多项式
void display_poly(POLYNOMIAL *p, int n) {
int i;
printf("一元多项式为:");
for (i = 0; i < n; i++) {
if (p[i].coef > 0 && i != 0) {
printf("+");
}
printf("%.2fx^%d", p[i].coef, p[i].exp);
}
printf("\n");
}
// 一元多项式加法运算
POLYNOMIAL *add_poly(POLYNOMIAL *p1, int n1, POLYNOMIAL *p2, int n2) {
int i, j, k;
POLYNOMIAL *result;
result = (POLYNOMIAL *)malloc((n1+n2)*sizeof(POLYNOMIAL));
i = j = k = 0;
while (i < n1 && j < n2) {
if (p1[i].exp > p2[j].exp) {
result[k++] = p1[i++];
} else if (p1[i].exp < p2[j].exp) {
result[k++] = p2[j++];
} else {
result[k].exp = p1[i].exp;
result[k++].coef = p1[i++].coef + p2[j++].coef;
}
}
while (i < n1) {
result[k++] = p1[i++];
}
while (j < n2) {
result[k++] = p2[j++];
}
return result;
}
// 一元多项式乘法运算
POLYNOMIAL *mul_poly(POLYNOMIAL *p1, int n1, POLYNOMIAL *p2, int n2) {
int i, j, k;
POLYNOMIAL *result;
result = (POLYNOMIAL *)malloc((n1+n2)*sizeof(POLYNOMIAL));
for (i = 0; i < n1+n2; i++) {
result[i].coef = 0;
result[i].exp = 0;
}
for (i = 0; i < n1; i++) {
for (j = 0; j < n2; j++) {
k = p1[i].exp + p2[j].exp;
result[k].coef += p1[i].coef * p2[j].coef;
result[k].exp = k;
}
}
return result;
}
int main() {
int n1, n2;
POLYNOMIAL *poly1, *poly2, *result_add, *result_mul;
printf("请输入第一个一元多项式的项数:");
scanf("%d", &n1);
poly1 = (POLYNOMIAL *)malloc(n1*sizeof(POLYNOMIAL));
create_poly(poly1, n1); // 创建第一个一元多项式
display_poly(poly1, n1); // 显示第一个一元多项式
printf("请输入第二个一元多项式的项数:");
scanf("%d", &n2);
poly2 = (POLYNOMIAL *)malloc(n2*sizeof(POLYNOMIAL));
create_poly(poly2, n2); // 创建第二个一元多项式
display_poly(poly2, n2); // 显示第二个一元多项式
result_add = add_poly(poly1, n1, poly2, n2); // 一元多项式加法运算
display_poly(result_add, n1+n2); // 显示加法运算结果
result_mul = mul_poly(poly1, n1, poly2, n2); // 一元多项式乘法运算
display_poly(result_mul, n1+n2); // 显示乘法运算结果
free(poly1);
free(poly2);
free(result_add);
free(result_mul);
return 0;
}
```
在上面的代码中,我们定义了一个`POLYNOMIAL`结构体,其中包含两个成员:`coef`表示系数,`exp`表示指数。在`create_poly`函数中,我们输入一元多项式的系数和指数,保存到`POLYNOMIAL`结构体中。在`display_poly`函数中,我们将一元多项式以字符串的形式输出。
在`add_poly`函数中,我们对两个一元多项式进行加法运算。我们使用三个指针`i`、`j`、`k`分别指向两个一元多项式的第一个元素和结果一元多项式的第一个元素。在循环中,我们比较两个指针指向的元素的指数大小,如果相同则相加,否则将指数小的元素加入结果一元多项式中。最后,如果有一个一元多项式遍历完了,则将剩余的元素加入结果一元多项式中。
在`mul_poly`函数中,我们对两个一元多项式进行乘法运算。我们先将结果一元多项式中的系数和指数都初始化为0。然后,我们对两个一元多项式的每一项进行乘法运算,并将结果加入到结果一元多项式中。最后,我们返回结果一元多项式。
在主函数中,我们先输入第一个一元多项式的项数,然后创建第一个一元多项式并显示。然后,我们输入第二个一元多项式的项数,创建第二个一元多项式并显示。接着,我们对两个一元多项式进行加法运算和乘法运算,并将结果显示。最后,我们释放内存并退出程序。