滚动2个骰子所需的时间量并打印出百分比

时间:2013-12-11 17:30:47

标签: arrays function dice

我有一个任务是执行一个滚动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;
}

1 个答案:

答案 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]之间的距离等等。

祝你好运。