簡介
C語言是一種程序設計的入門語言。由于C語言的語句中沒有提供直接計算sin或cos函數的語句,會造成編寫程序困難;但是函數庫提供了sin和cos函數,可以拿來直接調用。顯示一段文字,我們在C語言中找不到顯示語句,隻能使用庫函數printf。
C語言的庫函數并不是C語言本身的一部分,它是由編譯程序根據一般用戶的需要,編制并提供用戶使用的一組程序。C的庫函數極大地方便了用戶,同時也補充了C語言本身的不足。在編寫C語言程序時,使用庫函數,既可以提高程序的運行效率,又可以提高編程的質量。
相關概念
函數庫
函數庫是由系統建立的具有一定功能的函數的集合。庫中存放函數的名稱和對應的目标代碼,以及連接過程中所需的重定位信息。用戶也可以根據自己的需要建立自己的用戶函數庫。
庫函數
存放在函數庫中的函數。庫函數具有明确的功能、入口調用參數和返回值。
連接程序
将編譯程序生成的目标文件連接在一起生成一個可執行文件。
頭文件
有時也稱為包含文件。C語言庫函數與用戶程序之間進行信息通信時要使用的數據和變量,在使用某一庫函數時,都要在程序中嵌入(用#include)該函數對應的頭文件,用戶使用時應查閱有關版本的C的庫函數參考手冊。
常用的庫函數
abort
函數名:abort
功能:異常終止一個進程
函數與形參類型:
voi abort(void);
程序例:
#include
#include int main(void)
{
printf("Calling abort()n");
abort();
return 0; /* This is never reached */
}
abs
函數名:abs
功能:計算整數num的值。返回整數num的絕對值
函數與參數類型:
int abs(num)
int num;
程序例:
#include
#include int main(void)
{
int number = -1234; printf("number: %d absolute value: %dn", number, abs(number));
return 0;
}
absread,abswirte
函數名 absread, abswirte
功能:絕對磁盤扇區讀、寫數據
函數與形參類型:
int absread(int drive, int nsects, int sectno, void *buffer);
int abswrITe(int drive, int nsects, in tsectno, void *buffer);
程序例:
/* absread example */ #include
#include
#include
#include int main(void)
{
int i, strt, ch_out, sector;
char buf; printf("Insert a diskette into drive A and press any keyn");
getch();
sector = 0;
if (absread(0, 1, sector, &buf) != 0)
{
perror("Disk problem");
exit(1);
}
printf("Read OKn");
strt = 3;
for (i=0; i<80; i++)
{
ch_out = buf[strt+i];
putchar(ch_out);
}
printf("n");
return(0);
}
access
函數名:access
功能:确定文件的訪問權限
函數與形參類型:
int access(const char *filename, int amode);
程序例:
#include
#include int file_exists(char *filename); int main(void)
{
printf("Does NOTEXIST.FIL exist: %sn",
file_exists("NOTEXISTS.FIL") ? "YES" : "NO");
return 0;
} int file_exists(char *filename)
{
return (access(filename, 0) == 0);
}
acos
函數名:acos
功能:計算并返回arccos(x)值、要求-1<=X<=1
函數與形參類型:
double acos(x)
double x;
程序例:
#include
#include int main(void)
{
double result;
double x = 0.5; result = acos(x);
printf("The arc cosine of %lf is %lfn", x, result);
return 0;
}
allocmem
函數名:allocmem
功能:分配DOS存儲段
函數與形參類型:
int allocmem(unsigned size, unsigned *seg);
程序例:
#include
#include
#include int main(void)
{
unsigned int size, segp;
int stat; size = 64; /* (64 x 16) = 1024 bytes */
stat = allocmem(size, &segp);
if (stat == -1)
printf("Allocated memory at segment: %xn", segp);
else
printf("Failed: maximum number of paragraphs available is %un",
stat); return 0;
}
arc
函數名:arc
功能:畫一弧線
函數與形參類型:
void far arc(int x, int y, int stangle, int endangle, int radius);
程序例:
#include
#include
#include
#include
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy;
int stangle = 45, endangle = 135;
int radius = 100; /* initialize graphics and local variables */
initgraph(&gdriver, &gmode, ""); /* read result of initialization */
errorcode = graphresult(); /* an error occurred */
if (errorcode != grOk)
{
printf("Graphics error: %sn", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch(); exit(1); /* terminate with an error code */
} midx = getmaxx() / 2;
midy = getmaxy() / 2;
setcolor(getmaxcolor()); /* draw arc */
arc(midx, midy, stangle, endangle, radius); /* clean up */
getch();
closegraph();
return 0;
}
asctime
函數名:asctime
功能:轉換日期和時間為ASCII碼
函數與形參類型:
char *asctime(const struct tm *tblock);
程序例:
#include
#include
#include int main(void)
{
struct tm t;
char str; /* sample loading of tm structure */ t. tm_sec = 1; /* Seconds */
t. tm_min = 30; /* Minutes */
t. tm_hour = 9; /* Hour */
t. tm_mday = 22; /* Day of the Month */
t. tm_mon = 11; /* Month */
t. tm_year = 56; /* Year - does not include century */
t. tm_wday = 4; /* Day of the week */
t. tm_yday = 0; /* Does not show in asctime */
t. tm_isdst = 0; /* Is Daylight SavTime; does not show in asctime */ /* converts structure to null terminated
string */ strcpy(str, asctime(&t));
printf("%sn", str); return 0;
}
asin
函數名::asin
功能::計算并返回arcsin(x)值、要求-1<=X<=1
函數與形參類型:
double asin(x)
double x;
程序例:
#include
#include int main(void)
{
double result;
double x = 0.5; result = asin(x);
printf("The arc sin of %lf is %lfn", x, result);
return(0);
}
assert
函數名:assert
功能:測試一個條件并可能使程序終止
函數與形參類型:
void assert(int test);
程序例:
#include
#include
#include struct ITEM {
int key;
int value;
}; /* add item to list, make sure list is not null */
void additem(struct ITEM *itemptr) {
assert(itemptr != NULL);
/* add item to list */
} int main(void)
{
additem(NULL);
return 0;
}
atan
函數名:atan
功能:計算并返回arctan(x)的值
函數與形參類型:
double atan(double x);
程序例:
#include
#include int main(void)
{
double result;
double x = 0.5; result = atan(x);
printf("The arc tangent of %lf is %lfn", x, result);
return(0);
}
atan2
函數名: atan2
功 能:計算并返回arctan(x/y)值
函數與形參類型:
double atan2(double y, double x);
程序例:
#include
#include int main(void)
{
double result;
double x = 90.0, y = 45.0; result = atan2(y, x);
printf("The arc tangent ratio of %lf is %lfn", (y / x), result);
return 0;
}
atexit
函數名:atexit
功能:注冊終止函數
函數與形參類型:
int atexit(atexit_t func);
程序例:
#include
#include void exit_fn1(void)
{
printf("Exit function #1 calledn");
} void exit_fn2(void)
{
printf("Exit function #2 calledn");
} int main(void)
{
/* post exit function #1 */
atexit(exit_fn1);
/* post exit function #2 */
atexit(exit_fn2);
return 0;
}
atof
函數名:atof
功能:把str指向的ASCⅡ字符串轉換成一個double型整數返回雙精度的結果
函數與形參類型:
double atof(str)
char*str;
程序例:
#include
#include int main(void)
{
float f;
char *str = "12345.67"; f = atof(str);
printf("string = %s float = %fn", str, f);
return 0;
}
atoi
函數名:atoi
功能:
把str指向的ASCⅡz字符串轉換成一個整數。返回整數結果
函數與參數類型:
double atoi(str )
char *str;
程序例:
#include
#include int main(void)
{
int n;
char *str = "12345.67"; n = atoi(str);
printf("string = %s integer = %dn", str, n);
return 0;
}
atol
函數名:atol
功能:
把字符串轉換成長整型數。返回長整數結果
函數與參數類型:
long atol(str )
char *str;
程序例:
#include
#include int main(void)
{
long l;
char *str = "98765432"; l = atol(lstr);
printf("string = %s integer = %ldn", str, l);
return(0);
}
mkdir
函數名:mkdir
功能:建立一個目錄
用法:
int mkdir(char *pathname);
程序例:
#include
#include
#include
#include
int main(void)
{
int status;
clrscr();
status = mkdir("asdfjklm");
(!status) ? (printf("Directory createdn")) :
(printf("Unable to create directoryn"));
getch();
system("dir");
getch();
status = rmdir("asdfjklm");
(!status) ? (printf("Directory deletedn")) :
(perror("Unable to delete directory"));
return 0;
}
mktemp
函數名 mktemp
功能:建立唯一的文件名
用法:
char *mktemp(char *template);
程序例:
#include
#include
int main(void)
{
/* fname defines the template for the
temporary file. */
char *fname = "TXXXXXX", *ptr;
ptr = mktemp(fname);
printf("%sn",ptr);
return 0;
}
MK_FP
函數名:MK_FP
功能:設置一個遠指針
用法:
void far *MK_FP(unsigned seg, unsigned off);
程序例:
#include
#include
int main(void)
{
int gd, gm, i;
unsigned int far *screen;
detectgraph(&gd, &gm);
if (gd == HERCMONO)
screen = MK_FP(0xB000, 0);
else
screen = MK_FP(0xB800, 0);
for (i=0; i<26; i++)
screen[i] = 0x0700 + ('a' + i);
return 0;
}
modf
函數名:modf
功能:把數分為整數和尾數
用法:
double modf(double value, double *iptr);
程序例:
#include
#include
int main(void)
{
double fraction, integer;
double number = 100000.567;
fraction = modf(number, &integer);
printf("The whole and fractional parts of %lf are %lf and %lfn",
number, integer, fraction);
return 0;
}
movedata
函數名:movedata
功能:拷貝字節
用法:
void movedata(int segsrc, int offsrc, int segdest,
int offdest, unsigned numbytes);
程序例:
#include
#define MONO_BASE 0xB000
/* saves the contents of the monochrome screen in buffer */
void save_mono_screen(char near *buffer)
{
movedata(MONO_BASE, 0, _DS, (unsigned)buffer, 80*25*2);
}
int main(void)
{
char buf[80*25*2];
save_mono_screen(buf);
}
moverel
函數名:moverel
功能:将當前位置(CP)移動一相對距離
用法:
void far moverel(int dx, int dy);
程序例:
#include
#include
#include
#include
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
char msg;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %sn", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
/* move the C.P. to location (20, 30) */
moveto(20, 30);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at (20, 30) */
sprintf(msg, " (%d, %d)", getx(), gety());
outtextxy(20, 30, msg);
/* move to a point a relative distance */
/* away from the current value of C.P. */
moverel(100, 100);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at C.P. */
sprintf(msg, " (%d, %d)", getx(), gety());
outtext(msg);
/* clean up */
getch();
closegraph();
return 0;
}
movetext
函數名:movetext
功能:将屏幕文本從一個矩形區域拷貝到另一個矩形區域
用法:
int movetext(int left, int top, int right, int bottom,
int newleft, int newtop);
程序例:
#include
#include
int main(void)
{
char *str = "This is a test string";
clrscr();
cputs(str);
getch();
movetext(1, 1, strlen(str), 2, 10, 10);
getch();
return 0;
}
moveto
函數名 moveto
功能:将CP移到(x, y)
用法:
void far moveto(int x, int y);
程序例:
#include
#include
#include
#include
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
char msg;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %sn", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
/* move the C.P. to location (20, 30) */
moveto(20, 30);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at (20, 30) */
sprintf(msg, " (%d, %d)", getx(), gety());
outtextxy(20, 30, msg);
/* move to (100, 100) */
moveto(100, 100);
/* plot a pixel at the C.P. */
putpixel(getx(), gety(), getmaxcolor());
/* create and output a message at C.P. */
sprintf(msg, " (%d, %d)", getx(), gety());
outtext(msg);
/* clean up */
getch();
closegraph();
return 0;
}
movemem
函數名:movemem
功能:移動一塊字節
用法:
void movemem(void *source, void *destin, unsigned len);
程序例:
#include
#include
#include
#include
int main(void)
{
char *source = "Borland International";
char *destination;
int length;
length = strlen(source);
destination = malloc(length + 1);
movmem(source,destination,length);
printf("%sn",destination);
return 0;
}
normvideo
函數名:normvideo
功能:選擇正常亮度字符
用法:
void normvideo(void);
程序例:
#include
int main(void
{
normvideo();
cprintf("NORMAL Intensity Textrn");
return 0;
}
nosound
函數名:nosound
功能:關閉PC揚聲器
用法:
void nosound(void);
程序例:
/* Emits a 7-Hz tone for 10 seconds.
True story: 7 Hz is the resonant frequency of a chicken's skull cavity.
This was determined empirically in Australia, where a new factory
generating 7-Hz tones was located too close to a chicken ranch:
When the factory started up, all the chickens died.
Your PC may not be able to emit a 7-Hz tone.
*/
int main(void)
{
sound(7);
delay(10000);
nosound();
}