C++抽象编程——函数与库(1)
来源:互联网 发布:下载youtube的软件 编辑:程序博客网 时间:2024/05/20 17:23
最近在学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>中提供的一些数学运算
- C++抽象编程——函数与库(1)
- C#-—体验抽象函数
- C++抽象编程——递归简介(4)——斐波那契函数的分析与扩展
- C++抽象编程——面向对象(4)——运算符重载与友元函数
- C#——重写与抽象类
- C++:虚函数与抽象类 zz
- C++:纯虚函数与抽象类
- 过程抽象----函数(C++)
- C++抽象编程——内存管理(1)——动态分配与内存管理
- C语言编程入门——指针与函数、数组
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- C++、JAVA与C#中的多态虚函数、纯虚函数(抽象函数)
- c语言与函数式编程1(wrapper function)
- C++抽象编程——递归简介(2)——阶乘函数的执行分析
- C++抽象编程——内存模式(2)——函数调用机制
- C#—抽象方法
- C语言ADT(抽象数据类型编程)
- 【问题解决】 org.apache.commons.dbcp.SQLNestedException Cannot create PoolableConnectionFactory
- OpenJudge-Mooc 2:拨钟问题
- 重拾代码
- 前端开发工程师,为什么选择Angular 2?
- uva1600 Patrol Robot —— bfs
- C++抽象编程——函数与库(1)
- 独立集
- 线性表实现之顺序表——MyArrayList
- python编译错误(1)字符编码问题UnicodeDecodeError: 'ascii' codec
- ubuntu+idea+scala第一个scala程序
- web攻击详解
- Http七个方法与requests库七个方法
- EditText作为密码输入框,隐藏输入密码
- servlet总结