二元多项式基本运算 选择合适的存储结构表示二元多项式,并实现基本的加减运算 要求: 1)二元多项式的输入采用如下方式进行键盘输入 (5y^2+7)x^4 + (3y^4+2y+9)x^2 + (2y

      1. 本题最关键的部分就是指数和系数的读取和存储,可以把系数和指数存在一个N*4的数列中,第一列为系数,第二列为x的指数,第三列为y的指数,第四列可有可无,第四列可以存储两个指数的和,方便升幂和降幂。

      2.括号内多项式系数和指数的读取,根据指数的有无以及是否为1来进行分类,同时建立一个字符型数组存储多项式的符号+ -,括号外多项式的读取类似,同时括号外直接对上面的数组进行乘法或者加减运算即可

      3.到这时,一个算式就被分为多个多项式了,接下来要将相同的多项式进行加减运算,指数相同的相加减。符号根据建立的字符数组判断。

      4.升幂和降幂,根据指数和排序,提供一个方法,可以利用类似冒泡排序的方法,将数列的整行都冒上去。

      5.输出,输出可以直接输出,但是为了美观,可以将指数,系数为1和0时的情况特殊输出。

      相信用到这个的一定是和我同校的同学,源代码就不给了,如果确实需要,可以qq2642934104

       

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元多项式可以用链式存储结构实现,在这种结构中,每个节点包含两个数据项,一个是多项式的系数,另一个是多项式的指数。链表的头指针指向第一个节点,每个节点的指针指向下一个节点。 对于加法,我们可以从两个多项式的头节点开始,依次对比它们的指数大小,如果相等则将它们的系数相加,否则将指数较小的节点插入到新链表中,继续比较下一个节点。如果遍历完其中一个多项式,则直接将剩余的节点插入到新链表中。 对于减法,我们可以先将第二个多项式的系数取相反数,再按照加法的方式进行计算。 下面是链式存储实现一元多项式加减运算的代码示例: ```cpp #include <iostream> using namespace std; // 定义多项式的节点结构体 struct Node { float coef; // 系数 int expo; // 指数 Node* next; // 指向下一个节点的指针 Node(float c, int e): coef(c), expo(e), next(NULL) {} }; // 定义多项式类 class Polynomial { public: Polynomial(): head(NULL) {} ~Polynomial() { clear(); } void clear(); // 清空多项式 void insert(float c, int e); // 插入节点 void add(Polynomial& p); // 加法 void subtract(Polynomial& p); // 减法 void print(); // 输出多项式 private: Node* head; // 头指针 }; void Polynomial::clear() { Node* p = head; while (p) { Node* q = p; p = p->next; delete q; } head = NULL; } void Polynomial::insert(float c, int e) { if (c == 0) return; // 系数为0,不插入节点 Node* p = head; Node* q = NULL; // p的前驱节点 while (p && p->expo > e) { q = p; p = p->next; } if (p && p->expo == e) { p->coef += c; // 指数相同,系数相加 if (p->coef == 0) { // 系数为0,删除节点 if (q) q->next = p->next; else head = p->next; delete p; } } else { // 插入新节点 Node* node = new Node(c, e); if (q) q->next = node; else head = node; node->next = p; } } void Polynomial::add(Polynomial& p) { Node* p1 = head; Node* p2 = p.head; Polynomial result; while (p1 && p2) { if (p1->expo == p2->expo) { result.insert(p1->coef + p2->coef, p1->expo); p1 = p1->next; p2 = p2->next; } else if (p1->expo > p2->expo) { result.insert(p1->coef, p1->expo); p1 = p1->next; } else { result.insert(p2->coef, p2->expo); p2 = p2->next; } } while (p1) { result.insert(p1->coef, p1->expo); p1 = p1->next; } while (p2) { result.insert(p2->coef, p2->expo); p2 = p2->next; } clear(); head = result.head; result.head = NULL; } void Polynomial::subtract(Polynomial& p) { Node* p2 = p.head; while (p2) { p2->coef = -p2->coef; // 取相反数 p2 = p2->next; } add(p); } void Polynomial::print() { Node* p = head; while (p) { cout << p->coef << "x^" << p->expo << " "; p = p->next; } cout << endl; } int main() { Polynomial p1, p2; p1.insert(3, 5); p1.insert(-2, 3); p1.insert(5, 2); p1.insert(4, 0); p2.insert(2, 4); p2.insert(-1, 3); p2.insert(1, 1); p1.print(); p2.print(); p1.add(p2); p1.print(); p1.subtract(p2); p1.print(); return 0; } ``` 输出结果如下: ``` 3x^5 -2x^3 5x^2 4x^0 2x^4 -1x^3 1x^1 3x^5 2x^4 -3x^3 5x^2 1x^1 4x^0 3x^5 -2x^3 5x^2 4x^0 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值