目录
输和赢之间没有绝对的界限,你只要不断的向前走,低谷也有可能会变成高点。
-- 《全职高手》
1题目
写⼀个猜数字游戏
游戏要求:
电脑⾃动生成1~100的随机数
玩家猜数字,猜数字的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束
2相关函数
2.1rand
rand函数用于产生随机数,使用时要包含stdlib.h头文件。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
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。
要生成a~b的随机数
a+rand()%(b-a+1);
整除的数说明rand()%a的结果都是属于0~a-1的,生成大于a的直接用a+rand()%a即可。小于b的话,rand()%(b-a+1)的结果属于0~b-a的,a再加上这个数值就是小于b的范围。比如要生成472~500的随机数,计算除500与472的差值然后+1,用随机数整除得到的就是0~28范围内的,已知472与500的差值为28,直接整除后得到数值为0~27,所以要加1,即rand()%(500-472+1)+472。
printf("%d\n", rand()%100);//0~99
printf("%d\n", rand()%100+1);//1~100
printf("%d\n", rand()%100+100);//100~199
printf("%d\n", rand()%100+101);//100~200
printf("%d\n", rand() % (500-472+1) + 472); // 472~500
2.2srand
使用rand函数前调用srand函数改变参数seed,种子在改变,随机数序列也会发生改变。srand函数不需要频繁调用,一次程序运行只需要调用一次。
void srand (unsigned int seed);
2.3time
#include <time.h>
time_t time(time_t *t);
运行程序时常以时间为种子,因为时间时刻发生变化。此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t并非空指针的话,此函数也会将返回值存在t指针所指的内存。使用时要包含<time.h>头文件。返回值是time_t类型的,本质上是32位或64位整型。time函数参数timer为空指针时返回的时间差叫做时间戳。
有两种使用方法,一种时传递空指针
time_t t1;
t1 = time(NULL);//t1=time(0);
printf("%ld", t1);
另一种将变量的地址传递给time参数,函数自动把结果传递给变量,不需要另外的赋值。
time_t t1;
time(&t1);
利用time函数返回值来设置种子,并强制转换为unsigned int类型,由此产生随机数,代码如下
#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());
return 0;
}
这样多次运行产生的数据都不一样。
3示例代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned int)time(NULL));//随机种子
int num = rand() % 100 + 1;//猜的数字范围1~100
for (int i = 0; i < 5; i++)//猜5次
{
int guess = 0;
printf("请输入你猜的数字\n");
scanf("%d", &guess);
if (num < guess)
printf("猜大了\n");
else if (num > guess)
printf("猜小了\n");
else
printf("恭喜你猜中啦!\n");
}
printf("对不起,您的机会已经用完啦\n");
printf("正确答案是%d\n", num);
return 0;
}