(c语言程序执行结果分析题)按行优先的方式把一个二维数组的元素存入一个一维数组中,并输出?

如题所述

#include <stdio.h>

#include <malloc.h>

int main()

{

    //这是一个二维数组

    int arr[2][3] = { 

        {1,2,3},

        {4,5,6} 

    };

    //获取数组的尺寸和行列数:

    int len = sizeof(arr) / sizeof(arr[0][0]);

    int row = sizeof(arr) / sizeof(arr[0]);

    int column = len / row;

    //知道了长度就可以使用calloc创建一个给定长度的数组(但用完记得要free)

    int* new_arr = (int*)calloc(len, sizeof(int));

    //将二维数组内的数值写入一维数组

    for (int i = 0; i < len; i++)

    {

        //确定行号 用索引 i 除以(每行中有几列) 得到行数

        int y = i / column; // 如 第5个数 / 每列有3个,则为 4/3= “1”(第二行)

        //确定列

        int x = i % column; // 如 第5个数 % 每列有3个,则为 4/3= 1余 “1” (第二个)

        //将该数值写入新数组

        if (!new_arr) { free(new_arr); return 1; } //new_arr为空的验证,如果出现此错误则 return 1

        else {

            new_arr[i] = arr[y][x];

        }

    }

    //输出新数组的数字

    for (int i = 0; i < len; i++)

    {

        if (!new_arr) { free(new_arr); return 1; }

        else {

            printf("%d ", new_arr[i]);

        }

    }

    free(new_arr);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-03-06
以下是一个 C 语言程序,实现了将二维数组的元素存入一维数组中并输出。假设定义了一个 3 行 4 列的二维数组 arr,则将数组元素按行优先的方式存入一个长度为 12 的一维数组 arr1d,并输出一维数组中的所有元素。

Copy code
#include <stdio.h>

int main() {
// 定义二维数组
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};

// 将二维数组元素按行优先的方式存入一维数组中
int arr1d[12];
int idx = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
arr1d[idx++] = arr[i][j];
}
}

// 输出一维数组中的所有元素
for (int i = 0; i < 12; i++) {
printf("%d ", arr1d[i]);
}
printf("\n");

return 0;
}
在程序中,首先定义了一个 3 行 4 列的二维数组 arr,并初始化了其所有元素。然后,程序定义了一个一维数组 arr1d,用于存储所有的二维数组元素。

程序中使用了两个嵌套的 for 循环遍历二维数组,并将每个元素存入一维数组中。由于我们使用了行优先的方式,因此对于每个元素,我们只需依次将其存入一维数组中即可。

最后,程序使用一个 for 循环输出了一维数组中的所有元素,以验证我们的实现是否正确。

程序的输出结果为:

Copy code
1 2 3 4 5 6 7 8 9 10 11 12
可以看到,我们将二维数组的所有元素按行优先的方式存入了一维数组并成功输出,实现了题目所要求的功能。
第2个回答  2022-05-20
可以采用两种方式:
1
按元素赋值:
遍历一维数组,并将每个元素赋值到二维数组的对应元素上。
或者遍历二维数组,将每个元素赋值为一维数组对应值上。
优点为操作灵活,可以按照需要任意赋值。
2
当一维数组和二维数组类型相同,而且赋值顺序与一维数组中的存储顺序完全相同时,可以用memcpy的方式,直接一次性赋值。
如一维数组为a,二维数组为b,基础类型为type,需赋值元素个数为n,可以调用
memcpy(b,a,sizeof(type)*n);
该方法有点为操作简单,执行效率高。
不过所需满足的前提条件多。在满足上述所有条件时,用memcpy的方式更为简单。