使给定的一个3X3的二维整形数组置换

0


数组置换的部分代码如下:

1
2
3
4
5
6
7
8
9
for(int i=0; i<3; i++)
for(int j=i; j<3; j++)
{
//a[j][i]<->a[i][j]
int t;
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}

其中注意的部分是“ for(i=0;i<3;i++) for(j=0;j<3;j++)把所有的元素都循环了,例如a[1][2]对换了,然后a[2][1]也对换了,实际上没有作用了就,你可以改成for(i=0;i<3;i++) for(j=i;j<3;j++) 这样就不会重复对换,就可以实现转置的目的了”,所以需要一个中间变量t来做交换。

看到这里,想到书上之前在数组一章提到过一个[2][2]数组的置换,没有用到函数,直接是使b[j][i]=a[i][j],本着这个方法,我写在了函数里,可是无奈函数中不能返回数组,只能返回数组指针(还没有接触到),所以程序无法运行。本以为卡在了这里,但是看到后面的习题中,我找到了问题所在,只要把置换过的新数组放在全局变量里声明,就可以在主函数中调用了,这样置换函数也不用返回值,只要算出新的数组值就可以了!

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void change(int a[3][3]);

int b[3][3];   //这里声明新数组b为全局变量,方便在主函数调用

void main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
change(a);
for(int i=0; i<=2; i++)
{
for (int j=0; j<=2; j++)
printf("%d ",b[i][j]);   //这里可以直接调用函数
printf("\n");
}
}

void change(int a[3][3])
{
for(int i=0; i<=2; i++)
{
for (int j=0; j<=2; j++)
b[j][i]=a[i][j];    //每次循环把值输入到新数组里
}

本以为我的方法行不通,结果只是因为没有声明全局变量。这样置换完的数据也完全正确,不管怎那么说,两种方式都会也不错~

— cloudxiao 2009,12,15

No Comments

Leave A Reply