用C语言将一个一维数组转化为二维数组
时间: 2023-11-05 09:04:37 浏览: 84
将一维数组转化为二维数组需要知道原数组的大小和目标二维数组的行列数。假设原数组大小为 `n`,目标二维数组的行列数为 `m` 行 `n/m` 列,则可以使用以下代码实现:
```c
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5, 6};
int row = 2, col = 3;
int arr2[row][col];
// 将一维数组转化为二维数组
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
arr2[i][j] = arr[i * col + j];
}
}
// 输出转化后的二维数组
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf("%d ", arr2[i][j]);
}
printf("\n");
}
return 0;
}
```
上述代码中,首先定义原数组 `arr` 和目标二维数组的行列数 `row` 和 `col`。然后定义目标二维数组 `arr2`,其行数为 `row`,列数为 `col`。接下来使用两个嵌套的循环将原数组的元素按行列顺序转化为二维数组中对应的元素。最后输出转化后的二维数组。
相关问题
请用c语言将二维数组转化为一维数组
这里提供两种方法:
方法一:使用指针
```c
int main() {
int arr2d[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int arr1d[12];
int *p = arr1d; // 定义指向一维数组的指针
// 将二维数组转化为一维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
*(p++) = arr2d[i][j];
}
}
// 输出一维数组
for (int i = 0; i < 12; i++) {
printf("%d ", arr1d[i]);
}
return 0;
}
```
方法二:使用数组下标
```c
int main() {
int arr2d[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
int arr1d[12];
// 将二维数组转化为一维数组
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
arr1d[i*4+j] = arr2d[i][j];
}
}
// 输出一维数组
for (int i = 0; i < 12; i++) {
printf("%d ", arr1d[i]);
}
return 0;
}
```
注意:以上两种方法都是将二维数组按行展开为一维数组,如果需要按列展开,请相应修改循环语句中的下标即可。
使用c语言从文件中读取二维数组
假设你的文件中存储的是一个 $n \times m$ 的二维数组,你可以按照行优先的方式将其读入到一个一维数组中,然后再将其转化为二维数组。
以下是一个读取文件中二维数组并存储到二维数组的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *fp;
int n, m;
int *arr, **mat;
int i, j, k;
// 打开文件
fp = fopen("data.txt", "r");
if (fp == NULL) {
printf("文件打开失败!\n");
return 0;
}
// 读取数组的大小
fscanf(fp, "%d %d", &n, &m);
// 分配一维数组的内存
arr = (int*) malloc(n * m * sizeof(int));
// 读取一维数组
for (k = 0; k < n * m; k++) {
fscanf(fp, "%d", &arr[k]);
}
// 分配二维数组的内存
mat = (int**) malloc(n * sizeof(int*));
for (i = 0; i < n; i++) {
mat[i] = (int*) malloc(m * sizeof(int));
}
// 将一维数组转化为二维数组
for (i = 0, k = 0; i < n; i++) {
for (j = 0; j < m; j++, k++) {
mat[i][j] = arr[k];
}
}
// 输出二维数组
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
// 释放内存
free(arr);
for (i = 0; i < n; i++) {
free(mat[i]);
}
free(mat);
// 关闭文件
fclose(fp);
return 0;
}
```
其中,`data.txt` 文件的格式如下:
```
3 4 // 数组的大小为 3 行 4 列
1 2 3 4
5 6 7 8
9 10 11 12
```
上述代码中,首先打开文件并读取数组的大小,然后分配一维数组的内存,读取一维数组到该数组中,接着分配二维数组的内存,将一维数组转化为二维数组,最后输出二维数组并释放内存,关闭文件。