【C语言学习】

随机数
C语言产生随机数要用到rand()函数和srand()函数。random()函数不遵循ANSI C 标准,再gcc、VC等编译器下不能通过编译。
(1)若是为了生成一个无范围限制的随机数,只需用rand()函数即可。rand()函数会返回一个随机数,范围是0~RAND_MAX。RAND_MAX定义在stdio.h中,其值为2147483647。
(2)如果要生成某个范围内的随机数,一般分两种情况:
第一种是从0开始的随机数,比如要生成0~10的随机数,利用rand()函数对11取余,即rand()%11;
第二种是不从0开始的随机数,比如要生成范围是5-25的随机数,利用rand()函数对25-5+1=21取余再加上5,即rand()%21+5。
(3)以上两种情况生成的随机数都是一次性的,以后无论再运行多少次,输出结果都将与第一次相同。为了使程序在每次执行时都能生成一个新序列的随机值,需要为随机数生成器提供一粒新的种子。此时需要用到srand()函数,该函数可以为随机数生成器播散种子。只要种子不同,rand()函数就会产生不同的随机数序列。srand()称为随机数生成器的初始化器。其函数原型为:

void srand (unsigned int seed);

该函数中的参数seed是种子,用来初始化rand()的初始化rand()的起始值。其功能为:从srand(seed)中所指定的seed开始,返回一个在[0,RAND_MAX]之间的随机整数。rand()函数是真正的随机数产生器,srand()函数为rand()函数提供随机数种子。srand((unsigned int) time (NULL));表示使用系统定时器的值作为随机数种子。
系统在调用rand()函数之前都会自动调用srand()函数,如果用户在调用srand()函数,如果用户在调用rand()函数之前没调用过srand()函数,那么系统会默认将1作为伪随机数的初始值。如果用户在调用rand()函数之前曾经调用过srand()函数,并给参数seed赋了一个值,那么rand()函数就会将此值作为产生随机数的初始值。如果给seed一个固定值,那么每次rand()函数产生的随机数都将是一样的。
我们通常使用系统时间来进行初始化,即使用time()函数获取系统时间,它的返回值是time_t类型的,要转化为unsigned int 类型之后再传给srand()函数。另外,如果使用time(),还需要加入头文件“time.h”

在使用time()函数时,其函数一般为NULL,即直接传入空指针即可。如果觉得时间间隔太小,可以乘上合适的整数,比如srand((unsigned int)time(NULL)*5).

[案例7]掷骰子

小时候玩游戏经常会用到骰子,骰子占据了童年记忆的一部分,它虽然很小,但是作用极大。今天也要玩一个关于掷骰子的游戏,规则为: 一盘游戏中,两人轮流掷骰子5次,并将每次掷出的点数累加,5局之后,累计点数较大者获胜,点数相同则为平局。案例要求通过编程算出50盘之后的胜利者( 50盘中赢的盘数最多的,即最终胜利者)。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
	srand((unsigned int)time(NULL));
//	rand();
	int d1,d2,c1,c2,i,j;
	for(i = 1; i <= 50; i++)
	{
		d1 = d2 = 0;
		for(j = 1; j <= 6; j++)
		{
			d1 = d1 + rand()%6 + 1;
			d2 = d2 + rand()%6 + 1;
		}
		if(d1 > d2)		
			c1++;
		else if(d1 < d2)	
			c2++;
	}
	if(c1 > c2)
	{
		printf("\n The first win.");
	}
	else
	{
		if(c1 < c2)
			printf("\n The second win.");
		else
			printf("\n They tie.");
	}
	return 0; 
}
		
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值