想用循环语句和二维数组来编写程序计算行列式,但不知哪错了
程序代码:
#include <stdio.h> int main() { int a[50][50]; int i,j,n,v,s,p,q; printf("阶数为:\t"); scanf("%d",&n); printf("please input %d data:\n",n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("please input a data as a[%d][%d]:\t",i,j); scanf("%d",&a[i][j]); } }//构建行列式 printf("please check\n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%5.d",a[i][j]); } printf("\n"); }//检查行列式 for(j=1;j<=(n-1);j++) { for(i=j+1;i<=(n-1);i++) { for(v=1;v<=n;v++) { p=(a[i][j]/a[i+1][j])*a[i+1][v]; a[i][v]-=p; } } for(v=1;v<=n;v++) { q=(a[i][j]/a[j][j])*a[j][v]; a[i][v]-=q; } }//转换为三角行列式 printf("\n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("%5.d",a[i][j]); } printf("\n"); }//检查三角行列式 s=1; for(i=1;i<=n;i++) { s*=a[i][i]; }//计算三角行列式 printf("结果为 %d\n",s);//输出结果 return 0; }
想把行列式变成三角行列式,然后主对角线上元素的乘积即为结果。
变成三角行列式的方法是一列一列地运用行列式性质“一列上的元素加另一列的对应元素的常数倍,行列式值不变”来弄出左下方的那堆0
程序在转化为三角行列式那里错了,但检查不出,望各大神指正。谢谢!