编写一个程序实现两个一元多项式相加的运算。 【输入形式】从标准输入中读入两行以空格分隔的整数,每一行代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式 anxn + an-1xn-1+ ... + a1x1 + a0x0 (n<50)的表示方法如下: an n an-1 n-1 ... a1 1 a0 0 即相邻两个整数分别表示表达式中一项的系数和指数。在输入中只出现系数不为0的项。 【输出形式】将运算结果输出到屏幕。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以一个空格分隔。在行的末尾也输出一个空格符,并且最后要求换行。用C语言
时间: 2024-03-06 20:52:00 浏览: 107
C程序:一元多项式相加
3星 · 编辑精心推荐
以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_DEGREE 50
// 定义多项式结构体
typedef struct polynomial {
int degree;
int coef[MAX_DEGREE+1];
} Polynomial;
// 读入多项式
Polynomial read_poly() {
Polynomial poly = {0};
int coef, exp;
while (scanf("%d %d", &coef, &exp) == 2) {
poly.coef[exp] += coef;
if (exp > poly.degree) {
poly.degree = exp;
}
}
return poly;
}
// 输出多项式
void print_poly(Polynomial poly) {
int i;
for (i = poly.degree; i >= 0; i--) {
if (poly.coef[i] != 0) {
printf("%d %d ", poly.coef[i], i);
}
}
printf("\n");
}
// 多项式相加
Polynomial add_poly(Polynomial poly1, Polynomial poly2) {
Polynomial result = {0};
int i;
result.degree = poly1.degree > poly2.degree ? poly1.degree : poly2.degree;
for (i = result.degree; i >= 0; i--) {
result.coef[i] = poly1.coef[i] + poly2.coef[i];
}
return result;
}
int main() {
Polynomial poly1, poly2, result;
poly1 = read_poly();
poly2 = read_poly();
result = add_poly(poly1, poly2);
print_poly(result);
return 0;
}
```
解释如下:
1. 定义了多项式结构体,包含最高次数和系数数组。
2. 读入多项式时,不断从标准输入中读入一对整数,即为系数和指数,根据指数将系数加入对应的数组中,并更新最高次数。
3. 输出多项式时,从最高次数开始向下遍历系数数组,如果该项系数不为0,则输出系数和指数。
4. 多项式相加时,先将两个多项式的最高次数取较大值作为结果多项式的最高次数,然后从最高次数开始向下遍历数组,将对应系数相加即可。
5. 在主函数中,先读入两个多项式,然后调用相加函数得到结果多项式,最后输出结果多项式。
阅读全文