该程序应该运行模拟以查看用户输入的数字是否少于三个随机生成的数字。所有数字的范围从0到1.用户指定模拟运行的试验次数,然后程序告诉用户所有三个数字都小于他们的次数和次数。问题是每次我运行程序时总是得到1次通过或1次失败,无论它应该运行多少次试验。我认为这是因为我只生成一组随机数而不是多少指定,但我不知道如何解决这个问题。
这是代码 -
int main()
{
int seed, trials, pass1, fail1, i, j, k;
float reli;
printf("Enter individual component reliability:\n");
scanf("%f", &reli);
printf("Enter number of trials:\n");
scanf("%u", &trials);
srand(time(NULL));
float rndm1 = (double)rand() / (double)RAND_MAX;
float rndm2 = (double)rand() / (double)RAND_MAX;
float rndm3 = (double)rand() / (double)RAND_MAX;
while( k <= trials ); {
pass1 = 0;
fail1 = 0;
if (rndm1 <= reli && rndm2 <= reli && rndm3 <= reli){
pass1 = pass1 + 1;
}
else {
fail1 = fail1 + 1;
}
k++;
}
printf("# of passes = %d, #of failures = %d", pass1, fail1);
}
由于
答案 0 :(得分:2)
我认为有4件事是问题:
正如Ajay所说: 您只需生成一组数字,似乎您希望每次都获得不同的数字。所以你应该把它移到循环中。
然后在每次循环时重置pass和fail值。所以它每次都以0
开头。您可能希望将声明移出循环。
第三件事是你没有循环。 while( k <= trials );
意味着没有什么可做的。因为循环的结尾位于;
。你必须删除它。
然后,当StoryTeller提到你必须在使用它们之前初始化变量。只是纯粹的运气,你没有遇到无限循环,所以在使用k=0;
之前k
int main()
{
int seed, trials, pass1, fail1, i, j, k;
float reli;
float rndm1;
float rndm2;
float rndm3;
printf("Enter individual component reliability:\n");
scanf("%f", &reli);
printf("Enter number of trials:\n");
scanf("%u", &trials);
srand(time(NULL));
pass1 = 0;
fail1 = 0;
k = 0;
while( k < trials )
{
rndm1 = (float)rand() / RAND_MAX; //one cast is enough but casting both is not wrong and if you use float cast to float
rndm2 = (float)rand() / RAND_MAX;
rndm3 = (float)rand() / RAND_MAX;
if (rndm1 <= reli && rndm2 <= reli && rndm3 <= reli)
{
pass1 = pass1 + 1;
}
else
{
fail1 = fail1 + 1;
}
k++;
}
printf("# of passes = %d, #of failures = %d", pass1, fail1);
}