【问题标题】:Displaying the frequencies of randomly generated integers [closed]显示随机生成的整数的频率 [关闭]
【发布时间】:2012-10-10 10:45:57
【问题描述】:

此代码旨在列出从 1 到 9 的数字,并在每个数字旁边显示它在已生成的 10,000 个随机数字中出现的频率。

代码:

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

main()
{
int counts[10];
int i;
int random;
srand(time(0));
for (i = 0; i < 10; i++)
counts[i] = 0;
for (i = 0; i<= 10000; i++)
{
random = (int)(10.0*rand()/(RAND_MAX+1.0));
counts[random]++;
}
for (i = 0; i<10; i++);
printf("%d occurs %f%%\n", i, i/100.0);
return(0);

}

但是,当我运行程序时,我会从 1-9 中得到一个我想要的列表,但它旁边列出了 1-9,但以十进制而不是频率。这是我运行它时得到的:

1 occurs 0.010000%
2 occurs 0.020000%
3 occurs 0.030000%
4 occurs 0.040000%
5 occurs 0.050000%
6 occurs 0.060000%
7 occurs 0.070000%
8 occurs 0.080000%
9 occurs 0.090000%

为了得到每个数字的频率,我需要改变什么, 同样,当我使用emacs 从终端运行代码时,它列出了 1-9,但是当我在 Eclipse 中运行代码时,它只显示 10 在控制台中出现 0.100000%。发生这种情况有什么原因吗?

【问题讨论】:

  • 再次查看您的代码,尤其是您正在打印的内容。如果这不起作用,请调试它。如果这不起作用,我放弃。
  • "为什么我的 C 代码不能正常工作?" - 因为你没有缩进它。

标签: c random


【解决方案1】:

看起来您正确存储了每个数字的频率,只是没有显示它们。您的输出根本没有引用 counts 数组。

在这一行:

printf("%d occurs %f%%\n", i, i/100.0);

i/100.0 应该是counts[i]/10000

【讨论】:

  • 当我更改时,我收到一条警告:警告:格式 '%f' 需要类型为 'double' 的参数,但参数 3 的类型为 'int' [-Wformat],然后当我继续我明白了: 1 出现 0.000000% 2 出现 0.000000% 3 出现 0.000000% 4 出现 0.000000% 5 出现 0.000000% 6 出现 0.000000% 7 出现 0.000000% 8 出现 0.000000% 9 出现 0.000000%
  • @user1760250 您可以转换为双倍或除以 10000.0 以消除警告。另外,尝试使用rand() % 10 + 1; 生成一个从 1 到 10 的随机数。如果这不起作用,请在生成随机值时打印出来。我面前没有 C 编译器,所以我无法测试你的代码。
  • 我将其更改为 10000.0 以消除警告,但即使使用 rand() % 10 + 1; 我仍然得到相同的结果
  • @user1760250 尝试只打印counts 的值,看看它们是什么。
  • @user1760250 在生成时打印出每个随机值,以确保它们在 1 到 10 之间。还要确保缩进正确并且所有变量都正确初始化(使用 print再次声明)。
猜你喜欢
  • 2021-09-14
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 2016-01-26
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多