: 如何产生指定范围的随机数
: 利用分支,循环的知识点
2.1): C语言提供了一种产生随机数的函数——rand,rand函数会返回一个伪随机数,这个随机数的范围在 0~RAND_MAX之间,RAND_MAX的大小是依赖编译器实现的,但大部分编译器上是32767
2.2) : rand函数调用需引入头文件:#include
2.3)
#include
#include
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 的参数(timer) 是NULL , time 函数返回的这个时间差叫做时间戳
#include
#include
#include
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;
}
每次运行结果
生成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;
主函数对应的内容:
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
#include
#include
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
#include
#include
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;
}