1. 程式人生 > >標準C庫函式

標準C庫函式

標準c庫函式標頭檔案列表

<assert.h> 診斷
<ctype.h> 字元檢測
<errno.h> 錯誤檢測
<float.h> 系統定義的浮點型界限
<limits.h> 系統定義的整數界限
<locale.h> 區域定義
<math.h> 數學
<stjump.h> 非區域性的函式呼叫
<signal.h> 異常處理和終端訊號
<stdarg.h> 可變長度引數處理
<stddef.h> 系統常量
<stdio.h> 輸入輸出
<stdlib.h> 多種公用
<string.h> 字串處理
<time.h> 時間與日期

數學函式

#include “math.h”

絕對值函式

絕對值函式用於將表示式的結果轉換為非負數,如下表格:

原型 功能
int abs(int n) 計算整數n的絕對值
long labs(long n) 計算長整數n的絕對值
double fabs(double x) 計算雙精度實數x的絕對值

冪函式和開平方函式

函式如下表:

原型 功能
double pow(double x,double y) 計算雙精度實數x的y次冪
double sqrt(double x) 計算雙精度實數x的平方根

指數函式與對數函式

函式如下表:

原型 功能
double exp(double
x) 計算e的雙精度實數x次冪
double log(double x) 計算以e為底的雙精度實數x 的對數In(x);其中e=2.71828
double log10(double x) 計算以10為底的雙精度實數x 的對數log10(x)

三角函式

原型 功能
double sin(double x) 計算雙精度實數x的正弦值
double cos(double x) 計算雙精度實數x的餘弦值
double tan(double x) 計算雙精度實數x的正切值
double asin(double x) 計算雙精度實數x的反正弦值
double acos(double x) 計算雙精度實數x的反餘弦值
double atan(double x) 計算雙精度實數的反正弦值
double sinh(double x) 計算雙精度實數x的雙曲正弦值
double cosh(double x) 計算雙精度實數x的雙曲餘弦值
double tanh(double x) 計算雙精度實數x的雙曲正切值

在使用三角函式時:注意從引數的使用範圍
asin中的x的定義域為[-1.0,1.0],值域是[-π/2,+π/2];
acos的值域是:[0:π];
atan的值域是:[-π/2,+π/2];

取整函式和取餘函式

原型 功能
double ceil(double x) 計算不小於雙精度實數x的最小整數
double floor(double x) 計算不大於雙精度實數x的最大整數
double fmod(double x,double y) 計算雙精度實數x/y的餘數,餘數使用x的符號
double modf(double x,double *ip) 把x分解成整數部分和小數部分,x是雙精度浮點數,ip是整數部分指標,返回結果是小數部分

假設x的值是74.12,則ceil(X) = 75;如果x的值是-74.12,則ceil(X)的值是-74;

字串處理函式

字串長度函式:

原型 功能
int strlen(char *d) 返回字串d的長度,不包括終止符NULL

字串連線函式:

原型 功能
char *strcat(char *d ,char *s) 把字串s連線到字串d的後面,返回字串d
char *strncat(char *d ,char *s,int n) 把字串中最多n個字元連線到字串d的後面,返回字串d

字串複製函式:

原型 功能
char *strcpy(char *d,char *s) 複製字串s到字串d,返回字串d
char *strncpy(char *d,char *s,int n) 複製字串s最多n個字元到字串d,如果s小於n個字元,用"\n"補上,返回字串d
char *memcpy(void *d,void *s,int n) 從s複製n個字元到d,返回字串d
char *memmove(void *d,void *s,int n) 和memcpy相同,即使d和s部分相同也執行

字串比較函式:

原型 功能
int strcmp(char *d,char *s) 比較字串d與字串s,如果d<s,返回-1;如果d==s,返回0,;如果d>s,返回1;
int strncmp(char *d,char *s,int n) 比較字串d中最多n個字元與字串s,如果d<s,返回-1;如果d==s,返回0,;如果d>s,返回1;
int memcmp(void *d,void *s ,int n) 比較d的n個字元與s,和strcmp的返回值相同

字串查詢函式:
字串查詢函式用於一個字串中查詢字元出現的位置

原型 功能
char *strchr(char *d,char *c) 返回一個指向字串d中c第一次出現的指標;如果沒找到c,則返回指向NULL的指標
char *strrchr(char *d,char *c) 返回一個指向字串d中c第一次出現的指標;如果沒找到c,則返回指向NULL的指標
char *strstr(char *d,char *s) 返回一個指向字串d中字元s第一次出現的指標;如果沒找到s,則返回指向NULL的指標
void *memchr(void *d,char c,int n) 返回一個指向被d所指向的n個字元中c第一次出現的指標;如果沒找到c,則返回指向NULL的指標

字元填充函式:

原型 功能
void *memset(void *d;char c, int n) 使用n個字元c填充void*型別變數d

字元處理函式

字元型別判斷函式:

原型 功能
int isalnum(int c) 如果整數c是文字或數字返回非零,否則返回零
int isalpha(int c) 如果整數c是一個字母返回非零,否則返回零
int iscntrl(int c) 如果整數c是一個控制符返回非零,否則返回零
int isdigit(int c) 如果整數c是一個數字返回非零,否則返回零
int isgraph(int c) 如果整數c是可列印的(排除空格)返回非零,否則返回零
int islower(int c) 如果整數c是小寫字母返回非零,否則返回零
int isprint(int c) 如果整數c是可列印的(包括空格)返回非零,否則返回零
int ispunct(int c) 如果整數c是可列印的(除了空格,字母或數字之外)返回非零,否則返回零
int isspace(int c) 如果整數c是一個空格返回非零,否則返回零
int isupper(int c) 如果整數c是大小字母返回非零,否則返回零
int isxdigit(int c) 如果整數c是十六進位制數字返回非零,否則返回零

字元大小寫轉換函式:

原型 功能
int tolower(int c) 轉換函式c為小寫字母。當c為大寫英文字母時,返回對應的小寫字母,否則返回原來的值
int toupper(int c) 轉換函式c為大寫字母。當c為小寫英文字母時,返回對應的大寫字母,否則返回原來的值

轉換和儲存管理函式

轉換函式:

原型 功能
int atoi(string) 轉換一個ASCII字串為一個整數,在第一個非整型字元處停止
double atof(string) 轉換一個ASCII字串為一個雙精度數,在第一個不能被解釋為一個雙精度數的字元處停止
string itoa(int ,char *,int) 轉換一個整數為一個ASCII字串。為返回的字串分配的空間必須足夠大於被轉換的數值

儲存管理函式:

原型 功能
void *malloc(size_tn) 為一個大小為n的物件分配儲存空間
void *calloc(size_n,size_n) 為n個物件的陣列分配儲存空間,每個的大小為n,初始化所有被分配的記憶體為零
void *realloc(void *p,size_n) 重新分配空間的大小為n,內容保存於舊的相同,等於新的大小
void free(void *p) 釋放指向的空間

隨機函式

1.rand():它返回[0:MAX]之間均勻分佈的偽隨機整數。rand函式不接受引數,預設以1為種子(即起始值),它總是以相同的種子開始,所以形成的偽隨機數列也相同,不是真正的隨機。
2.srand():使用該函式指定不同的數(無符號整數)為種子
要生成一個[A:B]範圍的一個隨機整數,可以用下面的表示:

int n = A +rand() %(B-A+1);

日期和時間處理函式

原型 功能
char *asctime(const struct tm *timeptr) 將引數timeptr所指的tm結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回
char *ctime (const time_t *timep) 將引數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回
struct tm*gmtime(const time_t *timep) 將引數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回
struct tm *localtime(const time_t *timep) 將引數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回,結構tm的定義請參考grntime()

診斷函式

assert()函式是診斷函式,它的作用是測試一個表示式的值是否為false ,也就是0,並且在條件為false時終止程式,引數的表示式的結果是一個整型資料。assert()函式是在標準函式庫<assert.h>標頭檔案中定義的。
例如:
assert(A==B);
當A=B時,表示式結果為1,也就是ture;如果A不等於B,結果就是0,也就是false,然後可根據決定是否終止程式。當程式出現異常時,可以使用abort()函式以非正常方式立即結束應用程式。

命令列引數

int main(int argc ,char *argv[])
這是main函式的一個通常的寫法,其中第一個引數,argc是英文argument counter的簡寫,表示傳遞給main函式有多少個引數,第二個引數argv[]以字串陣列的形式接受真正的引數。
在這裡插入圖片描述

其他函式

1.exit()函式:表示結束程式,它的返回值將被忽略。它的標頭檔案是"stdlib.h"
原型:void exit(int retval);
2.qsort()函式:包含在標頭檔案"stdlib.h"中,此函式根據給出的比較條件快速排序,通過指標移動實現排序。排序之後的結果仍然放在原陣列中。使用qsort()函式必須自己寫一個比較函式。
原型:void qsort(void *base ,int n ,int size , int (*fcmp)(const void * , const void *));