1 /* 2 多项式ADT数组实现 3 */ 4 5 6 /*接口声明*/ 7 #ifndef _POLYNOMIAL_H 8 #define _POLYNOMIAL_H 9 10 #define MaxDegree 100 //指定多项式的最大指数 11 12 struct node 13 { 14 int CoeffArray[ MaxDegree + 1 ]; 15 int HighPower; 16 }; 17 18 struct node * Polynomial; 19 20 /*操作集*/ 21 22 /*将多项式初始化为零*/ 23 void ZeroPolynomial( Polynomial Poly ); 24 25 /*两个多项式相加*/ 26 void AddPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum ); 27 28 /*两个多项式相乘*/ 29 void MulPolynomial( const Polynomial Poly1, const Polynomial Poly2, PolyNomial PolyProd ); 30 31 32 33 34 /*接口实现*/ 35 #include <stdlib.h> 36 #include "polynomial.h" 37 38 int Max( int A, int B ); 39 40 void ZeroPolynomial( Polynomial Poly ) 41 { 42 for ( int i = 0; i <= MaxPolynomial; i++ ) 43 Poly->CoeffArray[ i ] = 0; 44 Poly->HighPower = 0; 45 } 46 47 void AddPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum ) 48 { 49 ZeroPolynomial( PolySum ); 50 PolySum->HighPower = Max( Poly1->HighPower, Poly2->HighPower ); 51 52 while ( int i = PolySum->HighPower; i >= 0; i-- ) 53 PolySum->CoeffArray[ i ] = Poly1->CoeffArray[ i ] + Poly2->CoeffArray[ i ]; 54 } 55 56 void MulPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolyProd ) 57 { 58 PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower; 59 if ( PolyProd->HighPower > MaxDegree ) 60 { 61 printf( "数组溢出,退出程序 " ); 62 exit( 1 ); 63 } 64 65 for ( int i = 0; i <= Poly1->HighPower; i++ ) 66 for ( int j = 0; j <= Poly2->HighPower; j++ ) 67 PolyProd->CoeffArray[ i + j ] += Poly1->CoeffArray[ i ] * Poly2->CoeffArray[ j ]; 68 } 69 70 int Max( int A, int B ) 71 { 72 return A > B ? A : B; 73 }