C++抽象编程——函数与库(1)

      最近在学c++的一本经典的教材——programming abstraction in C++. 教材没有中文版,所以我就把大致的意思写下来,权当自己做个笔记吧。先从第二章开始总结,第一章有机会再补上吧。

      2.1 函数思想

       正如我们知道的,C++程序大部分都是由一系列函数而构成的,而C++中函数的概念与数学中的概念是很接近的,也就意味着我们不是在学习新的概念。举个例子,高中学的一元二次函数的定义 

函数f 把x变成右边的形式,使得任意的数x,都能代入式中,算出结果。同样的在C++中,我们也可以执行这样的一个函数,像这样

 

那么,意思是,同样的输入一个x,返回的是X*X+1的值。那么,为什么我们在编程中要用到函数呢?试想,如果重复执行一个小功能,每一次我们都要写一遍代码,这样就显得一个小程序的代码非常多,可读性很差,而且在重复写的过程中,万一其中哪一个写错了一个参数,回去调试的时候,工作量是很大的。而我们将一个功能定义成一个函数,到时候要用的时候直接调用,就可以很完美的解决这个问题。

总之,函数有以下几点优点:

a. 一次代码,多次使用

b.便于程序的维护跟修改

c.减少程序的代码量,增强代码的可读性

d.最重要的一点,函数可以把一个大程序分割成一个一个的小函数。

在d中,我们通常把大程序尽可能的分割成小函数,小到我们自己可以解决的程度,这样的设计理念,我们称之为自顶向下设计(top-down-design)

函数与算法

       函数之所以在编程中如此重要,原因是它为算法提供基本的运行程序。算法,就是用于解决一系列计算问题的严格详细的策略(which are precisely specified strategies for solving computational problems.)。举个例子 ,求两个数的最大公约数(greatest common divisor)。简称为gcd,比如49跟35的最大公约数是7. 用算法可以这样描述:

 1. Divide x by y and compute the remainder; call that remainder r.
2. If r is zero, the algorithm is complete, and the answer is y.
3. If r is not zero, set x to the old value of y, set y equal to r, and repeat the process.

我的理解就是

1.用y去除以x,并计算其余数记为r.

2.如果r=0;算法结束,结果为y;

3.如果r!=0;将y的值赋给x,并令y=r,然后重复操作。

当时我考虑了一下,要是有y<x呢,这时候就用到了取余,返回的就是x,那么相当于两者对调位置,然后正常运行。最好动笔算一下。很容易把它转换为C++代码

int gcd(int x, int y) {
int r = x % y;
while (r != 0) {
x = y;
y = r;
r = x % y;
}
return y;
}

那么,像这样的一系列的简单的数学算法,我们就没必要去一个一个都要写,c++为我们提供了很便利的工具 叫<cmath>。

<cmath>库

下图就是<cmath>中提供的一些数学运算



©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页