前言
相信我们每一个人都喜欢玩游戏,对我来说学习C语言等最大的乐趣就是运用自己所学的知识来编写一些简单的小游戏,猜数字游戏对于C语言初学者来说没有任何难度,只要你掌握了一些分支语句和循环语句就足够了,唯一一个难点就是随机数的生成,好了,我们来看看猜数字游戏的代码吧!
猜数字游戏(数字产生在1—100之间)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//打印菜单函数
void menu()
{
printf("***************************************\n");
printf("**** 1.play 0.exit ******\n");
printf("***************************************\n");
}
//猜数字游戏函数
void game()
{
int num = 0;
int input = 0;
num = 1+rand()%100;//生成随机值,随机值在1-100之间
while (1)
{
printf("请猜数字:");
scanf("%d", &input);
if (input == num)
{
printf("恭喜你猜对了!\n");
break;
}
if (input > num)
{
printf("猜大了!\n");
}
if (input < num)
{
printf("猜小了!\n");
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//设置随机数种子
do//用do..while语句保证菜单至少打印一次
{
menu();
printf("请选择:");
scanf("%d", &input);
switch(input)
{
case 1://选择1开始游戏
game();
break;
case 0://选择0结束游戏
break;
default://输入不是1或者0提示输入错误,重新输入
printf("输入错误!请重新输入!\n");
break;
}
} while (input);
system("pause");
return 0;
}
C语言中实现随机数产生算法
1.time()函数的用法
头文件:time.h
定义函数:time_t time(time_t *timer);
函数说明:此函数会返回从公元 1970 年1 月1 日的UTC 时间从0 时0 分0 秒算起到现在所经过的秒数。
返回值:成功则返回秒数,失败则返回((time_t)-1)值。
参数说明:timer=NULL时,得到机器日历时间,time_t是一个long整型
对于这个函数来说,如果已经声明了参数t,那么可以从参数t返回现在的日历时间,同时也可以通过返回值返回现在的日历时间。
如果参数为空,函数只通过返回值返回现在的日历时间。
int main()
{
time_t t;
time(&t);
printf("%ld ", t);//time_t是长整型,所以打印的时候要用ld格式
time_t t1;
t1=time(NULL);
printf("%ld ", t1);
system("pause");
return 0;
}
对于上面的代码来说,两次打印出来的结果是一样的,所以time(&t)中,变量t中存放当前的日期和时间(相当于函数返回值)。
2.rand()函数和srand函数()
库函数中系统提供了两个函数用于产生随机数:srand()和rand(),定义在stdlib.h。 原型为:
函数一:int rand(void);
从srand (seed)中指定的seed开始,返回一个[0, RAND_MAX(0x7fff)]间的随机整数。
函数二:void srand(unsigned seed);
参数seed是rand()的种子,用来初始化rand()的起始值。
c语言中,rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数。是根据一个数(可以称之为种子)为基准以某个递推公式推算出来的一系列数,当这一系列数很多的时候,就符合正态分布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是确定的,除非你破坏了系统。为了改变这个种子的值,c提供了srand()函数。
在调用rand()函数产生随机数之前,必须先利用srand()设置好随机数种子,如果没有设置种子,rand()在调用的时候会自动设随机数种子为1.
因此,可以用下面的方式产生不可预见的随机序列:
srand((unsigned int)(time(NULL))
因为每一次运行程序的时间是不同,所以无论什么时候都可以给srand()提供一个新的种子,从而进一步“随机化”rand()输出的结果。
看看下面代码,体会一下如何生成随机数:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int i = 10;
int num = 0;
srand((unsigned int)time(NULL));//设置种子
while (i)
{
num =1+ (int)(100.0*rand() / (RAND_MAX + 1.0));//rand()除以随机数最大值加1,结果为[0,1)的小数,再乘以100同时取整再加1就是[1,100]
printf("%d ", num);
num =1+ rand() % 100;//rand()%100结果就是随机数除以100后所得的余数再加1,即限定随机数的范围为[1.100]
printf("%d ", num);
i--;
}
system("pause");
return 0;
}
以上就是我总结的C语言中生成随机数的算法,如果有什么漏洞和不足,还望各路大神多多指点………..