c++实现多项式类定义
生活随笔
收集整理的這篇文章主要介紹了
c++实现多项式类定义
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?c++實現(xiàn)多項式類的定義,可進行+、-、*、賦值運算,可顯示已存儲幾個多項式對象,可計算任意x值下多項式的值。
//************************************************************************* //polynomial.h //************************************************************************* #pragma once #include<iostream> #include<cmath>using namespace std;class Node { //結(jié)點類 private:float coe; //系數(shù)int exp; //指數(shù)Node* next; public:friend class Polynomial;Node(float c, int e, Node* n = NULL) :coe(c), exp(e), next(n) { /*cout << "Node constructor called" << endl;*/ }//構(gòu)造函數(shù)~Node() { /*cout << "Node destructor called" << endl;*/} //析構(gòu)函數(shù) inline Node* Add_Node(float c, int e); //當(dāng)前結(jié)點后添加結(jié)點 void Clear_Node(); //清理結(jié)點friend Polynomial operator+(const Polynomial& a, const Polynomial& b); //重載"+"運算符friend Polynomial operator-(const Polynomial& a, const Polynomial& b); //重載"-"運算符friend Polynomial operator*(const Polynomial& a, const Polynomial& b); //重載"*"運算符 }; inline Node* Node::Add_Node(float c, int e) {Node* n = new Node(c, e);this->next = n;return n; }class Polynomial { //多項式類 private:static int count;Node* head; public:Polynomial() { Node* p = new Node(0, 0); head = p; count++; } //重載無參構(gòu)造函數(shù)Polynomial(Node* l) :head(l) { /*cout << "Polynomial constructor called" << endl;*/ count++; } //構(gòu)造函數(shù)Polynomial(const Polynomial& o); //拷貝構(gòu)造函數(shù)~Polynomial() { /*cout << "Polynomial destructor called" << endl;*/ count--; } //析構(gòu)函數(shù)inline void set(Node* p); //后期修改函數(shù)inline void clear(); //清理函數(shù)friend inline void print_count(); //輸出多項式總數(shù)void print()const; //輸出函數(shù)float compute(float x)const; //計算函數(shù)int seek_max()const; //尋找最高次數(shù)friend Polynomial operator+(const Polynomial& a, const Polynomial& b); //重載"+"運算符friend Polynomial operator-(const Polynomial& a, const Polynomial& b); //重載"-"運算符friend Polynomial operator*(const Polynomial& a, const Polynomial& b); //重載"*"運算符Polynomial& operator=(const Polynomial& that); //重載"="運算符 }; inline void Polynomial::set(Node* p) {this->head = p; } inline void Polynomial::clear() {this->head->Clear_Node(); }inline void print_count() {cout << "共存儲" << Polynomial::count << "個多項式" << endl; }?以下為具體功能實現(xiàn)
//************************************************************************* //polynomial.cpp //************************************************************************* #include"polynomial.h"void Node::Clear_Node() {Node* p = this;Node* q = p;while (p) {q = p->next;delete p;p = q;} }Polynomial::Polynomial(const Polynomial& o) {//拷貝構(gòu)造函數(shù)Node* O = o.head;Node* a = new Node(O->coe,O->exp);Node* p = a;O = O->next;while (O) {a = a->Add_Node(O->coe, O->exp);O = O->next;}this->head = p;count++;/*cout << "Polynomial copy constructor called" << endl;*/ }void Polynomial::print() const {Node* p = this->head;bool flag = false;while (p) {if (p->coe != 0) {if (p->coe > 0) {if(flag)cout << "+";}if (p->exp == 0)cout << p->coe;else if (p->exp == 1) {if (p->coe == 1);else if (p->coe == -1)cout << "-";else cout << p->coe;cout << "x";}else {if (p->coe == 1);else if (p->coe == -1)cout << "-";else cout << p->coe;cout << "x^" << p->exp;}}p = p->next;flag = true;}cout << endl; }float Polynomial::compute(float x)const {float result=0;Node* p = this->head;while (p) {result = result + p->coe * pow(x, p->exp);p = p->next;}return result; }int Polynomial::seek_max()const {Node* p = this->head;int max = p->exp;while (p) {if (p->exp > max)max = p->exp;p = p->next;}return max; }Polynomial operator+(const Polynomial& a, const Polynomial& b) {Node* p = a.head;Node* q = b.head;Node* h = NULL;Node* s = NULL;int max = 0;float x = 0;int A = a.seek_max();int B = b.seek_max();max = A > B ? A : B;for (int i = 0; i <= max; i++){while (p) {if (p->exp == i) {x = x + p->coe;}p = p->next;}while (q) {if (q->exp == i) {x = x + q->coe;}q = q->next;}if (x) {if (h) s = s->Add_Node(x, i);else {h = new Node(x, i);s = h;}}x = 0;p = a.head;q = b.head;}Polynomial C(h);return C; }Polynomial operator-(const Polynomial& a, const Polynomial& b) {Node* p = a.head;Node* q = b.head;Node* h = NULL;Node* s = NULL;int max = 0;float x = 0;max = a.seek_max() > b.seek_max() ? a.seek_max() : b.seek_max();for (int i = 0; i <= max; i++) {while (p) {if (p->exp == i) {x = x + p->coe;}p = p->next;}while (q) {if (q->exp == i) {x = x - q->coe;}q = q->next;}if (x) {if (h) s = s->Add_Node(x, i);else {h = new Node(x, i);s = h;}}x = 0;p = a.head;q = b.head;}Polynomial C(h);return C; }Polynomial operator*(const Polynomial& a, const Polynomial& b) {Node* p = a.head;Node* q = b.head;Node* h = NULL;Node* s = NULL;Polynomial C;Polynomial P;while (p) {while (q) {if (h) s = s->Add_Node(p->coe * q->coe, p->exp + q->exp);else {h = new Node(p->coe * q->coe, p->exp + q->exp);s = h;}q = q->next;}p = p->next;q = b.head;P.set(h);h = NULL;s = NULL;C = C + P;}return C; }Polynomial& Polynomial::operator=(const Polynomial& that) {Node* q = that.head;Node* p = this->head;Node* s = p;Node* h = NULL;while (q) {if (p) {p->coe = q->coe;p->exp = q->exp;s = p;p = p->next;}else {h = new Node(q->coe, q->exp);p = h;s->next = p;s = p;p = p->next;}q = q->next;}return *this; }以下為測試代碼
//******************************************************************** //main.cpp //******************************************************************** #include"polynomial.h"int Polynomial::count = 0;int main() {Node* a = new Node(5, 0);a->Add_Node(-1,1)->Add_Node(4, 2)->Add_Node(2.1, 3)->Add_Node(-9, 4);Node* b = new Node(7, 1);b->Add_Node(8.2, 4)->Add_Node(6, 2)->Add_Node(4, 5)->Add_Node(-3, 3);Polynomial A(a);A.print();print_count();Polynomial B(b);B.print();print_count();cout << "A(x = 3) = " << A.compute(3) << endl;cout << "B(x = 2) = " << B.compute(2) << endl;Polynomial C;C = A + B;cout << "A + B = ";C.print();C = A - B;cout << "A - B = ";C.print();C = B - A;cout << "B - A = ";C.print();C = A * B;cout << "A * B = ";C.print();print_count();Polynomial D(A);D.print();D = B;D.print();print_count();system("pause");A.clear();B.clear();C.clear();D.clear();return 0; }測試結(jié)果如下:
5-x+4x^2+2.1x^3-9x^4 共存儲1個多項式 7x+8.2x^4+6x^2+4x^5-3x^3 共存儲2個多項式 A(x = 3) = -634.3 B(x = 2) = 273.2 A + B = 5+6x+10x^2-0.9x^3-0.8x^4+4x^5 A - B = 5-8x-2x^2+5.1x^3-17.2x^4-4x^5 B - A = -5+8x+2x^2-5.1x^3+17.2x^4+4x^5 A * B = 35x+23x^2+7x^3+82.7x^4-50.6x^5-31.5x^6+60.22x^7-65.4x^8-36x^9 共存儲3個多項式 5-x+4x^2+2.1x^3-9x^4 7x+8.2x^4+6x^2+4x^5-3x^3 共存儲4個多項式總結(jié)
以上是生活随笔為你收集整理的c++实现多项式类定义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天不知道吃什么,于是我做了个随机选择的
- 下一篇: python中label函数_pytho