在C语言中使用数组

在C语言中使用数组,c,arrays,2d,C,Arrays,2d,我有一个麻烦的家庭作业,希望有正确方向的指针 任务是开发一个C程序,该程序可实现以下功能: 在main()中,创建一个名为qqqq的二维数组,该数组可以容纳48个整数(6行8列) 使用1到15之间随机生成的整数值填充qqqq 计算每行的总数 计算每列的总数 以表格格式显示二维数组的内容,行总计位于行的右侧,列总计位于列的底部 在main之后从何处开始 以下是我到目前为止的情况: int main (void) { int qqqqq [6] [8]; int r; int

我有一个麻烦的家庭作业,希望有正确方向的指针

任务是开发一个C程序,该程序可实现以下功能:

  • main()
    中,创建一个名为qqqq的二维数组,该数组可以容纳48个整数(6行8列)
  • 使用1到15之间随机生成的整数值填充
    qqqq
  • 计算每行的总数
  • 计算每列的总数
  • 以表格格式显示二维数组的内容,行总计位于行的右侧,列总计位于列的底部
  • 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 ( )
    
    int main(无效)
    {
    int-qqq[6][8];;
    INTR;
    INTC;
    srandom((未生成)时间(NULL));
    对于(r=0;r一些关键事项:

  • random()返回什么
  • 行/列的总数是多少? 这只是把所有的数据加起来 行/列中的数字。请重试 编写一个函数来累加所有 给定行或列中的值
  • 想一想如何打印出一行 矩阵的,然后对每个 矩阵中的行

  • 共有6行和8列,每个行和列都需要一个总数。首先,制作更多的数组作为存储这些总数的位置。

    这是一个非常好的开始!不过,请注意,维度X的数组的有效索引是0…(X-1)。您的循环应该如下所示

    for (r=0; r <6; r++)
    
    for(r=0;r算法思维
    以下是我将如何解决这个问题:

  • 用我自己的话写下算法
  • 了解如何用C语言生成随机数
  • 了解如何在屏幕上打印信息
  • 算法 算法是解决问题所需的一组步骤。手头的任务已经描述了问题,但通常用自己的话重新编写是一种很好的做法。(作为实践点,你可以把你的话告诉你的客户——在本例中是你的老师——并确认你对问题的理解是正确的。)

  • 创建二维阵列
  • 用随机数填充数组
  • 计算每行数字的和(需要行和计数器)
  • 计算每列数字的总和(需要一个列总和计数器)
  • 将2D阵列打印到屏幕上
  • 在每行末尾打印每行的总和
  • 在每列末尾打印每列的总和
  • 假设:既不打印总和(例如,列总和的总和)

    生成随机数 谷歌在这里很有用。请尝试谷歌搜索:

    generate random integers C
    
    你会发现很多帮助,特别是关于
    rand()
    函数的提示。修改谷歌搜索:

    generate random integers C rand()
    
    此搜索找到了一个很好的资源:

    打印信息 同样,谷歌搜索在这里也有帮助:

    print information on the screen in C
    
    这将产生:

    printf
    功能似乎很方便。了解更多信息:

    printf C
    
    这将产生一个熟悉的站点:

    发展 如果你真的想让你的教授“惊叹”:

  • 确定程序中最有可能更改的部分,并将其设置为常量
  • 将程序划分为逻辑区域(称为函数)
  • 使用有意义的变量名。是的
    r
    c
    可能表示行和列,但就拼写
    行和
    列所需的时间而言,这将使任何阅读代码的人不必猜测或阅读代码以发现其真正用途
  • 告诉你的教授,
    qqqq
    可以用一个更好的名字。甚至建议一个
  • 例如:

    #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 );
    }
    
    这应该让你开始

    请注意,您可以在此处进行许多简化和优化。忘记它们。首先获取代码,使其实际工作。一旦代码工作,请保存它。甚至创建备份副本


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

    提示:使用
    %
    运算符获取1到15之间的数字。对于随机数,您可能会发现此链接很有用:mod运算符不是将
    随机数的结果映射到不同范围的好方法;它对于类分配来说效果很好,但根据所使用的RNG,您可能会得到绝对非随机的值分布s、 更好的方法是:
    val=(int)((rand()/(double)rand_MAX)*(MAX-min+1)+min);
    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 ) );
      }
    }