RHZ'S BLOG | 个人分享

  • 首页
  • 笔记
  • 小日常
  • 音乐
  • 读书
  • 软件分享
YOLO
  1. 首页
  2. 笔记
  3. C/C++
  4. 正文

rand() 函数

2022年9月4日 201点热度 0人点赞 0条评论

rand() 函数

能够生成随机数在很多情况下都很有用,包括创建游戏,统计建模程序和类似的最终产品。

在C++ 标准库中,可以访问被称为rand()的伪随机数生成器函数。在使用时,我们需要包含头文件<cstdlib>。

下面是一个示例:

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
  cout << rand();
}

这将输出一个随机数。

for 循环生成随机数

在 C++ 中,for 循环可以用来生成多个随机数。

int main() {
  for (int x = 1; x <= 5; x++) {
    cout << rand() << endl;
  }
}

/* 输出: 
41
18467
6334
26500
19169
*/

模(%) 运算符生成随机数

在 C++ 中,可以使用模(%) 运算符来生成特定范围内的随机数。

下面是一个例子,生成1到5范围内的整数。

int main () {
  for (int x = 1; x <= 10; x++) {
  cout << 1 + (rand() % 5) << endl;
  }
}

/* 输出: 
2
3
5
1
5
5
4
4
3
5
*/

但是,rand() 函数只会返回一个伪随机数。这意味着每次运行代码时,都会生成相同的编号。

srand() 函数

在 C++ 中,srand() 函数用于生成真正的随机数(随机种子)。

srand() 函数允许指定一个种子(seed) 值作为其参数,用于rand() 函数的算法。

下面是一个例子:

int main () {
  srand(30);

  for (int x = 1; x <= 10; x++) {
    cout << 1 + (rand() % 5) << endl;
  }
}

更改种子(seed) 值会改变rand() 的返回值。但是,相同的参数将导致相同的输出。

生成真正的随机数

在 C++ 中,生成真正随机数的方法是使用当前时间作为srand() 函数的种子值。

下面是一个例子,用time() 函数来获得系统时间的秒数,并随机种子给rand() 函数。在使用时,我们需要包含<ctime>头文件。

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main () {
  srand(time(0));

  for (int x = 1; x <= 10; x++) {
    cout << 1 + (rand() % 5) << endl;
  }
}

time(0) 将返回当前秒数,提示srand() 函数每次程序运行时为rand() 函数设置一个不同的种子。

提示:每次我们运行程序时,使用这个种子值将会创建一个不同的输出。

参数的默认值

当您定义一个函数,您可以为参数列表中后边的每一个参数指定默认值。当调用函数时,如果实际参数的值留空,则使用这个默认值。

这是通过在函数定义中使用赋值运算符来为参数赋值的。请看下面的实例:

int sum(int a, int b=17) {
  int result = a + b;
  return (result);
}

这为b参数赋值了一个默认值17,如果我们调用函数而不传递b参数的值,将使用默认值。

int main() {
  int x = 12;
  int y = 18;

  //用x和y两个参数调用函数
  int result = sum(x, y);
  cout << result << endl;
  //输出 30

  //不用b调用函数
  result = sum(x);
  cout <<  result << endl;
   //输出 29

  return 0;
}

在代码中,对函数的第二次调用不会传递第二个参数的值,而是使用默认值17。

使用默认参数

现在,让我们来看另外一个例子:

int area(int x=1, int y=1) {
  return x*y;
}

int main() {
  cout << area() << endl;
  cout << area(6) << endl;
  cout << area(3, 5) << endl;
}

/* 输出
1
6
15
*/

如你所见,当不使用一个或多个参数时,可以使用默认参数值在不同的情况下调用相同的函数。

函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型)必须不同。

例如,您可能需要一个rhzTest() 函数来打印其参数的值。

void rhzTest(int a) { 
  cout << a;
}

这只对整型参数有效。重载它将使其可用于其他类型,如浮点型。

void rhzTest(float a) { 
  cout << a;
}

现在,相同的rhzTest() 函数名称将适用于整数和浮点数。

函数重载

当重载函数时,函数的定义必须根据参数列表中的参数的个数、或类型而不同。

下面是一个例子:

void rhzTest(int x) {
    cout << "整数为: " << x << endl;
}
void rhzTest(float x) {
    cout << "浮点数为: " << x << endl;
}
int main() {
  int a = 30;
  float b = 68.652;
  rhzTest(a);
  rhzTest(b);
}

/* 输出:  
整数为: 30
浮点数为: 68.652
*/

如你所见,函数调用是基于提供的参数。一个整数参数将调用带有整数参数的函数实现,一个浮点数参数将调用执行一个浮点数参数。

函数重载

不能仅通过返回类型的不同来重载函数。

下面的声明将导致错误。

int rhzTest(int a) {}
float rhzTest(int b) {}
string rhzTest(int c) {}

虽然每个函数都使用相同的名称,但唯一的区别是返回类型,这是不允许的。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年9月4日

RHZ

即使单枪匹马,我亦勇敢无畏

点赞
< 上一篇
下一篇 >

文章评论

取消回复
归档
  • 2023年2月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年8月
  • 2021年7月

COPYRIGHT © 2022 RHZ的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2022008933号-1