C++编写代码【问题描述】编写一个程序用单链表存储多项式,并实现两个一元多项式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项的系数与指数,系数与指数间用空格隔开,系数保留一位小数 【评分标准】必须用链表实现
时间: 2024-01-01 22:06:55 浏览: 75
数据结构(C语言)用单链表存储一元多项式-并实现两个多项式的相加运算.doc
5星 · 资源好评率100%
以下是C++的代码实现:
```cpp
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
struct Node {
double coef;
int expn;
Node *next;
};
Node *CreatePoly() {
Node *p = new Node, *r = p;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
Node *q = new Node;
cin >> q->coef >> q->expn;
r->next = q;
r = q;
}
r->next = nullptr;
return p;
}
void PrintPoly(Node *p) {
bool flag = false;
while (p->next) {
p = p->next;
if (fabs(p->coef) < 1e-6) continue;
if (flag) cout << " ";
else flag = true;
cout << fixed << setprecision(1) << p->coef << " " << p->expn;
}
cout << endl;
}
void MergePoly(Node *a, Node *b, Node *c) {
Node *pa = a->next, *pb = b->next, *pc = c;
while (pa && pb) {
if (pa->expn > pb->expn) {
pc->next = pa;
pc = pa;
pa = pa->next;
} else if (pa->expn < pb->expn) {
pc->next = pb;
pc = pb;
pb = pb->next;
} else {
double sum = pa->coef + pb->coef;
if (fabs(sum) > 1e-6) {
pa->coef = sum;
pc->next = pa;
pc = pa;
}
pa = pa->next;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
}
int main() {
Node *a = CreatePoly(), *b = CreatePoly(), *c = new Node;
MergePoly(a, b, c);
PrintPoly(c);
return 0;
}
```
该程序首先定义了一个结构体 `Node`,表示多项式的每一项,包括系数 `coef` 和指数 `expn`,以及指向下一项的指针 `next`。然后定义了三个函数:
- `CreatePoly()`:用于创建多项式,通过从标准输入中读取系数和指数,构建一个单链表表示多项式,并返回该链表的头指针。
- `PrintPoly(Node *p)`:用于打印多项式,遍历链表,将每一项的系数和指数输出到标准输出中。
- `MergePoly(Node *a, Node *b, Node *c)`:用于将两个多项式相加,并按降序排列。该函数接受三个参数,分别表示两个待相加的多项式和相加后的多项式。该函数的实现通过遍历两个多项式的链表,按照指数的大小关系合并相同指数的项,并将结果保存到第三个链表中。
最后在 `main()` 函数中调用这三个函数,实现了多项式相加并输出结果的功能。
阅读全文