最近在學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>中提供的一些數學運算
新聞熱點
疑難解答
圖片精選