數組實現多項式的加減乘運算,數組多項式乘運算
"fatal.h"//頭文件
1 #include<stdio.h>
2 #include<stdlib.h>
3 #define Error(Str) FatalError(Str)
4 #define FatalError(Str) fprintf(stderr,"%s\n",Str),exit(1);
1 /* This code doesn't really do much */
2 /* Thus I haven't bothered testing it */
3
4 #include "fatal.h"//頭文件
5
6 #define MaxDegree 100//定義多項式最大指數是100
7
8 static int
9 Max( int A, int B )
10 {
11 return A > B ? A : B;//返回AB中的最大值
12 }
13 //定義一個結構體數組
15 typedef struct
16 {
17 int CoeffArray[ MaxDegree + 1 ];//需要多存儲一個常數項
18 int HighPower;//存儲多項式的最高項的指數
19 } *Polynomial;
20 /* END */
21
22 /* START: fig3_19.txt */
23 void
24 ZeroPolynomial( Polynomial Poly )//初始化多項式
25 {
26 int i;
27
28 for( i = 0; i <= MaxDegree; i++ )
29 Poly->CoeffArray[ i ] = 0;
30 Poly->HighPower = 0;
31 }
32 /* END */
33
34 /* START: fig3_20.txt */
35 void //兩個多項式相加
36 AddPolynomial( const Polynomial Poly1, const Polynomial Poly2,
37 Polynomial PolySum )
38 {
39 int i;
40
41 ZeroPolynomial( PolySum );
42 PolySum->HighPower = Max( Poly1->HighPower,
43 Poly2->HighPower );
44
45 for( i = PolySum->HighPower; i >= 0; i-- )
46 PolySum->CoeffArray[ i ] = Poly1->CoeffArray[ i ]
47 + Poly2->CoeffArray[ i ];
48 }
49 /* END */
50
51 /* START: fig3_21.txt */
52 void //兩個多項式相乘
53 MultPolynomial( const Polynomial Poly1,
54 const Polynomial Poly2, Polynomial PolyProd )
55 {
56 int i, j;
57
58 ZeroPolynomial( PolyProd );
59 PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower;
60
61 if( PolyProd->HighPower > MaxDegree )
62 Error( "Exceeded array size" );
63 else
64 for( i = 0; i <= Poly1->HighPower; i++ )
65 for( j = 0; j <= Poly2->HighPower; j++ )
66 PolyProd->CoeffArray[ i + j ] +=
67 Poly1->CoeffArray[ i ] *
68 Poly2->CoeffArray[ j ];
69 }
70 /* END */