【问题描述】c语言编程实现一元多项式的加法运算。 【输入形式】第一个一元多项式A; 第二个一元多项式B。 以(0,0)作为输入结束。 【输出形式】多项式A和多项式B的和。 【样例输入】 5,3 7,8 9,15 0,0 2,0 6,3 -7,8 0,0 【样例输出】 2x^0+11x^3+9x^15
时间: 2023-05-30 12:06:09 浏览: 100
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int coef; // 系数
int expn; // 指数
} ElemType;
typedef struct {
ElemType data[MAX_SIZE];
int length;
} Poly;
void initPoly(Poly *p) { // 初始化多项式
p->length = 0;
}
void printPoly(Poly p) { // 打印多项式
int i;
for (i = 0; i < p.length; i++) {
printf("%d", p.data[i].coef);
if (p.data[i].expn == 1) {
printf("x");
} else if (p.data[i].expn > 1) {
printf("x^%d", p.data[i].expn);
}
if (i < p.length - 1) {
if (p.data[i + 1].coef >= 0) {
printf("+");
}
}
}
printf("\n");
}
void addPoly(Poly *pa, Poly pb) { // 多项式加法
int i, j, k;
i = j = k = 0;
while (i < pa->length && j < pb.length) {
if (pa->data[i].expn == pb.data[j].expn) {
int sum = pa->data[i].coef + pb.data[j].coef;
if (sum != 0) {
pa->data[i].coef = sum;
i++;
j++;
k++;
} else {
i++;
j++;
}
} else if (pa->data[i].expn < pb.data[j].expn) {
i++;
k++;
} else {
int l;
for (l = pa->length - 1; l >= i; l--) {
pa->data[l + 1] = pa->data[l];
}
pa->data[i] = pb.data[j];
i++;
j++;
k++;
pa->length++;
}
}
while (j < pb.length) {
pa->data[k++] = pb.data[j++];
pa->length++;
}
}
int main() {
Poly pa, pb;
ElemType e;
initPoly(&pa);
initPoly(&pb);
printf("请输入第一个多项式:\n");
while (scanf("%d,%d", &e.coef, &e.expn) == 2 && (e.coef != 0 || e.expn != 0)) {
pa.data[pa.length++] = e;
}
printf("请输入第二个多项式:\n");
while (scanf("%d,%d", &e.coef, &e.expn) == 2 && (e.coef != 0 || e.expn != 0)) {
pb.data[pb.length++] = e;
}
addPoly(&pa, pb);
printf("多项式A + 多项式B = ");
printPoly(pa);
return 0;
}