C语言笔记-指定范围下随机数的生成

前言

此篇文章主要的目的是记录一下随机数的常用生成方法,每次我一没回去复习随机数之后就容易将知识点遗忘掉。
随机数的生成有好几种的方法,此处仅介绍其中一种我认为较方便的方法——[a,b]范围的随机数生成

一、效果

在这里插入图片描述

二、说明

[1]. 先使用srand()函数设置随机数种子

srand((int)time(NULL));

[2]. 生成范围从A~(A+B-1)范围的随机数

rand()%B+A;

你可以将rand()%B+A赋值给某个变量,则该变量就被赋值了一个随机的值,或者是在打印函数中调用输出即可。

三、示例代码

代码中的srand()和rand()函数的使用为重点,CC++ 代码已包含有必要的注释,请仔细阅读注释

[1]. C实现

/*
代码作者:小狐狸
联系QQ:1307509553
使用语言: c
原贴链接: https://blog.csdn.net/smallfox233/article/details/105081736
代码介绍:
若没有设置随机数的种子,重新生成的随机数将和上一次输出的随机数相同


生成从a~(a+b-1)的随机数赋值给Y:
1. srand((int)time(NULL))
2. Y=rand()%b+a;
*/
#include<stdio.h>
#include<stdlib.h> //srand()、rand()所需
#include<time.h>   //time()所需
int main()
{
    srand((int)time(NULL));//设置随机数种子
    while(1)
    {
        int fox;
        printf("------------------\n");
        printf("|   按0结束      |\n");
        printf("|   按1键继续    |\n");
        printf("------------------\n");
        scanf("%d",&fox);
        if(fox==0) break;
        int start,last;
        int x;
        printf("起始数 截止数:\n");
        scanf("%d%d",&start,&x);
        //起始值即为start,但是截止的值并不是rand()%b+a中b的值.
        //因为rand()%b+a中产生随机数的范围是从a到a+b-1
        //所以要生成从start到x的随机数的话
        //需要满足start=a,同时x=a+b-1,由此可以算出rand()后的b
        last=x-start+1;//计算出rand()%b+a中b的值
        if(start<0||last<0)//若范围含有小数时,运行时将会出错
        {
            printf("请输入≥0的数\n");
            continue;
        }
        printf("随机数: %d\n",rand()%last+start);//打印随机数
    }
    printf("退出系统\n");
    return 0;
}

[2]. C++实现

/*
代码作者:小狐狸
联系QQ:1307509553
使用语言: c++
原贴链接: https://blog.csdn.net/smallfox233/article/details/105081736
代码介绍:
若没有设置随机数的种子,重新生成的随机数将和上一次输出的随机数相同


生成从a~(a+b-1)的随机数赋值给Y:
1. srand((int)time(NULL))
2. Y=rand()%b+a;
*/
#include<iostream>
#include<stdio.h>
#include<stdlib.h> //srand()、rand()所需
#include<time.h>   //time()所需
using namespace std;
int main()
{
    srand((int)time(NULL));//设置随机数种子
    while(1)
    {
        int fox;
        cout<<"------------------"<<endl;
        cout<<"|   按0结束      |"<<endl;
        cout<<"|   按1键继续    |"<<endl;
        cout<<"------------------"<<endl;
        cin>>fox;
        if(fox==0) break;
        int start,last;
        int x;
        cout<<"起始数 截止数:"<<endl;
        cin>>start>>x;
        //起始值即为start,但是截止的值并不是rand()%b+a中b的值.
        //因为rand()%b+a中产生随机数的范围是从a到a+b-1
        //所以要生成从start到x的随机数的话
        //需要满足start=a,同时x=a+b-1,由此可以算出rand()后的b
        last=x-start+1;//计算出rand()%b+a中b的值
        if(start<0||last<0)//若范围含有小数时,运行时将会出错
        {
            cout<<"请输入≥0的数"<<endl;
            continue;
        }
        cout<<"随机数: "<<rand()%last+start<<endl;//打印随机数
    }
    printf("退出系统\n");
    return 0;
}

发布了21 篇原创文章 · 获赞 10 · 访问量 4551

猜你喜欢

转载自blog.csdn.net/smallfox233/article/details/105081736