📄 poly.c
字号:
/* This code doesn't really do much *//* Thus I haven't bothered testing it */#include "fatal.h"#define MaxDegree 100static intMax( int A, int B ){ return A > B ? A : B;}/* START: fig3_18.txt */ typedef struct { int CoeffArray[ MaxDegree + 1 ]; int HighPower; } *Polynomial;/* END *//* START: fig3_19.txt */ void ZeroPolynomial( Polynomial Poly ) { int i; for( i = 0; i <= MaxDegree; i++ ) Poly->CoeffArray[ i ] = 0; Poly->HighPower = 0; }/* END *//* START: fig3_20.txt */ void AddPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolySum ) { int i; ZeroPolynomial( PolySum ); PolySum->HighPower = Max( Poly1->HighPower, Poly2->HighPower ); for( i = PolySum->HighPower; i >= 0; i-- ) PolySum->CoeffArray[ i ] = Poly1->CoeffArray[ i ] + Poly2->CoeffArray[ i ]; }/* END *//* START: fig3_21.txt */ void MultPolynomial( const Polynomial Poly1, const Polynomial Poly2, Polynomial PolyProd ) { int i, j; ZeroPolynomial( PolyProd ); PolyProd->HighPower = Poly1->HighPower + Poly2->HighPower; if( PolyProd->HighPower > MaxDegree ) Error( "Exceeded array size" ); else for( i = 0; i <= Poly1->HighPower; i++ ) for( j = 0; j <= Poly2->HighPower; j++ ) PolyProd->CoeffArray[ i + j ] += Poly1->CoeffArray[ i ] * Poly2->CoeffArray[ j ]; }/* END */#if 0/* START: fig3_23.txt */ typedef struct Node *PtrToNode; struct Node { int Coefficient; int Exponent; PtrToNode Next; }; typedef PtrToNode Polynomial; /* Nodes sorted by exponent *//* END */#endifvoidPrintPoly( const Polynomial Q ){ int i; for( i = Q->HighPower; i > 0; i-- ) printf( "%dx^%d + ", Q->CoeffArray[ i ], i ); printf( "%d\n", Q->CoeffArray[ 0 ] );}main( ){ Polynomial P, Q; P = malloc( sizeof( *P ) ); Q = malloc( sizeof( *Q ) ); P->HighPower = 1; P->CoeffArray[ 0 ] = 1; P->CoeffArray[ 1 ] = 1; MultPolynomial( P, P, Q ); MultPolynomial( Q, Q, P ); AddPolynomial( P, P, Q ); PrintPoly( Q ); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -