【C语言】:如何生成随机数?-一篇文章讲懂随机数(附猜数字游戏)

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:最后,希望这篇文章对你有帮助,谢谢!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庆庆知识库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值