Tải bản đầy đủ (.pdf) (121 trang)

Sổ tay thư viện hàm ngôn ngữ lập trình C

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (563.51 KB, 121 trang )

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
1

Title: Thư viện hàm ngôn ngữ lập trình C
Author: Vu Hong Viet
Date: 09/11/2014
Thư viện hàm ngôn ngữ lập trình C
<Tài liệu tham khảo từ diễn đàn:














Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
2

<assert.h>
void assert( int expression);


Parameters:
expression: biểu thức đầu vào (có thể là con trỏ)
Remark:
Hàm assert( ) được sử dụng để đánh giá biểu thức và phát hiện lỗi logic trong khâu
coding bằng cách đánh giá biểu thức đầu vào.
- Nếu biểu thức đầu vào có giá trị là false (0), hàm assert( ) sẽ in ra thông báo lỗi,
sau đó gọi hàm abort( ) để kết thúc chương trình
- Nếu biểu thức đầu vào có giá trị là true (1), hàm assert() sẽ không làm gì
(chương trình vẫn thực hiện như bình thường)
- Định dạng của thông báo lỗi phụ thuộc ứng dụng gọi hàm assert( ).
 Nếu là Console application thì thông báo lỗi sẽ được hiển thị lên màn hình
console như khi chúng ta sử dụng lệnh printf( ).
(Để xem thêm các bài tập C console application, bạn hãy truy cập link sau:
gồm hơn 1000 bài tập lập
trình C hữu ích cho bạn ôn luyện).
 Nếu là ứng dụng Win32 (ứng dụng có giao diện window), thì hàm assert( ) sẽ
gọi hàm MessageBox( ) hiển thị 1 cửa sổ message box với button “OK”. Nếu
bạn click vào button “OK”, ứng dụng Win32 của bạn sẽ kết thúc ngay lập tức.
(Để xem them các bài tập lập trình Win32, bạn hãy truy cập link sau:
, hy vọng sẽ giúp ích nhiều
cho các bạn).
Ví dụ: Trong đoạn code dưới đây, hàm analyze_string( ) gọi hàm assert( ) để kiểm
tra các điều kiện của string đầu vào ( con trỏ NULL, string là rỗng, chiều dài string
phải lớn hơn 2). Nếu 1 trong các điều kiện này trả về false, thì message lỗi tương
ứng sẽ được chỉ ra.
Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
3


#include <stdio.h>
#include <conio.h>
#include <assert.h>
#include <string.h>

void analyze_string( char *string ); // Prototype

int main( void )
{
char test1[] = "abc", *test2 = NULL, test3[] = "";

printf ( "Analyzing string '%s'\n", test1 );
fflush( stdout );
analyze_string( test1 );

printf ( "Analyzing string '%s'\n", test2 );
fflush( stdout );
analyze_string( test2 );

printf ( "Analyzing string '%s'\n", test3 );
fflush( stdout );
analyze_string( test3 );
getch();
}

// Tests a string to see if it is NULL,
// empty, or longer than 0 characters.
void analyze_string( char * string )
{
assert( string != NULL ); // Cannot be NULL

assert( *string != '\0' ); // Cannot be empty
assert( strlen( string ) > 2 ); // Length must exceed 2
}
Kết quả:
Analyzing string 'abc'
Analyzing string '(null)'
Analyzing string ''

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
4

<ctype.h>
int isalnum(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isalnum( ) kiểm tra tham số c. Nếu c là kiểu alphanumberic ( nằm trong dải A
– Z, a – z, 0 – 9), hàm isalnum( ) giá trị khác 0. Còn c không thuộc các dải trên thì
hàm sẽ trả về giá trị 0.
Ví dụ:kiểm tra số nguyên c1 và c2 có phải là alphanumberic không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 45, c2 = 97;
if(isalnum(c1))

printf("\nc1 is alphanumberic");
else
printf("\nc1 is NOT alphanumberic");

if(isalnum(c2))
printf("\nc2 is alphanumberic");
else
printf("\nc2 is NOT alphanumberic");

getch();
}
Kết quả:
c1 is NOT alphanumberic
c2 is alphanumberic

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
5

int isalpha(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isalpha( ) sẽ kiểm tra tham số c. Nếu c là chữ cái (nằm trong dải A – Z, a – z),
thì hàm sẽ trả về giá trị khác 0. Còn nếu c là không phải là chữ cái, hàm sẽ trả về giá
trị 0.
Ví dụ: kiểm tra c1 = 48 (số 0 trong bảng mã ASCII), c2 = 97 (kí tự ‘a’).
#include <stdio.h>
#include <conio.h>

#include <ctype.h>

void main()
{
int c1 = 48; // digit 0
int c2 = 97; // character 'a'
if(isalpha(c1))
printf("\nc1 is alphabet");
else
printf("\nc1 is NOT alphabet");

if(isalpha(c2))
printf("\nc2 is alphabet");
else
printf("\nc2 is NOT alphabet");
getch();
}
Kết quả:
c1 is NOT alphabet
c2 is alphabet


Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
6

int iscntrl(int c);
Parameter:
c : tham số đầu vào kiểu int

Remark:
Hàm iscntrl( ) kiểm tra tham số c. Nếu c là kí tự điều khiển (nằm từ 0x00 – 0x1F,
0x7F), hàm sẽ trả về giá trị khác 0. Và nếu c không phải là kí tự điều khiển, hàm sẽ
trả về giá trị 0.
Ví dụ: kiểm tra c1 = 10 và c2 = 19 có phải là kí tự điều khiển không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 10, c2 = 19;
if(iscntrl(c1))
printf("\nc1 is control character");
else
printf("\nc1 is NOT control character");

if(iscntrl(c2))
printf("\nc2 is control character");
else
printf("\nc2 is NOT control character");

getch();
}
Kết quả:
c1 is control character
c2 is control character


Thư viện hàm ngôn ngữ lập trình C


vncoding.net Page
7

int isdigit(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isdigit( ) kiểm tra tham số c. Nếu c là số thập phân(0 – 9), hàm sẽ trả về giá trị
khác 0. Và nếu c không phải là số thập phân, hàm sẽ trả về giá trị 0.
Ví dụ: kiểm tra c1 = 50 và c2 = 54 có phải là số thập phân không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 50, c2 = 54;
if(isdigit(c1))
printf("\nc1 is decimal digit");
else
printf("\nc1 is NOT decimal digit");

if(isdigit(c2))
printf("\nc2 is decimal digit");
else
printf("\nc2 is NOT decimal digit");

getch();
}


Kết quả:
c1 is decimal digit
c2 is decimal digit


Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
8

int isgraph(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isgraph( ) kiểm tra tham số c. Nếu c là kí tự có thể in được(từ 0x21 – 0x7E),
hàm sẽ trả về giá trị khác 0. Và nếu c không phải là kí tự in được, hàm sẽ trả về giá
trị 0.
Ví dụ: kiểm tra c1 = 40 (kí tự @) và c2 = 7 (tiếng chuông) có phải là kí tự in được
không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 40; // character '@'
int c2 = 7; // bell sound
if(isgraph(c1))
printf("\nc1 is printable character");

else
printf("\nc1 is NOT printable character");

if(isgraph(c2))
printf("\nc2 is printable character");
else
printf("\nc2 is NOT printable character");

getch();
}

Kết quả:
c1 is printable character
c2 is NOT printable character
Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
9

int islower(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm islower( ) kiểm tra tham số c. Nếu c là kí tự in thường(a – z), hàm sẽ trả về giá
trị khác 0. Và nếu c không phải là kí tự in thường, hàm sẽ trả về giá trị 0.
Ví dụ: kiểm tra c1 = 97 và c2 = 65 có phải là kí tự in thường không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>


void main()
{
int c1 = 97; // character 'a'
int c2 = 65; // character 'A'
if(islower(c1))
printf("\nc1 is lowercase character");
else
printf("\nc1 is NOT lowercase character");

if(islower(c2))
printf("\nc2 is lowercase character");
else
printf("\nc2 is NOT lowercase character");

getch();
}
Kết quả:
c1 is lowercase character
c2 is NOT lowercase character


Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
10

int isupper(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:

Hàm isupper( ) kiểm tra tham số c. Nếu c là kí tự in hoa(A – Z), hàm sẽ trả về giá trị
khác 0. Và nếu c không phải là kí tự in hoa, hàm sẽ trả về giá trị 0.
Ví dụ: kiểm tra c1 = 97 và c2 = 65 có phải là kí tự in hoa không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 97; // character 'a'
int c2 = 65; // character 'A'
if(isupper(c1))
printf("\nc1 is uppercase character");
else
printf("\nc1 is NOT uppercase character");

if(isupper(c2))
printf("\nc2 is uppercase character");
else
printf("\nc2 is NOT uppercase character");

getch();
}
Kết quả:
c1 is NOT uppercase character
c2 is uppercase character


Thư viện hàm ngôn ngữ lập trình C


vncoding.net Page
11

int isprint(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isprint( ) kiểm tra tham số c. Nếu c là kí tự in được (từ 0x20 – 0x7E), hàm sẽ
trả về giá trị khác 0. Và nếu c không phải là kí tự in được, hàm sẽ trả về giá trị 0.
Ví dụ: kiểm tra c1 = 32 và c2 = 69 có phải là kí tự in được không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 32; // character space
int c2 = 69; // character 'E'
if(isprint(c1))
printf("\nc1 is printing character");
else
printf("\nc1 is NOT printing character");

if(isprint(c2))
printf("\nc2 is printing character");
else
printf("\nc2 is NOT printing character");

getch();
}

Kết quả:
c1 is printing character
c2 is printing character


Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
12

int ispunct(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm ispunct( ) kiểm tra tham số c. Nếu c là kí tự in được (từ 0x20 – 0x7E, ngoại trừ
kí tự space, chữ cái và chữ số), hàm sẽ trả về giá trị khác 0. Và nếu c không phải là
kí tự in được, hàm sẽ trả về giá trị 0.
Ví dụ: kiểm tra c1 = 32 và c2 = 69 có phải là kí tự punctuation không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 32; // character space
int c2 = 69; // character 'E'
if(ispunct(c1))
printf("\nc1 is punctuation character");
else
printf("\nc1 is NOT punctuation character");


if(ispunct(c2))
printf("\nc2 is punctuation character");
else
printf("\nc2 is NOT punctuation character");

getch();
}
Kết quả:
c1 is NOT punctuation character
c2 is NOT punctuation character

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
13

int isspace(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isspace ( ) kiểm tra tham số c. Nếu c là kí tự trắng (từ 0x09 – 0x0D, 0x20 là
các kí tự: space, formfeed, newline, carriage return, tab, vertical tab), hàm sẽ trả về
giá trị khác 0. Và nếu c không phải là kí tự in được, hàm sẽ trả về giá trị 0.
Ví dụ: kiểm tra c1 = 32 và c2 = 9 có phải là kí tự trắng không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()

{
int c1 = 32; // character space
int c2 = 9; // horizontal tab
if(isspace(c1))
printf("\nc1 is space character");
else
printf("\nc1 is NOT space character");

if(isspace(c2))
printf("\nc2 is space character");
else
printf("\nc2 is NOT space character");

getch();
}
Kết quả:
c1 is space character
c2 is space character

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
14

int isxdigit(int c);
Parameter:
c : tham số đầu vào kiểu int
Remark:
Hàm isxdigit ( ) kiểm tra tham số c. Nếu c là chữ số hexa(A – F, a – f, 0 - 9), hàm sẽ
trả về giá trị khác 0. Và nếu c không phải là chữ số hexa, hàm sẽ trả về giá trị 0.

Ví dụ: kiểm tra c1 = 68 và c2 = 71 có phải là chữ số hexa không?
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c1 = 68; // character 'D'
int c2 = 71; // character 'G'
if(isxdigit(c1))
printf("\nc1 is hexadecimal digit ");
else
printf("\nc1 is NOT hexadecimal digit");

if(isxdigit(c2))
printf("\nc2 is hexadecimal digit ");
else
printf("\nc2 is NOT hexadecimal digit ");

getch();
}
Kết quả:
c1 is hexadecimal digit
c2 is NOT hexadecimal digit


Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
15


int tolower(int c);
Parameter:
c : kí tự đầu vào để convert thành kí tự in thường
Remark:
Hàm tolower ( ) kiểm tra tham số c và convert kí tự c thành kí tự in thường. Nếu c là
kí tự in hoa, hàm sẽ trả về kí tự in thường. Để đảm bảo hàm tolower( ) trả về kết quả
mong muốn, chúng ta cần dùng hàm isupper( ) để kiểm tra kí tự cần convert là kí tự
in hoa.
Ví dụ:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c = 68; // character 'D'
if(isupper(c))
{
printf("\n%c is uppercase character", c);
printf("\n%c is converted into lowercase: %c",c,
tolower(c));
}
else
{
printf("\n%c is not uppercase character", c);
}

getch();
}

Kết quả:
D is uppercase character
D is converted into lowercase: d

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
16

int toupper( int c );
Parameter:
c : kí tự đầu vào để convert thành kí tự in hoa
Remark:
Hàm toupper ( ) kiểm tra tham số c và convert kí tự c thành kí tự in hoa. Nếu c là kí
tự in thường, hàm sẽ trả về kí tự in hoa. Để đảm bảo hàm toupper( ) trả về kết quả
mong muốn, chúng ta cần dùng hàm islower( ) để kiểm tra kí tự cần convert là kí tự
in thường.
Ví dụ:
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

void main()
{
int c = 97; // character 'a'
if(islower(c))
{
printf("\n%c is lowercase character", c);
printf("\n%c is converted into uppercase: %c",c,
toupper(c));

}
else
{
printf("\n%c is not lowercase character", c);
}

getch();
}
Kết quả:
a is lowercase character
a is converted into uppercase: A

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
17

<math.h>
double exp(double x);
Parameter:
x: giá trị double
Remark:
Hàm exp( ) sẽ trả về giá trị e mũ x, nếu thành công.
- Nếu tràn trên (overflow), hàm sẽ trả về INF.
- Nếu tràn dưới (underflow), hàm sẽ trả về 0
Ví dụ:
#include <math.h>
#include <stdio.h>
#include <conio.h>


void main( void )
{
double x = 2.302585093, y;

y = exp( x );
printf( "exp( %f ) = %f\n", x, y );

getch();
}
Kết quả:
exp( 2.302585 ) = 10.000000




Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
18

double log(double x);
double log10(double x);
Parameter:
x: giá trị double
Remark:
Hàm log( ) tính logarit giá trị x.
- Hàm log( ) sẽ trả về giá trị logarit cơ số e (ln(x)) của x, nếu thành công
- Hàm log10( ) sẽ trả về logarit cơ số 10 của x, nếu thành công.
- Hàm log( ), log10() sẽ trả về giá trị không xác định, nếu x < 0.
- Hàm log( ), log10() sẽ trả về giá trị INF, nếu x = 0.

Ví dụ:
#include <math.h>
#include <stdio.h>
#include <conio.h>

void main( void )
{
double x = 9.0;
double y;

y = log( x );
printf( "log( %.2f ) = %f\n", x, y );
y = log10( x );
printf( "log10( %.2f ) = %f\n", x, y );

getch();
}
Kết quả:
log( 9.00 ) = 2.197225
log10( 9.00 ) = 0.954243

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
19

double pow(double x, double y);
Parameter:
x: cơ số
y: số mũ

Remark:
Hàm sẽ trả về giá trị x^y. Nếu có tràn trên hoặc tràn dưới, hàm sẽ không thông báo
message lỗi.
- x > 0 hoặc x < 0 và y = 0, Hàm trả về giá trị 1
- x = 0 và y = 0, hàm trả về giá trị 1
- x = 0 và y < 0, hàm trả về INF
Ví dụ:
#include <math.h>
#include <stdio.h>
#include <conio.h>

void main( void )
{
double x = 2.0, y = 3.0, z;

z = pow( x, y );
printf( "%.1f to the power of %.1f is %.1f\n", x, y, z );
getch();
}
Kết quả:
2.0 to the power of 3.0 is 8.0




Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
20


double sqrt(double x);
Parameter:
x: giá trị không âm
Remark:
Hàm sqrt( ) sẽ trả về căn bậc 2 của x. Nếu x < 0, hàm sẽ trả về giá trị không xác định
NaN.
Ví dụ:
#include <math.h>
#include <stdio.h>
#include <conio.h>


int main( void )
{
double question = 45.35, answer;
answer = sqrt( question );
if( question < 0 )
printf( "Error: sqrt returns %f\n", answer );
else
printf( "The square root of %.2f is %.2f\n",
question, answer );

getch();
}
Kết quả:
The square root of 45.35 is 6.73





Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
21

double ceil(double x);
Parameter:
X: giá trị double
Remark:
Hàm ceil( ) trả về giá trị nguyên nhỏ nhất, lớn hơn hoặc bằng x
Ví dụ:
#include <math.h>
#include <stdio.h>
#include <conio.h>

int main( void )
{
double question = 45.35, answer;
answer = ceil( question );
printf("\nceil(%.3f) = %.2f", question, answer);

getch();
}
Kết quả:
ceil(45.350) = 46.00









Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
22

double floor(double x);
Parameter:
X: tham số đầu vào double
Remark:
Hàm floor( ) trả về giá trị lớn nhất và nhỏ hơn hoặc bằng x.
Ví dụ:
#include <math.h>
#include <conio.h>
#include <stdio.h>

void main( void )
{
double y;

y = floor( 2.8 );
printf( "The floor of 2.8 is %f\n", y );
y = floor( -2.8 );
printf( "The floor of -2.8 is %f\n", y );

y = ceil( 2.8 );
printf( "The ceil of 2.8 is %f\n", y );
y = ceil( -2.8 );

printf( "The ceil of -2.8 is %f\n", y );

getch();
}
Kết quả:
The floor of 2.8 is 2.000000
The floor of -2.8 is -3.000000
The ceil of 2.8 is 3.000000
The ceil of -2.8 is -2.000000

Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
23

double fabs(double x);
Paramter:
x: tham số đầu vào double
Remark:
Hàm fabs( ) trả về giá trị tuyệt đối của x.
Ví dụ:
#include <math.h>
#include <conio.h>
#include <stdio.h>

void main( void )
{
double y;

y = fabs(-9.5);

printf("\nAbsolute value of -9.5 is: %.2f", y);

getch();
}
Kết quả:
Absolute value of -9.5 is: 9.50







Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
24

double ldexp(double x, int exp);
Parameter:
x: cơ số
exp: số mũ
Remark:
Hàm ldexp( ) trả về tích x nhân với 2^exp.
Ví dụ:
#include <math.h>
#include "conio.h"
#include <stdio.h>

int main( void )

{
double x = 4.0, y;
int p = 3;

y = ldexp( x, p );
printf( "%2.1f times two to the power of %d is %2.1f\n",
x, p, y );
getch();
}
Kết quả:
4.0 times two to the power of 3 is 32.0






Thư viện hàm ngôn ngữ lập trình C

vncoding.net Page
25

double frexp(double x,int *expptr);
Parameter:
x: tham số đầu vào double
expptr: Con trỏ trỏ tới vùng nhớ lưu giá trị mũ ( exponent)
Remark:
- Hàm frexp( ) chia nhỏ số dấu phẩy động x thành mantissa (m) và exponent( n).
Trong đó, giá trị tuyệt đối của m ( 0.5 <= m < 1.0) và x = m*2^n. Số mũ n
exponent được lưu tại vùng nhớ được trỏ tới bởi con trỏ expptr

- Hàm frexp( ) trả về phần mantissa. Nếu x = 0, mantissa và exponent đều bằng 0.
Nếu expptr = NULL, thì đầu vào không hợp lệ.
Ví dụ:
#include <math.h>
#include "conio.h"
#include <stdio.h>


int main( void )
{
double x, y;
int n;

x = 16.4;
y = frexp( x, &n );
printf( "frexp( %f, &n ) = %f, n = %d\n", x, y, n );
getch();
}
Kết quả:
frexp( 16.400000, &n ) = 0.512500, n = 5



×