小白求问,我想把一个m行n列的矩阵变为非标准的上三角矩阵。。。
这个问题,是刚才那个问题的延续,就是我想把一个M*N的矩阵化为非标准的上三角矩阵。望大神继续帮助!!!感激不尽!!!比如
1 2 3
4 5 6
化为
1 2 3
0 -3 -6
下面是我写的程序,但是运行时结果出问题了。
#include<stdio.h>
#include<stdlib.h>
#define M 100
#define N 100
void main()
{
float a[M][N],b[M][N],c[M][N],d,e,B1;
int i,j,flag=0,count=0,m,n,t,h1,l1,h2,l2;
//输入行列数进行控制//
printf("请输入矩阵的行数和列数m与n:\n");
scanf("%d%d",&m,&n);
//对矩阵P、A、Q进行初始化//
printf("请按行输入矩阵A的各个元素\n");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);
for(i=0;i<m;i++)
for(j=0;j<m;j++)
if(i==j)
b[i][j]=1;
else
b[i][j]=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j)
c[i][j]=1;
else
c[i][j]=0;
//输出显示初始化的P、A、Q矩阵//
printf("初始A矩阵\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%10.2f",a[i][j]);
printf("\n");
}
printf("初始P矩阵\n");
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%10.2f",b[i][j]);
printf("\n");
}
printf("初始Q矩阵\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%10.2f",c[i][j]);
printf("\n");
}
//对矩阵P、A、Q进行运算使其化为上三角矩阵//
for(t=0;t<m;t++)
{
count=0;
//从a[t][t]开始按行找到首个不为0的元素,并记录位置,记为第h行,第l列//
for(i=t;i<m;i++)
{
for(j=t;j<n;j++)
{
if(a[i][j]!=0)
{
flag=1;l1=i;h1=j;
}
if(a[i][j]!=0)
break;
else count++;
if(count==(m-t)*(n-t))
break;
}
if((flag==1)||(count==(m-t)*(n-t)))
break;
}
if(count==(m-t)*(n-t))
break;
//交换第h1列与第h2列//
h2=t;
l2=t;
for(i=0;i<m;i++)
{
d=a[i][h1];
a[i][h1]=a[i][h2];
a[i][h2]=d;
}
for(i=0;i<n;i++)
{
e=c[i][h1];
c[i][h1]=c[i][h2];
c[i][h2]=e;
}
//交换第l1行与第l2行//
for(j=0;j<n;j++)
{
d=a[l1][j];
a[l1][j]=a[l2][j];
a[l2][j]=d;
}
for(j=0;j<m;j++)
{
e=b[l1][j];
b[l1][j]=b[l2][j];
b[l2][j]=e;
}
//对A进行行变换,使每行的首个非零元下的每行对应的元素化为0,同时对P进行相应的行变换//
for(i=t;i<m;i++)
{
B1=a[i][t]/a[t][t];
for(j=0;j<n;j++)
if(i!=t)
{
a[i][j]=a[i][j]-B1*a[t][j];
b[i][j]=b[i][j]-B1*b[t][j];
}
}
}
//输出显示运算后的P、A、Q矩阵//
printf("A矩阵的阶梯型为\n");
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%10.2f",a[i][j]);
printf("\n");
}
printf("相应变化后的P矩阵\n",m);
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%10.2f",b[i][j]);
printf("\n");
}
printf("相应变化后的Q矩阵\n",n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%10.2f",c[i][j]);
printf("\n");
}
}
为啥有次输出的结果对了,有次的结果却错了。我不会单步调式,正在学习,所以希望大神再帮帮忙!