在C编程中生成随机数的算术级数

时间:2018-09-28 14:56:43

标签: c

这是我的代码:

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

int main()
{ 
    float r;

    srand((unsigned)time(NULL));

    r = (float)rand()/RAND_MAX*20;
    printf("%.1f\n",r);


   return(0);
}

该代码可以生成一个带有0 -20的十进制数的随机数,但是我想生成一个像0.5、1.0、1.5、2.0、2.5 ... 19.5、20.0的数字。

我应该在程序中添加什么?

3 个答案:

答案 0 :(得分:2)

我将随机数保留为int,并在1到40之间生成它。然后除以2.0得到所需的数字。

类似的东西:

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

int main()
{ 
    float r;
    int n;

    srand((unsigned)time(NULL));

    for (int i=0; i<10; ++i)
    {
        n = rand() % 40 + 1;  // Gives random values 1, 2, …, 39, 40
        r = n/2.0;            // Divide by floating point 2 to get 0.5, 1.0, .. 20.0
        printf("%.1f\n",r);
    }

   return(0);
}

应该为您提供值0.5、1.0、1.5,....,19.5、20.0

示例输出:

14.0
0.5
11.0
4.5
15.0
8.0
19.5
18.0
19.0
6.0

答案 1 :(得分:1)

要生成一个介于ab之间的随机数,其中n是不同的,均匀间隔的可能值:

 value = a + ((b - a) / (n - 1)) * (rand() % n);

对于0.5、1.0 ...,20.0,请使用a = 0.5, b = 20.0, n = 40

使用这种方法时,通常要注意模偏置;但是rand()不足以解决这个问题……

答案 2 :(得分:0)

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

int main()
{ 
    float r;

    srand((unsigned)time(NULL));

    r = (float)rand()/RAND_MAX*20;
    d = (float)rand()/RAND_MAX*1;
    if (d == 1) {
        r = r + 0.5;
    }
    printf("%.1f\n",r);


   return(0);
}

或者如果您想要数字2.3或5.4:

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

int main()
{ 
    float r;

    srand((unsigned)time(NULL));

    r = (float)rand()/RAND_MAX*200;
    r /= 10;
    printf("%.1f\n",r);


   return(0);
}