c語言實現多項式求和
阿新 • • 發佈:2020-10-18
一元多項式求和(c語言實現)
把任意給定的兩個一元多項式P(x) ,Q(x) 輸入計算機,計算它們的和並輸出計算結果。
#include <stdio.h> #include <malloc.h> typedef struct LNode { int coef; // 係數 int exp; // 指數 struct LNode* next; } LinkNode; void Create(LinkNode*& head) // 建立多項式 { int n, coef, exp; LinkNode* index, * node; head = (LinkNode*)malloc(sizeof(LinkNode)); // 建立頭節點 index = head; // 輔助指標,使 index 指向最後一個節點,沒次新增加一個節點,index就後移 printf("請輸入多項式的項數:"); scanf("%d", &n); for (int i = 1; i <= n; i++) { printf("請輸入第%d項的係數和指數", i); scanf("%d %d", &coef, &exp); node = (LinkNode*)malloc(sizeof(LinkNode)); // 建立新的節點 node->coef = coef; node->exp = exp; index->next = node; // 將新建立的加入到連結串列中 index = node; // index指向新的節點 } index->next = NULL; } void Display(LinkNode* L) // 輸出多項式 { L = L->next; // 讓 指向第一個節點 while (L != NULL) // 如果 p 不為空(連結串列不為空),則輸出 { printf("%dX^%d", L->coef, L->exp); // 輸出係數 和 指數 if (L->next != NULL) // 如果 p 的下一個節點不為空,這就輸出一個 + 號(防止多輸出一個 + 號) { printf("+"); } L = L->next; } printf("\n"); } LinkNode* ListAdd(LinkNode* p, LinkNode* q) // 多項式相加 { p = p->next; q = q->next; LinkNode* addL, * index, * node = NULL; // 用 addL儲存相加後的二項式, index 為輔助指標,node為新節點 addL = (LinkNode*)malloc(sizeof(LinkNode)); index = addL; while (p != NULL && q != NULL) // 目的是為了讓兩個多項式為空去比較 { if (p->exp > q->exp) // 如果 p 的指數大於 q 的指數就把 p 的該項做為新節點,讓後讓 p 後移一位 { node = (LinkNode*)malloc(sizeof(LinkNode)); node->coef = p->coef; node->exp = p->exp; index->next = node; index = node; p = p->next; } else if (p->exp == q->exp) // 如果 p 的指數等於 q 的指數,就把 p 和 q 的係數相加作為新節點,讓後讓 p 和 q 後移一位 { node = (LinkNode*)malloc(sizeof(LinkNode)); node->coef = p->coef + q->coef; node->exp = p->exp; if (node->coef == 0) { free(node); } else { index->next = node; index = node; } p = p->next; q = q->next; } else // 如果 q 的指數大於 p 的指數就把 q 的該項做為新節點,讓後讓 q 後移一位 { node = (LinkNode*)malloc(sizeof(LinkNode)); node->coef = q->coef; node->exp = q->exp; index->next = node; index = node; q = q->next; } } if (p != NULL) // 如果 p 不為空,說明 q 為空了,就可以直接將 p 後面的節點給 node { node->next = p->next; } else if (q != NULL) // 如果 q 不為空,說明 p 為空了,就可以直接將 q 後面的節點給 node { node->next = q->next; } else // 如果執行這個則所民 p 和 q 都為空了,就讓node指向的最後的節點指向空 { node->next = NULL; } return addL; } int main(int argc, char const* argv[]) { LinkNode* P, * Q; printf("請輸入第一個多項式"); Create(P); Display(P); printf("請輸入第二個多項式"); Create(Q); Display(Q); LinkNode* List = ListAdd(P, Q); printf("相加後的多項式為:"); Display(List); return 0; }