<>一.随机数的生成
<>二.猜数字游戏的实现
<>1.构思 : 如何产生指定范围的随机数 : 利用分支,循环的知识点 <>2. rand函数 2.1):
C语言提供了一种产生随机数的函数——rand,rand函数会返回一个伪随机数,这个随机数的范围在
0~RAND_MAX之间,RAND_MAX的大小是依赖编译器实现的,但大部分编译器上是32767 2.2) :
rand函数调用需引入头文件:#include<stdlib.h> 2.3) #include<stdio.h> #include<stdlib.h> int
main() { printf("%d\n", rand());//调用rand函数 printf("%d\n", rand()); printf("%d\n"
, rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()
); return 0; }
第一次运行结果
第二次运行结果
解释:其实每次程序运行结果都是一样的,原因是——rand函数生成的随机数是伪随机数,而伪随机数并不是真正的随机数,rand默认的生成随机数的种子是1.
所以要想让程序每次运行结果不同,就需改变种子的值。
2.4): srand 是用来初始化随机数的生成器
srand 原型 void srand(unsigned int seed);
程序在调用rand函数前先调用srand函数,借助srand函数的参数来设置生成rand 函数的随机数的种子
2.5): time
time 函数原型 time_t time (time_t* timmer);
time 函数的调用需引入头文件 #include<time.h>
当 time 的参数(timer) 是NULL , time 函数返回的这个时间差叫做时间戳
#include<stdio.h> #include<stdlib.h> #include<time.h> int main() { srand((
unsigned int)time(NULL)); printf("%d\n", rand()); printf("%d\n", rand()); printf
("%d\n", rand()); printf("%d\n", rand()); printf("%d\n", rand()); printf("%d\n",
rand()); return 0; }
每次运行结果
2.6)设置随机数的范围
生成0~99 之间的随机数 rand()%100; // %100 的余数是0~99 生成0~100 之间的随机数 rand()%100 +1; //
%100 的余数是0~99 +1,对应的范围是1~100
综上,要产生 a~b这个范围的随机数
a + rand() % (b - a) + 1; <>3.猜数字游戏的实现 主函数对应的内容: int main() { srand((unsigned
int)time(NULL)); int input = 0;//表示:玩家输入的数字 do { menu();//调用菜单 printf("请选择:");
scanf("%d", &input);//键盘输入 switch (input) { case 1: game();//调用game函数 break;
case 0: printf("游戏结束"); break; default : printf("输入错误,请重新输入"); }while(input) }
return 0; } game 函数对应的内容 void game() { int r = rand() % 100 + 1;//产生1~100之间的随机数
int guess = 0;//表示每次 玩家猜的数字 while (1) { printf("请输入要猜的数字\n"); scanf("%d",&guess)
; if (r > guess) { printf("猜小了\n"); } else if (r < guess) { printf("猜大了\n"); }
else { printf("Good! 猜对了\n"); } } } menu对应的内容 void menu() { printf(
"************************\n"); printf("****** 1.play ******\n"); printf("*****
0.exit ******\n"); printf("************************\n"); } 完整代码 #include
<stdio.h> #include<stdlib.h> #include<time.h> void menu() { printf(
"************************\n"); printf("****** 1.play ******\n"); printf("*****
0.exit ******\n"); printf("************************\n"); } void game() { int r =
rand() % 100 + 1;//产生1~100之间的随机数 int guess = 0;//表示每次 玩家猜的数字 while (1) { printf(
"请输入要猜的数字\n"); scanf("%d",&guess); if (r > guess) { printf("猜小了\n"); } else if (
r< guess) { printf("猜大了\n"); } else { printf("Good! 猜对了\n"); } } } int main() {
srand((unsigned int)time(NULL)); int input = 0;//表示:玩家输入的数字 do { menu();//调用菜单
printf("请选择:\n"); scanf("%d", &input);//键盘输入 switch (input) { case 1: game();
//调用game函数 break; case 0: printf("游戏结束\n"); break; default : printf(
"输入错误,请重新输入\n"); } } while (input); return 0; }
限制猜的次数,比如五次猜不出即失败
#include<stdio.h> #include<stdlib.h> #include<time.h> void menu() { printf(
"************************\n"); printf("****** 1.play ******\n"); printf("*****
0.exit ******\n"); printf("************************\n"); } void game() { int r =
rand() % 100 + 1;//产生1~100之间的随机数 int guess = 0;//表示每次 玩家猜的数字 int count = 5;
while (count) { printf("你还有%d次机会\n", count); count--; printf("请输入要猜的数字\n");
scanf("%d",&guess); if (r > guess) { printf("猜小了\n"); } else if (r < guess) {
printf("猜大了\n"); } else { printf("Good! 猜对了\n"); } } if (count == 0) { printf(
"你失败了,正确数是 %d\n", r); } } int main() { srand((unsigned int)time(NULL)); int
input= 0;//表示:玩家输入的数字 do { menu();//调用菜单 printf("请选择:\n"); scanf("%d", &input);
//键盘输入 switch (input) { case 1: game();//调用game函数 break; case 0: printf("游戏结束\n"
); break; default : printf("输入错误,请重新输入\n"); } } while (input); return 0; }