C - 如何生成20到30之间的随机数?

时间:2017-04-27 16:56:47

标签: c random

我已经尝试了,但它似乎没有给我想要的数字。到目前为止,这是我的代码:

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

int main()
{
   int n, i;
   printf("Value of n:\n");
   scanf("%d", &n);
   int t[n];
   for(i=0; i<n; i++)
    printf("%d ", rand()%20+30);

return 0;
}

4 个答案:

答案 0 :(得分:4)

printf("%d ", rand()%20+30);

生成30到50之间的随机数(不包括在内)。你需要

printf("%d ", rand()%10+20);

生成20到30之间(不包括在内)

10是范围,20是偏移。

包含两个端点(给出11个可能的值):

printf("%d ", rand()%11+20);

答案 1 :(得分:1)

这些是表达式

number = 21 + rand() % 9 // for (20, 30)

number = 20 + rand() % 11 // for [20, 30]

答案 2 :(得分:0)

尝试rand()%10+20

rand()%10给出了09之间的数字。然后添加20将在2029之间给出数字。

对于2030(含)之间的数字,请使用rand()%11+20

答案 3 :(得分:0)

要生成范围[A ... B]中的随机数,首先取数字之间的差异:D = BA,然后生成[0..D]范围内的随机数并将其添加到A:

unsigned myRand(unsigned fromA, unsigned toB)
{
    if (fromA > toB)  // check if fromA is 
        return myRand(toB, fromA);
    int d = toB - fromA; // difference between numbers: D = B-A  
    int r = rand() % (d+1); // random number in the range of [0..D]
    return r + fromA;
}

或者,你可以像这样手动:

20 + (rand()%11)

另请注意,根据实现rand(),返回0到RAND_MAX之间的值,因此您将无法创建大于RAND_MAX的随机值(可能小到32767)。在这种情况下,您可以组合多个rand()调用以获取大型随机数:

unsigned r = (rand() << 16) | rand();