C语言编写一个程序实现两个一元多项式相乘。
时间: 2023-08-04 13:05:23 浏览: 281
实现两个一元多项式相乘的程序可以按照以下步骤进行:
定义一个结构体表示多项式,包括系数和指数两个成员变量。
定义一个函数用来输入多项式,输入格式如下:
输入项数n,接下来n行每行输入一个系数和指数
定义一个函数用来输出多项式,输出格式如下:
输出项数n,接下来n行每行输出一个系数和指数
定义一个函数用来实现两个多项式的相乘,具体步骤如下:
- 定义一个数组,用来存储相乘后的结果。
- 遍历第一个多项式的每一项,再遍历第二个多项式的每一项,将它们的系数相乘并将结果加到数组中相应的位置。
- 将数组中的结果组合成一个新的多项式并返回。
在主函数中调用上述函数实现多项式相乘,并输出结果。
下面是示例代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_TERMS 100
// 定义结构体表示多项式
typedef struct {
float coef; // 系数
int exp; // 指数
} Polynomial;
// 输入多项式
void input(Polynomial poly[], int *n) {
printf("请输入项数:");
scanf("%d", n);
printf("请输入每一项的系数和指数:\n");
for (int i = 0; i < *n; i++) {
scanf("%f %d", &poly[i].coef, &poly[i].exp);
}
}
// 输出多项式
void output(Polynomial poly[], int n) {
printf("多项式为:\n");
printf("%d\n", n);
for (int i = 0; i < n; i++) {
printf("%.2f %d\n", poly[i].coef, poly[i].exp);
}
}
// 实现两个多项式的相乘
Polynomial multiply(Polynomial poly1[], int n1, Polynomial poly2[], int n2) {
Polynomial result[MAX_TERMS]; // 存储结果的数组
int count = 0; // 记录结果中的项数
for (int i = 0; i < n1; i++) {
for (int j = 0; j < n2; j++) {
result[count].coef = poly1[i].coef * poly2[j].coef;
result[count].exp = poly1[i].exp + poly2[j].exp;
count++;
}
}
// 将数组中的结果组合成一个新的多项式并返回
Polynomial res;
for (int i = 0; i < count; i++) {
if (result[i].coef == 0) {
continue;
}
for (int j = i+1; j < count; j++) {
if (result[j].coef == 0) {
continue;
}
if (result[i].exp == result[j].exp) {
result[i].coef += result[j].coef;
result[j].coef = 0;
}
}
res.coef = result[i].coef;
res.exp = result[i].exp;
}
return res;
}
int main() {
Polynomial poly1[MAX_TERMS], poly2[MAX_TERMS];
int n1, n2;
input(poly1, &n1);
input(poly2, &n2);
output(poly1, n1);
output(poly2, n2);
Polynomial res = multiply(poly1, n1, poly2, n2);
output(&res, 1);
return 0;
}
注意,本程序只是一个简单的实现,还有很多需要改进的地方。例如,需要对输入的多项式进行排序,以便进行相乘时可以减少运算量。
阅读全文
相关推荐

















