五分钟c++(6)函数(function)

该文章已生成可运行项目,

函数(function)

函数(function)就是一个一块整块代码。这个概念在基础知识那一篇里有大概提到一下。但是没有给出定义。

参考的c++ textbook 虽然简洁,但是还真简洁到连function的定义都不给一个。如果真没学过编程的人看谁知道function是什么东西,下边给个我自己写的定义

函数(Function) 是一段可以重复使用的代码,它执行特定的任务。你给它做这个任务需要的信息(输入),在完成这个任务后,它可能会给你一个结果(输出)。

定义函数(Declaring functions)

看下边这个例子

long func(int, double);

这个定义中有几个东西:

  • long:这个是这个函数的输出类型(type),这里定义函数的返回值
  • func:这个是函数的名字
  • (int, double):这个是这个函数的输入类型

比如说,下边是math libary中的一些函数的定义

double sin (double); // Sine
double cos (double); // Cosine
double tan (double); // Tangent
double atan (double); // Arc tangent
double cosh (double); // Hyperbolic Cosine
double sqrt (double); // Square Root
double pow (double, double); // Power
double exp (double); // Exponential Function
double log (double); // Natural Logarithm
double log10 (double); // Base-ten Logarithm

定义的作用是让编译器知道这个函数的存在,所以除了一开始就已经写在编译器的keyword,c++程序里的每一个函数都需要先定义。

注意,我们在定义的时候,可以把输入的名字加到定义中,但是这个编译器并不会用,只会把名字当成注释。

double pow (double, double); 这个函数为例, 写成这样也是可以的:

double pow(double base, double exponent);

另一点需要注意的是,如果一个函数已经在用的标准库(standard library)中出现过了,这个函数就并不需要定义。可以直接用。比如上边出现在math那个库里的函数,我们只需要加入#include <cmath> 就能直接使用里边的所有函数。

函数调用(function calls)

函数调用就是把这个函数需要的输入给他,他就会给回我们返回值的过程

比如 y = pow( x, 3.0); 这个会计算x这个变量的三次方的结果。然后把返回值赋值给y这个变量。

函数本身计算结果因为也表示一个值,所以这个值也是可以直接用的。比如

cout << 2.0 + pow( 5.0, x);

另一个需要注意的点是给这个函数的数据类型,我们这里给 5.0 是因为这个函数的输入值需要是一个double类型。在c++中,如果一个函数的输入是基础类型(primitive),这个基础类型的在函数输入的时候是可以自动转化的。所以这么写也是可以的

y = pow( x, 3); 

但是有两点不可以:

1) 输入的数量必须等于定义的输入数量

2)输出的数据类型如果和给的变量不一致。

对于2,如果输出类型的精度大于输入类型的精度,比如我们这里把y用一个float,但是pow函数输出的是double,虽然这么写不会报错,但是编译器会输出一个warning。

完整的例子

这个程序会报错,输出值直接写在了注释里:

// Calculating powers with
// the standard function pow()
#include <iostream> // Declaration of cout
#include <cmath> // Prototype of pow(), thus:
// double pow( double, double);
using namespace std;
int main()
{
    double x = 2.5, y;
    // By means of a prototype, the compiler generates
    // the correct call or an error message!
    // Computes x raised to the power 3:
    y = pow("x", 3.0); // Error! String is not a number
    y = pow(x + 3.0); // Error! Just one argument
    y = pow(x, 3.0); // ok!
    y = pow(x, 3); // ok! The compiler converts the
    // int value 3 to double.
    cout << "2.5 raised to 3 yields: " << y << endl;
    // Calculating with pow() is possible:
    cout << "2 + (5 raised to the power 2.5) yields: " << 2.0 + pow(5.0, x) << endl;
    return 0;
}

没有输入或者返回值的函数

有些函数不需要输入值或者返回值,就让他把事情做完就可以了。这种函数可以在定义的时候放空值,或者不用放,或者返回空值(void)

我们来用c++的随机数生成器来当作例子。

用随机数生成器需要用到std里的两个函数

void std::srand(int seed);
int std:rand();

第一个函数, 这个函数就返回一个空值(void)。这个函数会根据设置的seed,每次连续调用rand的时候,生成相同的序列。

比如这个程序,

https://www.programiz.com/online-compiler/5YHh2za5itlT3

// Online C++ compiler to run C++ program online
#include <iostream>
#include <cstdlib> // 包含 srand 和 rand

using namespace std;

int main() {
    // Write C++ code here
    srand(0);
    cout << rand() << " " << rand() << " " << rand();
    return 0;
}

每次的输出都是一样的:

1804289383 846930886 1681692777

=== Code Execution Successful ===

在这个例子里,srand并不需要任何输出。只需要一个输入值seed,这就是一个返回空值的函数。

而rand函数,他不需要输入值,可以根据已经用srand设置好的seed,每次都返回一个int作为它的输出值。

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值