92年高程下午C 语言题???

hbyzd 2003-09-07 09:05:37
谁能帮我具体解释一下,特别是辗转相除部分,谢谢了!!!


试题7

阅读下列程序说明和 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一-;

__①__ ;

}

x=Pointer[i];

while ( i<=b )

PointerB[i++]/=x;

for ( i=0;i<=a-b;i++ )

{ __②__ ;

for(j=0;j<b ; j++)

{ y = PointerA[i+l+j]一x * PointerB[j+1];

PointerA[ __③__ ]=

( y<DECISE&&-y<DECISE )?0.0;y;

}

}

Temp=Pointer A;

PointerA=PointerB; ·

PointerB = __④__ ;

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] );

}

 

...全文
21 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,948

社区成员

发帖
与我相关
我的任务
社区描述
就计算机等级考试、软件初、中、高级不同级别资格考试相关话题交流经验,共享资源。
c1认证c4javac4前端 技术论坛(原bbs)
社区管理员
  • 软件水平考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧