用c语言设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出样例: 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 5 20 -4 4 -5 2 9 1 -2 0 代码长度限制 16 KB 时间限制 200 ms 内存限制 64 MB
时间: 2023-12-31 07:06:51 浏览: 156
好的,这是一个关于C语言函数设计的问题,需要设计两个函数,一个用于计算两个一元多项式的乘积,另一个用于计算两个一元多项式的和,并按照指定的格式输出结果。
函数定义应该如下所示:
```c
void multiply(int coef1[], int exp1[], int len1, int coef2[], int exp2[], int len2);
void add(int coef1[], int exp1[], int len1, int coef2[], int exp2[], int len2);
```
其中,multiply函数用于计算两个多项式的乘积,coef1和exp1是第一个多项式的系数和指数,len1是第一个多项式的项数;coef2和exp2是第二个多项式的系数和指数,len2是第二个多项式的项数。函数应该在原数组上计算乘积,并将结果存储在数组中。乘积多项式的项数应该等于两个多项式项数之和。
add函数用于计算两个多项式的和,参数与multiply函数相同。函数应该在原数组上计算和,并将结果存储在数组中。和多项式的项数应该等于两个多项式项数之和。
以下是函数的实现:
```c
void multiply(int coef1[], int exp1[], int len1, int coef2[], int exp2[], int len2) {
int i, j;
int coef[len1 + len2], exp[len1 + len2];
int len = 0;
for (i = 0; i < len1; i++) {
for (j = 0; j < len2; j++) {
coef[len] = coef1[i] * coef2[j];
exp[len] = exp1[i] + exp2[j];
len++;
}
}
for (i = 0; i < len; i++) {
for (j = i + 1; j < len; j++) {
if (exp[i] < exp[j]) {
int tmp = coef[i];
coef[i] = coef[j];
coef[j] = tmp;
tmp = exp[i];
exp[i] = exp[j];
exp[j] = tmp;
}
}
}
for (i = 0; i < len; i++) {
if (i > 0 && exp[i] == exp[i - 1]) {
coef[i - 1] += coef[i];
coef[i] = 0;
}
}
printf("%d %d", coef[0], exp[0]);
for (i = 1; i < len; i++) {
if (coef[i] != 0) {
printf(" %d %d", coef[i], exp[i]);
}
}
printf("\n");
}
void add(int coef1[], int exp1[], int len1, int coef2[], int exp2[], int len2) {
int i = 0, j = 0;
int coef[len1 + len2], exp[len1 + len2];
int len = 0;
while (i < len1 && j < len2) {
if (exp1[i] > exp2[j]) {
coef[len] = coef1[i];
exp[len] = exp1[i];
i++;
} else if (exp1[i] < exp2[j]) {
coef[len] = coef2[j];
exp[len] = exp2[j];
j++;
} else {
coef[len] = coef1[i] + coef2[j];
exp[len] = exp1[i];
i++;
j++;
}
len++;
}
while (i < len1) {
coef[len] = coef1[i];
exp[len] = exp1[i];
i++;
len++;
}
while (j < len2) {
coef[len] = coef2[j];
exp[len] = exp2[j];
j++;
len++;
}
printf("%d %d", coef[0], exp[0]);
for (i = 1; i < len; i++) {
if (coef[i] != 0) {
printf(" %d %d", coef[i], exp[i]);
}
}
printf("\n");
}
```
multiply函数遍历两个多项式的所有项,计算乘积,并将结果存储在临时数组中。然后,按照指数递降的顺序排序,并将指数相同的项系数相加。最后,按照指定格式输出结果。
add函数使用归并排序的思想,将两个多项式按照指数递降的顺序合并。如果某个项的系数为0,则不需要输出这个项。最后,按照指定格式输出结果。
使用这两个函数的示例代码如下:
```c
#include <stdio.h>
void multiply(int coef1[], int exp1[], int len1, int coef2[], int exp2[], int len2);
void add(int coef1[], int exp1[], int len1, int coef2[], int exp2[], int len2);
int main() {
int coef1[1000], exp1[1000];
int coef2[1000], exp2[1000];
int len1, len2;
int i;
scanf("%d", &len1);
for (i = 0; i < len1; i++) {
scanf("%d%d", &coef1[i], &exp1[i]);
}
scanf("%d", &len2);
for (i = 0; i < len2; i++) {
scanf("%d%d", &coef2[i], &exp2[i]);
}
multiply(coef1, exp1, len1, coef2, exp2, len2);
add(coef1, exp1, len1, coef2, exp2, len2);
return 0;
}
```
该程序读入两个多项式的系数和指数,调用multiply和add函数计算乘积和和,并按照指定格式输出结果。
输入样例:
```
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
```
输出样例:
```
12 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
3 5 20 3 4 -7 3 1 -2
```
其中,第一个输出是乘积多项式,第二个输出是和多项式。
阅读全文