读书人

(帖)C语言中rand函数

发布时间: 2012-06-24 18:32:37 作者: rapoo

(求助帖)C语言中rand函数
直接上代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define SIZE 36000

int diceSum(void);

int main(void)
{
int diceFreq[11] = {0};
int i,diceNum;
int count;


for (count = 0; count < SIZE; count++)
{
dicNum = diceSum();
++diceFreq[diceNum - 2];
}

printf("diceNum\ttimes\n");

for (i = 0; i < 11; i++)
{
printf("%d\t%d\n", i +2, diceFreq[i]);
}

return 0;

}

int diceNum(void)
{
int fNum, lNum, sum;

srand(time(NULL));
lNum = (rand() % 6) + 1;
fNum = (rand() % 6) + 1;

sum = fNum + lNum;
return sum;
}
无法产生随机数

[解决办法]
主要问题在与你没次调用随机数前都运行一次
srand(time(NULL));
把随机数的种子重新初始化了
而且调用的频率很快时间,time(NULL)的返回值都没变化,所以初始化的结果都一样
也就是lNum和fNum的值也一样

应该把srand(time(NULL));放在main里就可以了

C/C++ code
#include<stdio.h>#include<stdlib.h>#include<time.h>#define SIZE 36000int diceSum(void);int main(void){    int diceFreq[11] = {0};    int i,diceNum;    int count;    int j;    srand(time(NULL));    for (count = 0; count < SIZE; count++)    {        diceNum = diceSum();        diceFreq[diceNum - 2]+=1;    }    printf("diceNum\ttimes\n");    for (i = 0; i < 11; i++)    {        printf("%d\t%d\n", i +2, diceFreq[i]);    }    return 0;}int diceSum(void){    int fNum, lNum, sum;    lNum = (rand() % 6) + 1;    fNum = (rand() % 6) + 1;    sum = fNum + lNum;    return sum;}
[解决办法]
探讨

主要问题在与你没次调用随机数前都运行一次
srand(time(NULL));
把随机数的种子重新初始化了
而且调用的频率很快时间,time(NULL)的返回值都没变化,所以初始化的结果都一样
也就是lNum和fNum的值也一样

应该把srand(time(NULL));放在main里就可以了
C/C++ code

#include<stdio.h>
#include<std……

读书人网 >C++

热点推荐