C++ 教程 在线

1889C++ 数字

关于 c++ 随机数的补充(取一定范围的随机数):

可以在宏定义中顶一个random(int number)函数:

#include <iostream>
#include<stdio.h>
#include<time.h>
#define random(x)(rand()%x)
using namespace std;

int main()
{
    srand((int)time(0));//部署随机种子
    for (int i = 0; i < 10; i++){
        cout << random(100) << endl;
        //输出0-100的随机数
    };
    return 0;
}

1888C++ 数字

srand函数是随机数发生器的初始化函数。

原型: void srand(unsigned seed);

用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用 1 来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用 time 函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将 time_t 型数据转化为(unsigned)型再传给 srand 函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的t数据。

例子:

#include <stdlib.h>
#include <stdio.h>
#include <time.h> /*用到了time函数,所以要有这个头文件*/
#define MAX 10
 
int main( void)
{
    int number[MAX] = {0};
    int i;
    srand((unsigned) time(NULL)); /*播种子*/
    for(i = 0; i < MAX; i++)
    {
        number[i] = rand() % 100; /*产生100以内的随机整数*/
        printf("%d ", number[i]);
    }
    printf("\n");
    return 0;
}

1887C++ 函数

编程语言中,函数直接或间接调用函数本身,则该函数称为递归函数。

#include <iostream>

using namespace std;

// 本程序用递归算法求n的阶乘
int counter=1;

int fac(int n)
{
    cout<<"第"<<counter<<"次调用:"<<n<<" * "<<"fac("<<n-1<<")"<<endl;
    if (n==1) {
        return 1;
    }
    else
    { 
        counter++;
        return n * fac(n-1); // 断点1
    }
}

int main()
{ 
    int n;
    cout<<"请输入求n的阶乘的n值:";
    cin>>n;
    cout<<"结果:fac("<<n<<")="<<fac(n)<<endl;
}

1886C++ 函数

lambda表达式无法修改通过复制形式捕捉的变量,因为函数调用运算符的重载方法是const属性的。有时候,你想改动传值方式捕获的值,那么就要使用mutable,例子如下:

int main()
{
    int x = 10;

    auto add_x = [x](int a) mutable { x *= 2; return a + x; };  // 复制捕捉x

    cout << add_x(10) << endl; // 输出 30
    return 0;
}

1885C++ 函数

  • []:默认不捕获任何变量;
  • [=]:默认以值捕获所有变量;
  • [&]:默认以引用捕获所有变量;
  • [x]:仅以值捕获x,其它变量不捕获;
  • [&x]:仅以引用捕获x,其它变量不捕获;
  • [=, &x]:默认以值捕获所有变量,但是x是例外,通过引用捕获;
  • [&, x]:默认以引用捕获所有变量,但是x是例外,通过值捕获;
  • [this]:通过引用捕获当前对象(其实是复制指针);
  • [*this]:通过传值方式捕获当前对象;