当前课程知识点:基于Linux的C++ >  第五讲 程序组织与开发方法 >  5.4 随机数库(二) >  LinuxCPP0504

返回《基于Linux的C++》慕课在线视频课程列表

LinuxCPP0504在线视频

LinuxCPP0504

下一节:LinuxCPP0505

返回《基于Linux的C++》慕课在线视频列表

LinuxCPP0504课程教案、知识点、字幕

下面我们给大家展示

随机数库该怎么设计

在目录下边创建一个新的目录 叫Random

进入Random目录

我们在gedit下面New了一个文件

然后Save 保存它

选到Random这个目录下

把它保存成“zyrandom.cpp”

再New一个

把它保存成“zyrandom.h”

再New一个(需要三个文件)

把它保存成“main.cpp”

我们要测试这个random库

对于random这个库

我们实际上提供了三个函数

一个是随机化的函数

一个是生成随机整数

一个是生成随机的实数

就这三个函数

zyrandom这个头文件要完成

三个函数原型的设计

Randomize是一个

随机化一个 然后int

GenerateRandomNumber( int low, int high)

生成随机整数一个

然后生成随机实数一个

这个就是zyrandom随机数库的接口

三个函数 我们实现它

实现的时候呢

肯定是需要“iostream”的

因为万一有个错误的话要输出的

然后还需要包含

“ctime”头文件(C的时间库)

因为我们用它做随机数发生器的种子

然后void Randomize

随机化函数 srand函数

(int)time(0)

用当前的时间作为随机数发生器的种子

因为srand函数实际上是在

“cstdlib”这个头文件里

所以要包含它

接下来生成

GenerateRandomNumber(int low, int high)

定义一个量double

if( low>high)

如果low是大于high

那说明它有问题

所以我们就输出cout

<< ”GenerateRandomNumber: Make sure low <= high/\n”

退出

否则就把生成的随机数转换成double

然后把RAND_MAX转化成double加上1.0

去除 得到这个随机数

在0、RAND_MAX之间的比例

然后把这个比例再映射到[low,high]区间

return low + (int)(_d + high – low + 1)

搞错了 得乘

_d就是一个比例 乘上high – low + 1

就这么一个空间 映射过去

_d一乘 然后转换成整数加上low

然后double GenerateRandomReal( double low, double high)

一开始的代码是一样的

拷贝过来

保存一下

这个就直接除以RAND_MAX就行

因为实数比

然后low +_d * (high - low)就OK了

实数是无限多个 所以不需要那么费劲

也不需要转换成int

就是low加上这个比例

这个就是zyrandom

现在就要写一个程序来测试它

#include

#include “zyrandom”

包含这个头文件

注意这个标准库头文件

是使用尖括号包含

我们自己的头文件

应该是使用双引号包含

写一个main函数

定义一个int i 随机化

然后写一个for循环

i = 0;i < 8;i++

GenerateRandomNumber

随机生成10到99之间的数

初始化给t值

然后cout << t << “; ”

然后分号

写了一个for循环

生成八个随机整数

cout << endl

换行 再来 生成八个随机实数

保存 回到控制台

g++编译main.cpp

注意 因为“main.cpp”

需要使用zyrandom这个库

所以想编译“main.cpp”

当然要保证zyrandom同时也被编译

也就说还要编译“zyrandom.cpp”

好多错误

“main.cpp”

12行 错误在这

没有使用名空间

有名空间才行啊

再编译 还有错 19行警告

拷贝过来的 不对

double d 输出d

这是个浮点数 跟那个是两回事

继续

然后看“zyrandom.cpp”

这里面肯定也有问题

请看“zyrandom.cpp”第15行

cout那当然也是忘了 using namespace std

当然还是忘了名空间

把名空间放进去就对了

ls 出来结果了 我运行a.out

看看生成的几个整数

78、15、93、81、26、24、45、14

看上去蛮随机的

后边46.3459、14.2346也蛮随机的

这个就是我们的例子

同学们看到这一点就知道

我们真实写程序的时候

出现错误是非常非常正常的一件事情

要根据它显示错误的消息逐一去对照

我们通过这个例子给大家演示

我们这个错误出在哪

比如说 这个错误告诉你

是在“zyrandom.cpp”这个文件

第15行 告诉你是什么错误

“在这个作用域内cout无定义”

什么原因呢

就是因为我忘了写using namespace

那你要说我真不写using namespace

怎么办呢 cout就没定义吗

那么你就要用std这个名空间双冒号

去全局解析它

这个模式就ok了

这个也一样

按照这个模式去解析它也可以

我们重新编译它

没问题

对于“main.cpp”也一样

我习惯放在这后边

现在你看到

按照这样一个模式完成了一个库的设计

并且为这个库写了一个测试的代码

“main.cpp” 我测试了一下

看它运行的结果好像蛮随机的

我们的演示就到这里

基于Linux的C++课程列表:

第一讲 C/C++基本语法元素

-1.1 提纲

--LinuxCPP0101

-1.2 程序设计的基本概念

--LinuxCPP0102

-1.3 简单C/C++程序介绍

--LinuxCPP0103

-1.4 程序设计的基本流程

--LinuxCPP0104

-1.5 基本语法元素

--LinuxCPP0105

-1.6 程序设计风格

--LinuxCPP0106

-1.7 编程实践

--LinuxCPP0107

-第一讲 C/C++基本语法元素--编程实践提交入口

第二讲 程序控制结构

-2.1 提纲

--LinuxCPP0201

-2.2 结构化程序设计基础

--LinuxCPP0202

-2.3 布尔数据

--LinuxCPP0203

-2.4 分支结构

--LinuxCPP0204

-2.5 break语句

--LinuxCPP0205

-2.6 循环结构

--LinuxCPP0206

-2.7 编程实践

--LinuxCPP0207

-第二讲 程序控制结构--编程实践提交入口

第三讲 函数

-3.1 提纲

--LinuxCPP0301

-3.2 函数声明、调用与定义

--LinuxCPP0302

-3.3 函数调用栈框架

--LinuxCPP0303

-3.4 编程实践

--LinuxCPP0304

-第三讲 函数--编程实践提交入口

第四讲 算法

-4.1 提纲

--LinuxCPP0401

-4.2 算法概念与特征

--LinuxCPP0402

-4.3 算法描述

--LinuxCPP0403

-4.4 算法设计与实现

--LinuxCPP0404

-4.5 递归算法(一)

--LinuxCPP0405

-4.6 递归算法(二)

--LinuxCPP0406

-4.7 容错与计算复杂度

--LinuxCPP0407

-4.8 编程实践

--LinuxCPP0408

-第四讲 算法--编程实践提交入口

第五讲 程序组织与开发方法

-5.1 提纲

--LinuxCPP0501

-5.2 库与接口

--LinuxCPP0502

-5.3 随机数库(一)

--LinuxCPP0503

-5.4 随机数库(二)

--LinuxCPP0504

-5.5 作用域与生存期

--LinuxCPP0505

-5.6 典型软件开发流程(一)

--LinuxCPP0506

-5.7 典型软件开发流程(二)

--LinuxCPP0507

-5.8 编程实践

--LinuxCPP0508

-第五讲 程序组织与开发方法--编程实践提交入口

第六讲 复合数据类型

-6.1 提纲

--LinuxCPP0601

-6.2 字符

--LinuxCPP0602

-6.3 数组(一)

--LinuxCPP0603

-6.4 数组(二)

--LinuxCPP0604

-6.5 结构体

--LinuxCPP0605

-6.6 编程实践

--LinuxCPP0606

-第六讲 复合数据类型--编程实践提交入口

第七讲 指针与引用

-7.1 提纲

--LinuxCPP0701

-7.2 指针基本概念

--LinuxCPP0702

-7.3 指针与函数

--LinuxCPP0703

-7.4 指针与复合数据类型(一)

--LinuxCPP0704

-7.5 指针与复合数据类型(二)

--LinuxCPP0705

-7.6 字符串

--LinuxCPP0706

-7.7 动态存储管理(一)

--LinuxCPP0707

-7.8 动态存储管理(二)

--LinuxCPP0708

-7.9 引用

--LinuxCPP0709

-7.10 编程实践

--LinuxCPP0710

-第七讲 指针与引用--编程实践提交入口

第八讲 链表与程序抽象

-8.1 提纲

--LinuxCPP0801

-8.2 数据抽象(一)

--LinuxCPP0802

-8.3 数据抽象(二)

--LinuxCPP0803

-8.4 链表(一)

--LinuxCPP0804

-8.5 链表(二)

--LinuxCPP0805

-8.6 链表(三)

--LinuxCPP0806

-8.7 链表(四)

--LinuxCPP0807

-8.8 函数指针(一)

--LinuxCPP0808

-8.9 函数指针(二)

--LinuxCPP0809

-8.10 抽象链表(一)

--LinuxCPP0810

-8.11 抽象链表(二)

--LinuxCPP0811

-8.12 编程实践

--LinuxCPP0812

-第八讲 链表与程序抽象--编程实践提交入口

第九讲 类与对象

-9.1 提纲

--LinuxCPP0901

-9.2 程序抽象与面向对象

--LinuxCPP0902

-9.3 类类型

--LinuxCPP0903

-9.4 对象(一)

--LinuxCPP0904

-9.5 对象(二)

--LinuxCPP0905

-9.6 类与对象的成员(一)

--LinuxCPP0906

-9.7 类与对象的成员(二)

--LinuxCPP0907

-9.8 类与对象的成员(三)

--LinuxCPP0908

-9.9 继承(一)

--LinuxCPP0909

-9.10 继承(二)

--LinuxCPP0910

-9.11 继承(三)

--LinuxCPP0911

-9.12 多态(一)

--LinuxCPP0912

-9.13 多态(二)

--LinuxCPP0913

-9.14 编程实践

--LinuxCPP0914

-第九讲 类与对象--编程实践提交入口

第十讲 操作符重载

-10.1 提纲

--LinuxCPP1001

-10.2 四则运算符重载(一)

--LinuxCPP1002

-10.3 四则运算符重载(二)

--LinuxCPP1003

-10.4 关系与下标操作符重载

--LinuxCPP1004

-10.5 赋值操作符重载(一)

--LinuxCPP1005

-10.6 赋值操作符重载(二)

--LinuxCPP1006

-10.7 赋值操作符重载(三)

--LinuxCPP1007

-10.8 赋值操作符重载(四)

--LinuxCPP1008

-10.9 赋值操作符重载(五)

--LinuxCPP1009

-10.10 流操作符重载(一)

--LinuxCPP1010

-10.11 流操作符重载(二)

--LinuxCPP1011

-10.12 流操作符重载(三)

--LinuxCPP1012

-10.13 操作符重载总结

--LinuxCPP1013

-10.14 编程实践

--LinuxCPP1014

-第十讲 操作符重载--编程实践提交入口

第十一讲 泛型编程

-11.1 提纲

--LinuxCPP1101

-11.2 泛型编程概览

--LinuxCPP1102

-11.3 异常处理机制(一)

--LinuxCPP1103

-11.4 异常处理机制(二)

--LinuxCPP1104

-11.5 运行期型式信息(一)

--LinuxCPP1105

-11.6 运行期型式信息(二)

--LinuxCPP1106

-11.7 模板与型式参数化

--LinuxCPP1107

-11.8 题外话:术语翻译

--LinuxCPP1108

-11.9 泛型编程实践(一)

--LinuxCPP1109

-11.10 泛型编程实践(二)

--LinuxCPP1110

-11.11 泛型编程实践(三)

--LinuxCPP1111

-11.12 泛型编程实践(四)

--LinuxCPP1112

-11.13 泛型编程实践(五)

--LinuxCPP1113

-11.14 泛型编程实践(六)

--LinuxCPP1114

-11.15 泛型编程实践(七)

--LinuxCPP1115

-11.16 泛型编程实践(八)

--LinuxCPP1116

-11.17 泛型编程实践(九)

--LinuxCPP1117

-11.18 泛型编程实践(十)

--LinuxCPP1118

-11.19 编程实践

--LinuxCPP1119

-第十一讲 泛型编程--编程实践提交入口

第十二讲 Linux系统编程基础

-12.1 提纲

--LinuxCPP1201

-12.2 程序执行环境(一)

--LinuxCPP1202

-12.3 程序执行环境(二)

--LinuxCPP1203

-12.4 程序执行环境(三)

--LinuxCPP1204

-12.5 程序执行环境(四)

--LinuxCPP1205

-12.6 输入输出(一)

--LinuxCPP1206

-12.7 输入输出(二)

--LinuxCPP1207

-12.8 文件系统

--LinuxCPP1208

-12.9 设备

--LinuxCPP1209

-12.10 库(一)

--LinuxCPP1210

-12.11 库(二)

--LinuxCPP1211

-12.12 makefile文件(一)

--LinuxCPP1212

-12.13 makefile文件(二)

--LinuxCPP1213

-12.14 makefile文件(三)

--LinuxCPP1214

-12.15 编程实践

--LinuxCPP1215

-第十二讲 Linux系统编程基础--编程实践提交入口

第十三讲 进程编程

-13.01 提纲

--LinuxCPP1301

-13.02 进程基本概念

--LinuxCPP1302

-13.03 信号

--LinuxCPP1303

-13.04 进程管理(一)

--LinuxCPP1304

-13.05 进程管理(二)

--LinuxCPP1305

-13.06 进程管理(三)

--LinuxCPP1306

-13.07 进程间通信(一)

--LinuxCPP1307

-13.08 进程间通信(二)

--LinuxCPP1308

-13.09 进程间通信(三)

--LinuxCPP1309

-13.10 进程间通信(四)

--LinuxCPP1310

-13.11 进程池

--LinuxCPP1311

-13.12 编程实践

--LinuxCPP1312

-第十三讲 进程编程--编程实践提交入口

第十四讲 线程编程

-14.1 提纲

--LinuxCPP1401

-14.2 线程基本概念

--LinuxCPP1402

-14.3 线程管理(一)

--LinuxCPP1403

-14.4 线程管理(二)

--LinuxCPP1404

-14.5 线程管理(三)

--LinuxCPP1405

-14.6 线程管理(四)

--LinuxCPP1406

-14.7 线程同步机制(一)

--LinuxCPP1407

-14.8 线程同步机制(二)

--LinuxCPP1408

-14.9 C++11线程库(一)

--LinuxCPP1409

-14.10 C++11线程库(二)

--LinuxCPP1410

-14.11 C++11线程库(三)

--LinuxCPP1411

-14.12 C++11线程库(四)

--LinuxCPP1412

-14.13 C++11线程库(五)

--LinuxCPP1413

-14.14 编程实践

--LinuxCPP1414

-第十四讲 线程编程--编程实践提交入口

第十五讲 网络编程

-15.1 提纲

--LinuxCPP1501

-15.2 Internet网络协议

--LinuxCPP1502

-15.3 套接字(一)

--LinuxCPP1503

-15.4 套接字(二)

--LinuxCPP1504

-15.5 编程实践

--LinuxCPP1505

-第十五讲 网络编程--编程实践提交入口

课程文档

-课程PDF文件

LinuxCPP0504笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。