菜鸟小白求助C语言编写交换矩阵任意两行两列的问题
我想编一个可以交换矩阵任意两行两列的小程序,在写代码时出现了问题。求助,各位大神!以下是我写的源程序代码
#include<stdio.h>
#include<stdlib.h>
#define M 30
void main()
{
float a[M][M],b[M][M],c[M][M],d[2][M],e[2][M];
int i,j,m,n,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;
for(i=0;i<2;i++)
for(j=0;j<M;j++)
d[i][j]=0;
e[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");
}
printf("请输入要交换的两列\n");
scanf("%d%d",&h1,&h2);
h1=h1-1;
h2=h2-1;
printf("请输入要交换的两行\n");
scanf("%d%d",&l1,&l2);
l1=l1-1;
l2=l2-1;
//交换第h1列与第h2列//
for(i=0;i<m;i++)
{
d[1][i]=a[i][h1];
a[i][h1]=a[i][h2];
a[i][h2]=d[1][i];
}
for(i=0;i<n;i++)
{
e[1][i]=c[i][h1];
c[i][h1]=c[i][h2];
c[i][h2]=e[1][i];
}
//第一次输出变换后的Q矩阵//
printf("第一次输出Q矩阵:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%10.2f",c[i][j]);
printf("\n");
}
//交换第l1行与第l2行//
for(j=0;j<n;j++)
{
d[2][j]=a[l1][j];
a[l1][j]=a[l2][j];
a[l2][j]=d[2][j];
}
for(j=0;j<m;j++)
{
e[2][j]=b[l1][j];
b[l1][j]=b[l2][j];
b[l2][j]=e[2][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");
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
printf("%10.2f",b[i][j]);
printf("\n");
}
//第二次输出变换后的Q矩阵//
printf("交换后的Q矩阵为\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%10.2f",c[i][j]);
printf("\n");
}
}
在运行时为什么第一次输出的Q矩阵和第二次输出的Q矩阵不同,哪里出问题了呀?
求各位大神帮忙答疑解惑。。。。。。谢谢啦!