C 函式與庫

2021-10-16 01:49:55 字數 3749 閱讀 5054

三、介面與實現

四、隨機數庫的設計

參考函式

功能abs(x)

返回x的絕對值

sqrt(x)

返回x的平方根

floor(x)

返回小於或等於浮點數x的最大整數值

ceil(x)

返回大於或等於浮點數x的最小整數值

exp(x)

返回x的指數函式值 e^x

log(x)

返回x的自然對數值

log10(x)

返回x的常用對數值

pow(x,y)

返回x的y次方的值

cos(theta)

返回角θ的余弦值,θ為弧度,可用θ*π/180轉換為度

sin(theta)

返回弧度θ的正弦值

tan(theta)

返回弧度θ的正切值

atan(x)

返回弧度θ的反正切值

atan2(y,x)

返回x軸與原點和點(x,y)所形成的直線的夾角的弧度值

**如下:

#include

#include

void

error

(string msg)

定義c++庫,首先定義介面,它讓庫使用者在不了解庫實現細節情況下使用庫中函式;其次定義庫具體實現,說明庫的底層實現細節。定義介面檔案字尾名 .h,定義實現檔案字尾名 .cpp 。

error庫介面:

#ifndef _error_h       

// 指令檢查 _error_h 是否已被定義

#define _error_h

void

error

(std::string msg)

;#endif

}

error庫實現:

#include

#include

#include

#include

"error.h"

using

namespace std;

void

error

(string msg)

以direction型別編碼四個方向為例 enum direction

direction庫的介面:

#ifndef _direction_h

#define _direction_h

#include

enum direction

;direction leftfrom

(direction dir)

;direction rightfrom

(direction dir)

;std::string directiontostring

(direction dir)

;#endif

direction庫的實現:

#include

#include

"direction.h"

using

namespace std;

direction leftfrom

(direction dir)

direction leftfrom

(direction dir)

string directiontostring

(direction dir)

}

如果為了能從介面中匯出常量 pi ,需要在其介面的常量定義宣告和原型中都都加上關鍵字 extern 。

gmath庫簡化的介面:

#ifndef _gmath_h

#define _gmath_h

extern

const

double pi;

double

sindegrees

(double angle)

;double

cosdegrees

(double angle)

;double

todegrees

(double radians)

;double

toradians

(double degrees)

;#endif

gmath庫的實現:

#include

#include

"gmath.h"

extern

const

double pi =

3.1415926

;double

sindegrees

(double angle)

double

cosdegrees

(double angle)

double

todegrees

(double radians)

double

toradians

(double degrees)

類庫提供了函式 rand,其原型為: int rand() ;

返回結果為 0 ~ rand_max 之間任意整數,rand_max 通常定義為整形最大值。

random.h 使用者期望功能:

從乙個特定的區域內選取隨機整數

從乙個特定區域內選取隨機實數

以某個特定概率模擬乙個隨機事件

據此隨機數庫介面如下:

#ifndef _random_h

#define _random_h

intrandominteger

(int low,

int high)

;double

randomreal

(double low,

double high)

;// [low, high)

bool

randomchance

(double p)

;void

setrandomseed

(int seed)

;#endif

利用 rand() 函式,對值進行規範化、量化、翻譯、轉換為整數的處理。

考慮隨機數種子,及一系列複雜情況,隨機數庫實現如下:

#include

#include

#include

#include

"random.h"

using

namespace std;

void

initrandomseed()

;int

randominteger

(int low,

int high)

double

randomreal

(double low,

double high)

bool

randomchance

(double p)

void

setrandomseed

(int seed)

void

initrandomseed()

}

學習記錄,便於以後查閱

《c++程式設計 基礎變成抽象與演算法策略》 eric s.roberts 機械工業出版社

C 呼叫C 動態鏈結庫中的函式指標與函式指標結構

c 呼叫c 動態鏈結庫中的函式指標與函式指標結構 http www.dreamdu.com blog 2008 04 25 cs cpp functionpointer 這幾天做專案時,遇到了c 呼叫c 函式指標的問題,c 呼叫c dll中的函式很簡單,函式指標還真沒調過,看了幾篇文章研究了會兒後把...

C 靜態庫與動態庫

感覺比較形象,就摘過來了.這次分享的 宗旨是 讓大家學會建立與使用靜態庫 動態庫,知道靜態庫與動態庫的區別,知道使用的時候如何選擇。這裡不深入介紹靜態庫 動態庫的底層格式,記憶體布局等,有興趣的同學,推薦一本書 程式設計師的自我修養 鏈結 裝載與庫 庫是寫好的現有的,成熟的,可以復用的 現實中每個程...

C 靜態庫與動態庫

庫是寫好的現有的,成熟的,可以復用的 現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種 靜態庫 a lib 和動態庫 so dll 所謂靜態 動態是指鏈結。回顧一下,將乙個程...