在C中使用数组

Jam*_*mes 2 c arrays 2d

我有一个令人不安的家庭作业任务,并希望指向正确的方向.

任务是开发一个C程序,完成以下任务:

  1. main(),创建一个名为qqqqq的二维数组,可以容纳48个整数(6行,8列)
  2. qqqqq使用1到15之间随机生成的整数值进行填充.
  3. 计算每行的总数.
  4. 计算每列的总数.
  5. 以表格格式显示2D数组的内容,行总数位于行的右侧,列总计位于列的底部.

从哪里开始main

这是我到目前为止:

int main (void)
{
    int qqqqq [6] [8];
    int r;
    int c;

    srandom ((unsiged) time (NULL));

    for (r=0; r <=6; r++) 
    {
      for(c=0; c <=8; c++)
      {
        qqqqq[r][c] = random ( )
Run Code Online (Sandbox Code Playgroud)

接下来我该怎么办?

我感谢任何帮助或指导.

谢谢 - 詹姆斯

Dav*_*vis 5

算法思维

以下是我将如何解决这个问题:

  1. 用我自己的话写出算法.
  2. 了解如何使用C语言生成随机数.
  3. 了解如何在屏幕上打印信息.

算法

算法是解决问题所需的一组步骤.手头的任务已经描述了问题,但通常用自己的话重新编写它是一种好习惯.(作为一个实际观点,您可以将您的话语传达给您的客户 - 在这种情况下,您的老师 - 并确认您对问题的理解是正确的.)

  1. 创建一个2D数组
  2. 用随机数填充数组.
  3. 计算每行数字的总和(需要行和计数器).
  4. 计算每列数字的总和(需要列数和计数器).
  5. 将2D阵列打印到屏幕上.
  6. 打印每行末尾每行的总和.
  7. 打印每列末尾每列的总和.

假设:不打印任何总和.(例如,列总和的总和.)

生成随机数

谷歌在这里很有帮助.尝试Google搜索:

generate random integers C
Run Code Online (Sandbox Code Playgroud)

你会发现很多帮助,特别是关于这个rand()功能的提示.修改Google搜索:

generate random integers C rand()
Run Code Online (Sandbox Code Playgroud)

此搜索找到了一个很好的资源:http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

打印信息

同样,Google搜索可以在此处提供帮助:

print information on the screen in C
Run Code Online (Sandbox Code Playgroud)

这得到:http://www.daniweb.com/software-development/c/threads/9688

这个printf功能看起来很方便.了解更多信息:

printf C
Run Code Online (Sandbox Code Playgroud)

这产生了一个熟悉的网站:http://www.cplusplus.com/reference/clibrary/cstdio/printf/

发展

如果你真的想"哇"你的教授:

  1. 确定程序中最有可能更改并使其成为常量的部分.
  2. 将程序分成逻辑区域(称为函数).
  3. 使用有意义的变量名.是的r,并c可能代表的行和列,但对于时间量才能拼出rowcolumn,它会拯救任何人不必作出任何猜测或阅读代码发现它的真正用途阅读你的代码.
  4. 告诉你的教授,qqqqq可以使用更好的名字.建议一个,甚至.

例如:

#include <stdio.h>

/* Subject to change; only change it in one spot. */
#define MAX_ROWS 6
#define MAX_COLS 8

#define MIN_RANDOM_NUMBER 1
#define MAX_RANDOM_NUMBER 15

/** Returns a number between MIN_RANDOM_NUMBER and MAX_RANDOM_NUMBER. */
int randomNumber() {
  return 0; /* FIX ME to use rand() and the modulus operator. */
}

int main( int argc, char *argv[] ) {
  int qqqqq[MAX_ROWS][MAX_COLS];

  /* FIX ME: Move these variables into the display function. */
  int sumRows = 0;
  int sumCols = 0;

  /* Use different random numbers each time the program runs. */
  seedRandomNumber();

  /* Initialize the array with random numbers. */
  for( int row = 0; row < MAX_ROWS; row++ ) {
    for( int col = 0; col < MAX_COLS; col++ ) {
      qqqqq[row][col] = randomNumber();
    }
  }

  /* Display the array to the screen along with the sum totals. */
  display( qqqqq );
}
Run Code Online (Sandbox Code Playgroud)

请注意,您可以选择.

您可以将sumRows变量传递给display函数,或者您可以编写display函数来调用calculateSumRows自身.我的偏好是始终简化函数原型.也就是说,减少参数的数量.它使未来的变化更容易.

所以写成display:

void display( int randomValues[MAX_ROWS][MAX_COLS] ) {
  int sumCols = 0;

  for( int row = 0; row < MAX_ROWS; row++ ) {
    /* FIX ME: Write the calculateSumCols function. */
    sumCols = calculateSumCols( randomValues, row );

    for( int col = 0; col < MAX_COLS; col++ ) {
      /* FIX ME: Use printf here to display the value at this row/column. */
    }
  }

  /* FIX ME: Use printf here to display sumRows. */
  for( int col = 0; col < MAX_COLS; col++ ) {
    /* FIX ME: Use printf here to display the value of the rows. */
    printf( "%d ", calculateSumRows( randomValues, col ) );
  }
}
Run Code Online (Sandbox Code Playgroud)

这应该让你开始.

请注意,您可以在此处进行一些简化和优化.忘记他们.获取代码,使其真正起作用.代码工作后,保存它.甚至可以制作备份副本.

然后开始改变它.看看你是否可以删除变量.也许你甚至可以删除一些for循环.如果您犯了错误,您可以随时参考备份副本.最终,您的"备份"副本将成为"源代码存储库".