我有一个任务是执行一个滚动2个骰子x次的程序,然后打印出每个数字的结果(2-12)。这是我走了多远,但你可以看到我被卡住了。我不知道如何从throw_dice函数获取数组到print_result函数。我也不知道如何计算和打印每个单独数字的实际百分比。我不是要求别人为我完成代码,而是一些提示!
Thnx提前。
#include <stdio.h>
#include <time.h>
int array[11];
int count=0;
int get_no_of_throws()
{
int throws;
printf("How many throws? ");
scanf("%i", &throws);
return throws;
}
int throw_dice(int throws)
{
int dice1;
int dice2;
int sum=0;
srand(time(NULL));
for(count=0;count<11;count++)
{
array[count]=0;
}
for(count=0;count<throws; count++)
{
dice1=rand()%6+1;
dice2=rand()%6+1;
sum=dice1+dice2;
++array[count];
}
return array[count];
}
void print_results(array)
{
?????
}
int main()
{
int throws;
get_no_of_throws();
throw_dice(throws);
print_results(array);
return 0;
}
答案 0 :(得分:1)
使用sum作为数组索引。
dice1 = rand()%6 + 1;
dice2 = rand()%6 + 1;
sum = dice1 + dice2;
array[sum-2]++;
要打印,循环遍历数组......
printf("%d %0.1f%%\m", count + 2, array[count]*100.0/throws);
考虑添加的好处:打印预期结果的百分比。也是某处打印throws
。
检查输入结果并确保返回已知值。如果用户输入“ABC”,则当前代码返回垃圾。考虑fgets()/sscanf()
。
if (1 != scanf("%i", &throws)) ComplainToUserAboutInput();
return array[count];
很糟糕。简单返回0或使函数返回void
。
将int count=0;
从全局移动到功能范围。我将array
形式全局移动到main()
,然后将其传递给各种函数。顺便说一句:考虑array
的另一个名称,如dice_occurrence []。比“数组”更具描述性。
// int count=0;
int throw_dice(int throws) {
int count;
...
for(count=0; count<11; count++)
...
for(count=0; count<throws; count++)
...
}
轻微:考虑将变量更加局部化,如
// int dice1;
// int dice2;
// int sum=0;
...
for(count=0;count<throws; count++) {
int dice1 = rand()%6 + 1;
int dice2 = rand()%6 + 1;
int sum = dice1 + dice2;
array[sum-2]++;
}
让空格角色成为你的朋友。
// dice1=rand()%6+1;
dice1 = rand()%6 + 1;
srand(time(NULL));
对生产有好处。您可能希望在调试期间注释掉以获得可重复的结果。
其他简化或功能。对我来说,我会创建一个6x6数组,然后执行dice[rand()%6][rand()%6]++;
然后再加上像骰子[2] [1]和骰子[1] [2]这样的对。人们还可以评估诸如骰子[2] [1]和骰子[1] [2]之间的距离等等。