#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
int **createRandom2DArray(int rows, int cols)
{
srand(time(NULL)); // 初始化随机数生成器
int **arr = (int **)(malloc(sizeof(int *) * rows));
if (arr == NULL)
{
printf("Memory allocation failed.\n");
exit(1);
}
for (int i = 0; i < rows; i++)
{
arr[i] = (int *)(malloc(sizeof(int) * cols));
if (arr[i] == NULL)
{
printf("Memory allocation failed.\n");
exit(1);
}
for (int j = 0; j < cols; j++)
{
arr[i][j] = rand() % 100; // 生成一个0到99的随机数
}
}
return arr;
}
int *create1DArray(int size)
{
int i;
int *arr = (int *)(malloc(sizeof(int) * size));
for (i = 0; i < size; i++)
{
arr[i] = 0;
}
return arr;
}
int *create2DArray(int rows, int cols)
{
int i, j;
int **arr = (int **)(malloc(sizeof(int *) * rows));
if (arr == NULL)
{
printf("Error allocating memory\n");
exit(1);
}
for (i = 0; i < rows; i++)
{
arr[i] = (int *)(malloc(sizeof(int) * cols));
if (arr[i] == NULL)
{
printf("Error allocating memory\n");
exit(1);
}
for (j = 0; j < cols; j++)
{
arr[i][j] = 0;
}
}
return arr;
}
int *transTo1DOnesArray(int *arr, int size)
{
int i;
for (i = 0; i < size; i++)
{
arr[i] = 1;
}
return arr;
}
int **transTo2DOnesArray(int **arr, int rows, int cols)
{
int i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
if (i == j)
{
arr[i][j] = 1;
}
}
}
return arr;
}
int sum1DArray(const int *arr, const int size)
{
int i = 0;
int sum = 0;
for (i = 0; i < size; i++)
{
sum += arr[i];
}
return sum;
}
int sum2DArray(const int **arr, const int rows, const int cols)
{
int sum = 0;
int i = 0, j = 0;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
sum += arr[i][j];
}
}
return sum;
}
int sum2DArrayByPointers(int *start, int *end)
{
int sum = 0;
int *p = start;
while (p < end)
{
sum += *p;
p++;
}
return sum;
}
void print2DArray(int **p, int rows, int cols)
{
printf("2D Array:\n");
for (int i = 0; i < rows; i++)
{
printf("[");
for (int j = 0; j < cols; j++)
{
printf("%d", p[i][j]);
if (j != cols - 1)
{
printf(", ");
}
}
printf("]\n");
}
}
void print1DArray(int *p, int size)
{
printf("Array: [");
for (int i = 0; i < size; i++)
{
printf("%d", p[i]);
// 不在最后一个元素后面打印逗号
if (i != size - 1)
{
printf(", ");
}
}
printf("]\n");
}
int **transpose2DArray(int **p, int rows, int cols)
{
int **p_trans = (int **)malloc(sizeof(int *) * cols);
if (p_trans == NULL)
{
printf("malloc failed\n");
exit(1);
}
for (int i = 0; i < cols; i++)
{
p_trans[i] = (int *)malloc(sizeof(int) * rows);
if (p_trans[i] == NULL)
{
printf("malloc failed\n");
exit(1);
}
}
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
p_trans[j][i] = p[i][j];
}
}
return p_trans;
}
int main()
{
int *p_arr1d = create1DArray(10);
print1DArray(p_arr1d, 10);
int rows = 3;
int cols = 4;
int **p_arr2d = create2DArray(rows, cols);
print2DArray(p_arr2d, rows, cols);
int sum2 = 0;
int *p1darr_ones = transTo1DOnesArray(p_arr1d, 10);
print1DArray(p1darr_ones, 10);
int **p2darr_ones = transTo2DOnesArray(p_arr2d, rows, cols);
print2DArray(p2darr_ones, rows, cols);
int sum1d = sum1DArray(p1darr_ones, 10);
int sum2d = sum2DArray(p2darr_ones, rows, cols);
printf("sum1d=%d, sum2d=%d\n", sum1d, sum2d);
int **p2d = createRandom2DArray(3, 5);
print2DArray(p2d, 3, 5);
int **p2d_tr = transpose2DArray(p2d, 3, 5);
print2DArray(p2d_tr, 5, 3);
// free memory
free(p_arr1d);
for (int i = 0; i < rows; i++)
{
free(p_arr2d[i]);
}
free(p_arr2d);
printf("all done");
return 0;
}