设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。用c语言做出来
时间: 2024-03-19 17:46:15 浏览: 98
以下是用C语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 1010
int a[MAXN], b[MAXN], c[MAXN], d[MAXN]; // a和b存储两个多项式的系数,c和d存储结果多项式的系数
int main()
{
int k1, k2, e, cnt = 0;
double t;
scanf("%d", &k1);
for (int i = 0; i < k1; i++)
{
scanf("%d %lf", &e, &t);
a[e] = t; // 把系数存储到数组a中
}
scanf("%d", &k2);
for (int i = 0; i < k2; i++)
{
scanf("%d %lf", &e, &t);
b[e] = t; // 把系数存储到数组b中
}
// 计算乘积多项式
for (int i = 0; i < MAXN; i++)
{
if (a[i] != 0)
{
for (int j = 0; j < MAXN; j++)
{
if (b[j] != 0)
{
c[i + j] += a[i] * b[j]; // 计算乘积多项式的系数
}
}
}
}
// 计算和多项式
for (int i = 0; i < MAXN; i++)
{
d[i] = a[i] + b[i]; // 计算和多项式的系数
if (d[i] != 0)
{
cnt++; // 统计非零项的个数
}
}
// 输出乘积多项式
if (c[0] == 0 && cnt == 1) // 如果乘积多项式只有一项且系数为0,则输出0 0
{
printf("0 0\n");
}
else
{
cnt = 0; // 重新统计非零项的个数
for (int i = MAXN - 1; i >= 0; i--)
{
if (c[i] != 0)
{
cnt++;
}
}
printf("%d", cnt);
for (int i = MAXN - 1; i >= 0; i--)
{
if (c[i] != 0)
{
printf(" %d %.1f", i, c[i]);
}
}
printf("\n");
}
// 输出和多项式
cnt = 0; // 重新统计非零项的个数
for (int i = MAXN - 1; i >= 0; i--)
{
if (d[i] != 0)
{
cnt++;
}
}
printf("%d", cnt);
for (int i = MAXN - 1; i >= 0; i--)
{
if (d[i] != 0)
{
printf(" %d %.1f", i, d[i]);
}
}
return 0;
}
```
该代码实现了输入两个一元多项式,然后分别计算它们的乘积和和,并输出结果。其中,乘积多项式的系数存储在数组c中,和多项式的系数存储在数组d中。需要注意的是,由于多项式的次数可能很大,因此需要使用数组来存储系数,而且数组的大小应该预设为一个足够大的值(本代码中设为1010)。
阅读全文