计算机会随机地给出0~99之间的一个整数,你能否猜出这个数呢?每猜一次,计算机都会告诉你猜的数是大了还是小了,直到你猜出这个数为止。
首先我们需要解决的第一个问题就是如何让计算机随机地产生一个整数,这个很简单:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
a = rand();
printf("%d", a);
system("pause");
return 0;
}
运行一下,计算机是不是随机打印了一个数?但是多运行几次你就会发现,每次打印的数都是一样的,并没有体现随机性。上面的代码中起到产生随机数作用的语句就是rand( ),但是只有rand( )是不够的,我们在rand( )前面加上srand((unsigned)time(NULL))就可以了,试一试吧,完整的代码如下。注意,这里用到了time( )函 数,因此要加上#include 才行。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a;
srand((unsigned)time(NULL));
a = rand();
printf("%d", a);
system("pause");
return 0;
}
srand( )是用来初始化随机种子数的,这里我们通过当前时间来获得这个随机种子。time的值每时每刻都不同,所以种子不同,产生的随机数也不同。然后调用rand( ),它会根据提供给srand( )的种子值返回一个随机数(在啊哈C中为0~32767)。
那么如何生成0~99的整数呢?很简单,只要求随机产生的数除以 100的余数就可以了:
接下来的问题,就是你每输入一个数,就让计算机去判断是大了还是小了,直到猜对为止。
输入数据我们可以用scanf语句,判断大小我们可以用if语句。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a, b;
srand((unsigned)time(NULL));
a = rand()%100;
scanf("%d", &b);
if(b>a)
printf("大了,请继续\n");
if(b<a)
printf("小了,请继续\n");
if(b==a)
{
printf("恭喜你答对了\n");
}
system("pause");
return 0;
}
运行上面的代码你会发现,我们只猜了一次就不能猜了,在这里我 们用while循环来解决这个问题。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a, b;
srand((unsigned)time(NULL));
a = rand()%100;
while(1)
{
scanf("%d", &b);
if(b>a)
printf("大了,请继续\n");
if(b<a)
printf("小了,请继续\n");
if(b==a)
{
printf("恭喜你答对了\n");
break;
}
}
system("pause");
return 0;
}
在上面的代码中,我们使用while(1)让程序进入无限循环中,然后当你猜对时,也就是a==b时,用break;来及时退出循环。
我们可以让这个程序变得更有趣一点——限定猜数的次数。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a, b, sum;
sum=6;
srand((unsigned)time(NULL));
a = rand()%100;
while(1)
{
sum--;
scanf("%d", &b);
if(b>a)
printf("大了,还剩下%d次机会,请继续\n", sum);
if(b<a)
printf("小了,还剩下%d次机会,请继续\n", sum);
if(b==a)
{
printf("恭喜你,答对了!\n");
break;
}
if(sum==0)
{
printf("已经没有机会了,请重新开始吧!\n");
break;
}
}
system("pause");
return 0;
}
在上面的代码中,我们用sum来进行计数。初始的时候sum=6,表示有6次猜的机会,然后每猜一次就执行sum--,直到sum为0,全部机会 用完,程序结束。
更进一步,动手试一试
想一想,如何生成一个1~20 000000的随机数?