0

我正在尝试反转二维数组并且编译器工作正常,但数组仍然与开始时相同。

我在调用反向函数之前和之后打印了数组,但似乎没有发生任何变化。
为什么?

这是代码:

#include<stdio.h>

void reverse(int table[ ][5]){
    int a,b,c,d;
    int temp = 0;
    for(a=0,c=3;a<=3;a++,c--){
        for(b=0,d=4;b<=4;b++,d--){
            temp = table[a][b];
            table[a][b]= table[c][d];
            table[c][d]= temp;      
        }
      }

    }

int main(int argc,char *argv[]){
    int i,j;
    int table[4][5];

    for(i=0;i<=3;i++){
       for(j=0;j<=4;j++){
          scanf("%d",&table[i][j]);
       }
    }

    for(i=0;i<=3;i++){
        for(j=0;j<=4;j++){
            printf(" %d",table[i][j]);
        }
    }
    printf("\n");

    reverse (table);


    for(i=0;i<=3;i++){
       for(j=0;j<=4;j++){
           printf("%d ",table[i][j]);
       }
    }

    return 0; 
    }

你能在反向函数中找到问题吗?

4

2 回答 2

3

问题是您正在交换元素,然后将它们交换回来。

于 2012-08-19T17:31:16.357 回答
1

在您的反向功能中,您正在交换矩阵。当循环到达一半时,二维数组完全交换。但是你从一半迭代到完整,它再次被交换,使其与原始相同。

你需要更新你的循环,比如

for(a=0,c=3;a<=(3/2)+1;a++,c--){
    for(b=0,d=4;b<=4/2;b++,d--){
-------------------^

注意:您需要适当注意奇数长度,这3/2会给您1,但您需要2.

于 2012-08-19T17:41:42.457 回答