如何使用另一个二维数组的内容填充用户输入尺寸的二维数组的内容?

时间:2015-11-24 22:37:50

标签: c arrays pointers multidimensional-array dynamic-memory-allocation

在以下家庭作业中:

  1. 创建一个包含1 ... 999范围内100个随机数的数组,为以下每个进程编写一个函数。在构建数组时,如果3或7均匀地划分随机数,则将其存储为负数。
  2. 一个。将数组十个值打印到一行。确保值按行对齐。 湾返回偶数值的计数 C。返回数组中所有值的总和

    1. 创建二维数组(大小10 X 10)。使用上述单维数组中的值填充此二维数组。确定每行中的最大值。显示二维数组和每行的最大值。
    2. 3。重复上面的数字2,但这次代替10 X 10数组,提示用户输入行和列的大小,允许用户填写值并显示数组。(提示:使用指针和动态内存分配)

      我坚持使用数字3.我不确定如何正确使用动态内存分配和指针为用户输入的行数和列数腾出空间。

      int main(void)
      {
      int hundred[100];
      cien(hundred);
      even(hundred);
      total(hundred);
      two_dim(hundred, table);
      hi_row(table);
      cust_arr(hundred,table);
      system("pause");
      return 0;
      }
      void cien(int hundred[])
      {
          int i = 0;
          int range = (999 - 1) + 1;
          for (i = 0; i < 100; i++)
          {
              hundred[i] = rand() % range + 1;
              if (hundred[i] % 3 == 0 || hundred[i] % 7 == 0)
              {
                  hundred[i] = hundred[i] * -1;
                  printf("%d\t", hundred[i]);
              }
              else
              {
                  printf("%d\t", hundred[i]);
              }
      
          }
          return;
      }
      
      int two_dim(int hundred[], int arr[][10])
      {
          int x;
          int y;
          int i = 0;
          int table[10][10];
          while (i != 100)
          {
              for (x = 0; x <10; x++)
              {
                  for (y = 0; y < 10; y++)
                  {
                      arr[x][y] = hundred[i];
                      printf("%d\t", arr[x][y]);
                      i++;
                  }
              }
      
          }
          return **table;
      }
      
      void** cust_arr(int hundred[], int table[][10])
      {
          int x, y, i, j, k=0;
          int **arr;
          printf("input the number of rows.\n" );
          scanf_s("%d", &x);
          i = (int*)calloc(x, sizeof(int*));
          printf("input the number of columns.\n");
          scanf_s("%d", &y);
          j = (int*)calloc(y, sizeof(int*));
          while (k != 100)
          {
              for (i = 0; i <= x; i++)
              {
                  for (j = 0; j <= y; j++)
                  {
                      hundred[k] = table[10][10];
                      table[10][10] = **arr[i][j];
                  }
              }
              printf("%d\n", **arr[i][j]);
              k++;
          }
      }
      

      由于提示符重复编号2,我试图在cust_arr()函数中创建类似的循环

2 个答案:

答案 0 :(得分:0)

malloc将返回指定内存区域的指针。您可以在指针上使用括号来指定索引,就像静态数组一样。由于你需要一个二维数组,你需要一个指向指针数组的指针,即列指向行,行指向值。

int ** dynamicPointer = malloc(sizeof(int*)*columns);
for(int i = 0; i < columns; i++)
   dynamicPointer[i] = malloc(sizeof(int)*rows);
//address of final column and row
dynamicPointer[columns- 1][rows  - 1] = 3;
print("%d\n", dynamicPointer[columns- 1][rows  - 1]);

答案 1 :(得分:-1)

对于10x10阵列,我建议使用variable length arrays。如果您想使用dynamic allocation,请使用malloc功能。

int x, y;
int **table;

scanf("%d %d", &x, &y);
table = malloc(x*sizeof(int *));
for(int i = 0; i < x; i++)
    table[i] = malloc(y*sizeof(int));

除此之外,显示的代码有许多缺陷,需要修复。最好将所有函数声明和定义放在函数之外,并指定它们的返回类型和参数。