关于随机数的使用

C语言随机函数

C语言随机函数

库函数中系统提供了两个函数用于产生随机数:srand()和rand()

  • rand()函数可以生成一个[0,RAND_MAX]间的随机整数;(ISO IEC 9899 2011 (C11)标准中未规定 RAND_MAX 的具体数值。但该标准规定了RAND_MAX 的值应至少为32767。编程的时候,不应该对 RAND_MAX 的具体数值做任何假设。)
  • srand()可以被认为是为rand()的“伪随机数”的结果指定一个固定的序列,若未引用srand()函数,则程序默认srand()括号中的值为1;如果引用的话,srand()括号中不能为空;
  • 为了确保生成的随机数为尽可能符合概率上的随机,需要调用一个函数time()(是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型),这个函数包含在头文件time.h里,在生成随机数的调用下需强制类型转换为(unsigned)time(),后面一个括号中必须填入(unsigned)time(NULL)或
    (unsigned)time(0)。
  • n=rand()%(Y-X+1)+X; /n为X~Y之间的随机数/

练习题

1、生成一个10位数的QQ号

C实现程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

//10的m次幂
int f10m(int m)
{
    if(m<0)
    return -1;

    int mul=1;
    int i;
    for(i=1;i<m+1;i++)
    {
        mul*=10;
    }
    return mul;
}
int myrand()
{
    int a[10];
    srand(time(NULL));
    int randnum=0;
    int i;
 
    for(i=0;i<10;i++)
    {
        a[i]=rand()%10;
        while(0==a[0])
  		a[0]=rand()%10;
 		randnum+=a[i]*f10m(len-1-i);
     }
	   return abs(randnum);
}


int main()
{
	printf("%d\n",myrand());
    return 0;
}

2、 猜数小游戏

随机生成一个0~100的数 猜一个数直到猜对为止

C实现程序:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>


#define MAX  100

//10的m次幂
int f10m(int m)
{
    if(m<0)
    return -1;

    int mul=1;
    int i;
    for(i=1;i<m+1;i++)
    {
        mul*=10;
    }
    return mul;
}

int  array2integer(int*array,int len,int flag)
{
    if(NULL==array)
    return -1 ;
    int integer=0;
    int i;
    if(flag)  //数组第一位为整数最高位
    for(i=0;i<len;i++)
    {
        integer+=array[i]*f10m(len-1-i);
    }
    else     //数组第一位为整数最高位
    for(i=0;i<len;i++)
    {
        integer+=array[i]*f10m(i);
    }
    return integer;
}

//  随机生成n位正整数 n<11
int myrand_n_bits(int n)
{
    int a[n];
    srand(time(NULL));
    int i;
    for(i=0;i<n;i++)
    {
        a[i]=rand()%10;
    }
	while(0==a[0])
		a[0]=rand()%10;
	int randnum=array2integer(a,n,1);
    return abs(randnum);
}

//生成一个0~100的随机数  猜数小游戏
void game_myrand_0_100()
{
    int a[3];
    srand(time(NULL));
	int rand_num;
	while(rand_num>100)
	{
		int i;
		for(i=0;i<3;i++)
		{

			a[i]=rand()%10;
		}
		int randnum=array2integer(a,3,0);
		rand_num=abs(randnum);
	}
	int n;
    while(1)
    {
        scanf("%d",&n );
        if(n<rand_num)
        {
            printf("%d is less than randnum,please input again!\n", n);
        }
        if(n>rand_num)
        {
            printf("%d is more than randnum,please input again!\n", n);
        }
        if(n==rand_num)
        {
            printf("good job !   you are great ! \n");
            break;
        }
    }
}





int main()
{

    game_myrand_0_100();
    return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值