C语言:如何生成随机数?-一篇文章讲懂随机数(附猜数字游戏)
【1】rand()函数的引入:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int a;
a = rand();
printf("%d", a);
return 0;
}
运行一下计算机,是不是随机打印了一个数,但多运行几次,你会发现每一次打印的数都是一样的,并没有体现随机性。代码中起到产生随机数作用的语句就是rand(),但是只有rand()是不够的,我在它上面加上srand((unsigned)time(NULL))就可以了。
【2】time()函数
-体现时间的函数—头文件#include<time.h>--给time传递空指针
【3】srand()的引入:
srand()是用来初始化随机数种子的,通过当前时间来获得这个随机种子。因为time的值每时每刻都不同,每时每刻都在变,所以产生的随机数也不同。然后调用rand(),它会根据提供给srand()的种子值返回一个随机数。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
srand((unsigned)time(NULL));
a = rand();
printf("%d", a);
return 0;
}
【4】如何生成0~99的整数呢?
答:只要求出随机产生的数除以100的余数就可以了。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
srand((unsigned)time(NULL));
a = rand()%100;
printf("%d", a);
return 0;
}
【5】如何生成更大的随机数呢?
答:只要求出随机产生的数乘以100的余数就可以了。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
int ret = rand()*100;
printf("%d", ret);
return 0;
}
【6】产生随机数范围:[m,n]
int a=m+rand()%(n-m+1);
【7】猜数字游戏:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
int ret = rand() % 100 + 1;
int guess,count;
count = 6;//我们利用count来计数,每猜一次就执行一次count--,
system("color f3");//f-亮白色背景;3蓝色前景
while (1)
{
count--;
printf("请输入你猜的数字\n");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了,还有%d次机会\n",count);
}
else if (guess > ret)
{
printf("猜大了,还有%d次机会\n",count);
}
else if (guess == ret)
{
printf("恭喜你,猜对了!!\n");
break;
}
if (count == 0)
{
printf("没有机会了");
break;
}
}
return 0;
}
每个随机数都有它特定的地址:
【8】一维数组生成连续随机数地址+随机数;
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
srand((unsigned)time(NULL));
int arr[6];
int i;
for (i = 0; i < 6; i++)
{
arr[i] = rand() % 100 + 1;
printf("%d ", arr[i]);
}
printf("\n");
printf("---地址-----随机数---\n");
for (i = 0; i < 6; i++)
{
printf("%d %d\n", arr + i, *(arr + i));//通过原数组名和元素序号计算地址
}
return 0;
}
【9】总结:
1:注意!!!
srand((unsigned)time(NULL));一定要放在生成的随机数前面!
srand()是随机数种子—只有种子播下了才能结出果实。
2:让我对随机数的产生有了更加清楚的认知,一步理清了怎样产生随机数,以及起srand()和rand()的使用方法。
3:在一维数组输出随机数时,arr[i]与*(arr+i)是等价的,此内容呼应指针部分
4:最后,希望这篇文章对你有帮助,谢谢!