编写一个c程序实现两个一元多项式相乘。【输入形式】 首先输入第一个多项式中系数不为0的项的个数,然后在新的一行上输入以空格分隔的整数,代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 anxn + an-1xn-1+ ... + a1x1 + a0x0 (n<50)的输入方法如下: an n an-1 n-1 ...a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。按照上述方式再输入第二个多项式。【输出形式】 将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。最后要求换行。
时间: 2023-12-03 09:46:08 浏览: 82
C C++程序设计 求两个一元多项式相乘的算法.txt
以下是实现两个一元多项式相乘的C程序:
```c
#include <stdio.h>
#define MAX_DEGREE 50
int main() {
int m, n;
int a[MAX_DEGREE + 1] = {0}, b[MAX_DEGREE + 1] = {0}, c[2 * MAX_DEGREE + 1] = {0};
// 输入第一个多项式
scanf("%d", &m);
for (int i = 0; i < m; i++) {
int coefficient, exponent;
scanf("%d %d", &coefficient, &exponent);
a[exponent] = coefficient;
}
// 输入第二个多项式
scanf("%d", &n);
for (int i = 0; i < n; i++) {
int coefficient, exponent;
scanf("%d %d", &coefficient, &exponent);
b[exponent] = coefficient;
}
// 相乘
for (int i = 0; i <= MAX_DEGREE; i++) {
for (int j = 0; j <= MAX_DEGREE; j++) {
if (a[i] != 0 && b[j] != 0) {
c[i + j] += a[i] * b[j];
}
}
}
// 输出结果
int nonzero_count = 0;
for (int i = 2 * MAX_DEGREE; i >= 0; i--) {
if (c[i] != 0) {
printf("%d %d ", c[i], i);
nonzero_count++;
}
}
if (nonzero_count == 0) {
printf("0 0");
}
printf("\n");
return 0;
}
```
程序首先定义了一个最高幂次为50的数组来存储两个多项式的系数,分别为`a`和`b`。然后按照题目要求输入两个多项式,并将它们的系数存储在对应的数组中。接着,程序使用两个循环遍历两个多项式的所有项,并将相乘结果存储在一个长度为101的数组`c`中,其中`c[i+j]`表示两个多项式中幂次分别为`i`和`j`的项相乘的结果的系数。最后,程序从`c[2*MAX_DEGREE]`开始倒序遍历数组`c`,输出所有系数不为0的项,输出格式为`系数 指数`,每个项之间用一个空格分隔,最后要换行。如果相乘结果为0,则输出`0 0`。
阅读全文