⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gc_8_6_gongyinshi.c

📁 gc:高级程序员考试用书的c程序源文件
💻 C
字号:
# include <stdio.h>
int Remainder(double *pA,int an,double *pB,int bn,double **q)
/*已知两多项式的系数和幂次,返回最大公因式的幂次,在*q得到系数表的首指针*/
{
	double x,y,*temp;
	int k,j,flg = 1;
	if (an < bn){                 /*使多项式A(x)的幂次不低于多项式B(x)的幂次*/
		temp = pA;pA = pB; pB = temp;
		k = an; an = bn; bn = k;
	}
	while(flg) {                 /*循环至余式为0结束,如果余式不等于0,岂不是死循环?*/
		while (*pB == 0.0 && bn > 0) {  /*掠过多项式B(x)最高次系数为0的项*/
			bn--;pB++;                  /*bn 等于 0 时,是指向常数项吧*/
	}
	k = 0;x = *pB;
	while (k <= bn) pB[k++] /= x;       /*使多项B(x)多项式最高次项的系数规约为1,这个过程中,
	                                     每个项都除以了x,*/
	for(k = 0;k <= an - bn; k++) {       /*A(x)/B(x),商多项式有an - bn + 1项*/
		x = pA[k];                        /*商多项式的当前系数x = pA[k]  */
		for(j = 0;j<bn;j++)  {             /*从A(x)中减去x*B[x] ,也就是除一次的余式 */
			y = pA[k+j+1]-x*pB[j+1];
			pA[k+j+1] =(y<.00005 && -y<.00005)?0.0:y; /*pA[k]应置为0,因不再使用,该值未置0*/
		}
	}
	temp = pA;pA = pB;pB = temp+an-bn+1;an = bn--;
	for(flg = 0,k = 0;k<=bn && flg == 0;k++)      /*判多项式B(x)是否为0 */
		if(pB[k] != 0.0) flg = 1;
	}
	*q = pA;
	return an;
}

void main()
{

	int an=6; int bn=5;
	double min_a[30]={1.0, 0.0, 0.0, 4.0, 0.0, 0.0, 3.0}; /*(x3+ 1)(x3+3)=x6+4x3+3  x3表示x的立方*/
	double min_b[30]={1.0, 0.0, 1,0, 1.0, 0.0, 1.0};/*(x3+1)(x2+1)=x5+x3+x2+1  系数没有的表示系数等于0*/
	//double min_b[30]={1.0,1.0};

	double * q;
	int result;          //最大公因式的幂次
	result = Remainder(min_a,an,min_b,bn,&q);
	printf("输出最大公因式\n");

	printf("最大公因式的幂次是 %d\n",result);

	for (an=0;an<=result;an++)
		printf("   %f\n",(*q++));


}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -