在变量中存储随机生成的数字

时间:2011-11-05 20:30:14

标签: c

我试图制作一个计算出数学方程式的程序,我不知道如何生成从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);

}

3 个答案:

答案 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;
}
  1. 您不能像其他语言一样嵌套函数。
  2. initrand函数中有不匹配的括号。
  3. 我修复了函数的声明,当没有参数时使用voidinitrand没有返回任何内容。
  4. RAND_MAX+1的分裂有点搞砸了。只需除以RAND_MAX,结果将在闭区间[0,1]。转换为float的语法并不完全正确。

答案 1 :(得分:1)

您的代码存在一些问题:

  • 您不应使用嵌套函数。有些编译器支持它们作为扩展,但它不是标准的。在randfloat
  • 之外定义initrandmain
  • 函数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;
}