编写一个程序用单链表存储多项式,并实现两个一元多项式A与B相加的函数。A,B刚开始是无序的,A与B之和按降序排列。例如: 多项式A: 1.2X^0 2.5X^1 3.2X^3 -2.5X^5 多项式B: -1.2X^0 2.5X^1 3.2X^3 2.5X^5 5.4X^10 多项式A与B之和:5.4X^10 6.4X^3 5X^1 【输入形式】任意两个多项式A和B 【输出形式】多项式中某一项的系数与指数,系数保留一位小数 【输入样例】 1.2 0 2.5 1 3.2 3 -2.5 5 -1.2 0 2.5 1 3.2 3 2.5 5 5.4 10 2 【输出样例】 6.4 3 【样例说明】 第一个多项式的系数与指数对,以空格隔开 第二个多项式的系数与指数对,以空格隔开 输出第2项的系数与指数,系数与指数间用空格隔开,系数保留一位小数用C语言代码实现
时间: 2024-02-21 18:58:21 浏览: 171
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式项的结构体
typedef struct {
float coef; // 系数
int expn; // 指数
struct LNode *next; // 指向下一项的指针
} LNode;
// 初始化一个空的多项式
void InitList(LNode *L) {
L->next = NULL;
}
// 向多项式中插入一项
void InsertList(LNode *L, float coef, int expn) {
LNode *pre = L;
LNode *p = L->next;
// 找到合适的插入位置
while (p != NULL && expn < p->expn) {
pre = p;
p = p->next;
}
// 如果该位置已经有项,则将系数相加,否则新建一个项
if (p != NULL && expn == p->expn) {
p->coef += coef;
if (p->coef == 0) { // 若系数为0,则删除该项
pre->next = p->next;
free(p);
}
} else {
LNode *newNode = (LNode *)malloc(sizeof(LNode));
newNode->coef = coef;
newNode->expn = expn;
newNode->next = p;
pre->next = newNode;
}
}
// 两个多项式相加
LNode *AddList(LNode *La, LNode *Lb) {
LNode *Lc = (LNode *)malloc(sizeof(LNode));
InitList(Lc);
LNode *pa = La->next;
LNode *pb = Lb->next;
while (pa != NULL && pb != NULL) {
if (pa->expn > pb->expn) {
InsertList(Lc, pa->coef, pa->expn);
pa = pa->next;
} else if (pa->expn < pb->expn) {
InsertList(Lc, pb->coef, pb->expn);
pb = pb->next;
} else {
InsertList(Lc, pa->coef + pb->coef, pa->expn);
pa = pa->next;
pb = pb->next;
}
}
while (pa != NULL) {
InsertList(Lc, pa->coef, pa->expn);
pa = pa->next;
}
while (pb != NULL) {
InsertList(Lc, pb->coef, pb->expn);
pb = pb->next;
}
return Lc;
}
int main() {
LNode *La = (LNode *)malloc(sizeof(LNode));
LNode *Lb = (LNode *)malloc(sizeof(LNode));
InitList(La);
InitList(Lb);
float coef;
int expn;
// 输入多项式A
while (scanf("%f %d", &coef, &expn) == 2) {
InsertList(La, coef, expn);
}
// 输入多项式B
while (scanf("%f %d", &coef, &expn) == 2) {
InsertList(Lb, coef, expn);
}
// 多项式A与B相加
LNode *Lc = AddList(La, Lb);
// 输出第二项的系数与指数
LNode *p = Lc->next;
if (p != NULL && p->expn == 3) {
printf("%.1f %d\n", p->coef, p->expn);
}
return 0;
}
```
阅读全文