C语言生成随机数

目录

概念:

具体运用

实战

1.只使用rand()函数

2.使用rand()函数和srand() 函数


概念:

       在实践中,找到真正的随机数字是困难的。数字计算机只能在⼀个限定的范围内和有限的精度下去处理数字。在⼤多数情况下,最好的⽅法是产⽣伪随机数,这不是真正意义的随机数,它的意义是:单次产⽣的数列是⽆法预测的,但是每次都会⽣成同样的⼀组随机数列。 

        C语⾔的标准函数库提供有⼀个随机数函数, rand()函数,它返回0 ~ rand_max均匀分布的伪随机整数。rand()函数不接受参数默认以1为种⼦(即起始值),它总是以相同的种⼦开始,所以形成的伪随机数列也相同,不是真正的随机。这是有意设计的,⽬的是为了便于程序的调试。另⼀个函数是 srand()可以使⽤该函数指定不同的数(⽆符号整数)为种⼦。但是如果种⼦相同,么伪随机数列也相同。有两种⽅法可以采⽤:⼀种是让⽤户输⼊种⼦,但效果不是很理想;另⼀种⽐较想的是采⽤变化的数,常⽤时间来作为随机数⽣成器的种⼦。这样,种⼦不同,产⽣的随机数也就不同。rand 函数包含在头文件stdlib.h中。

rand()函数没有参数,它返回⼀个从0到最⼤数之间的随机数。要⽣成⼀个[ab]范围内的随机数,可以表⽰为:

int n=a+srand()%(b-a+1);

要想每次产生的随机数不一样,那么,我们就要用到 srand 函数。

srand() 函数原型是:void srand (usigned int seed);
rand() 产生随机数时,如果用srand(seed) 播下种子之后,一旦种子相同,产生的随机数将是相同的。当然很多时候刻意让rand() 产生的随机数随机化,用时间作种srand(time(NULL)) ,这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。通常可以利用 time(0)getpid(0) 作为seed的返回值,下面我们只介绍用time(0)实现随机数。此外需要添include<time.h>头文件

srand((unsigned)time(NULL));   //用时间作种子
srand((unsigned)getpid(NULL)); 

具体运用

#include <stdio.h>
#include <stdlib.h>//包含转换和存储头⽂件 #include <time.h>//包含⽇期和时间处理头⽂件 #define max 100

int main() {
    srand((unsigned)time(NULL));//随机数播种函数
    for (int i = 0; i < 20; i++)//产⽣20个随机数
        printf("%d\n", rand() % max);//设定随机数范围并输出
}    

实战

描述:系统随机生成一个随机数,用户通过键盘输入与之匹配,通过提醒最后找到准确答案。

1.只使用rand()函数

#include<stdio.h>
#include <stdlib.h>
int main(){
	
	int myguess;
	unsigned int ra = rand()%100;
	printf("%d",ra);
	while(1){
		printf("pls guess:");
		scanf("%d",&myguess);
		if(myguess > ra){
			printf("your input big\n");
		}else if(myguess <ra){
			printf("your input little\n");
		}else if(myguess == ra){
			printf("your guess success\n");
			break;
		}
	}
	
}

运行结果

运行结果每次都一样,不是真正意义上的随机数。 

2.使用rand()函数和srand() 函数

#include<stdio.h>
#include <stdlib.h>
#include<time.h>
int main(){
	
	int myguess;
   //srand((unsigned)getpid(NULL)); 
	 srand((unsigned)time(NULL));
	 int ra = rand()%100;
	printf("%d",ra);
	while(1){
		printf("pls guess:");
		scanf("%d",&myguess);
		if(myguess > ra){
			printf("your input big\n");
		}else if(myguess <ra){
			printf("your input little\n");
		}else if(myguess == ra){
			printf("your guess success\n");
			break;
		}
	}
	
}

运行结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

简单^不简单

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

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

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

打赏作者

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

抵扣说明:

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

余额充值