c语言入门:[23]随机数

随机数我们在编程中还是比较常用的,比如随机生成验证码、随机彩票号码等。只是要想无任何规律地产生出一些数字,做到真正意义上的随机实在是太难了,既然是由我们程序代码产生的数那肯定是有一些规则的,所以称为伪随机。

现在我们就以一个规则来产生一系列0~9的数,请看下面的代码:

int main()

{

int a,b,i;

a=1;

for(i=1;i<=100;i++)

{

a=a*214013+2531011;

b=a%10;

printf("%d ",b);

}

printf("\n");

}

你运行一下上面的代码,是不是产生了100个0~9的数,而这些数字看起来是随机的。下面对代码做下解释:

变量a的值的改变是关键,a初始值是1,每循环一次执行一次a=a*214013+2531011;执行一次a的值就会变化,当然如果a*214013+2531011的运算结果超过了整数能够表示的数的范围话,其运算结果就不准确了也有可能结果是一个负的整数,但这并不影响我们改变a的值得目的。这里我们想产生0~9之间的数那我们就用变化后的a的值跟10取余数,就是代码中的b=a%10。运行一下看到下图所示结果。

这个数字序列看起来是随机的了,已经达到了我们的目的。可是如果多次运行这个程序你就会发现每次的结果都是上面的一组数,数字序列没有变化。这是因为每次运行程序变量a的初始值都是1,而a的值又按照a=a*214013+2531011;相同的规则变化,所以每次运行都得到一组相同的数。我们的规则只能是一个,那就在a的初始值上做文章呗,我们可以把a的初始值设置为当前系统时间,这样每次运行程序a的初始值不一样得到的一组数自然就不一样了,那我们还得学习怎么取得当前系统时间,time函数就可以满足我们的要求。

time函数存在于time.h头文件中,请看下面的代码

#include "time.h"

int main()

{

long int t=time(0);

printf("%ld\n",t);

}

1、long int 就是长整型,在变量与运算符初探那节我介绍过int类型的范围,这里由于要处理的整数比较大int类型可能范围不够用所以time函数的返回值是一个长整型,在printf里输出长整型就用“Ld”输出,L大小写都没关系。其实在这个版本的cfree里int和long int 都是一样的

2、time函数有一个返回值,返回值是一个长整型的数即表示当前机器时间的数字,这个数字是指从1970年1月1日0时0分0秒开始算起到当前电脑时间为止期间一共经历了多少秒。

2、time函数有一个参数,这个参数可以为空,这里参数位置写0就表示参数为空,知道scanf吗呵呵很熟悉吧,int a;scanf("%d",&a);知道什么意思吗,那 long int a; time(&a); 也差不多,就是把当前机器时间赋值给了a

3、输出后你会发现是一个数字,下图是我运行后的输出结果:

既然回了time函数那就把我们之前的代码略做修改下吧

#include "time.h"

int main()

{

int a,b,i;

a=time(0);

for(i=1;i<=100;i++)

{

a=a*214013+2531011;

b=a%10;

printf("%d ",b);

}

printf("\n");

}

怎么样,每次运行结果都不一样了吧。

当然有现成的函数来完成随机数功能,原理跟上面的代码查不多。请看下面的代码

#include

#include

int main()

{

int b,i;

srand(time(0));

for(i=1;i<=100;i++)

{

b=rand()%10;

printf("%d ",b);

}

printf("\n");

}

其中的 srand(time(0)); 是初始化随机种子。

rand()负责产生一个随机整数

说白了就是srand函数负责初始化一个变量,rand函数负责用一个运算规则改变这个变量的值。

你可以认为我们之前的代码中的a就是这个变量,srand函数相当于a=time(0);的作用rand函数相当于a=a*214013+2531011;的作用,只是其中的运算规则可能跟我写的不一样罢了。

当然srand函数和rand函数共同操作了一个变量,我们管这样的变量叫全局变量下节介绍吧。

另外我留2个练习

1、产生10个100~200之间的随机数你会不会

2、随机产生一注双色球号码

感兴趣的可以把代码发在评论里

(0)

相关推荐

  • 简单vb语言入门做到用电脑说出你想说的话

    简单易懂的vb语言入门,在工作生活中有时一句话要说多遍才能引起注意,既枯燥又影响听者心情,不妨用下面的小方法,使用一个脚本文件在桌面,双击一下就能完成电脑替你说话的想法了.而且用在表白时刻也是不错的选 ...

  • php语言基础入门23条你知道几条?

    操作方法 01 小编今天花了时间整理了一下很多年没有碰了的php,mark一下,高二时学的. 02 1. 代码嵌在<?php  ?>内 03 2.输出函数echo,相当于js中的docum ...

  • C语言入门到精通

    C语言是一门通用计算机编程语言,应用广泛.设计目标是提供一种能以简易的方式编译,是一门很实用的编程入门语言,很多小伙伴都想学习C语言,却迫于无赖,找不到好的方法,那我就给大家讲讲我的吧,希望我的绵薄之 ...

  • c语言如何生成随机数

    随机数最重要的特性是:它所产生的后面的那个数与前面的那个数毫无关系.c语言生成随机数在各方面运用还是比较广泛的. 操作方法 01 首先打开我们使用的c语言编译器,小编使用的是visual stdio ...

  • C语言入门基础

    这篇文章简单介绍C语言,以及其入门所需要学习的几个方面.以及一个最简单的入门让你程序. 操作方法 01 1.C语言,属于一种高级计算机语言,按语言分类的话,它区别于机器语言,以及汇编语言. 02 2. ...

  • c语言入门:[18]字符串初探

    操作方法 01 以前我们学习中只重点使用了整型数据.浮点数据和字符数据,今天我们介绍另一种数据字符串,从名字上你就可以知道字符串是由若干个字符串联起来组成的,在c语言里字符串要用双引号引上例如 &qu ...

  • c语言入门自学书籍(零基础小白到高手专用)

    作为最古老的一门语言,还在支持一直更新的编程语言,最合适作为初学者第一门入门语言了!不为别的,就因为学好了C语言,在学习C++的时候,你将会很容易.学其他语言也不难了! 操作方法 01 很多初学者学习 ...

  • C#语言入门:[15]多分支选择switch语句

    当你的程序做条件判断时,可以用if...else... 但是有一个难题,当你的条件很多时,打个比方说,有个程序要求选择语言,语言中有中文,英语,日语,法语,德语,俄语如果你用if...else..., ...

  • c语言入门:[16]退出循环break

    break这个词你在c语言里可以理解成跳出.退出的意思,它用在循环语句里就是退出循环的意思,这里当然不能理解成遇到break程序就结束而是退出循环,循环后面的代码还是正常执行的,这个词单独构成一条c语 ...