【问题标题】:Sorting numbers from an array into columns and rows in C将数组中的数字排序为C中的列和行
【发布时间】:2014-12-02 11:48:16
【问题描述】:

我试图弄清楚我如何能够正确地在列和行中显示数组中的数字。

这是我目前的功能。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int talfoljd()
{
    int i;
    int kolumn = 1;
    int rad = 1;
    int nummer[100];

    for (i = 0; i < 100; i++)
    {
        nummer[i] = (rand() % 900) + 1;

        for (rad = 0; rad < 10; rad++)
            for (kolumn = 0; kolumn < 10; kolumn++)
                for (rad = 0; rad < 10; rad++)
                {
                    for (kolumn = 0; kolumn < 10; kolumn++)
                    {
                        printf("%d ", nummer[i++]);
                    }
                    printf("\n");
                }
        return 0;
        }
    }
}

这就是我得到的输出。

42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42
42 42 42 42 42 42 42 42 42 42

所以我的问题不是让数字出现在列和行中,而是让数组中的数字出现在正确的位置。目前只显示第一个数字。

【问题讨论】:

  • 把这个:printf("%d ", nummer[i++]);改成这个:printf("%d ", nummer[i]);
  • 使用一次srand(time(NULL)); 来随机化种子。另外,将nummer[i++]) 更改为nummer[i])
  • 你确定这段代码能编译吗?
  • 是的,它会编译。我试着做 Rizier123 给我的改变,我最终得到第一个数字是正确的,而所有其他数字都是 -858993460。
  • 做出了回答,这是您要找的吗?如果不是,请详细说明您的目标是什么!

标签: c arrays for-loop random


【解决方案1】:

我认为你的程序应该是这样的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 100

void randomNumberTable() {

    int count;
    int nummers[SIZE];
    srand(time(NULL));

    for (count = 0; count < SIZE; count++)
        nummers[count] = (rand() % 900) + 1;

    for(count = 0; count < SIZE; count++) {

        if(count % 10 == 0)
            printf("\n");

        printf("%4d ", nummers[count]);

    }

}

int main() {

    printf("Random Number Table:\n");
    randomNumberTable();

    return 0;

}

可能的输出:

Random Number Table:

 194  310  641  512  184  198  647  342  895  682
 711  453  232  604  129  179  378  639  616   83
 499  779  450   99  553   88   80  754  633  235
 248  183  625  635  196  887   44  784  265  283
 586  133  484   40  372  800  852  794  259  558
 112  330   96   74  394  627  215  322  448  691
 896  880  109  243  505   35  480  476  594  651
 525  612  441   16  852  721  429  125  838  779
 281  344  645  592  301  297  355  515  573   53
 766  549  569  384   34  796  863  385  864  889

【讨论】:

  • 是的,这行得通!现在我只需要知道它为什么会起作用,我做错了什么?我正在努力学习,我不想复制你的代码
  • @user3529167 很高兴能帮到你!
【解决方案2】:

您的代码包含额外的两个外部 for 循环,这是不必要的。第二点是您的代码不会第二次返回随机函数生成器。因此,它最终打印了它自己生成的第一个数字。我认为你的程序应该是这样的:

   i = 0;
   for (rad = 0; rad < 10; rad++)
   {
      nummer[i] = (rand() % 900) + 1;
       for (kolumn = 0; kolumn < 10; kolumn++)
        {
           printf("%d ", nummer[i++]);
         }
       printf("\n");
   }

【讨论】:

    【解决方案3】:

    如果你想学习,那么你必须学会​​在脑海中单步执行你的代码,看看控制路径是否确实是你想要的。这样做会发现,在只调用了一次随机数生成器之后,您现在想要打印出整个数组。您还将了解到带有“rad”循环变量的最内层循环将覆盖外部循环“rad”循环变量。

    要学习在心理上单步执行代码,您可以使用调试器在物理上单步执行代码。它会向您展示上述观察结果。

    要学习,请向其他人学习“好代码”,例如上面的示例。祝你好运 - “学得长久”

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多