本关任务:编写函数,将
M
行N
列的二维数组中的数据,按列的顺序依次放到一维数组中。相关知识
若一个
3
行4
列的二维数组a
中数组元素为:55 8 74 66
32 12 41 36
94 45 65 88
按行的顺序存放的一维数组中的内容应是:
55 8 74 66 32 12 41 36 94 45 65 88
按列的顺序存放的一维数组中的内容应是:
55 32 94 8 12 45 74 41 65 66 36 88
按行顺序存放
对于
M
行N
列的二维数组第i
行第j
列元素a[i][j]
,前面有i
行元素,每行有N
个元素,加上第i
行的j
个元素,所以数组元素a[i][j]
在一维数组中的下标为n = i * N + j
。编写函数将
M
行N
列的二维数组中的数据,按行的顺序依次放到一维数组中。
void fun(int x[][N],int *y,int m,int n )
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
y[i*N+j] = x[i][j];
}
}
}
按列顺序存放
对于
M
行N
列的二维数组第i
行第j
列元素a[i][j]
,前面有j
列元素,每列有M
个元素,加上第j
列的i
个元素,所以数组元素a[i][j]
在一维数组中的下标为n = j * M + i
。编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,分别完成五个函数的定义,将
3
行4
列的二维数组中的数据,按列的顺序依次放到一维数组中。具体要求如下:
- 函数 input() 实现二维数组的输入;
- 函数 fun() 将二维数组的数据按列的顺序存入到一维数组;
- 函数 output() 实现二维数组的输出;
- 函数 outputarr() 实现一维数组的输出;
- 函数 main() 定义变量并分别调用以上自定义函数。
测试说明
平台会对你编写的代码进行测试。
测试输入:
55 8 74 66 32 12 41 36 94 45 65 88
预期输出:55 8 74 66
32 12 41 36
94 45 65 88
55 32 94 8 12 45 74 41 65 66 36 88
提示:先输出二维数组,再输出二维数组按列转换的一维数组。
开始你的任务吧,祝你成功!
#include <stdio.h>
#define M 3
#define N 4
void input(int (*a)[N], int m, int n);
void output(int (*b)[N], int m, int n);
void outputarr(int array[], int n);
void fun(int x[][N], int *y, int m, int n);
int main()
{
int a[M][N];
int b[M * N];
input(a, M, N);
fun(a, b, M, N);
output(a, M, N);
outputarr(b, M * N);
return 0;
}
void input(int (*a)[N], int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
}
void fun(int x[][N], int *y, int m, int n)
{
for (int j = 0; j < n; j++)
{
for (int i = 0; i < m; i++)
{
y[j * m + i] = x[i][j];
}
}
}
void output(int (*b)[N], int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
}
void outputarr(int array[], int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", array[i]);
}
printf("\n");
}