简单的Rand()函数

时间:2012-10-28 19:25:04

标签: c function loops random

  

使用以下原型编写函数。 INT   getRandomIntFrom0ToK(int K)该函数调用随机数   生成均匀分布的随机值的生成器   interval [0,1]并返回正整数K的随机数   均匀分布在整数{0,1,2,... K}上。写一个程序   测试函数,它显示生成的随机整数   你的函数命中{0,1,2,... K}中的每个数字大致相等   概率。

那么,为什么有两个间隔?

{0,K}是可以理解的,但为什么[0,1]是必要的?

我不知道到目前为止我在做什么:

#include <stdio.h>

int getRandomIntFrom0toK(int K)
{
    int i=0;

    printf("enter k:");
    scanf("%d",&K);

    while (i<K)
    {
        int num=(rand()%(K-1)+1);
        printf("%d\n",num);
        i++;
    }
}

int main(void)
{
    int result=getRandomIntFrom0toK(1+rand()%(1));
    return 0;
}

1 个答案:

答案 0 :(得分:0)

间隔[0,1]通常是随机数生成器在返回“实数”(即浮点数而不是int)时可能返回的值。这不是你想要的,而是给出作为随机数生成器。您的任务是将结果转换为您想要的结果,即0到K之间的整数。

碰巧,C rand()函数返回一个int而不是一个浮点数,所以你可能想要除以RAND_MAX以获得相同的效果,如果你正在测试你的代码。

通过将结果乘以K将其转换为[0,K]范围,然后添加偏移量L以将其转换为范围,将此生成器的结果转换为所需的任何间隔都很容易[L,L + K]。因此,例如,如果你想要一个介于-2和+2之间的数字,你可以这样做:

float x = rand() / (float) RAND_MAX; /* x is between 0 and 1 */
x = x * 4; /* x is now between 0 and 4 */
x = x - 2; /* x is now between -2 and 2 */

在你的情况下,你想要一个介于0和K之间的整数,而不是浮点数。所以一旦你完成了转换,就可以舍入到最接近的整数。但是你需要小心正确地选择你的范围,这样0和K就像任何一个中间整数一样,所以你不会得到一个超出范围的值(例如-1或K +) 1)。