此代码成功地将3D数组 * 显示 * 为2D数组,显示相邻的两个层,但它需要集成为单个2D数组?(值1-9显示为一个3x 3块,值10-18显示为另一个3x 3块,但它应该是一个连续的数字块,
- 当前 * 显示:
- 所需 * 显示:
一个程序要求用户输入并将其放入arr1[2][3][3]
中,然后该程序应该以正确的顺序打印arr2[3][6]
中的值,出于演示目的,我使用了1-18
#include <stdio.h>
int main()
{
int i, j, k; //variables for nested for loops
int d1 = 0;
int d2 = 0;
int arr1[2][3][3]; //array declaration
int arr2[3][6]; //array declaration
printf("enter the values in the array: \n");
for (i = 0; i < 2; i++) //represents block
{
for (j = 0; j < 3; j++) //represents rows
{
for( k = 0; k < 3; k++) //represents columns
{
printf("the value at arr[%d][%d][%d]: ", i, j, k);
scanf("%d", &arr1[i][j][k]);
arr2[d1 + j][d2 + k] = arr1[i][j][k];
}
}
d1 = (d1 + j == 3) ? 0 : d1 + j;
d2 = (d2 + k == 6) ? 0 : d2 + k;
}
printf("printing the values in 2D array: \n");
for (j = 0; j < 3; j++)
{
for (k = 0; k < 6; k++)
{
printf("%d ", arr2[j][k]);
if (k == 6)
{
printf("\n");
}
}
printf("\n");
}
return 0;
}
我不知道如何进一步转换
1条答案
按热度按时间avwztpqn1#
3D矩阵有2层3行3列。从问题中的文本来看,似乎您要将此对象转换为3x6矩阵,即:3行6列。定义
int arr2[3][6]
定义了一个6x3矩阵,即:3行6列。要使用所需的投影填充2D矩阵,请参阅以下修改版本:
输出(省略阅读循环):
请注意,上面代码中定义的3D和2D数组具有相同顺序的相同值,您可以在阅读循环后简单地将
arr1
的内容复制为一个块来初始化arr2
:另一种方法是通过一个指针来访问
arr1
作为一个2D数组的内容,你可以将arr2
定义为一个指向一个3x6 2D数组的指针,这个数组的别名是相同的内存:这样,3D阵列的任何修改在2D阵列中立即可见,反之亦然。
下面是使用此方法的修改版本。
输出(省略阅读循环):