第十二章:存储类说明符及随机数

存储类说明符:

auto :表明一个变量具有自动存储时期,且它只能用在代码块作用域的变量声明中,它主要用来指明意图,使程序更易读。

register : 
它和auto说明符一样只能用在代码块作用域的变量声明中,它是将一个变量归入寄存器存储类,即把一个变一个寄存器内,经更快地存取。因为变量是存放在寄存器中,所以不能获得变量的地址。

static :它即可用于声明代码块作用域也可用于声明文件作用域,当它用于代码块作用域声明时,变量具有静态存储时期(即在声明之后存在并保留其值)和空链接。当用于声明文件作用域时,表明该变量具有内部链接,它的存储时期还是静态存储时期

随机数: rand与srand (srand 初始化随机种子,rand 产生随机数)

rand:( 产生随机数)

头文件: #include<stdlib.h>

定义函数 :int rand(void)

函数说明 :

因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以有一定的范围里可看成是随机的,rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。rand()产生的是假随机数字,每次执行时是相同的。若要不同,以不同的值来初始化它.初始化的函数就是srand()。

返回值:

返回0至RAND_MAX之间的随机整数值,RAND_MAX的范围最少是在32767之间(int),即双字节(16位数)。若用unsigned int 双字节是65535,四字节是4294967295的整数范围。

0~RAND_MAX每个数字被选中的机率是相同的

srand:(设置随机数种子)

表头文件:#include<stdlib.h>

定义函数:void srand (unsigned int seed);

函数说明:

srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。

补充一点就是srand这个函数一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的数字

总结:

rand()函数可以用来产生随机数,但是这不是真真意义上的随机数,是一个伪随机数,是根据一个数(可以称它为种子)为基准以某个递推公式推算出来的一系数,当这系数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了 srand()函数,它的原形是void srand( int a) 功能是初始化随机产生器既rand()函数的初始值,即使把种子的值改成a; 从这你可以看到通过sand()函数,是可以产生可以预见的随机序列,那如何才能产生不可预见的随机序列呢?

利用srand((unsign)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的



时间: 2024-07-29 05:53:15

第十二章:存储类说明符及随机数的相关文章

C Primer Plus (第五版) 第十二章 存储类、链接和内存管理 编程练习

第十二章 存储类.链接和内存管理 编程练习 1.Q不使用全局变量,重写程序清单13.4 #include <stdio.h>; int critic(int u); int main(void) { int units; printf("How many pounds to a firkin of butter?\n"); scanf_s("%d", &units); while (units != 56) critic(units); prin

第十二章:类

1:数据抽象,数据封装----类 2:数据抽象技术是接口,实现---分离:低层次的元素组合成高层次实体技术(例如函数). 3:利处:一是避免类内部无意破坏对象状态的用户级错误:二是可以根据需求完善实现,而不需要改变用户级代码. 4:内联函数是代码展开效果,所以使用处必须是定义处-即可见,类里默认定义函数则是内联函数,若体外定义,体内声明,则需要使用出定义函数: 5:不能重新定义:.h文件中不能定义函数,除非它是内联函数. 6:使用引用,或者指针:或者是在定义对象时,该类必须是定义完整的:否则出错

《Unity_API解析》 第十二章 Transform类

Transform类继承自Component类,并实现了IEnumberable接口.Transform是GameObject必须拥有的一个组件,用来管理所在GameObject对象的坐标位置.旋转角度和大小缩放.由于Transform实现了Ienumberable接口,于是可以在程序中使用foreach()方法快速遍历子物体的Transform结构.即: void Start() { foreach (Transform item in transform) { } } Transform类实

第十二章(类的无参方法)

Java注释:    //:单行注释    /**/:多行注释    /** */:JavaDoc注释 方法:   语法: 访问修饰符 返回值类型 方法名(){       方法体      } 举例:        public void run(){         System.out.println("");        }        public String robball(){         String ball="球";         r

第十二章 存储之 Secret

1.Secret 存在意义 Secret 解决了密码.token.密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中.Secret 可以以 Volume 或者环境变量的方式使用 2.Secret 有三种类型 ① Service Account:用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的/run/secrets/kubernetes.io/serviceaccount目录中 ② Opaque:base64

第十二章类的无参方法

一.javaDoc注释: 语法:/** * *@author FLC */ 生成javaDoc文档的步骤:点击File--Export--展开java文件夹--选择javaDoc--点击Next--制定生成doc文档的文件位置--点击Fish--找到生成文件位置查看. 二.类中的方法: 语法:   访问修饰符  方法返回值类型  方法名称(){} 例如: public void run(){ } public String ball(){ } String ball="球"; retu

Java学习笔记—第十二章 Java网络编程入门

第十二章  Java网络编程入门 Java提供的三大类网络功能: (1)URL和URLConnection:三大类中最高级的一种,通过URL网络资源表达方式,可以很容易确定网络上数据的位置.利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端. (2)Socket:又称"套接字",用于描述IP地址和端口(在Internet中,网络中的每台主机都有一个唯一的IP地址,而每台主机又通过提供多个不同端口来提供多种服务).在客户/服务器网络中,当客

进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量.所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来

[CSAPP笔记][第十二章并发编程]

第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟悉的例子. 我们主要将并发看做是一种操作系统内核用来运行多个应用程序的机制. 但是,并发不仅仅局限于内核.它也可以在应用程序中扮演重要的角色. 例如 Unix信号处理程序如何允许应用响应异步事件 例如:用户键入ctrl-c 程序访问虚拟存储器的一个未定义的区域 其他情况 访问慢速I/O设备 当一个应