多项式ADT加法乘法——数组实现

 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 }
原文地址:https://www.cnblogs.com/weixia-blog/p/7307372.html