这是我的代码:
#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的数字。
我应该在程序中添加什么?
答案 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)
要生成一个介于a
和b
之间的随机数,其中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);
}