```cpp= // HW3.cpp : 定義主控台應用程式的進入點。 // #include <iostream> using namespace std; #define MAX_TERMS 10 typedef struct { int coef; int expo; } polynomialTerm; void clear(polynomialTerm t[]) { for (int i = 0; i < MAX_TERMS; i++) { t[i].coef = 0; t[i].expo = 0; } return; } void printArrayBasedPoly(polynomialTerm t[]) { if (t[0].coef == 0) return; if (t[0].expo == 0) cout << t[0].coef; else cout << t[0].coef << "X^" << t[0].expo; for (int i = 1; i < MAX_TERMS; i++) { if (t[i].coef == 0) return; if (t[i].expo == 0) cout << " + " << t[i].coef; else cout << " + " << t[i].coef << "X^" << t[i].expo; } } void inputTerm(polynomialTerm t[], int coef, int expo) { for (int i = 0; i < MAX_TERMS; i++) { if (t[i].coef == 0) { t[i].coef = coef; t[i].expo = expo; return; } else if (t[i].expo == expo) { if (coef == 0) { for (int j = i; j < MAX_TERMS - 1; j++) { t[j] = t[j + 1]; } t[MAX_TERMS - 1].coef = 0; return; } else { t[i].coef = coef; return; } } else if (t[i].expo < expo) { if (coef != 0) { for (int j = MAX_TERMS - 1; j > i; j--) { t[j] = t[j - 1]; } t[i].coef = coef; t[i].expo = expo; return; } } } } void addArrayBasedPoly(polynomialTerm a[], polynomialTerm b[], polynomialTerm d[]) { int startA = 0, startB = 0, startD = 0; while (startA < MAX_TERMS && startB < MAX_TERMS) { if (a[startA].coef == 0 && b[startB].coef == 0) break; if (a[startA].expo > b[startB].expo) { d[startD].coef = a[startA].coef; d[startD++].expo = a[startA].expo; startA++; } else if (a[startA].expo < b[startB].expo) { d[startD].coef = b[startB].coef; d[startD++].expo = b[startB].expo; startB++; } else { int sum = a[startA].coef + b[startB].coef; if (sum != 0) { d[startD].coef = sum; d[startD++].expo = a[startA].expo; } startA++; startB++; } } for (; startA < MAX_TERMS; startA++) { if (startD >= MAX_TERMS) return; d[startD].coef = a[startA].coef; d[startD++].expo = a[startA].expo; } for (; startB < MAX_TERMS; startB++) { if (startD >= MAX_TERMS) return; d[startD].coef = b[startB].coef; d[startD++].expo = b[startB].expo; } return; } int main() { polynomialTerm a[MAX_TERMS], b[MAX_TERMS], d[MAX_TERMS]; int coef, expo; while (1) { clear(a); clear(b); clear(d); for (int i = 0; i < MAX_TERMS; i++) { cout << "\ninput a's coefficient and exponent: "; cin >> coef >> expo; if (expo == 0 && coef == 0) break; inputTerm(a, coef, expo); } cout << "\n\na = "; printArrayBasedPoly(a); cout << "\n"; for (int i = 0; i < MAX_TERMS; i++) { cout << "\ninput b's coefficient and exponent: "; cin >> coef >> expo; if (expo == 0 && coef == 0) break; inputTerm(b, coef, expo); } cout << "\n\nb = "; printArrayBasedPoly(b); cout << "\n"; // d =a + b, where a, b, and d are polynomials addArrayBasedPoly(a, b, d); cout << "\na + b = "; printArrayBasedPoly(d); cout << "\n"; } return 0; } /*測資1: 0 5 3 0 7 1 1 1 -2 2 2 2 3 3 0 2 4 4 0 0 a = 4X^4 + 3X^3 + 1X^1 + 3 -3 0 0 7 8 1 -1 1 3 2 -2 2 -3 3 0 2 -4 4 0 0 b = -4X^4 + -3X^3 + -1X^1 + -3 a + b = 測資2: 7 3 2 5 1 7 4 8 2 3 5 5 1 0 0 3 0 0 a = 4X^8 + 1X^7 + 5X^5 + 1 2 5 -5 5 1 3 3 7 5 0 8 0 0 3 0 0 b = 3X^7 + -5X^5 + 8 a + b = 4X^8 + 4X^7 + 9 測資3: 8 8 7 7 6 6 3 3 4 4 5 5 2 0 1 9 0 0 a = 1X^9 + 8X^8 + 7X^7 + 6X^6 + 5X^5 + 4X^4 + 3X^3 + 2 -8 8 -7 7 -6 6 0 8 8 0 -8 8 9 9 0 0 b = 9X^9 + -8X^8 + -7X^7 + -6X^6 + 8 a + b = 10X^9 + 5X^5 + 4X^4 + 3X^3 + 10 測資4: 3 0 7 2 2 2 7 4 0 1 4 5 -8 9 -4 3 0 0 a = -8X^9 + 4X^5 + 7X^4 + -4X^3 + 2X^2 + 3 5 2 0 3 -5 2 -2 9 7 0 6 3 0 3 -7 4 2 1 0 0 b = -2X^9 + -7X^4 + -5X^2 + 2X^1 + 7 a + b = -10X^9 + 4X^5 + -4X^3 + -3X^2 + 2X^1 + 10 測資5: 0 9 0 7 0 3 0 1 2 0 0 0 a = 2 5 4 8 9 0 2 0 0 b = 8X^9 + 5X^4 a + b = 8X^9 + 5X^4 + 2 */ ```