標準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 *));