我的任务是投币模拟,必须进行10、100、1000、100,000和1百万次试验。换句话说,该程序的一次执行包含所有六个试验。实际抛硬币的代码必须在另一个功能中完成。我想知道是否可以编写具有多个非嵌套循环的程序,例如:
for(unsigned int counter = 1; counter <= 10; counter++)
for(unsigned int counter = 1; counter <= 100; counter++)
等
编辑:输出中必须显示类似以下内容:
Trials: 10 Heads: 30% Tails 70%
Trials: 100 ….
以此类推。忘了包括这个,对不起!
显然,这写起来很繁琐,我不想调用我的coinToss函数六次;但是我不确定在每次试验(10 ... 1百万)下还能如何模拟投币游戏。
答案 0 :(得分:4)
有很多方法可以做到这一点。这里有一些。
1)使用外循环生成试验次数。如果试验次数遵循易于生成的模式,效果很好,那就是您所提出的问题。
for (unsigned int trials = 10; trials <= 1000000; trials *= 10)
for(unsigned int counter = 1; counter <= trials; counter++)
{
// do stuff
}
2)如果不易于生成模式,则使用具有任意值的表。
unsigned int trials[] = { 15, 97, 1003, 10100, 100444, 999999, 0 };
for (int i = 0; trials[i] > 0; i++)
for(unsigned int counter = 1; counter <= trials[i]; counter++)
{
// do stuff
}
3)将循环放入函数中,并多次调用该函数。
void foo(unsigned int trials)
{
for(unsigned int counter = 1; counter <= trials; counter++)
{
// do stuff
}
}
int main(void)
{
foo(10);
foo(100);
foo(1000);
foo(10000);
foo(100000);
foo(1000000);
}
您也可以将3)与1)或2)结合在一起。例如,将3)与1)组合在一起
void foo(unsigned int trials)
{
for(unsigned int counter = 1; counter <= trials; counter++)
{
// do stuff
}
}
int main(void)
{
for (unsigned int trials = 10; trials <= 1000000; trials *= 10)
foo(trials);
}