- 一、srand和rand函数的用法
- 1、rand+srand+time函数的合体
- 2、当单独使用rand函数会怎样?
- 3、当使用srand函数,为rand提供随机数种子时,会出现什么?
- 4、time函数是来干什么的?
- 二、猜数字游戏
一、srand和rand函数的用法 1、rand+srand+time函数的合体
rand函数的作用是产生一个随机值,每次调用它,都会它产生一个随机值,随机值的类型是 int
在调用rand函数时,应先调用srand函数,然后使用time函数的返回值作为srand函数的参数,为rand函数提供一个随时都在变的随机数种子,使rand的随机数依赖这个种子来产生随机值。
单独使用rand函数时,rand默认的随机数种子是1,随机数的产生会依据数字1为起点,来产生随机数,所以就会产生缺陷,我们使用rand函数分别创建两组随机数,得到的结果是两组数是一模一样的。
归根揭底是随机数的种子是一成不变的,一直是1。
如下图所示:
int main()
{
for (int i = 1;i <= 5;i++)
{
int z = rand();
printf("%dn", z);
}
printf("------------");
int a = 1;
while (a <= 5)
{
int b = rand();
printf("%dn", b);
a++;
}
return 0;
}
3、当使用srand函数,为rand提供随机数种子时,会出现什么?
srand函数是为rand函数提供随机数种子的,使rand函数的随机数种子不是一个一成不变的数
也就是说当种子不一样时,会出现两组不同的随机数。
如下图所示:
time函数的返回值是时间戳,类型是time_t,是整型,可以为srand函数提供参数,time函数的参数是个指针类型,可以不用参数,直接传一个空指针进去。
由于srand的参数类型是unsigned int ,所以为srand提供参数时,需要强转类型到unsigned int。
如下图:
srand((unsigned int)time(NULL));二、猜数字游戏
首先,用自己的话描述,再转化为计算机语言
规则:先由电脑产生一个随机数,我们在去猜,猜大了或者猜小了,系统会提示,直到猜对了,游戏完成。
第一步:在玩游戏之前,都会有一个菜单的界面,让我们进行选择,是退出游戏,还是继续游戏
#includevoid menu() { printf("******欢迎进入游戏******n"); printf("****** 1.play ******n"); printf("****** 0.exit ******n"); } int main() { // 1.编写一个菜单 menu(); // 2.进行选择,输入一个数 int input = 0; scanf_s("%d", &input); // 3.进行判断,是继续游戏,还是退出 if (input == 1) { printf("继续游戏,进入游戏n"); } else if (input == 0) { printf("退出游戏n"); } else { printf("输入错误,请重新输入"); } return 0; }
第二步:如果进行到else里面,输入错误了,希望可以再次输入,并且在玩完一局之后,可能还会想玩
所以需要用到循环,且在开始的时候,菜单是先出来,不需要进行判断,所以用到do-while循环语句。
#includevoid menu() { printf("******欢迎进入游戏******n"); printf("****** 1.play ******n"); printf("****** 0.exit ******n"); } int main() { int input = 0; // 1.编写一个菜单 do { menu(); // 2.进行选择,输入一个数 scanf_s("%d", &input); // 3.进行判断,是继续游戏,还是退出 if (input == 1) { printf("继续游戏,进入游戏n"); } else if (input == 0) { printf("退出游戏n"); } else { printf("输入错误,请重新输入"); } } while (input); return 0; }
这里的条件表达式是input,因为这个决定这个循环里面的内容是否执行的是input的值,非0则执行,0为不执行。
第三步:开始正式进入游戏内部,开始玩游戏了
如规则一样:
1 :先产生一个随机数
#includevoid menu() { printf("******欢迎进入游戏******n"); printf("****** 1.play ******n"); printf("****** 0.exit ******n"); } void game() { // 5.先产生一个随机数,由于产生的随机值太大,所以使返回值模100,得到0-99的余数,在+1,得到1-100的余数 int z = rand(); } int main() { int input = 0; // 为rand产生随机种子 srand((unsigned int)time(NULL)); // 1.编写一个菜单 do { menu(); // 2.进行选择,输入一个数 printf("请进行选择(0/1)->"); scanf_s("%dn", &input); // 3.进行判断,是继续游戏,还是退出 if (input == 1) { //4.封装一个游戏函数 game(); } else if (input == 0) { printf("退出游戏n"); } else { printf("输入错误,请重新输入n"); } } while (input); return 0; }
2:输入自己心中的答案,开始进行猜数
#includevoid menu() { printf("******欢迎进入游戏******n"); printf("****** 1.play ******n"); printf("****** 0.exit ******n"); } void game() { // 5.先产生一个随机数,由于产生的随机值太大,所以使返回值模100,得到0-99的余数,在+1,得到1-100的余数 int z = rand() % 100 +1; // 6.输入自己心中的答案,进行判断 int guess = 0; printf("输入自己心中的答案->"); scanf_s("%dn",%guess): if(guess == z) { printf("猜对了"); } else if (guess > z) { printf("猜大了"); } else { printf("猜小了"); } } int main() { int input = 0; // 为rand产生随机种子 srand((unsigned int)time(NULL)); // 1.编写一个菜单 do { menu(); // 2.进行选择,输入一个数 printf("请进行选择(0/1)->"); scanf_s("%d", &input); // 3.进行判断,是继续游戏,还是退出 if (input == 1) { //4.封装一个游戏函数 game(); } else if (input == 0) { printf("退出游戏n"); } else { printf("输入错误,请重新输入n"); } } while (input); return 0; }
3 :此时想,这几行代码,如果猜错了,就不会再执行,继续执行剩下的代码,我现在希望当我猜错之后,会重新进行判断,直到猜对了,退出。所以此时需要给这几行代码加入到循环语句里面。
完整代码:
#includevoid menu() { printf("******欢迎进入游戏******n"); printf("****** 1.play ******n"); printf("****** 0.exit ******n"); } void game() { // 5.先产生一个随机数,由于产生的随机值太大,所以使返回值模100,得到0-99的余数,在+1,得到1-100的余数 int z = rand() % 100 +1; int guess = 0; // 6.输入自己心中的答案,进行判断 // 7.给判断语句加入到循环语句,可以循环判断。 while (1) { printf("输入自己心中的答案->"); scanf_s("%d", &guess); if (guess == z) { printf("猜对了n"); break; } else if (guess > z) { printf("猜大了n"); } else { printf("猜小了n"); } } } int main() { int input = 0; // 为rand产生随机种子 srand((unsigned int)time(NULL)); // 1.编写一个菜单 do { menu(); // 2.进行选择,输入一个数 printf("请进行选择(0/1)->"); scanf_s("%d", &input); // 3.进行判断,是继续游戏,还是退出 if (input == 1) { //4.封装一个游戏函数 game(); } else if (input == 0) { printf("退出游戏n"); } else { printf("输入错误,请重新输入n"); } } while (input); return 0; }



