首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 標準庫常用函數速查:math.h / stdlib.h 核心函數與編鏈接注意事項

     編輯:關於C語言

math.h 數學函數(需鏈接 -lm)

函數功能示例注意事項
abs(int)整數絕對值abs(-5) → 5僅限 int,長整數用 labs
fabs(double)浮點數絕對值fabs(-3.14) → 3.14返回 double
floor(double)向下取整floor(3.7) → 3.0返回 double,負數向更負方向
ceil(double)向上取整ceil(3.2) → 4.0返回 double
sqrt(double)平方根sqrt(9) → 3.0負數輸入域錯誤,置 errno=EDOM
pow(double, double)冪函數 x^ypow(2,3) → 8.0底數負、指數非整數域錯誤
pow10(int)10 的冪pow10(3) → 1000.0非標準,GCC 擴展
modf(double, double*)分離小數/整數部分double ip; modf(3.14, &ip) → 0.14, ip=3.0整數部分存入指針參數
fmod(double, double)浮點數餘數fmod(5.5, 2.0) → 1.5x = n*y + r,r 符號同 x

編譯命令:gcc math_demo.c -o math_demo -lm (-lm 必須放在源文件後,否則鏈接失敗)。

stdlib.h 通用工具函數

函數功能示例/說明
div_t div(int, int)整除商餘結構體div_t q = div(7,3); q.quot=2, q.rem=1
ldiv_t ldiv(long, long)長整數版 div同 div,類型為 long
rand()偽隨機數 [0, RAND_MAX]需配合 srand(seed) 初始化
srand(unsigned)設置隨機種子常用 srand(time(NULL))
malloc/calloc/realloc/free動態內存管理核心四件套,務必配對
exit(int)正常終止程序調用 atexit 註冊函數,刷新流
atexit(void(*)())註冊退出處理函數後進先出調用,最多 32 個
qsort(void*, size_t, size_t, cmp)快速排序比較函數 int cmp(const void*, const void*)
bsearch(const void*, void*, size_t, size_t, cmp)二分查找前提:數組已按 cmp 排序

隨機數最佳實踐


#include 
#include 

void init_random() {
    srand((unsigned)time(NULL));  // 程序啟動時調用一次
}

int random_range(int min, int max) {  // [min, max]
    return min + rand() / (RAND_MAX / (max - min + 1) + 1);
}
// 注意:rand() 質量一般,加密/科學計算請用 /dev/urandom 或 C++11 

常見坑點

  • 忘記 -lm:undefined reference to `floor' 等鏈接錯誤。
  • abs(-2147483648) 溢出:INT_MIN 絕對值超出 int 範圍,行為未定義。用 long long 或自寫 safe_abs。
  • rand() 線程不安全:多線程用 rand_r(&seed) 或線程局部種子。
  • qsort/bsearch 比較函數簽名:必須為 int (*)(const void*, const void*),轉型錯誤極難排查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved