C语言随机数的生成---入门篇

一.rand函数和srand函数

在c语言中比较常用的随机函数就是rand函数,它可以随机的产生0~rand_max的随机数,定义类型不同,最大值也不同,rand函数包含在头文件stdlib.h中。

#include <stdio.h>
#include <stdlib.h>
int main()
{
       int a=rand();
       printf("%d",a);
       return 0;
}

你会发现每次产生的随机数都是相同的,因为rand函数产生的随机数是伪随机数,是根据一个数按照某个公式推算出来的,这个数我们称之为“种子”,但是这个种子在系统启动后就是一个定值。

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

如何产生随机数

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

int main(int argc, const char *argv[])
{
//	long t = time(NULL);//因为时间是不断变化,每次运行程序,时间变化了,随机的种子就变化了,序列就变化了
//	srand(t);
	srand(time(NULL)); //初始化随机种子是
	while(1)
	{
		int num = rand();//如果直接调用rand函数,得到的是伪随机数
		printf("num is %d\n",num % 35 + 1);
		sleep(1);
	}
	return 0;
}	

经典例题!!

1.随机生成一个1 - 10的数,让对方猜5次,如果猜对了,提示"congratulations !!"  如果猜错了,提示"bigger" 或 "smaller"

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

int main(int argc, const char *argv[])
{
	//1.要想生成随机数,必须先初始化随机种子
	srand(time(NULL));
	//生成一个随机数,给别人猜
	int num = rand() % 10 + 1;
	int a,i;//用来保存输入猜的数
	for(i = 0; i < 5; i++)
	{
		scanf("%d",&a);
		if(a == num)
		{
			printf("恭喜你,猜对了!!\n");
			break;
		}
		else if(a > num)
		{
			printf("大了!!\n");
		}
		else // a < num 
		{
			printf("小了!!\n");
		}
	}
	return 0;
}	

2.中国福利彩票35选7
    
        随机生成1-35内不重复的7个数字
        然后让用户选择自己的一组号码
        中奖规则:猜中
        
        7个500万
        6个100万
        5个1万
        4个5000
        3个500
        0,1,2个没中奖
        
    //1. 生成7个中奖号码 int lotteryNum[7]//注意生成7个中奖号码,有可能重复, 中奖号检测去重
    //2. 输入7个数,买彩票 int myMum[7]; //手动输入7个数
    //3. 统计中奖个数 
    //4. 打印输出中奖信息

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

int main(int argc, const char *argv[])
{
	int i,j;
	int lotteryNum[7];//保存7个中奖号码
	int myNum[7];//保存购买的7个中奖号码
	int count = 0;//用来统计中奖号码的个数
	srand(time(NULL));//初始化随机种子
	//1.生成7个随机的中奖号码
	for(i = 0; i < 7; i++)
	{
		lotteryNum[i] = rand() % 35 + 1;
		for(j = 0; j < i; j++)//j代表,用当前刚生成的lotteryNum[i]与前面的已经生成的每一个号码做比计
		{
			if(lotteryNum[i] == lotteryNum[j])//lotteryNum[i]代表的刚生成的号码
			{
			//	printf("出现一次重复号码!!\n");
				i--; //i-- 上面的再i++,i的值不变,重新在该位置生成一个随机数
				break;
			}
		}
	}
	//2.输入7个数,购买彩票
	for(i = 0; i < 7; i++)
		scanf("%d",&myNum[i]);
	//3.统计中奖个数
	for(i = 0; i < 7; i++)
	{
		for(j = 0; j < 7; j++)
		{
			if(lotteryNum[i] == myNum[j])
			{
				count++;
			}
		}
	}
	//4.根据中奖个数兑奖
	printf("count is %d\n",count);
	switch(count)
	{
	case 7:
		printf("500W!!\n");
		break;
	case 6:
		printf("100W!!\n");
		break;
	case 5:
		printf("10W!!\n");
		break;
	case 4:
		printf("5000!!\n");
		break;
	case 3:
		printf("500!!\n");
		break;
	default:
		printf("重在参与!!\n");
	}

	//调试程序
	printf("中奖号码:");
	for(i = 0; i < 7; i++)
		printf("%d ", lotteryNum[i]);
	printf("\n");
	
	printf("购买号码:");
	for(i = 0; i < 7; i++)
		printf("%d ", myNum[i]);
	printf("\n");
	
	printf("中奖个数%d个!!\n",count);

	return 0;
}	

接下来我会继续补充相关知识~~刚刚开始!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值