【发布时间】:2016-03-15 22:01:34
【问题描述】:
#pragma warning(disable:4996)
// INCLUDES
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// DEFINES
#define LOWER_DIE 1 // LOWER_DIE must be at least 1
#define UPPER_DIE 10
#define TRIALS 10000
// PROTOTYPES
int genRand(int, int);
int getTwoDieSum(int, int);
// MAIN
int main( int total) {
int numberArray[2 * UPPER_DIE + 1] = { '0', '0', '0', '0', '0', '0', '0','0','0','0','0', '0', '0' };// holds frequency of rolls
int roll = total;
int i = 0;
srand((unsigned int)time(NULL));
for (i = 0; i < TRIALS; i++) {
getTwoDieSum( LOWER_DIE, UPPER_DIE);
numberArray[roll] == numberArray[roll] + 1;
}
printf("ROLL VALUE : FREQUENCY\n");
printf("2\t: %d\n", numberArray[2]);
printf("3\t: %d\n", numberArray[3]);
printf("4\t: %d\n", numberArray[4]);
printf("5\t: %d\n", numberArray[5]);
printf("6\t: %d\n", numberArray[6]);
printf("7\t: %d\n", numberArray[7]);
printf("8\t: %d\n", numberArray[8]);
printf("9\t: %d\n", numberArray[9]);
printf("10\t: %d\n", numberArray[10]);
printf("11\t: %d\n", numberArray[11]);
printf("12\t: %d\n", numberArray[12]);
return 0;
}
// FUNCTION IMPLEMENTATIONS
int genRand(int lower, int upper) {
int range = (upper - lower) + 1;
return rand() % range + lower;
}
int getTwoDieSum( int lower, int upper) {
int rollOne = 0;
int rollTwo = 0;
int total = 0;
rollOne = genRand(lower, upper);
rollTwo = genRand(lower, upper);
total = rollOne + rollTwo;
return total;
}
到目前为止,它应该是生成随机数,然后填充数组的正确元素。继续为所有 printf() 语句输出 48。有什么想法我搞砸了吗?我认为它在 genRand() 区域或 getTwoDieSum() 中。我需要使用以下外壳,我不确定一切都应该做什么,这就是我搞砸的原因。我也不确定 int lower 和 int upper 的来源:
int genRand(int lower, int upper) {
int range = (upper - lower) + 1;
return rand() % range + lower;
}
我的问题更多是我在哪里搞砸了,int lower 和 int upper 来自哪里,我是否正确使用了随机种子生成器?
需要使用的外壳:
// INCLUDES
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// DEFINES
#define LOWER_DIE 1 // LOWER_DIE must be at least 1
#define UPPER_DIE 10
#define TRIALS 10000
// PROTOTYPES
int genRand(int, int);
int getTwoDieSum();
// MAIN
int main() {
int numberArray[2 * UPPER_DIE + 1]; // holds frequency of rolls
// initialize numberArray
// seed the random number generator
// roll the dice and keep track of what was rolled in the array
// display results
return 0;
}
// FUNCTION IMPLEMENTATIONS
int genRand(int lower, int upper) {
int range = (upper - lower) + 1;
return rand() % range + lower;
}
int getTwoDieSum() {
// YOUR IMPLEMENTATION GOES HERE
【问题讨论】:
-
roll在等于总数后永远不会改变。roll是数组的索引。 -
您认为让编译器警告静音是个好主意吗?例如,您的编译器可能告诉您
numberArray[roll] == numberArray[roll] + 1;对符合标准的程序没有影响。 -
int main( int total)这不是main的正确声明。它必须是int main(void)或int main(int argc, char *argv[])。我不知道您希望将total设置为什么,但它不太可能按照您想要的方式工作。 -
“有什么我搞砸的想法吗?我认为它在 genRand() 区域或 getTwoDieSum() 中。”没有!这两个功能看起来不错。这是所有问题所在的主循环。
-
您是否尝试过将
TRIALS设置为0,并查看单个卷的频率?它的信息量很大……或令人费解……取决于您是否知道您的 ASCII 表。
标签: c random dice random-seed