阅读下列程序说明和 C 程序,把应填入其中__n__ 处的字句,写在答卷的对应栏内。
[程序说明]
(1)本程序利用辗转相除法求两个均不超过100次的多项式A,B的最大公因式。
例: A(x)=x3一x2+x一1=(x2+1)(x一1)
B(x)=x5一7x4十7x3-3x2+6x+4=(x2+1) (x3-7x2十6x+4)
最大公因式为x2+1。
(2)辗转相除法的算法如下:
用其中的一个多项式去除另一个多项式;然后,将所得余式变成除式,原除式变成被除式。如此反复相除,当余式为。时,当前除式即为最大公因式。
[程序]
#include <stdio.h>
#include <math.h>
#define DECISE.0005
#define MAX_POWER 100
main( )
{ int i,a,b;
float Ca[MAX_POWER+1],Cb[MAX _POWER+1];
void Remainder();
scanf("%d",&a);
for ( i=0;i<=a;i++ )
scanf( "%f",&Ca[i] );
scanf( "%d",&b) ;
for ( i=0;i<=b;i++ )
scanf( "%d",&Cb[i] );
Remainder(Ca,Cb,a,b);
}
void Remainder(Pointer A,Pointer B,a,b)
float *Pointer A,*Pointer B;
int a,b;
{ float x,y,*Temp;
int i,j,F1ag=1;
while ( Flag )
{ i=0;
while ( PointerB[i]==0 )
{ i ++;b一-;
Pointer B+=i-- ;
}
x=Pointer[i];
while ( i<=b )
PointerB[i++]/=x;
for ( i=0;i<=a-b;i++ )
{ X=Pointer A[i] ;
for(j=0;j<b ; j++)
{ y = PointerA[i+l+j]一x * PointerB[j+1];
PointerA[ i+1+j ]=
( y<DECISE&&-y<DECISE )?0.0;y;
}
}
Temp=Pointer A;
PointerA=PointerB; ·
PointerB =(a>=b)?Temp+a-b-1:Temp;
a=b--;
for ( Flag=0,i=0;i<b && Flag==0;i++ )
if ( PointerB[i] !=0.0 ) Flag=1;
}
printf( "The Greatest Common Factor is:\n");
for ( i=0;i<a;i++ )
if ( PointerA[i]!= 0.0)
printf( "%5.3f *x ∧%d%s",
PointerA[I],a-i,( PointerA[i+1]<0.0 ) ?"":"+" );
printf( "%5.3f\n",PointerA[a] );
}