一元多项式计算器 :加、减、乘运算【完整代码+运行截图+实验说明】
生活随笔
收集整理的這篇文章主要介紹了
一元多项式计算器 :加、减、乘运算【完整代码+运行截图+实验说明】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文鏈接?:https://blog.csdn.net/weixin_44119881/article/details/103717231?
?
注意 【?此套代碼,有所缺陷 !!!?】
目? ?錄
1、實驗目的、要求
2、完整代碼
3、運行截圖
1、實驗目的、要求
2、完整代碼
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> #include <iostream> #include <cmath>using namespace std; //調用命名空間std內定義的所有標識符typedef struct polyn //2個polyn {double coef; //系數---小數運算int expn; //指數struct polyn *next; //指向下一個節點的指針-next存地址 } PolyNode, *PLinkList; //*PLinkList是PolyNode結構體類型的指針 typedef struct polyn *PLinkList;// typedef struct polyn //2個polyn // { // double coef; //系數---小數運算 // int expn; //指數 // struct polyn *next; //指向下一個節點的指針-next存地址 // } PolyNode; //*PLinkList是PolyNode結構體類型的指針 // typedef struct polyn *PLinkList;PLinkList CreatePolyn(int n); //創建一元多項式,使一元多項式呈指數遞減 void PrintPolyn(PLinkList head); //輸出一元多項式 PLinkList Addition(PLinkList L1, PLinkList L2); //多項式的加法 PLinkList Subtraction(PLinkList L1, PLinkList L2); //多項式的減法 PLinkList Reverse(PLinkList head); //將生成的鏈表逆置,使一元多項式呈指數遞增形式 PLinkList MultiplyPolyn(PLinkList L1, PLinkList L2); //多項式的乘法 void Destory(PLinkList L); //銷毀多項式---釋放空間//創建一元多項式,使一元多項式呈指數遞減 PLinkList CreatePolyn(int n) //n是項數,在main()中輸入 {PolyNode *p, *q, *s; //結構體指針PolyNode *head = NULL;double coef2; //系數int expn2; //指數head = (PLinkList)malloc(sizeof(PolyNode)); //動態生成頭結點if (!head){exit(-2); //非正常退出; exit(0)-正常退出}//初始化head->coef = 0.0;head->expn = 0;head->next = NULL; //下一項為空cout << "依次輸入多項式的系數和指數: " << endl;while (n--){cin >> coef2; //系數cin >> expn2; //指數s = (PLinkList)malloc(sizeof(PolyNode)); //申請新結點if (!s){exit(-2);}s->coef = coef2; //系數s->expn = expn2; //指數q = head->next;p = head;while (q && expn2 < q->expn) //expn2為0, q指向head的下一個節點{p = q; //p指針后移q = q->next; //然后, q指針再后移}if (q == NULL || expn2 > q->expn){p->next = s;s->next = q;}else{q->coef += coef2;}}return head; //返回頭節點---表達式創建完畢 }//輸出一元多項式 void PrintPolyn(PLinkList head) {PolyNode *p = head->next;while (p){// if(p->coef)// {// }// else// {// cout << 0;// }// printf("%01d",p->coef);cout << p->coef; //系數//printf("%1.1f",p->coef);if (p->expn) //指數{cout << " * X^" << p->expn << " ";//printf("*x^%d",p->expn);}if (p->next && p->next->coef > 0){cout << " + ";}p = p->next;} }//相加 PolyNode *Addition(PLinkList L1, PLinkList L2) {PolyNode *head;head = (PLinkList)malloc(sizeof(PolyNode)); //作為返回鏈if (!head){exit(-2);}head->next = NULL;PLinkList p = L1->next, q = L2->next, r = head;while (p != NULL && q != NULL){//利用base對返回鏈進行賦值PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base){exit(-2);}base->next = NULL;r->next = base; //r->next 返回鏈if (p->expn > q->expn) //判斷A\B---誰的指數大【p-L1, q-L2】{base->coef = p->coef;base->expn = p->expn;p = p->next;}else if (p->expn < q->expn){base->coef = q->coef;base->expn = q->expn;q = q->next;}else{if (p->coef + q->coef != 0){base->coef = p->coef + q->coef;base->expn = p->expn;}else //A\B鏈 指數相加為0{r->next = NULL;free(base);}p = p->next;q = q->next;}if (r->next != NULL){r = r->next;}}while (p != NULL){PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base){exit(-2);}base->next = NULL;r->next = base;base->coef = p->coef;base->expn = p->expn;r = r->next;p = p->next;}while (q != NULL){PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base){exit(-2);}base->next = NULL;r->next = base;base->coef = q->coef;base->expn = q->expn;r = r->next;q = q->next;}return head; }//相減 PolyNode *Subtraction(PLinkList L1, PLinkList L2) {PolyNode *head;head = (PLinkList)malloc(sizeof(PolyNode)); //作為返回鏈if (!head){exit(-2);}head->next = NULL;PLinkList p = L1->next, q = L2->next, r = head;while (p != NULL && q != NULL){PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base){exit(-2);}base->next = NULL;r->next = base;if (p->expn > q->expn){base->coef = p->coef;base->expn = p->expn;p = p->next;}else if (p->expn < q->expn){base->coef = -q->coef; /*相減*/base->expn = q->expn;q = q->next;}else{if (p->coef != q->coef) /*相減*/{base->coef = p->coef - q->coef; /*相減*/base->expn = p->expn;}else{r->next = NULL;free(base);}p = p->next;q = q->next;}if (r->next != NULL){r = r->next;}}while (p != NULL){PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base){exit(-2);}base->next = NULL;r->next = base;base->coef = p->coef;base->expn = p->expn;r = r->next;p = p->next;}while (q != NULL){PLinkList base = (PLinkList)malloc(sizeof(PolyNode));if (!base){exit(-2);}base->next = NULL;r->next = base;base->coef = -q->coef; /*相減*/base->expn = q->expn;r = r->next;q = q->next;}return head; }//置逆 PolyNode *Reverse(PLinkList head) { //將生成的鏈表逆置,使一元多項式呈指數遞增形式PolyNode *q, *r, *p = NULL;q = head->next;while (q){r = q->next;q->next = p;p = q;q = r;}head->next = p;return head; }//相乘 PolyNode *MultiplyPolyn(PLinkList L1, PLinkList L2) {PolyNode *pa, *pb, *pc, *u, *head;int k, maxExp;double coef;head = (PLinkList)malloc(sizeof(PolyNode));if (!head){return NULL;}head->coef = 0.0;head->expn = 0;head->next = NULL;if (L1->next != NULL && L2->next != NULL) //確定循環次數{maxExp = L1->next->expn + L2->next->expn;}else{return head;}pc = head;L2 = Reverse(L2);for (k = maxExp; k >= 0; k--){pa = L1->next;while (pa != NULL && pa->expn > k){pa = pa->next;}pb = L2->next;while (pb != NULL && pa != NULL && pa->expn + pb->expn < k){pb = pb->next;}coef = 0.0; //對系數進行初始化while (pa != NULL && pb != NULL){if (pa->expn + pb->expn == k){coef += pa->coef * pb->coef;//和值==max---系數相加pa = pa->next;pb = pb->next;}else if (pa->expn + pb->expn > k)//遍歷L1鏈{pa = pa->next;}else//遍歷L2鏈{pb = pb->next;}}if (coef != 0.0)//利用指針u對返回鏈進行操作{u = (PLinkList)malloc(sizeof(PolyNode));u->coef = coef;u->expn = k;u->next = pc->next;//pc指向headpc->next = u;pc = u;}}//L2 = Reverse(L2);return head; }void Destory(PLinkList L) {for (PLinkList base = L->next; L != NULL; base = base->next){free(L);L = base;}return; }int main() {PLinkList A, B, C, D, E;int n;//構造多項式Acout << "輸出多項式A的項數: ";cin >> n;A = CreatePolyn(n);cout << "A(x) = ";// PrintPolyn(A); //多項式為0時, 輸出為空!if (A){PrintPolyn(A);}else{cout << 0;}cout << endl << endl;//構造多項式Bcout << "輸出多項式B的項數: ";cin >> n;B = CreatePolyn(n);cout << "B(x) = ";// PrintPolyn(B); //多項式為0時, 輸出為空!if (B){PrintPolyn(B);}else{cout << 0;}cout << endl << endl;cout << "-----------多項式運算-----------\n";//相加C = Addition(A, B);cout << "A(x) + B(x) = ";// PrintPolyn(C); 多項式為0時, 輸出為空!if (C){PrintPolyn(C);}else{cout << 0;}cout << endl << endl;//相減D = Subtraction(A, B);cout << "A(x) - B(x) = ";// PrintPolyn(D); 多項式為0時, 輸出為空!if (D){PrintPolyn(D);}else{cout << 0;}cout << endl << endl;//相乘E = MultiplyPolyn(A, B);cout << "A(x) * B(x) = ";// PrintPolyn(E); 多項式為0時, 輸出為空!if (E){PrintPolyn(E);}else{cout << 0;}cout << endl << endl;Destory(A);Destory(B);Destory(C); // +Destory(D); // -Destory(E); // *return 0; }3、運行截圖
總結
以上是生活随笔為你收集整理的一元多项式计算器 :加、减、乘运算【完整代码+运行截图+实验说明】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android---Service(生命
- 下一篇: 数学建模论文写作小技巧分享