if(an0!=0)result=j; break; /*两行互换子函数 void exchange(float a[ICOLNUMI, int i, int j) int k; float tmp; for(k=0; k<COLNUM; k++)(tmp=ai(k]; a[il(k]=allk] anl(k]=tmp; j /消元子函数行加上j行的k倍,结果放回i行* drow( float a[[ COLNUM, Int 1, Int J, float k)/*注意形参的类型* for(tmp=0; tmp<COLNUM; tmp++atmp=ail tmpl+k*aljilltmpl /* Gauss消去法化阶梯形* int gauss( float a[ICOLNUMD flag sign=l for(i=0: i<ROWNUM-1; 1++) if(aJ1==0) flag=findnzero(a, 1) if(flag==-1)continue *若当前列剩余元素均零则重新开始循环,处理下一行* else exchange(a, i, flag) sign*=-1; i for(=计+1j< ROWNUM J++) addrow(a i, i,-aljl[iya[);/*逐行进行消元*/ return(sign); void maino float a( ROWNUMIICOLNUM] inputmatrix(a gauss(a)if(a[j][i]!=0){result=j;break;} return(result); } /*两行互换子函数*/ void exchange(float a[][COLNUM],int i,int j) { int k;float tmp; for(k=0;k<COLNUM;k++){tmp=a[i][k];a[i][k]=a[j][k];a[j][k]=tmp;} } /*消元子函数,i 行加上 j 行的 k 倍,结果放回 i 行*/ addrow(float a[][COLNUM],int i,int j,float k) /*注意形参的类型*/ {int tmp; for(tmp=0;tmp<COLNUM;tmp++)a[i][tmp]=a[i][tmp]+k*a[j][tmp]; } /*Gauss 消去法化阶梯形*/ int gauss(float a[][COLNUM]) { int i,j,flag,sign=1; for(i=0;i<ROWNUM-1;i++) { if(a[i][i]= =0) { flag=findnzero(a,i); if(flag= =-1)continue; /*若当前列剩余元素均零则重新开始循环, 处理下一行*/ else {exchange(a,i,flag);sign*=-1;} } for(j=i+1;j<ROWNUM;j++)addrow(a,j,i,-a[j][i]/a[i][i]); /*逐行进行消元*/ } return(sign); } void main() { float a[ROWNUM][COLNUM]; inputmatrix(a); gauss(a); outputmatrix(a); }