c语言,将一个二维数组每行元素逆序存放

输入a={{1,2,3},{4,5,6}}
输出a={{3,2,1},{6,5,4}}

img


#include <stdio.h>

int main() {
    // 定义一个二维数组 a
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int i, j, temp;

    // 遍历数组的每一行
    for (i = 0; i < 2; i++) {
        // 遍历行的一半
        for (j = 0; j < 3 / 2; j++) {
            // 使用临时变量 temp 来交换元素的位置
            temp = a[i][j];
            a[i][j] = a[i][3 - j - 1];
            a[i][3 - j - 1] = temp;
        }
    }

    // 输出结果
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

逐行首尾交换就行

#include <stdio.h>
int main()
{
    int a[2][3] = {{1,2,3},{4,5,6}};
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3/2;j++)
        {
            int t = a[i][j];
            a[i][j] = a[i][2-j];
            a[i][2-j] = t;
        }
    }
    for(int i=0;i<2;i++)
    {
        for(int j=0;j<3;j++)
          printf("%d ",a[i][j]);
        printf("\n");
    }
}

以下内容部分参考ChatGPT模型:


思路:遍历二维数组,对每一行进行逆序操作。

代码示例:

#include <stdio.h>
#define ROW 2
#define COL 3

void reverse(int arr[], int n)
{
    int temp;
    for(int i=0; i<n/2; i++)
    {
        temp = arr[i];
        arr[i] = arr[n-i-1];
        arr[n-i-1] = temp;
    }
}

int main()
{
    int a[ROW][COL] = {{1, 2, 3}, {4, 5, 6}};
    for(int i=0; i<ROW; i++)
    {
        reverse(a[i], COL);
    }
    for(int i=0; i<ROW; i++)
    {
        for(int j=0; j<COL; j++)
        {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出结果:

3 2 1 
6 5 4 

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

思路:

  1. 定义并初始化二维数组 a,如2行3列 a[2][3],注意行下标从0到1共2行,列下标从0到2共3列;
int a[2][3] = { {1,2,3},{4,5,6} };
  1. 遍历二维数组 a 的每一行,对于每一行,进行列的逆序操作;
    逆序相当于把每一列和该行中对称的列交换数据,
    比如 a[2][3] 列有3列,从 a[i][0] 到 a[i][2],所以列的首尾的下标之和为 0 + 2 = 2,第 j 列的对称位置是 2-j,如第0列的对称列是第2列,只需交换 a[i][0] 和 a[i][2] 的数据即可。

代码如下:

// 给定二维数组版本
#include <stdio.h>
 
int main() {
    int a[2][3] = { {1,2,3},{4,5,6} };  // 定义并初始化二维数组 a,2行3列 a[2][3],行下标从0到1,列下标从0到2
 
    // 遍历二维数组a的每一行
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3 / 2; j++) {  // 对于每一行,进行逆序操作
            int temp = a[i][j];
            a[i][j] = a[i][2-j];  // 注意列有3列,从 a[i][0] - a[i][2],所以首尾的下标之和为 0 + 2 = 2,j列的对称位置是 2-j
            a[i][2-j] = temp;
        }
    }
 
    // 输出逆序后的二维数组a
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
 
    return 0;
}

输出如下:

img

如果要手动输入几行几列的二维数组,代码如下:

#include <stdio.h>

int main() {
    int m, n; // m 行 n 列 
    int a[50][50];  // 定义并初始化二维数组 a

    scanf("%d %d", &m,&n); // 输入 m 行 n 列
    // 逐行输入 二维数组
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            scanf("%d", &a[i][j]); 
        }
    }

    // 遍历二维数组a的每一行
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n / 2; j++) {  // 对于每一行,进行逆序操作
            int temp = a[i][j];
            a[i][j] = a[i][n-1-j];  // 注意列有n列,从 a[i][0] - a[i][n-1],所以首尾的下标之和为 0 + (n-1) = n-1,j列的对称位置是 n-1-j
            a[i][n-1-j] = temp;
        }
    }
 
    // 输出逆序后的二维数组a
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }
 
    return 0;
}

输出:

img

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是C语言实现该功能的代码:

#include <stdio.h>
#define ROW 2
#define COL 3

void reverse_2d_array(int a[][COL], int row, int col);

int main()
{
    int a[ROW][COL] = { {1, 2, 3}, {4, 5, 6} };
    printf("Original array:\n");
    for (int i = 0; i < ROW; i++)
    {
        for (int j = 0; j < COL; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    reverse_2d_array(a, ROW, COL);
    printf("Reversed array:\n");
    for (int i = 0; i < ROW; i++)
    {
        for (int j = 0; j < COL; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
    return 0;
}

void reverse_2d_array(int a[][COL], int row, int col)
{
    int temp;
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col / 2; j++)
        {
            temp = a[i][j];
            a[i][j] = a[i][col - j - 1];
            a[i][col - j - 1] = temp;
        }
}

程序中定义了一个名为 reverse_2d_array 的函数来逆序存放每行元素。该函数的参数为二维数组 a、行数 row 和列数 col,采用了双重循环,其中外层循环控制行数,内层循环控制每行元素的逆序。

程序中采用了宏定义 ROWCOL 来定义二维数组的行数和列数,方便修改和调整。在 main 函数中,首先输出原始数组,然后调用 reverse_2d_array 函数逆序存放每行元素,最后输出结果。

以上代码执行结果如下:

Original array:
1 2 3 
4 5 6 
Reversed array:
3 2 1 
6 5 4 

如果我的回答解决了您的问题,请采纳!

可以借鉴下

#include <stdio.h>
int main()
{
    int a[2][3] = { {1,2,3},{4,5,6} }, i, j, k, n;
    for (i = 0; i < 2; i++)
    {
        for (j = 0, k = 2; j < k; j++, k--)
        {
            n = a[i][j];
            a[i][j] = a[i][k];
            a[i][k] = n;
        }
    }
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("%d,", a[i][j]);
        }
    }
    return 0;
}

以下是C语言的代码实现,具体思路是使用双重循环遍历二维数组,对每一行进行逆序操作:

#include <stdio.h>

int main()
{
    int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
    int i, j, temp;

    // 对每一行进行逆序操作
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3 / 2; j++) {
            temp = a[i][j];
            a[i][j] = a[i][2 - j];
            a[i][2 - j] = temp;
        }
    }

    // 输出结果
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}


输出结果为:

3 2 1 
6 5 4 


以上代码中,首先定义一个二维数组a并初始化,然后使用两个for循环对每一行进行逆序操作,最后输出结果。具体逆序操作是利用一个temp变量来交换数组元素的值,从而完成每行的逆序。


#include <stdio.h>
#define ROW 2
#define COL 3

void reverse(int arr[][COL], int row)
{
    int i, j, temp;
    for(i = 0; i < row; i++)
    {
        for(j = 0; j < COL / 2; j++)
        {
            temp = arr[i][j];
            arr[i][j] = arr[i][COL - j - 1];
            arr[i][COL - j - 1] = temp;
        }
    }
}

int main()
{
    int arr[ROW][COL] = {{1, 2, 3}, {4, 5, 6}};
    int i, j;

    printf("原数组:\n");
    for(i = 0; i < ROW; i++)
    {
        for(j = 0; j < COL; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    reverse(arr, ROW);

    printf("\n逆序后的数组:\n");
    for(i = 0; i < ROW; i++)
    {
        for(j = 0; j < COL; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}

输出结果如下:

原数组:
1 2 3 
4 5 6 

逆序后的数组:
3 2 1 
6 5 4


该程序中,使用双重循环遍历每一行的元素,然后交换对称位置的元素,实现逆序存放。函数reverse的参数arr表示输入的二维数组,参数row表示行数,通过传递参数的方式进行处理,使得函数具有通用性。最后,主函数中调用reverse函数,实现对输入数组的逆序存放,输出结果即为所求。


 
#include <stdio.h>
 
int main() {
    int array_test[2][3] = {{1,2,3},{4,5,6}};  // 定义并初始化二维数组
    int i, j k;
    int temp;

    // 遍历二维数组的每一行,对每一行进行逆序操作
    for (i = 0; i < 2; i++) {
        j = 2;  // j指向当前行最后一个元素
        for (k = 0; k < 3 / 2; k++) {  // 对每一行进行逆序操作
            temp = array_test[i][k];
            array_test[i][k] = array_test[i][j];
            array_test[i][j] = temp;
            j--;  // 移动j指针
        }
    }
 
    // 输出逆序后的二维数组
    printf("{");
    for (i = 0; i < 2; i++) {
        printf("{");
        for (j = 0; j < 3; j++) {
            printf("%d, ", array_test[i][j]);
        }
        printf("}, ");
    }
    printf("}");

    return 0;
}
 

太卷了,回答了这么多答案还没被采纳