編寫函數 readpoly 和 printpoly ,他們可以建立和印出多項式。
多項式輸入,輸出及相加,課本 P.65 EX.1(read poly and print poly)及多項式相加 (add poly),加法的演算法(algorithm)可以參考課本 P.62 program 2.4 或 P.64 program 2.5,課本:資料結構-使用C語言 松崗電腦圖書資料股份有限公司
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
#include <stdio.h> #define MAX_TERMS 100 typedef struct { float coef; //每項的係數 int expon; //每項的指數 } polynomial; polynomial terms[MAX_TERMS]; // 僅能儲存一百個項數和係數 int starta, finisha, startb, finishb, startd, finishd; int avail = 0; /* starta 代表第一個多項式開始的位置 finisha 代表第一個多項式結束的位置 startb 代表第二個多項式開始的位置 finishb 代表第二個多項式結束的位置 startd 代表儲存結果的多項式開始的位置 finishd 代表儲存結果的多項式結束的位置 avail 代表可以使用的索引 */ void readpoly(); void printpoly(); int compare(int i, int j); void attach(float coefficient, int exponent); void padd(); void presult(); int main(void) { printf("\nSTEP 1. 讀取多項式...\n"); readpoly(); printf("\nSTEP 2. 印出剛剛輸入的兩個項式...\n"); printpoly(); padd(); printf("\nSTEP 3. 兩個多項式相加的結果\n"); presult(); return 0; } void readpoly() { int i,j; printf("本程式可以處理兩個多項式相加,請依序輸入第一和第二個多項式..\n"); printf("請輸入您的第一個多項式的項次有幾項: "); scanf("%d", &i); starta = 0; //第一個多項式的起點一定是 0 for(j = starta ; j < i ; j++) { terms[j].coef = 2; terms[j].expon = 3; /* printf("請輸入 %d 項的係數: ", j + 1); scanf("%f", &terms[j].coef); printf("請輸入 %d 項的指數: ", j + 1); scanf("%d", &terms[j].expon); */ } finisha = i - 1; printf("請輸入您的第二個多項式不為零的項次有幾項: "); scanf("%d", &j); startb = finisha + 1; finishb = startb + j; for(i = startb ; i <= finishb ; i++) { terms[i].coef = 4; terms[i].expon = 5; /* printf("請輸入 %d 項的係數: ", j + 1); scanf("%f", &terms[j].coef); printf("請輸入 %d 項的指數: ", j + 1); scanf("%d", &terms[j].expon); */ } avail = finishb+1; } void printpoly() { printf("印出第一個多項式:"); for(int i = starta ; i <= finisha ; i++) { printf("%1.0fX^%d", terms[i].coef,terms[i].expon); // 印出多項式 if( i != finisha) printf("+"); // 印出多項式的加號 } printf("\n印出第二個多項式:"); for(i = startb ; i <= finishb ; i++) { printf("%1.0fX^%d", terms[i].coef,terms[i].expon); // 印出多項式 if( i != finishb) printf("+"); // 印出多項式的加號 } printf("\n"); } void padd() { // add A(X) and B(X) to obtain D(X) int t_starta = starta; int t_finisha = finisha; int t_startb = startb; int t_finishb = finishb; // 用區域變數取代全域變數,以免運算時影響全域變數的值 float coefficient; printf("avail1. %d \n",avail); startd = avail; while(t_starta <= t_finisha && t_startb <= t_finishb) switch (compare(terms[t_starta].expon, terms[t_startb].expon)) { case -1: // a expon < b expon attach(terms[t_startb].coef, terms[t_startb].expon); t_startb++; break; case 0: // equal exponments coefficient = terms[t_starta].coef + terms[t_startb].coef; if (coefficient) attach(coefficient, terms[t_starta].expon); t_starta++; t_startb++; break; case 1: // a expon > b expon attach(terms[t_starta].coef, terms[t_starta].expon); t_starta++; } // add in remaining terms of A(X) for (; t_starta <= t_finisha ; t_starta++) attach(terms[t_starta].coef, terms[t_starta].expon); // add in remaining terms of B(X) for (; t_startb <= t_finishb ; t_startb++) attach(terms[t_startb].coef, terms[t_startb].expon); // avail 的值在 attach finishd = avail - 1; } void attach(float coefficient, int exponent) { /* add a new term to the polynomial */ if (avail >= MAX_TERMS) { printf("Too many terms in the polynomial. \n"); } terms[avail].coef = coefficient; terms[avail++].expon = exponent; } int compare(int i, int j) { int result; if( i < j ) result = -1; else if( i == j) result = 0; else if( i > j ) result = 1; return result; } void presult() { printf("印出多項式相加的結果: "); for(int i = startd ; i <= finishd ; i++) { printf("%1.0fX^%d", terms[i].coef,terms[i].expon); // 印出多項式 if( i != finishd) printf("+"); // 印出多項式的加號 } printf("\n"); } |
謝謝 對我幫助很大