请大神看一下我的代码哪里错了?谢谢!!
这是问题:将一个5*5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之.用main函数调用.
#include<iostream>
using namespace std;
void T(int (*a)[5])
{
int *b,k=0,i,j,t,flag=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
{
b[k]=a[i][j];
k++;
}
for(j=0;j<24;j++)
for(i=0;i<24-j;i++)
if(b[i]>b[i+1])
{t=b[i];b[i]=b[i+1];b[i+1]=t;}
if(b[24]!=a[2][2])
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i][j]==b[24])
{
t=a[i][j];
a[i][j]=a[2][2];
a[2][2]=t;
flag=1;
break;
}
if(flag==1) break;
}
flag=0;
if(b[0]!=a[0][0])
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i][j]==b[0])
{
t=a[i][j];
a[i][j]=a[0][0];
a[0][0]=t;
flag=1;
break;
}
if(flag==1) break;
}
flag=0;
if(b[1]!=a[0][4])
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i][j]==b[1])
{
t=a[i][j];
a[i][j]=a[0][4];
a[0][4]=t;
flag=1;
break;
}
if(flag==1) break;
}
flag=0;
if(b[2]!=a[4][0])
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i][j]==b[2])
{
t=a[i][j];
a[i][j]=a[4][0];
a[4][0]=t;
flag=1;
break;
}
}
flag=0;
if(b[3]!=a[4][4])
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
if(a[i][j]==b[3])
{
t=a[i][j];
a[i][j]=a[4][4];
a[4][4]=t;
flag=1;
break;
}
if(flag==1) break;
}
}
int main ()
{
void T(int (*a)[5]);
int maxtrix[5][5]={{3,4,6,9,13},{4,45,5,56,6},{13,3,8,-2,3},{1,2,3,4,5},{2,4,6,8,10}};
printf("原矩阵:\n");
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
cout<<maxtrix[i][j]<<" ";
cout<<endl;
}
printf("\n转置后矩阵:\n");
T(maxtrix);
for(i=0;i<5;i++)
{
for(int j=0;j<5;j++)
cout<<maxtrix[i][j]<<" ";
cout<<endl;
}
return 0;
}
编译组建时都没有问题 但是运行的时候没法输出转置后的矩阵,显示“已停止工作”。
谢谢各位大神!!!