一.随机数的生成
1.rand
(1)格式 int rand (void);
(2)需要头文件 stdlib.h
(3)生成伪随机数,大小以来编译器上实现,一般最大为32767,不是真正的随机数,虽然它一次可以产生不同的数,但是再运行一次就和上一次一样,正真的随机数是无法预测它下一次大小
2.srand
(1)格式 void srand(unsigned int seed);
(2)srand是用来生成随机数的,在调用rand之前先调用scand函数,通过它的参数seed来设置rand函数生成随机数的种子,那也就是说scand的种子如果是随机的,rand就可生成随机数,在生成随机数的时候又需要一个随机数那么就矛盾了
3.time
(1)格式 time_t time (time_t* timer);
(2)需要头文件time.h
(3)time的函数timer如果是非NULL,那么就将差值返回到所指内存中去,如果是NULL,那么就只返回这个时间的差值,称为时间戳
(4)一般随机数种子用时间来设置,time会返回当前日历时间,是从1970年1月1日0时0分0秒开始到现在时间的差值,单位秒,time_t是32位或64位机的整型类型
4.随机数范围
a - b的数 : a +rand()%(b-a+1)
例如100-200:1+rand()%(200-100+1)
(二)猜数字游戏
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
printf("******************\n");
printf("****1.开始游戏****\n");
printf("****2.结束游戏****\n");
printf("******************\n");
}
void game()
{
int a = rand() % 100 + 1;
int guess = 0;
int count = 5;
while (count)
{
printf("还有%d次机会\n", count);
printf("输入要猜的数字");
scanf("%d", &guess);
if (guess > a)
{
printf("猜大了\n");
}
else if (guess < a)
{
printf("猜小了\n");
}
else
{
printf("恭喜你,猜对啦\n");
break;
}
count--;
}
if (count == 0)
{
printf("猜数字失败,正确的值是%d", a);
}
}
int main()
{
int num = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择>");
scanf("%d", &num);
switch (num) {
case 1:
game();
break;
case 2:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (num);
return 0;
}