| 本帖最后由 ydy2511000 于 2016-2-4 08:31 编辑 
 好吧,说下我认为最简单的方法,就是从后面往前面循环,
 1.先把最后一列存到一个一维数组
 2.把倒数第二列给最后一列,倒数第3列给倒数第2列,....第1列给第2列,第0列给第1列(这样不会出现覆盖)
 3.最后把存起来的最后一列给第一列
 复制代码//
//  main.c
//  test3
//
//  Created by ydy on 16/1/24.
//  Copyright © 2016年 ydy. All rights reserved.
//
#include <stdio.h>
#define ROWS 3
#define COLS 3
int arr[ROWS][COLS] = {{1,2,3},{1,2,3},{1,2,3}};
int main(int argc, const char * argv[]) {
    //输出数组,交换前
    printf("交换前\n");
    for(int i= 0 ; i < ROWS;i++)
    {
        for (int j = 0; j < COLS; j++) {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    //数组列交换
    //1.先取出数列的最后
    int lastCol[COLS];
    for (int i = 0; i< ROWS;i++ ) {
        lastCol[i] =arr[i][COLS-1];
    }
    //arr[][cols-2] = arr[][cols-1],...,arr[][0] = arr[][1]
    for (int i = COLS-1; i>0; i--) {    //交换列,外层控制列, 内层控制行
        for (int j = 0; j< ROWS; j++) {
            arr[j][i]=arr[j][i-1];
        }
    }
    
    //把最后一列给第一列,搞定
    for (int i = 0; i< ROWS; i++) {
        arr[i][0]=lastCol[i];
    }
    //输出
    printf("交换后\n");
    for(int i= 0 ; i < ROWS;i++)
    {
        for (int j = 0; j < COLS; j++) {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    
    
    
    return 0;
}
 |