对C 库函数进行学习探索总结笔记
创始人
2024-06-20 13:21:08
0

C++库函数作为一个高效的.NET程序语言。其混合了函数语言和物件导向程序编制语言,并且***的适用于编程、算法、技术和探索性开发,因此可以在使用的过程当中感受到趣味性和吸引力。

rand()产生“伪随机数”的原理是:给定数x(如果调用者未指定,则使用默认值),通过固定的计算公式1返回一个数y,这个数y就是所谓的伪随机数;同时通过固定的计算公式2,修改x,这样下次调用rand()时就会得到一个新的y。通过上面这两步,反复调用rand()会得到一个所谓的“伪随机数”的序列。

因为两个计算公式是固定的,所以只要X1相同,那么产生的序列就相同。X1成为种子,seed。
如果调用者不指定种子,C++语言的rand()会使用默认值。设置种子使用srand(unsigned int)函数,这个函数的名字的***个字母s就是seed的意思。

因为时间的唯一性和一维性,所以可以用系统时间来作为种子。这样可以保证每次运行时,rand()产生的序列都是不同的。在使用rand()前,以如下方式设置种子即可,
srand((unsigned int) time(0));

下面是《C Programming Language》中给出的rand()和srand()的一种实现,可能是早期C++的库函数的实现。

  1. int rand(void) {  
  2.   nextnext = next * 1103515245 + 12345;  //修改next的值  
  3.   return (unsigned int) (next/65536) % 32768;  //得到伪随机数在0~32768之间  
  4. }  
  5.  
  6. void srand(unsigned int seed) {  
  7.   next = seed;   //设置种子  

也就是说,随便你拿起哪本C++书籍(包括很多被人们广泛称为“必读经典”的),那么有很大的可能这本书中的内容不是你应该学的,而是你不应该学的。我之所以这么说有两个原因,因为一,我曾经是受害者。二,也是更实质性的原因,这些所谓的必读经典。

充斥的是介绍C++中的陷阱和对于C++库函数的缺陷的各种workarounds(好听一点叫Idioms(惯用法)或techniques(技术));又因为C++中的这类陷阱和缺陷实在数不胜数,所以就拉出了一个“长尾”;这类书籍在所有语言中都存在(“C缺陷和陷阱”、“Effective Java”、“Effective C#”等等)。#t#

然而在C++库函数里面这个尾巴特别长,导致这类书数不胜数。三,这些书中列出来的缺陷和陷阱根本不区分常见程度,对于一个用本程序员来说,应该希望看到“从最常见的问题到最不常见的问题”这样的顺序来罗列内容,然而这些书里面要么全部混在一起。

要么按照“资源管理、类设计、泛型”这样的技术分类来介绍内容,这根本毫无帮助(如果我看到一个章节的内容,我当然知道它讲的是类设计还是资源管理,还用废话么?),使得一个学习者无法辨别并将最重要的时间花在最常见的问题之上。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...