我试图制作一个计算出数学方程式的程序,我不知道如何生成从0.00到1.00的随机数并将其存储在变量a中。
这是我的代码到目前为止,我坚持现在如何获取该数字并将其存储以备将来使用。我需要将该随机数存储在a中,然后在循环中使用它,然后生成一个新的随机数并在循环的第二个循环中使用它。
EDIT 这就是我现在正在研究的,它假设计算一个随机数在该区域内的次数,计算它,然后除去运行的次数,但我没有得到任何输出
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
void initrand(void)
{
srand(time(0));
}
float randfloat(void)
{
return rand()/(float)RAND_MAX;
}
int main(void)
{
int n = 10;
float x;
float y;
float pi = 3.1415;
float rootxy;
initrand();
int z = 0;
int inside = 0;
x = randfloat();
y = randfloat();
float area = 0.25 * pi;
float calculatedpi;
rootxy = sqrt(pow(x,2) + (pow(y,2)));
while (z < n){
if (rootxy > area) {
inside++;
z++;
}
else{
return 0;
}
calculatedpi = (inside/n);
}
printf("%f", calculatedpi);
}
答案 0 :(得分:1)
我想你想要这样的东西:
#include <stdlib.h>
#include <time.h>
void initrand(void)
{
srand(time(0));
}
float randfloat(void)
{
return rand()/(float)RAND_MAX;
}
int main(void)
{
initrand();
float a = randfloat();
return 0;
}
initrand
函数中有不匹配的括号。void
,initrand
没有返回任何内容。RAND_MAX+1
的分裂有点搞砸了。只需除以RAND_MAX
,结果将在闭区间[0,1]。转换为float
的语法并不完全正确。答案 1 :(得分:1)
您的代码存在一些问题:
randfloat
initrand
和main
initrand
做得太少。为什么不从srand((time(0));
致电main
? 击> initrand
函数被声明为返回一个double但它不返回任何内容(以及它的命名方式不应该返回)。如果您需要使用这样的功能,为什么不让它返回void
?float
。为什么不使用double
?那就是说,你可以这样做来存储那个随机值:
double randdouble()
{
return rand()/((double)RAND_MAX + 1);
}
int main()
{
double x = randdouble();
/* ... */
}
答案 2 :(得分:0)
如果您想在指定范围内获得随机double
数字,可以使用此功能
// Return a random double from a to b
double randomDouble(double a, double b)
{
return = ( rand() / ( (double)RAND_MAX + 1.0))
* (b - a) + a;
}