You are on page 1of 117

http://vietjack.com/cprogramming/index.

jsp

Copyright vietjack.com

Mc lc
Gii thiu v Ngn ng C ..................................................................................................... 6
i vi c gi ...................................................................................................................... 6
iu kin tin ................................................................................................................... 6
Tng quan v Ngn ng C ................................................................................................... 6
S tht v ngn ng C ..................................................................................................... 7
Ti sao li s dng C? ...................................................................................................... 7
Chng trnh C ................................................................................................................ 8
Ci t mi trng C ............................................................................................................ 8
Ci t mi trng cc b - Local ..................................................................................... 8
Text Editor ........................................................................................................................ 8
B bin dch C .................................................................................................................. 8
Ci t trn mi trng UNIX/Linux .................................................................................. 9
Ci t trn mi trng Mac OS ....................................................................................... 9
Ci t trn Windows...................................................................................................... 10
Cu trc chng trnh C ..................................................................................................... 10
Chng trnh C: Hello World........................................................................................... 10
Bin dch & Thc thi Chng trnh C .............................................................................. 11
C php C c bn .............................................................................................................. 12
Cc Token trong C.......................................................................................................... 12
Du chm phy ; trong C ................................................................................................ 12
Comment trong C ........................................................................................................... 13
nh danh (Identifier) trong C .......................................................................................... 13
Cc t kha trong C........................................................................................................ 13
Khong trng trong C...................................................................................................... 14
Kiu d liu trong C ............................................................................................................ 14
Kiu integer..................................................................................................................... 15
Kiu du chm ng (Floating-Point) .............................................................................. 17
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 1

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Kiu void ......................................................................................................................... 18


Bin trong C........................................................................................................................ 19
nh ngha bin trong ngn ng C: ................................................................................. 19
Khai bo bin trong ngn ng C: .................................................................................... 20
V d ............................................................................................................................... 21
Lvalue v Rvalue trong C: ............................................................................................... 22
Hng s trong C.................................................................................................................. 23
Hng s nguyn - Interger .............................................................................................. 23
Hng s du chm ng ................................................................................................ 24
Hng s k t ................................................................................................................. 24
Hng s chui (string) ..................................................................................................... 26
nh ngha hng s......................................................................................................... 26
S dng b tin x l #define ......................................................................................... 26
S dng t kha const ................................................................................................... 27
Lp lu tr trong C ............................................................................................................. 28
Lp lu tr auto.............................................................................................................. 28
Lp lu tr register ......................................................................................................... 29
Lp lu tr static............................................................................................................. 29
Lp lu tr extern ........................................................................................................... 30
Ton t trong C .................................................................................................................. 31
Ton t s hc................................................................................................................ 32
Ton t quan h ............................................................................................................. 33
Ton t logic................................................................................................................... 34
Ton t so snh bit ......................................................................................................... 35
Ton t gn .................................................................................................................... 38
Cc ton t hn hp sizeof & ternary ......................................................................... 40
Th t u tin ton t trong C ........................................................................................ 41
iu khin lung trong C..................................................................................................... 43
Ton t ? : ...................................................................................................................... 44
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 2

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Vng lp trong C................................................................................................................. 44


Cc lnh iu khin vng lp .......................................................................................... 46
Vng lp v hn.............................................................................................................. 46
Hm trong C ....................................................................................................................... 47
nh ngha mt hm ....................................................................................................... 47
V d: .............................................................................................................................. 48
Khai bo hm ................................................................................................................. 49
Gi hm.......................................................................................................................... 49
Tham s ca hm:.......................................................................................................... 50
Quy tc phm vi trong C ..................................................................................................... 51
Bin cc b..................................................................................................................... 52
Bin ton cc .................................................................................................................. 52
Tham s chnh thc........................................................................................................ 54
Khi to bin ton cc v bin cc b............................................................................. 55
Mng trong Ngn ng C ..................................................................................................... 55
Khai bo mng trong C ................................................................................................... 56
Khi to mng trong C.................................................................................................... 56
Truy cp cc phn t mng trong C................................................................................ 57
Chi tit v mng trong C.................................................................................................. 58
Con tr trong C ................................................................................................................... 59
Con tr l g? .................................................................................................................. 60
Cch s dng con tr? ................................................................................................... 61
Con tr NULL trong ngn ng C ..................................................................................... 62
Chi tit v con tr:............................................................................................................ 62
Chui trong C...................................................................................................................... 63
Cu trc trong C.................................................................................................................. 66
nh ngha mt cu trc .................................................................................................. 66
Truy cp cc thnh phn ca cu trc ............................................................................ 67
Cc cu trc nh cc tham s hm ................................................................................ 69
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 3

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Con tr ti cu trc.......................................................................................................... 71
Cc trng bit - Bit Fields................................................................................................ 73
Union trong C...................................................................................................................... 73
nh ngha mt Union ..................................................................................................... 74
Truy xut thnh vin ca Union....................................................................................... 75
Trng Bit trong C.............................................................................................................. 77
Khai bo Trng Bit ....................................................................................................... 79
T kha typedef trong C ..................................................................................................... 81
typedef vs #define ........................................................................................................... 82
Input & Output trong C ........................................................................................................ 83
Cc File tiu chun ......................................................................................................... 84
Hm getchar() & putchar() .............................................................................................. 84
Hm gets() & puts()......................................................................................................... 85
Hm scanf() v printf()..................................................................................................... 86
Nhp - Xut File trong C...................................................................................................... 87
M file............................................................................................................................. 87
ng file.......................................................................................................................... 88
Ghi mt file...................................................................................................................... 89
c file............................................................................................................................ 89
Hm Nhp Xut nh phn ............................................................................................ 91
B tin x l trong C............................................................................................................ 91
V d b tin x l ........................................................................................................... 92
Cc Macro nh ngha trc ........................................................................................... 93
Ton t tin x l ............................................................................................................ 95
Phn tip tc macro (\) ........................................................................................... 95
Du thng (#) ........................................................................................................... 95
Ton t Token Pasting (##) .................................................................................. 95
Ton t defined() .................................................................................................... 96
Macro tham s................................................................................................................ 97
http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 4

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Header File trong C............................................................................................................. 98


C php Include.............................................................................................................. 98
Hot ng Include........................................................................................................... 98
Once-Only Header.......................................................................................................... 99
Include vi cc iu kin ................................................................................................. 99
p kiu trong C ................................................................................................................. 100
S nng cp integer ..................................................................................................... 101
Php chuyn i s hc thng thng ......................................................................... 102
X l li trong C ................................................................................................................ 103
Hm perror() v strerror() v thng bo li errno............................................................ 103
Li chia cho s 0 ........................................................................................................... 105
Trng thi thot chng trnh........................................................................................ 105
quy trong C.................................................................................................................. 106
Tnh ton giai tha ........................................................................................................ 107
Dy Fibonacci ............................................................................................................... 108
Tham s bin trong C ....................................................................................................... 108
Qun l b nh trong C .................................................................................................... 111
Cp pht b nh ng.................................................................................................. 111
Thay i v gii phng b nh...................................................................................... 113
Tham s dng lnh trong C .............................................................................................. 114
C - Ti liu tham kho ....................................................................................................... 117
Cc ng link hu ch v C ........................................................................................ 117

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 5

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Gii thiu v Ngn ng C


Ngn ng C l ngn ng chng trnh my tnh theo cu lnh, th tc v theo mc ch chung
c pht trin nm 1972 bi Dennis M. Ritchie Bell Telephone lab pht trin H iu hnh
UNIX.
Ngn ng C l ngn ng my tnh c s dng rng ri nht, n cng vi ngn ng Java l
nhng ngn ng lp trnh ph bin hng u, c s dng rt rng ri trong gii lp trnh vin
hin i.
Lot bi hng dn ca chng ti da trn ngun ti liu ca: Tutorialspoint

i vi c gi
Bi hng dn ny c thit k cho nhng lp trnh vin cn tm hiu ngn ng C nh l ngn
ng bt u cho vic tip cn th gii phn mm. Bi hng dn s a cho bn y nhng
hiu bit v ngn ng C t bt u n mc nng cao.

iu kin tin
Trc khi bt u vi bi hc ny, bn nn c nhng hiu bit c bn v cc thut ng v
Chng trnh my tnh. Nhng hiu bit c bn v bt c mt ngn ng lp trnh no cng c th
gip bn d dng hiu cc khi nim trong ngn ng C v tin nhanh trn con ng hc tp.

Tng quan v Ngn ng C


Ngn ng C l ngn ng lp trnh bc cao c pht trin ban u bi Dennis M.Ritchie pht
trin h thng lp trnh UNIX Bell Labs. C c pht trin ban u trn my tnh DEC PDP-11
nm 1972.
Nm 1978, Brian Kernighan v Dennis Ritchie cng khai bn m t u tin ca ngn ng C, c
bit n di tn tiu chun K&R.
H iu hnh UNIX, b bin dch C, l tt c nhng g cn thit cho vic vit cc chng trnh vi
ngn ng C. Ngn ng C hin ti c s dng rng ri trong mi trng chuyn nghip v nhng
l do sau y:

D dng trong vic hc

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 6

http://vietjack.com/cprogramming/index.jsp

Ngn ng c cu trc

N cung cp cc chng trnh hiu qu.

N c th x l cc hot ng tng thp.

N c bin dch bi nhiu nn tng khc nhau.

Copyright vietjack.com

S tht v ngn ng C

C c pht trin ban u vit H iu hnh c tn UNIX.

C l ngn ng k tha ca ngn ng B c gii thiu nhng nm 1970.

Ngn ng c chun ha nm 1988 bi Vin tiu chun quc gia Hoa K (ANSI).

H iu hnh UNIX vit bi ngn ng C nm 1973.

Ngy nay C c s dng rng ri nht trong cc ngn ng lp trnh h thng.

Hu ht cc ng dng ln u c s k tha, trin khai t ngn ng C.

H iu hnh Linux v h qun tr c s d liu MySQL c vit bi ngn ng C.

Ti sao li s dng C?
C c pht trin ban u cho vic pht trin h thng, c bit l cc h iu hnh. C c tha
nhn nh l mt trong cc ngn ng pht trin h thng bi n cung cp code v chy mt on
code mt cc nhanh chng nh cc ngn ng kiu Assemly. Vi v d v s dng C nh sau:

H iu hnh

B bin dch cc ngn ng

Cc chng trnh dch m s

Cc trnh Text Editor (notepad ...)

Cc trnh in n

Network Drivers

Cc chng trnh hin i

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 7

http://vietjack.com/cprogramming/index.jsp

C s d liu

Ngn ng thng dch

Tin ch

Copyright vietjack.com

Chng trnh C
Mt chng trnh C c th thay i t 3 dng n hng triu dng code, v nn c vit trong
mt hoc nhiu file vi nh dng .c, v d hello.c. Bn c th s dng vi, vim hoc bt k
trnh editor no vit chng trnh C thnh mt file.
Bi hng dn gi s bn bit cch s dng cc trnh son tho v cch vit source code - m
ngun bn trong mt file chng trnh.

Ci t mi trng C
Ci t mi trng cc b - Local
Nu bn ang mun ci t chng trnh C, bn cn phi s dng 2 phn mm trn my tnh ca
bn: (a) Chng trnh son vn bn - Text Editor v (b) B bin dch C.

Text Editor
c s dng son tho cc chng trnh. V d v mt vi trnh editor nh Window Notepad,
Notepad ++, vim hay vi
Tn v cc phin bn ca cc trnh editor c th thay i theo cc h iu hnh. V d, Notepad
c s dng trn Windows, hoc vim hay vi c s dng trn Linux hoc UNIX.
Cc file bn to trong trnh editor c gi l source file (file ngun) v cha cc chng trnh
code. Cc file trong chng trnh C thng c t tn vi phn m rng ".c".
Trc khi bt u chng trnh ca bn, hy chc chn bn c mt trnh editor trn my tnh v
bn c kinh nghim vit cc chng trnh my tnh, lu tr trong file v thc thi n.

B bin dch C
M ngun c vit trong file ngun di dng c th c c. N s c bin dch thnh m
my, cho CPU c th thc hin cc chng trnh ny da trn cc lnh c vit.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 8

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

B bin dch c s dng bin dch m ngun (source code) ca bn n chng trnh c th
thc thi. Ti gi s bn c kin thc c bn v mt b bin dch ngn ng lp trnh.
B bin dch thng dng nht l b bin dch GNU C/C++, mt khc bn c th c cc b bin dch
khc nh HP hoc Solaris vi H iu hnh tng ng.
Di y l phn hng dn gip bn cch ci t b bin dich GNU C/C++ trn cc h iu hnh
khc nhau. Ti ang cp n C/C++ bi v b bin dch GNU gcc hot ng cho c ngn ng C
v C++.

Ci t trn mi trng UNIX/Linux


Nu bn ang s dng Linux hoc UNIX, bn c th kim tra b GCC c ci t trn mi
trng ca bn cha bng lnh sau y:
$ gcc -v

Nu bn c b ci t GNU trn my tnh ca bn, sau n s phn hi mt thng bo sau:


Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr .......
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)

Nu b GCC cha c ci t, bn c th ci t n vi hng dn trn ng link di


y: http://gcc.gnu.org/install/
Bi hng dn ny c vit da trn Linux v tt c cc v d dc bin dch trn Cent OS ca
h thng Linux.

Ci t trn mi trng Mac OS


Nu bn s dng h iu hnh Mac OS X, cch n gin nht c GCC l download mi trng
pht trin Xcode, bn c th s dng b bin dch GNU cho C/C++.
Xcode c sn di link sau: developer.apple.com/technologies/tools/.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 9

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ci t trn Windows
ci t GCC trn Windows bn cn phi ci t MinGW. ci t MinGW, bn truy cp
vo www.mingw.org, v theo hng dn trn trang download ny. Download phin bn mi nht
cho chng trnh MinGW, di tn MinGW-<version>.exe.
Khi ci t MinWG, t nht bn phi ci t gcc-core, gcc-g++, binutils v MinGW runtime, nhng
bn c th ci t nhiu hn.
Thm th mc con bin trong ni ci t MinGW vo bin mi trng PATH ca bn, bn c th s
dng trc tip cc cng c di dng command line mt cc d dng.
Khi qu trnh ci t hon tt, bn c th chy gcc, g++, ar, ranlib, dlltool v cc cng c GNU khc
trn Windows command line.

Cu trc chng trnh C


Trc khi chng ta nghin cu v cc khi to nn mt chng trnh C, u tin bn hy xem mt
chng trnh C mu.

Chng trnh C: Hello World


Mt chng trnh C bao gm nhng phn sau y:

Cc lnh tin x l

Cc hm

Cc bin

Cc lnh v biu thc

Cc comment

u tin hy xem on code n gin m s in ra mn hnh hai t Hello World:


#include <stdio.h>

int main()
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 10

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

/* my first program in C */
printf("Hello, World! \n");

return 0;
}

Hy xem cc phn ca chng trnh bn trn:


1. Dng u tin ca chng trnh #include <stdio.h> l lnh tin x l, nhc nh b bin dch
C thm tp stdio.h trc khi bin dch.
2. Dng tip theo int main() l hm main, ni chng trnh bt u.
3. Dng tip theo /*...*/ l dng comment c b qua bi b bin dch compiler v c dng
thm cc ch thch cho chng trnh. y c gi l phn comment ca chng trnh.
4. Dng tip theo printf(...) l mt hm chc nng khc ca ngn ng C , in ra thng ip
Hello, World! hin th trn mn hnh.
5. Dng tip theo return 0; kt thc hm chnh v tr v gi tr 0.

Bin dch & Thc thi Chng trnh C


Hy cng xem cch lu tr on source code bn trn v cch bin dch v chy n. Di y
l nhng bc c bn:
1. M mt trnh editor v thm dng code trn.
2. Lu tp di dng hello.c
3. M dng nhc lnh v i ti th mc lu tr file.
4. Son tho gcc hello.c v nhn Enter bin dch dng code trn.
5. Nu khng c li trn on code bn trn, dng nhc lnh s a bn n dng tip theo
v to ra file a.out c th thc thi.
6. By gi, son tho a.out thc hin chng trnh ny.
7. By gi bn s thy dng ch Hello, World c in trn mn hnh.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 11

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

$ gcc hello.c
$ ./a.out
Hello, World!

Bn phi chc chn b bin dch gcc c ci t trn my tnh ca bn v bn ang chy n
trong th mc cha file ngun hello.c.

C php C c bn
Bn bit v cu trc c bn ca chng trnh C, by gi bn s d dng hiu c nhng khi
c bn trong ngn ng C.

Cc Token trong C
Trong ngn ng C bao gm rt nhiu cc token khc nhau v mt token c th l mt t kha, mt
nh danh, mt hng s, mt chui hoc mt k t. V d, dng lnh C di y bao gm 5 token
sau:
printf("Hello, World! \n");

Cc token ring r nh sau:


printf
(
"Hello, World! \n"
)
;

Du chm phy ; trong C


Chng trnh C, du chm phy l mt phn kt thc lnh. Thc t mi lnh trong C phi kt thc
bi mt du chm phy. N thng bo phn kt thc ca mt thuc tnh logic.
V d di y l 2 on lnh:
printf("Hello, World! \n");
return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 12

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Comment trong C
Ch thch ging nh vic tr gip trong chng trnh C v c b qua bi b bin dch. N bt
u vi /* v kt thc vi k t */ nh di y:
/* my first program in C */

Bn khng th c thm mt phn comment bn trong phn comment ny.

nh danh (Identifier) trong C


Mt nh danh trong C l mt tn c s dng nh mt bin, hm v mt thnh phn c ngi
dng nh ngha. Mt nh danh c th bt u bi cc k t A n Z, a n z v du underscore _
v s 0 n 9.
C khng cho php cc du nh @, $, v % trong tn nh danh. C l ngn ng phn bit ch
thng - ch hoa. Do , Manpower v manpower l hai nh danh khc nhau trong C. Di y
l mt vi v d nh danh hp l:
mohd

zara

abc

move_name

a_123

myname50

_temp

a23b9

retVal

Cc t kha trong C
Di y l danh sch cc t kha c dnh ring trong ngn ng C. Cc nh danh hay bin,
hng s khng th t tn ging cc t kha di y, nu khng chng trnh s bo li.

auto

else

long

switch

break

enum

register

typedef

case

extern

return

union

char

float

short

unsigned

const

for

signed

void

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 13

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

continue

goto

sizeof

volatile

default

if

static

while

do

int

struct

_Packed

double

Khong trng trong C


Mt dng c th cha khong trng, c th l nhng dng comment, c bit n nh dng
trng khi cng c b bin dch b qua khi bin dch.
Mt khong trng trong C c th l mt on trng, tab, newline hoc comment. Mt khong trng
chia mt phn ca lnh thnh nhiu phn v gip b bin dch phn bit mt thnh phn trong mt
lnh, nh int , kt thc thnh phn v bt u thnh phn tip theo nh lnh sau:
int age;

Phi c t nht mt khong trng k t gia int v age b bin dch hiu v phn bit c
chng. Mt khc, xem lnh di y:
fruit = apples + oranges;

// get the total fruit

Khng cn thit khong trng gia fruit v du =, hoc gia du = v apples.

Kiu d liu trong C


Trong ngn ng lp trnh C, cc kiu d liu m ch phn m rng ca h thng c s dng cho
khai bo bin vi ci kiu khc nhau. Kiu ca bin xc nh lng b nh c dng lu bin
v cch cc bit c lu tr khi c thng dch.
Cc kiu bin trong C c phn chia nh sau:

STT Kiu v miu t

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 14

http://vietjack.com/cprogramming/index.jsp
1

Copyright vietjack.com

Kiu c bn:
L cc kiu d liu s hc v bao gm 2 kiu chnh: a) kiu integer v b)
kiu du chm ng.

Kiu lit k:
y l cc kiu s hc v c dng nh ngha cc bin m n c th
c gn trc mt s lng nht nh gi tr integer qua sut chng
trnh.

Kiu void:
Kiu nh danh void l kiu c bit th hin rng khng c gi tr no.

Kiu pht trin t c bn:


Bao gm cc kiu : a) con tr, b) kiu mng, c) kiu cu trc, d) kiu union
v e) kiu function (hm).

Cc kiu d liu mng v cu trc c s dng trong tp hp nh cc kiu d liu gp. Cc kiu
l hm ch nh loi kiu m hm tr v. Chng ta s xem cc kiu d liu c bn phn di y,
trong nhng kiu cn li s c nhc n cc chng sau.

Kiu integer
Bng di y a cho bn nhng hiu bit chi tit v kiu s nguyn vi c lu tr cng nh gii
hn ca n:

Kiu

C lu tr

Dy gi tr

char

1 byte

-128 ti 127 hoc 0 ti 255

unsigned

1 byte

0 ti 255

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 15

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

char

signed char

1 byte

-128 ti 127

int

2 hoc 4
bytes

-32,768 ti 32,767 hoc -2,147,483,648 ti


2,147,483,647

unsigned int

2 hoc 4
bytes

0 ti 65,535 hoc 0 ti 4,294,967,295

short

2 bytes

-32,768 ti 32,767

unsigned
short

2 bytes

0 ti 65,535

long

4 bytes

-2,147,483,648 ti 2,147,483,647

unsigned
long

4 bytes

0 ti 4,294,967,295

Bn c th ly c chnh xc ca cc kiu ca cc bin trn nhng nn tng c th, bn c th s


dng ton t sizeof. Biu thc sizeof(kieu) tr v c ca i tng hoc kiu di dng byte.
Di y l v d ly v size ca i tng int trn bt k my tnh no.
#include <stdio.h>
#include <limits.h>

int main()
{
printf("Storage size for int : %d \n", sizeof(int));

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 16

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

return 0;
}

Khi bn bin dch v thc thi cc lnh bn trn, n s cung cp kt qu di y trn h iu hnh
Linux:
Storage size for int : 4

Kiu du chm ng (Floating-Point)


Bng di y a cho bn nhng hiu bit c th v cc kiu du chm ng tiu chun vi c
lu tr v di gi tr cng nh chnh xc:

Kiu

C lu tr

Dy gi tr

chnh xc

float

4 byte

1.2E-38 ti 3.4E+38

6 v tr thp phn

double

8 byte

2.3E-308 ti 1.7E+308

15 v tr thp phn

long double

10 byte

3.4E-4932 ti 1.1E+4932

19 v tr thp phn

float.h trong Header file nh ngha cc macro cho php bn s dng cc gi tr ny v cc kiu c
th khc v gi tr biu din nh phn ca s thc trong chng trnh ca bn. Di y l v d s
in ra c ca kiu float cng nh di gi tr ca n:
#include <stdio.h>
#include <float.h>

int main()
{
printf("Storage size for float : %d \n", sizeof(float));
printf("Minimum float positive value: %E\n", FLT_MIN );
printf("Maximum float positive value: %E\n", FLT_MAX );
printf("Precision value: %d\n", FLT_DIG );

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 17

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

return 0;
}

Khi bn bin dch v thc thi chng trnh trn, n s cung cp kt qu di y trn Linux:
Storage size for float : 4
Minimum float positive value: 1.175494E-38
Maximum float positive value: 3.402823E+38
Precision value: 6

Kiu void
Kiu void xc nh khng c gi tr no. N c s dng trong 3 trng hp sau y:

STT Kiu v miu t

Hm tr v void
C rt nhiu hm trong ngn ng C m khng tr v d liu no v bn c
th ni rng l hm void. Mt hm m khng tr v gi tr no c kiu l
void. V d: void exit (int status);

Hm vi tham s void
C nhng hm trong C m khng chp nhn bt k tham s. Mt hm vi
khng c tham s no c th chp nhu l mt void. V d: int rand(void);

Con tr ti void
Mt con tr c kiu void * i din cho a chi ca i tng, ch khng
phi l mt kiu. V d hm cp pht b nh void *malloc (size_t size);tr
v mt con tr void c th p kiu sang bt k mt i tng no.

Bn c th khng hiu cc im ny v kiu void, chng ta nn tip tc v trong cc chng tip


theo, chng ta s nhc li v cc im ny.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 18

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Bin trong C
Mt bin trong C khng l g nhng l mt tn c a ra n b nh lu tr chng trnh c
th thao tc. Mi bin trong C c mt kiu xc nh, xc nh c v layout cho b nh bin .
Phm vi ca gi tr c th c d tr trong b nh, vic thit lp cc biu thc c th c p
dng vi bin.
Tn ca bin c th bao gm ch ci, ch s v du gch di (_), nhng n phi bt u bng
k t ch ci hoc du gch di. Ch hoa v ch thng l hai i tng phn bit bi v C l
ngn ng phn bit ch hoa - ch thng. Da vo nhng loi c bn gii thch chng
trc, c nhng loi kiu ca bin c bn nh sau:

Kiu

Miu t

char

L bin s nguyn, c kch c 1 byte.

int

L kiu cho s t nhin.

float

Gi tr du chm ng chnh xc n.

double

Gi tr du chm ng chnh xc kp.

void

i din cho loi khng c kiu.

Ngn ng lp trnh C cho php nh ngha cc loi kiu bin khc nhau, c th xem cc chng
sau nh bin lit k, bin con tr, bin mng, bin cu trc, bin Union, .

nh ngha bin trong ngn ng C:


nh ngha bin ngha l thng bo vi trnh bin dch ni v cch to lu tr cho bin . Mt nh
ngha bin xc nh mt kiu d liu v cha danh sch ca mt hay nhiu bin ca kiu nh
sau:
type variable_list;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 19

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

y, type l ca kiu d liu ca ngn ng C nh char, w_char, int, float, double, bool hay bt
k kiu i tng c ngi dng nh ngha variable_list c th bao gm mt hoc nhiu tn
nh danh ngn cch nhau bi du phy. Vi v d khai bo hp l ca bin nh sau:
int

i, j, k;

char

c, ch;

float

f, salary;

double d;

Dng int i, j, k; va khai bo v nh ngha cho bin i, j, k v hng dn trnh bin dch to cc
bin di tn i, j, k vi kiu int.
Bin c th c khi to (c gn cc gi tr ban u) trong khai bo ca n. Mt phn khi to
bao gm mt du "=" theo sau bi mt biu thc hng s s nh sau:
type variable_name = value;

Vi v d di y:
extern int d = 3, f = 5;

// declaration of d and f.

int d = 3, f = 5;

// definition and initializing d and f.

byte z = 22;

// definition and initializes z.

char x = 'x';

// the variable x has the value 'x'.

Vi nh ngha khng c gi tr khi to, bin static c th lu tr vi gi tr NULL, (tt c cc byte


c gi tr 0), gi tr ban u ca tt c cc bin ca tt c cc kiu khc c gi tr khng xc nh.

Khai bo bin trong ngn ng C:


Khai bo bin cung cp mt s bo m cho trnh bin dch nhn bit rng khng c bin no vi
kiu v tn ging n c khai bo trc , nu khng s xy ra li qu trnh bin dch. Mt
khai bo bin ch c ngha thi gian bin dch, trnh bin dch cn khai bo bin c th ti thi
gian ni vi chng trnh.
Mt khai bo bin rt hu dng khi bn s dng ng thi nhiu file v bn nh ngha bin ca
bn mt trong nhng file . Bn c th s dng t kha extern khai bo bin bt k ni
u. Do bn c th khai bo mt bin nhiu ln trong chng trnh C nhng ch phi nh ngha
trong mt file, mt hm hay mt khi code.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 20

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

V d
Th v d di y, ni bin c khai bo trn u, nhng chng c nh ngha v khi to
trong hm main:
#include <stdio.h>

// Variable declaration:
extern int a, b;
extern int c;
extern float f;

int main ()
{
/* variable definition: */
int a, b;
int c;
float f;

/* actual initialization */
a = 10;
b = 20;

c = a + b;
printf("value of c : %d \n", c);

f = 70.0/3.0;
printf("value of f : %f \n", f);

return 0;
}

Khi on code bn trn c bin dch v thc thi. N s in ra kt qu di y:


value of c : 30

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 21

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

value of f : 23.333334

Vi khi nim c th p dng trong khai bo hm ni bn cung cp tn hm thi im n khai


bo v nh ngha n bt k ni u. V d:
// function declaration
int func();

int main()
{
// function call
int i = func();
}

// function definition
int func()
{
return 0;
}

Lvalue v Rvalue trong C:


C hai kiu Expression - Din t (Thnh ng) trong C :
1. lvalue : Expression m ch ti v tr b nh l "lvalue". Mt lvalue c th xut hin hoc bn
tri hoc bn phi ca mt php gn.
2. rvalue : Lin quan ti gi tr d liu c lu tr ti mt s a ch trong b nh. Mt rvalue
l mt expression m khng th c mt gi tr c gn ti n, ngha l mt rvalue c th
xut hin bn phi nhng khng phi bn tri ca mt php gn.
Cc bin l cc lvalue v thng xut hin cnh tri ca php gn. Cc hng s l s l rvalue
v khng th c gn v khng th xut hin bn cnh tri ca php gn. Di y l mt khai
bo hp l:
int g = 20;

Nhng sau y l mt khai bo khng hp l v s c thng bo li:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 22

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

10 = 20;

Hng s trong C
Hng s (constant) hng n nhng gi tr c nh m chng trnh khng th thay i trong qu
trnh thc thi. Nhng gi tr c nh cng c gi l literals.
Hng s c th l mt kiu d liu bt k no nh kiu d liu integer, float, character hay string.
C nhng hng s kiu lit k (enumeration).
Mt hng s c th c coi nh mt bin thng ngoi vic gi tr ca n khng th thay i sau
khi c nh ngha.

Hng s nguyn - Interger


Gi tr integer c th l decimal, octal hoc hng s hexadecimal. Tin t (prefix) xc nh c bn
hay c s: 0x hay 0X cho kiu hexadecimal (16), 0 cho octal (8), v khng c g l loi decimal.
Mt gi tr hng s c th c phn kt thc (suffix) l s kt hp ca U v L, cho kiu Unsigned v
kiu Long. Phn kt thc c th l ch hoa hoc ch thng theo bt c th t no.
Di y l v d cho kiu hng s integer:
212

/* Hp l */

215u

/* Hp l */

0xFeeL

/* Hp l */

078

/* Khng hp l: 8 khng l k s octal */

032UU

/* Khng hp l: khng th lp li mt suffix */

Di y l cc v d khc vi mt vi cch khai bo vi kiu integer:


85

/* decimal */

0213

/* octal */

0x4b

/* hexadecimal */

30

/* int */

30u

/* unsigned int */

30l

/* long */

30ul

/* unsigned long */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 23

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Hng s du chm ng
Mt hng s du chm ng c mt phn integer, mt gi tr decimal, phn phn s v phn m.
Bn c th biu din gi tr du chm ng trong kiu thp phn v kiu phn s.
Khi biu din gi tr vi nh dng thp phn, bn phi thm phn integer, phn m hoc c hai.
Phn m c vit bi e hoc E.
Di y l vi v d cho phn du chm ng:
3.14159

/* Legal */

314159E-5L

/* Legal */

510E

/* Illegal: incomplete exponent */

210f

/* Illegal: no decimal or exponent */

.e55

/* Illegal: missing integer or fraction */

Hng s k t
Phn k t c ng m trong du nhy n ('), v d 'x' v c th c lu tr trong mt bin
n gin kiu char.
Mt k t c th l mt k t thng (v d 'x') hoc chui thot (e.g., '\t'), hoc mt k t ph
thng (e.g., '\u02C0').
C nhng k t c th trong C khi bt u bng du \ s c ngha c bit v c dng biu
din dng mi (\n), tab mi (\t). Di y l danh sch cc k t c bit:

Dy thot

ngha

\\

K t \

\'

K t '

\"

K t "

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 24

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

\?

K t ?

\a

Ting chung

\b

Backspace

\f

Form feed

\n

Dng mi

\r

Carriage return

\t

tab ngang

\v

tab dc

\ooo

S trong c s 8 ca 1 n 3 k s

\xhh . . .

S thp lc phn ca mt hoc nhiu k s

Sau y l v d ch mt s k t dy thot:
#include <stdio.h>

int main()
{
printf("Hello\tWorld\n\n");

return 0;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 25

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi on trn trn c bin dch v thc thi, kt qu sau s c in ra:


Hello

World

Hng s chui (string)


Hng s chui c bao vi du ngoc kp . Mt chui bao gm cc k t tng t vi hng s
k t: k t thun, chui thot v k t ph thng.
Bn c th chia cc dng di thnh nhiu dng s dng cc gi tr chui v ngn cch chng bi
cc khong trng.
Di y l mt vi v d vi hng s chui. Ba chui di y c gi tr ging nhau:
"hello, dear"

"hello, \

dear"

"hello, " "d" "ear"

nh ngha hng s
C 2 cch n gin trong C nh ngha hng s:
1. S dng b tin x l #define.
2. S dng t kha const.

S dng b tin x l #define


Di y l mu s dng b tin x l #define nh ngha mt hng s:
#define identifier value

Di y l v d chi tit:
#include <stdio.h>

#define LENGTH 10

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 26

http://vietjack.com/cprogramming/index.jsp
#define WIDTH

Copyright vietjack.com

#define NEWLINE '\n'

int main()
{

int area;

area = LENGTH * WIDTH;


printf("value of area : %d", area);
printf("%c", NEWLINE);

return 0;
}

Khi on code trn c bin dch v thc hin. N s in ra kt qu sau y:


value of area : 50

S dng t kha const


Bn c th s dng tin t const khai bo cc hng s vi mt kiu c th nh sau:
const type variable = value;

Di y l v d chi tit:
#include <stdio.h>

int main()
{
const int

LENGTH = 10;

const int

WIDTH

= 5;

const char NEWLINE = '\n';


int area;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 27

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

area = LENGTH * WIDTH;


printf("value of area : %d", area);
printf("%c", NEWLINE);

return 0;
}

Khi on code trn c bin dch v thc thi, n to ra kt qu sau:


value of area : 50

Ghi ch rng n l tt khi thc hnh nh ngha cc hng s trong CH HOA

Lp lu tr trong C
Mt lp lu tr nh ngha phm vi (nhn thy c) v thi gian tn ti ca mt bin hoc/v cc
hm trong chng trnh C. Nhng c t i trc kiu c th c thay i. Di y l nhng
lp lu tr, c th s dng trong chng trnh C.

auto

register

static

extern

Lp lu tr auto
Lp lu tr auto l lp lu tr mc nh cho tt c cc bin cc b:
{
int mount;
auto int month;
}

V d trn nh ngha hai bin trong cng mt lp lu tr, auto c th c s dng bn trong
hm, v d bin cc b.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 28

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Lp lu tr register
Lp lu tr register c th c s dng nh ngha bin cc b v c th c lu tr trong
mt vng ng k thay v RAM. iu ny ngha l bin ny c c ti a tng ng vi c ng
k.
{
register int

miles;

Lp lu tr register ch c s dng cho bin m yu cu truy cp nhanh nh b m. Ch


rng nh ngha register khng ng ngha vi bin c th lu tr trong mt thanh ghi. N
ngha l c th lu tr trong thanh ghi ph thuc vo phn cng v vi cc hn ch nht nh.

Lp lu tr static
Lp lu tr static hng dn trnh bin dch gi cc gi tr bin local tn ti trong thi gian sng
ca chng trnh thay v vic to ra v hy n mi ln chy qua phm vi . Do , to mt
bin local tnh cho php chng lu tr cc gi tr vi cc hm gi.
Lp static ny c th c p dng cho bin ton cc. Khi vic ny din ra, n gy ra phm vi ca
bin c gii hn trong file m n khai bo.
Trong lp trnh C, khi static c s dng ng vi lp, n dn n ch c mt bn copy ca lp
khai bo c chia s bi tt c cc i tng s dng lp ny.
#include <stdio.h>

/* function declaration */
void func(void);

static int count = 5; /* global variable */

main()
{
while(count--)
{
func();

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 29

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

}
return 0;
}
/* function definition */
void func( void )
{
static int i = 5; /* local static variable */
i++;

printf("i is %d and count is %d\n", i, count);


}

Bn c th khng hiu v d ny ny bi v bn c s dng bin ton cc, s c gii thiu bi


ti. Khi on code c bin dch v thc hin, n cung cp kt qu sau:
i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

Lp lu tr extern
Lp lu tr extern c s dng a tham chiu n cc bin ton cc m c nhn thy bi
tt c cc file chng trnh.
Khi bn c nhiu file v bn nh ngha cc bin cc b hoc hm, n s c s dng cc file
khc. hiu vn ny, extern c s dng khai bo bin ton cc hoc hm file khc.
T kha extern c s dng khi hai hoc nhiu file chia s chung mt bin hoc hm nh v d
di y:
File u tin: main.c
#include <stdio.h>

int count ;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 30

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

extern void write_extern();

main()
{
count = 5;
write_extern();
}

File th 2: support.c
#include <stdio.h>

extern int count;

void write_extern(void)
{
printf("count is %d\n", count);
}

Di y extern l t kha c s dng khai bo count dng th hai ni n c nh


ngha file th nht, main.c .By gi, bin dch 2 file nh sau:
$gcc main.c support.c

N s cung cp chng trnh thc thi a.out, khi chng trnh ny c chy s in ra kt qu sau
y:
5

Ton t trong C
Ton t l mt biu tng m ni vi trnh bin dch thc hin mt php ton hc nht nh hoc
thao tc hp l. Ngn ng C c sn rt nhiu ton t v cung cp cc kiu ton t sau y:

Ton t s hc

Ton t quan h

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 31

http://vietjack.com/cprogramming/index.jsp

Ton t logic

Ton t so snh bit

Ton t gn

Ton t hn hp

Copyright vietjack.com

Bi hng dn s gii thch ton t s hc, quan h, logic, so snh bit, gn v cc ton t khc,
tng loi mt.

Ton t s hc
Bng di y ch ra tt c cc ton t s hc c h tr bi ngn ng C. Gi s bin A c gi
tr 10 v bin B c gi tr 20:
Hin th cc V d

Ton
t

Miu t

V d

Thm hai ton hng

A + B s cho kt qu l
30

Tr gi tr ton hng hai t ton hng u A - B s cho kt qu l 10

Nhn hai ton hng

A * B s cho kt qu l
200

Chia ly phn nguyn hai ton hng

B / A s cho kt qu l 2

Chia ly phn d

B % A s cho kt qu l
0

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 32

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

++

Lng gia gi tr ton hng thm 1 n v

A++ s cho kt qu l
11

--

Lng gim gi tr ton hng mt n v

A-- s cho kt qu l 9

Ton t quan h
Bng di y ch ra tt c cc ton t quan h c h tr bi ngn ng C. Gi s rng
bin A c gi tr 10 v bin B c gi tr 20, ta c:
Hin th cc v d

Ton
t

Miu t

V d

==

Kim tra nu 2 ton hng bng nhau hay khng. Nu bng


th iu kin l true.

(A ==
B) l
khng
ng.

!=

Kim tra 2 ton hng c gi tr khc nhau hay khng. Nu


khng bng th iu kin l true.

(A !=
B) l
true.

>

Kim tra nu ton hng bn tri c gi tr ln hn ton hng


bn phi hay khng. Nu ln hn th iu kin l true.

(A >
B) l
khng
ng.

<

Kim tra nu ton hng bn tri nh hn ton hng bn phi (A <


hay khng. Nu nh hn th l true.
B) l
true.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 33

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

>=

Kim tra nu ton hng bn tri c gi tr ln hn hoc bng


gi tr ca ton hng bn phi hay khng. Nu ng l true.

(A >=
B) l
khng
ng.

<=

Kim tra nu ton hng bn tri c gi tr nh hn hoc


bng ton hng bn phi hay khng. Nu ng l true.

(A <=
B) l
true.

Ton t logic
Bng di y ch r tt c cc ton t logic c h tr bi ngn ng C. Gi s bin A c gi tr
1 v bin B c gi tr 0:
Hin th cc v d

Ton Miu t
t

V
d

&&

c gi l ton t logic AND (v). Nu c hai ton t u


c gi tr khc 0 th iu kin tr ln true.

(A
&&
B) l
false.

||

c gi l ton t logic OR (hoc). Nu mt trong hai ton


t khc 0, th iu kin l true.

(A ||
B) l
true.

c gi l ton t NOT (ph nh). S dng o ngc !(A


li trng thi logic ca ton hng . Nu iu kin ton hng &&
l true th ph nh n s l false.
B) l
true.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 34

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ton t so snh bit


Ton t so snh bit lm vic trn n v bit, tnh ton biu thc so snh tng bit. Bng di y v
&, |, v ^ nh sau:

p&q

p|q

p^q

Gi s nu A = 60; v B = 13; th by gi trong nh dng nh phn chng s l nh sau:


A = 0011 1100
B = 0000 1101
----------------A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Cc ton t so snh bit c h tr bi ngn ng C c lit k trong bng di y. Gi s ta c
bin A c gi tri 60 v bin B c gi tr 13, ta c:
Hin th cc v d

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 35

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ton
t

Miu t

V d

&

Ton t AND (v) nh phn sao chp mt bit ti kt qu nu


n tn ti trong c hai ton hng.

(A &
B) s
cho
kt
qu
l 12,
tc l
0000
1100

Ton t OR (hoc) nh phn sao chp mt bit ti kt qu nu (A |


n tn ti trong mt hoc hai ton hng.
B) s
cho
kt
qu
l 61,
tc l
0011
1101

Ton t XOR nh phn sao chp bit m n ch tn ti trong


mt ton hng m khng phi c hai.

http://vietjack.com/ Trang chia s cc bi hc online min ph

(A ^
B) s
cho
kt
qu
l 49,
tc l
0011
0001

Trang 36

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ton t o bit (o bit 1 thnh bit 0 v ngc li).

(~A )
s
cho
kt
qu
l 61,
tc l
1100
0011.

<<

Ton t dch tri. Gi tr ton hng tri c dch chuyn


sang tri bi s cc bit c xc nh bi ton hng bn
phi.

A <<
2 s
cho
kt
qu
240,
tc l
1111
0000
(dch
sang
tri
hai
bit)

>>

Ton t dch phi. Gi tr ton hng tri c dch chuyn


sang phi bi s cc bit c xc nh bi ton hng bn
phi.

A >>
2 s
cho
kt
qu
l 15,
tc l
0000
1111

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 37

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com
(dch
sang
phi
hai
bit)

Ton t gn
y l nhng ton t gn c h tr bi ngn ng C:
Hin th cc v d

Ton
t

Miu t

V d

Ton t gn n gin. Gn gi tr ton hng bn phi cho


ton hng tri.

C=A
+ B s
gn
gi tr
ca A
+B
vo
trong
C

+=

Thm gi tr ton hng phi ti ton hng tri v gn gi tr


cho ton hng tri.

C +=
A
tng
ng
vi C
=C+
A

-=

Tr i gi tr ton hng phi t ton hng tri v gn gi tr

C -= A
tng

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 38

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

ny cho ton hng tri.

ng
vi C
=CA

*=

Nhn gi tr ton hng phi vi ton hng tri v gn gi tr


ny cho ton hng tri.

C *= A
tng
ng
vi C
=C*
A

/=

Chia ton hng tri cho ton hng phi v gn gi tr ny


cho ton hng tri.

C /= A
tng
ng
vi C
=C/
A

%=

Ly phn d ca php chia ton hng tri cho ton hng


phi v gn cho ton hng tri.

C %=
A
tng
ng
vi C
=C%
A

<<=

Dch tri ton hng tri sang s v tr l gi tr ton hng


phi.

C <<=
2
tng
ng
vi C
=C

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 39

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com
<< 2

>>=

Dch phi ton hng tri sang s v tr l gi tr ton hng


phi.

C >>=
2
tng
ng
vi C
=C
>> 2

&=

Php AND bit

C &=
2
tng
ng
vi C
=C&
2

^=

Php OR loi tr bit

C ^= 2
tng
ng
vi C
=C^
2

|=

Php OR bit.

C |= 2
tng
ng
vi C
=C|2

Cc ton t hn hp sizeof & ternary


C mt s ton t hn hp quan trng l sizeof v ? : c h tr bi ngn ng C.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 40

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Hin th cc v d

Ton
t

Miu t

V d

sizeof() Tr li kch c ca mt bin

sizeof(a), vi a l
integer, th s tr li kt
qu l 4.

&

Tr li a ch ca mt bin.

&a; s cho a ch thc


s ca bin a.

Tr ti mt bin.

*a; s tr ti bin a.

?:

Biu thc iu kin

Nu iu kin l true ?
th gi tr X : Nu khng
th gi tr Y

Th t u tin ton t trong C


Th t u tin ton t trong C xc nh cch biu thc c tnh ton. V d, ton t nhn c
quyn u tin hn ton t cng, v n c thc hin trc.
V d, x = 7 + 3 * 2; y, x c gn gi tr 13, ch khng phi 20 bi v ton t * c quyn u
tin cao hn ton t +, v th u tin n thc hin php nhn 3 * 2 v sau thm vi 7.
Bng di y lit k th t u tin ca cc ton t. Cc ton t vi quyn u tin cao nht xut
hin trn cng ca bng, v cc ton t c quyn u tin thp nht th bn di cng ca bng.
Trong mt biu thc, cc ton t c quyn u tin cao nht c tnh ton u tin.
Hin th cc v d

Loi

Ton t

http://vietjack.com/ Trang chia s cc bi hc online min ph

Th t u tin

Trang 41

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Postfix

() [] -> . ++ - -

Tri sang phi

Unary

+ - ! ~ ++ - - (type)* & sizeof

Phi sang tri

Tnh nhn

*/%

Tri sang phi

Tnh cng

+-

Tri sang phi

Dch chuyn

<< >>

Tri sang phi

Quan h

< <= > >=

Tri sang phi

Cn bng

== !=

Tri sang phi

Php AND bit

&

Tri sang phi

Php XOR bit

Tri sang phi

Php OR bit

Tri sang phi

Php AND logic

&&

Tri sang phi

Php OR logic

||

Tri sang phi

iu kin

?:

Phi sang tri

Gn

= += -= *= /= %=>>= <<= &= ^= |=

Phi sang tri

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 42

http://vietjack.com/cprogramming/index.jsp
Du phy

Copyright vietjack.com

Tri sang phi

iu khin lung trong C


Cc cu trc iu khin lung yu cu lp trnh vin xc nh mt hoc nhiu iu kin nh gi
v kim tra bi chng trnh, cng vi cc lnh c thc hin nu iu kin c xc nh l
ng, hoc cc lnh khc c thc hin nu iu kin xc nh l sai.
Di y l mu chung ca mt cu trc iu khin lung hay gp trong ngn ng lp trnh.

Ngn ng lp trnh C gi s rng mi gi tr khng phi zero hoc khng phi null u c gi
tr true, nu c gi tr zero hoc null, n c gi tr false.
Ngn ng C cung cp cc kiu cu trc iu khin lung sau. Bn nhn vo ng link bit
thm chi tit v chng.

Lnh

Miu t

Lnh if

Mt lnh if bao gm mt biu thc


logic theo sau bi mt hoc nhiu

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 43

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

lnh khc.
Lnh if...else

Mt lnh if c th theo sau bi mt


lnh else (ty : c hoc khng), m
c th c thc hin khi biu thc
logic c gi tr false.

Cc lnh if c lng vo nhau

Bn c th s dng lnh if hoc else


if bn trong lnh if hoc else if khc.

Lnh switch

Mt lnh switch cho php kim tra


iu kin ca mt bin trc khi
thc thi cc lnh.

Cc lnh switch c lng vo nhau

Bn c th s dng mt
lnh switch bn trong mt
lnh switch khc.

Ton t ? :
Chng ta bn v ton t iu kin ? : trong chng trc m c th c dng i v tr
cho lnh if...else. N c mu chung nh sau:
Exp1 ? Exp2 : Exp3;

Trong Exp1, Exp2 v Exp3 l cc biu thc. Ch vic s dng v t ca du hai chm.
Gi tr ca biu thc Exp1 trc du ? c gi tr true, Exp2 c thc hin, v gi tr ca n l gi
tr ca biu thc. Nu Exp1 l false th Exp3 c thc hin v gi tr ca n l gi tr ca biu
thc.

Vng lp trong C
C mt tnh hung m bn cn phi thc hin mt on code mt vi ln. Nhn chung, cc cu
lnh c thc hin mt cch tun t. Cu lnh u tin ca hm c thc hin trc, sau
n cu th 2 v tip tc.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 44

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ngn ng lp trnh cung cp cho chng ta nhiu cu trc iu khin v cho php bn thc hin
nhng phn phc tp.
Vng lp cho php thc hin mt lnh v mt nhm lnh nhiu ln , di y l dng tng qut:

C h tr nhng lnh iu khin sau y. Click chut vo link xem chi tit.

Kiu vng lp

Miu t

Vng lp While

Lp li mt hoc mt nhm cc lnh trong khi iu


kin cho l ng. N kim tra iu kin trc khi
thc hin thn vng lp.

Vng lp for

Thc thi mt dy cc lnh nhiu ln v tm tt on


code m qun l bin vng lp.

Vng lp do...while

Ging lnh While, ngoi tr im l n kim tra


iu kin cui thn vng lp.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 45

http://vietjack.com/cprogramming/index.jsp

Lng cc vng lp

Copyright vietjack.com

Bn c th s dng mt hoc nhiu vng lp trong


cc vng lp while, for hoc do..while khc.

Cc lnh iu khin vng lp


Cc lnh iu khin vng lp thay i s thc thi lnh t dy thng thng ca n. Khi s thc thi
lnh ri khi mt phm vi, tt c cc i tng t ng m c to ra trong phm vi b hy.
C h tr cc lnh iu khin vng lp sau y. Click vo cc ng link sau bit thm chi tit.

Lnh iu khin

Miu t

Lnh break

Kt thc vng lp hoc lnh switch v chuyn sang


thc thi vng lp hoc lnh switch ngay sau n.

Lnh continue

Khi gp lnh ny th chng trnh s b qua cc cu


lnh di n (trong cng mt cu lnh lp)
thc hin vng lp mi.

Lnh goto

Chuyn ti lnh c gn. Mc d vy, n c


khuyn rng khng nn s dng lnh goto trong
chng trnh ca bn.

Vng lp v hn
Mt vng lp l vng lp v hn khi mt iu kin khng bao gi false. Vng lp for thng c
s dng cho mc ch ny. Khi bn ba biu thc iu kin trong vng lp for trng th bn s
to ra mt vng lp v hn.
#include <stdio.h>

int main ()
{

for( ; ; )
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 46

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

printf("This loop will run forever.\n");


}

return 0;
}

Khi biu thc iu kin vng mt, n c gi s l lun ng.


Ghi ch: Bn c th dng (kt thc) mt vng lp v hn bi nhn t hp phm Ctrl + C.

Hm trong C
Mt hm l mt nhm cc lnh i cng nhau thc hin mt nhim v. Mi chng trnh C c t
nht mt hm l hm main(), v tt c hu ht cc chng trnh bnh thng u nh ngha thm
cc hm.
Bn c th chia on code ca bn thnh nhng hm ring bit. Cch bn chia on code ca bn
thnh cc hm khc nhau ph thuc vo bn, nhng theo tnh logic, mt hm thng c mt
nhim v nht nh.
Mt s khai bo hm thng bo vi b bin dch v tn ca hm, kiu tr v v tham s. Mt nh
ngha hm cung cp phn thn ca mt hm.
Cc th vin tiu chun ca ngn ng C cung cp rt nhiu hm c sn chng trnh ca bn
c th gi. V d, hm strcat() c th ni hai on chui, hm memcpy() dng copy mt vng
nh n mt vng nh khc v rt nhiu hm khc na.
Mt hm c bit n vi cc tn khc nhau nh mt phng thc, mt tuyn ph hoc mt th
tc.

nh ngha mt hm
Mu chung ca nh ngha hm trong Ngn ng C nh sau:
kieu_tra_ve ten_ham( danh_sach_tham_so )
{
than_cua_ham
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 47

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Mt nh ngha hm trong ngn ng C bao gm u hm v mt thn hm. Di y l cc phn


ca mt hm:

Kiu tr v: Mt hm c th tr v mt gi tr. Kieu_tra_ve l dng d liu ca gi tr m


hm tr v. Vi hm cung cp cc hot ng v khng tr v gi tr no c. l
hm void.

Tn hm: y l tn thc s ca hm. Tn hm v danh sch tham s cu to nn du


hiu hm.

Tham s: Khi hm c gi, bn phi truyn vo danh sch cc tham s. Mt gi tr hng


n mt tham s thc t. Danh sch tham s c cc kiu, th t v s lng cc tham s
ca hm. Cc tham s trong hm l ty chn, ngha l mt hm c th khng c tham s.

Thn hm: Phn thn ca mt hm bao gm tp hp cc lnh xc nh nhng g m hm


thc hin.

V d:
Sau y l m ngun cho mt hm c tn gi l max(). Hm ny c 2 tham s: num1 v num2 v
tr v gi tr ln nht gia hm s:
/* function returning the max between two numbers */
int max(int num1, int num2)
{
/* local variable declaration */
int result;

if (num1 > num2)


result = num1;
else
result = num2;

return result;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 48

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khai bo hm
Mt khai bo hm thng bo cho trnh bin dch v tn hm v cch gi ca hm. Phn thn hm
c th nh ngha mt cch ri rc.
Mt khai bo hm c cc phn sau y:
return_type function_name( parameter list );

V d khi nh ngha hm max(), di y l cu khai bo hm:


int max(int num1, int num2);

Tn cc tham s khng quan trng trong vic khai bo hm, nhng kiu di y l cch khai bo
hp l:
int max(int, int);

Mt khai bo hm c yu cu khi bn nh ngha mt hm v m ngun v khi gi mt hm t


mt file ngun khc. Trong trng hp ny, bn nn khai bo hm trc khi gi hm .

Gi hm
Trong khi to mt hm, bn nh ngha nhng g hm phi lm. s dng mt hm, bn phi gi
hm thc hin mt nhim v c th.
Khi mt chng trnh gi mt hm, phn iu khin c chuyn n hm c gi. Mt hm
c gi thc hin cc nhim v c nh ngha v tr v gi tr sau khi thc hin chng trnh.
gi hm, bn n gin cn truyn cc tham s c yu cu cng vi tn ca hm v nu hm
tr v cc gi tr, bn c th d tr cc gi tr tr v ny, v d:
#include <stdio.h>

/* function declaration */
int max(int num1, int num2);

int main ()
{
/* local variable definition */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 49

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

int a = 100;
int b = 200;
int ret;

/* calling a function to get max value */


ret = max(a, b);

printf( "Max value is : %d\n", ret );

return 0;
}

/* function returning the max between two numbers */


int max(int num1, int num2)
{
/* local variable declaration */
int result;

if (num1 > num2)


result = num1;
else
result = num2;

return result;
}

Ti gi gi tr hm max() trong hm main vo bin ret. Khi chng trnh c chy, n s in ra kt


qu sau y:
Max value is : 200

Tham s ca hm:
Mt hm s dng cc danh sch tham s, n phi khai bo cc bin v chp nhn gi tr cc bin
ny. Cc bin ny c gi l cc bin chnh thc.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 50

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Cc bin chnh thc ging cc bin cc b khc bn trong hm.


Khi bn gi hm, c 2 cch bn truyn cc gi tr vo cho hm:

Kiu gi

Miu t

Gi bi gi tr

Phng thc ny sao chp gi tr thc s ca tham


s vo trong tham s chnh thc ca mt hm.
Trong trng hp ny, cc thay i ca bn thn
cc tham s bn trong hm khng nh hng ti
cc tham s.

Gi bi tham chiu

Phng thc ny sao chp a ch ca tham s vo


trong tham s chnh thc. Bn trong hm, a ch
c dng truy cp tham s thc s c s
dng khi gi hm. C ngha l cc thay i ti tham
s lm tham s thay i.

Theo mc nh, C s dng gi bi gi tr truyn cc tham s. Nhn chung, code trong mt


hm khng th thay i cc tham s c dng gi hm v trong v d trn, khi gi hm
max() l dng phng thc tng t.

Quy tc phm vi trong C


Mt phm vi trong bt k chng trnh no l mt khu vc trong chng trnh ni mt bin c
nh ngha tn ti v bn ngoi phm vi th bin khng th c truy cp. C 3 ni m bin c
th c khai bo trong Ngn ng C:
1. Bn trong mt hm hoc mt khi code c gi l bin local.
2. Bn ngoi tt c cc hm v c gi l bin ton cc.
3. Trong nh ngha cc hm, cc tham s c gi l cc tham s chnh thc - formal.
By gi chng ta cng tm hiu cc bin cc b v bin ton cc v cc tham s chnh thc l
g.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 51

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Bin cc b
Bin cc b c khai bo bn trong mt hm hoc khai bo bn trong mt khi code. Chng
c s dng bi cc lnh trong hm hoc khi code . Bin cc b khng c s dng bn
ngoi ca hm. Di y l v d v vic s dng bin cc b. Ti y bin a,b v c c s dng
trong hm main():
#include <stdio.h>

int main ()
{
/* local variable declaration */
int a, b;
int c;

/* actual initialization */
a = 10;
b = 20;
c = a + b;

printf ("value of a = %d, b = %d and c = %d\n", a, b, c);

return 0;
}

Bin ton cc
Bin ton cc c nh ngha bn ngoi mt hm, thng l phn u ca chng trnh. Bin
ton cc c th cha cc gi tr trong thi gian chng trnh chy v c th c truy cp bi bt
k hm no nh ngha trong chng trnh.
Mt bin ton cc c th c truy cp bi bt k hm no. iu ngha l bin ton cc c
s dng sut chng trnh sau khi n khai bo. Di y l v d minh ha cho bin cc b v
ton cc:
#include <stdio.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 52

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

/* global variable declaration */


int g;

int main ()
{
/* local variable declaration */
int a, b;

/* actual initialization */
a = 10;
b = 20;
g = a + b;

printf ("value of a = %d, b = %d and g = %d\n", a, b, g);

return 0;
}

Mt chng trnh c th c bin ton cc v local trng tn. Trong trng hp bin cc b bn
trong hm s c u tin s dng. Di y l v d:
#include <stdio.h>

/* global variable declaration */


int g = 20;

int main ()
{
/* local variable declaration */
int g = 10;

printf ("value of g = %d\n",

g);

return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 53

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi chng trnh c bin dch v chy, kt qu sau s in ra:


value of g = 10

Tham s chnh thc


Tham s hm, tham s chnh thc c coi nh bin local bn trong hm v thng c gi
tr u tin hn bin ton cc. Di y l v d:
#include <stdio.h>

/* global variable declaration */


int a = 20;

int main ()
{
/* local variable declaration in main function */
int a = 10;
int b = 20;
int c = 0;

printf ("value of a in main() = %d\n",

a);

c = sum( a, b);
printf ("value of c in main() = %d\n",

c);

return 0;
}

/* function to add two integers */


int sum(int a, int b)
{
printf ("value of a in sum() = %d\n",

a);

printf ("value of b in sum() = %d\n",

b);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 54

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

return a + b;
}

Khi on code trn c bin dch v thc hin, kt qu di y s c in ra:


value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

Khi to bin ton cc v bin cc b


Khi bin ton cc v bin cc b c nh ngha, n khng c khi to bi chng trnh, n
phi khi to bi chnh bn thn bn. Bin ton cc thng khi to t ng bi chng trnh khi
bn nh ngha chng nh di y:

Kiu d liu

Gi tr khi to mc nh

int

char

'\0'

float

double

pointer

NULL

Thng trong thc t lp trnh bn nn khi to cc gi tr bin mt cch chnh xc, nu khng
chng trnh ca bn c th gy ra nhng kt qu khng mong mun .

Mng trong Ngn ng C


http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 55

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ngn ng lp trnh C cung cp cu trc d liu gi l mng, c lu tr trong mt tp hp cc


d liu cng kiu vi di c nh. Mt mng c s dng lu tr tp hp d liu, nhng n
rt hu dng nu bn ngh v mt mng cc bin vi cng mt kiu.
Thay v khai bo bin mt cch ri rc, nh bin number0, number1, v number99, bn c th
khai bo mt mng cc gi tr nh numbers[0], numbers[1] v numbers[99] biu din cc gi
tr ring bit. Mt thnh phn c th ca mng c th c truy cp qua index (ch s).
Tt c mng u bao gm cc v tr nh lin k nhau. a ch thp nht tng ng vi thnh phn
u tin v a ch cao nht tng ng vi thnh phn cui cng ca mng.

Khai bo mng trong C


khai bo mt mng trong ngn ng C, chng trnh xc nh kiu ca bin v s lng cc
phn t c yu cu bi bin nh sau:
Kieu Ten_mang [ Kich_co_mang ];

y l mng mt chiu. Kich_co_mang phi l mt s nguyn ln hn 0 v Kieu phi hp l


trong ngn ng C. V d, khai bo mt mng 10 phn t gi l balance vi kiu double, s dng
cu lnh sau y:
double balance[10];

By gi balance l mt bin mng c th ch cha 10 phn t double.

Khi to mng trong C


Bn c th khi to mng trong C hoc tng phn t mt hoc s dng mt cu lnh nh di
y:
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};

S lng cc gi tr trong du ngoc kp {} khng c ln hn s lng phn t khai bo trong


du ngoc vung [].

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 56

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Nu bn b st kch c mng th mng ln gi cc gi tr c khi to:


double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

Bn s to chnh xc mt chui c gi tr ging ht chui bn trn bng cch gn tng phn t


mt. Di y l mt v d khi gn gi tr cho mt phn t ca mng:
balance[4] = 50.0;

Cu lnh bn trn gn gi tr th 5 ca mng gi tr 50.0. Tt c cc mng u c ch s (index)


u tin bng 0, y c gi l ch s c bn v phn t cui cng ca mng c ch s bng
ln ca mng tr i 1. Di y l cch biu din hnh ha cho chui khai bo bn trn thng qua
ch s:

Truy cp cc phn t mng trong C


Mt mng c truy cp bi cch nh ch s trong tn ca mng. Di y l mt cch truy cp
mt gi tr ca mng:
double salary = balance[9];

Cu lnh trn ly phn t th 10 ca mng v gn gi tr ny cho bin salary. Di y l mt v


d v vic s dng vi tt c m t bn trn:
#include <stdio.h>

int main ()
{
int n[ 10 ]; /* n is an array of 10 integers */
int i,j;

/* initialize elements of array n to 0 */


for ( i = 0; i < 10; i++ )
{
n[ i ] = i + 100; /* set element at location i to i + 100 */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 57

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

/* output each array element's value */


for (j = 0; j < 10; j++ )
{
printf("Element[%d] = %d\n", j, n[j] );
}

return 0;
}

Khi on code ny c bin dch v thc hin, kt qu sau y s c in ra:


Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

Chi tit v mng trong C


Mng l mt phn rt quan trng trong ngn ng C. Di y l nhng nh ngha quan trng lin
quan n mt mng c th m c trnh by r rng hn cho cc lp trnh vin C:

Khi nim

Miu t

Mng a chiu trong C

C h tr cc mng a
chiu. Mu n gin nht
ca mng ny l mng hai

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 58

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com
chiu.

Truyn mng cho hm nh l tham s trong C

Bn c th truyn ti hm
mt im tr ch ti mt
mng bi xc nh tn
mng ch khng phi l
mt ch s.

Tr v mng t mt hm trong C

C cho php mt hm c th
tr v mt mng.

Tr ti mt mng trong C

Bn c th tr ti phn t
u tin ca mng mt
cch n gin ch bi xc
nh tn mng , ch
khng phi mt ch s.

Con tr trong C
Con tr - Pointer trong ngn ng C rt d hc. Mt vi tc v trong ngn ng C c thc hin d
dng hn nh con tr, v nhng tc v khc tr nn linh hot hn, nh trong vic cp pht b
nh, khng th thc hin m khng dng con tr. Do rt cn thit phi nm vng con tr khi tr
thnh mt lp trnh vin C hon thin. By gi hy bt u bng nhng bc n gin nht.
Nh bn bit, mi bin trong mt vng nh nht nh v mi vng nh ny c a ch c n c
nh ngha d dng trong vic truy cp s dng ton t (&), tng ng vi a ch ca n trong
b nh. Xem xt v d di y, s in ra a ch ca bin c nh ngha:
#include <stdio.h>

int main ()
{
int

var1;

char var2[10];

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 59

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

printf("Address of var1 variable: %x\n", &var1

);

printf("Address of var2 variable: %x\n", &var2

);

return 0;
}

Khi cc on code trn c bin dch v thc hin, n s in ra kt qu sau y:


Address of var1 variable: bff5a400
Address of var2 variable: bff5a3f6

Do bn hiu th no l a ch b nh v cch truy cp n, l phn nh ngha c bn. By


gi hy xem th no l mt con tr.

Con tr l g?
Mt con tr - pointer l mt bin m trong gi tr ca n l a ch ca bin khc. V d nh a
ch ca vng nh. Ging nh cc bin v hng s, bn phi khai bo con tr trc khi bn c th
s dng n lu tr bt k a ch ca bin no. Dng tng qut ca vic khai bo con tr nh
sau:
type *var-name;

y, type l kiu d liu c bn con tr, n l kiu hp l trong ngn ng C v var-namel tn


gi tr ca con tr. Phn k t * s dng trong khai bo con tr ging nh vic bn s dng cho
php nhn. Mc d vy, trong khai bo ny, k t * c thit k s dng cc bin ca con tr.
Di y l mt s cch khai bo hp l ca con tr:
int

*ip;

/* pointer to an integer */

double *dp;

/* pointer to a double */

float

*fp;

/* pointer to a float */

char

*ch

/* pointer to a character */

Ki d liu thc s ca gi tr ca tt c cc con tr, c th l integer, float, character, hoc kiu


khc, l ging nh, mt s thp lc phn di - Long hexa biu din mt a ch b nh. im khc
nhau duy nht ca cc con tr ca cc kiu d liu khc nhau l kiu d liu ca bin hoc hng
s m con tr ch ti.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 60

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Cch s dng con tr?


C mt vi php ton quan trng, s gip chng ta lm vic vi con tr mt cch thng
xuyn: a) chng ta nh ngha bin con tr, b) gn a ch ca bin n mt con tr v c)cui cng
truy cp cc gi tr bin a ch trong bin con tr. iu ny c thc hin bi ton t * tr v gi
tr cc cc bin cha trong a ch c xc nh bi ton t ny. Di y l cc s dng nhng
php ton trn:
#include <stdio.h>

int main ()
{
int

var = 20;

/* actual variable declaration */

int

*ip;

/* pointer variable declaration */

ip = &var;

/* store address of var in pointer variable*/

printf("Address of var variable: %x\n", &var

);

/* address stored in pointer variable */


printf("Address stored in ip variable: %x\n", ip );

/* access the value using the pointer */


printf("Value of *ip variable: %d\n", *ip );

return 0;
}

Khi on code trn c bin dch v thc hin, chng trnh s in ra kt qu di y:


Address of var variable: bffd8b3c
Address stored in ip variable: bffd8b3c
Value of *ip variable: 20

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 61

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Con tr NULL trong ngn ng C


C mt cch thc hnh tt khi chng ta gn gi tr NULL cho bin con tr trong trng hp bn
khng c a ch chnh xc c gn. iu ny thng xy ra trong qu trnh khai bo. Mt con
tr c gn gi tr NULL c gi l con tr null.
Con tr null l mt hng s vi gi tr 0 c nh ngha trong mt vi th vin chun. Xem chng
trnh di y:
#include <stdio.h>

int main ()
{
int

*ptr = NULL;

printf("The value of ptr is : %x\n", ptr

);

return 0;
}

Khi on code trn c bin dch v thc hin, n s in ra kt qu sau y:


The value of ptr is 0

Trong hu ht cc h thng, chng trnh khng cho php truy cp v nh c a ch 0 bi v b


nh ny dng d tr cho h iu hnh. Nu con tr ti gi tr null, n c coi l khng tr ti
u c.
kim tra c phi l con tr null hay khng bn c th s dng lnh if nh sau:
if(ptr)

/* succeeds if p is not null */

if(!ptr)

/* succeeds if p is null */

Chi tit v con tr:


Con tr c nhiu nhng d dng trong vic nh ngha v rt quan trng trong lp trnh ngn ng C.
Di y l nhng nh ngha quan trng m r rng v con tr trong ngn ng lp trnh C:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 62

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi nim

Miu t

Con tr i s trong C

C 4 ton t i s m c th c
s dng trn cc con tr l: ++, --, +, -

Mng cc con tr trong C

Bn c th nh ngha cc mng
gi cc con tr.

Con tr ti con tr trong C

C cho php bn tr ti mt con tr ...

Truyn cc con tr ti hm trong C

Truyn mt tham s bi tham chiu


hoc a ch: c hai cho cc tham s
c truyn kh nng c th c
thay i trong hm gi bi hm c
gi.

Tr v con tr t hm trong C

C cho php mt hm tr v mt con


tr ti bin cc b, bin tnh v cng
nh b nh c cp pht ng.

Chui trong C
Chui trong ngn ng lp trnh C thc cht l mng mt chiu ca cc k t m kt thc bi mt
k t null \0.
Phn khai bo v khi to di y to ra mt chui bao gm mt t Hello. gi cc gi tr null
ti cui ca mng, c ca mng cc k t bao gm mt chui phi nhiu hn s lng cc k t
trong t kha Hello.
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Nu bn theo quy tc khi to cc chui, bn c th vit lnh nh sau:


char greeting[] = "Hello";

Di y l phn biu din nh cho on chui trn trong ngn ng C/C++:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 63

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Thc t, bn khng t k t null ti v tr cui cng ca bin hng s. B bin dch C t ng


thm \0 ti v tr cui cng ca chui khi n khi to chui. Cng th v d in ra chui sau y:
#include <stdio.h>

int main ()
{
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

printf("Greeting message: %s\n", greeting );

return 0;
}

Khi on code trn c bin dch v thc hin, kt qu in ra s nh sau:


Greeting message: Hello

Ngn ng C h tr mt dy rng ri cc hm thao tc cc chui kt thc l null:

STT Hm & Mc ch

strcpy(s1, s2);
Sao chp chui s2 cho chui s1.

strcat(s1, s2);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 64

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ni chui s2 vo cui chui s1.


3

strlen(s1);
Tr v di ca chui s1.

strcmp(s1, s2);
Tr v 0 nu s1 v s2 l nh nhau; nh hn 0 nu s1<s2; ln hn 0 nu
s1>s2.

strchr(s1, ch);
Tr v con tr ti v tr u tin ca ch trong s1.

strstr(s1, s2);
Tr v con tr ti v tr u tin ca chui s2 trong chui s1.

Di y l v d cho vic s dng mt vi hm bn trn:


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

int main ()
{
char str1[12] = "Hello";
char str2[12] = "World";
char str3[12];
int

len ;

/* copy str1 into str3 */


strcpy(str3, str1);
printf("strcpy( str3, str1) :

%s\n", str3 );

/* concatenates str1 and str2 */


strcat( str1, str2);
printf("strcat( str1, str2):

%s\n", str1 );

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 65

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

/* total lenghth of str1 after concatenation */


len = strlen(str1);
printf("strlen(str1) :

%d\n", len );

return 0;
}

Khi on code trn c bin dch v thc hin, kt qu di y s c in ra:


strcpy( str3, str1) :

Hello

strcat( str1, str2):

HelloWorld

strlen(str1) :

10

Bn c th tm thy mt danh sch y cc hm lin quan ti chui trong Th vin tiu chun
C.

Cu trc trong C
Cc mng trong C cho php bn nh ngha mt vi loi bin c th gi gi tr ca mt vi thnh
phn cng kiu d liu. Nhng structure - cu trc l mt loi d liu khc trong ngn ng lp
trnh C, cho php bn kt hp cc d liu khc kiu nhau.
Cu trc c s dng biu din mt bn ghi. Gi s bn mun lu tr gi tr ca mt quyn
sch trong th vin ca bn. Bn c th lu tr cc thuc tnh ca sch sau y:

Title

Author

Subject

Book ID

nh ngha mt cu trc
nh ngha cu trc, bn phi s dng cu lnh struct. Cu lnh struct nh ngha mt kiu d
liu mi, vi hn mt thnh phn trong chng trnh ca bn. Dng tng qut ca cu lnh struct
nh sau y:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 66

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

struct [structure tag]


{
member definition;
member definition;
...
member definition;
} [one or more structure variables];

Mt th cu trc c th ty chn v mt thnh phn nh ngha l cc bin thng nh int i, float j


hoc mt nh ngha bin khc . Ti phn cui cng ca nh ngha cu trc, trc du chm
phy, bn c th xc nh mt hoc nhiu bin cu trc (ty chn). Di y l cch khai bo bin
structure Book:
struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

} book;

Truy cp cc thnh phn ca cu trc


truy cp bt k thnh phn no ca cu trc, bn s dng ton t truy cp phn t. Di y
l v d cho cch s dng cu trc:
#include <stdio.h>
#include <string.h>

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

};

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 67

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

int main( )
{
struct Books Book1;

/* Declare Book1 of type Book */

struct Books Book2;

/* Declare Book2 of type Book */

/* book 1 specification */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;

/* book 2 specification */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;

/* print Book1 info */


printf( "Book 1 title : %s\n", Book1.title);
printf( "Book 1 author : %s\n", Book1.author);
printf( "Book 1 subject : %s\n", Book1.subject);
printf( "Book 1 book_id : %d\n", Book1.book_id);

/* print Book2 info */


printf( "Book 2 title : %s\n", Book2.title);
printf( "Book 2 author : %s\n", Book2.author);
printf( "Book 2 subject : %s\n", Book2.subject);
printf( "Book 2 book_id : %d\n", Book2.book_id);

return 0;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 68

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi on code trn c bin dch v thc hin. Kt qu sau y c in ra:


Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

Cc cu trc nh cc tham s hm
Bn c th t cu trc nh mt tham s ca hm theo cch d dng nh cc bin khc hay con
tr. Truy cp bin cu trc nh v d di y:
#include <stdio.h>
#include <string.h>

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

};

/* function declaration */
void printBook( struct Books book );
int main( )
{
struct Books Book1;

/* Declare Book1 of type Book */

struct Books Book2;

/* Declare Book2 of type Book */

/* book 1 specification */

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 69

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

strcpy( Book1.title, "C Programming");


strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;

/* book 2 specification */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;

/* print Book1 info */


printBook( Book1 );

/* Print Book2 info */


printBook( Book2 );

return 0;
}
void printBook( struct Books book )
{
printf( "Book title : %s\n", book.title);
printf( "Book author : %s\n", book.author);
printf( "Book subject : %s\n", book.subject);
printf( "Book book_id : %d\n", book.book_id);
}

Khi on code trn c bin dch v thc hin, kt qu di y s c in ra:


Book title : C Programming
Book author : Nuha Ali
Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 70

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Book author : Zara Ali


Book subject : Telecom Billing Tutorial
Book book_id : 6495700

Con tr ti cu trc
Bn c th nh ngha con tr cu trc theo cch bn nh ngha cc loi con tr khc nh sau:
struct Books *struct_pointer;

By gi bn c th lu a ch ca bin cu trc trong bin con tr c nh ngha trn. tm


a ch ca mt bin cu trc, t ton t & trc tn cu trc nh sau:
struct_pointer = &Book1;

truy cp vo thnh phn ca mt structure s dng con tr ti structure , bn phi s dng


ton t -> nh sau:
struct_pointer->title;

By gi chng ta vit li v d trn s dng con tr cu trc, hy vng iu ny s d dng cho bn


hiu khi nim ny:
#include <stdio.h>
#include <string.h>

struct Books
{
char

title[50];

char

author[50];

char

subject[100];

int

book_id;

};

/* function declaration */
void printBook( struct Books *book );
int main( )
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 71

http://vietjack.com/cprogramming/index.jsp
struct Books Book1;

/* Declare Book1 of type Book */

struct Books Book2;

/* Declare Book2 of type Book */

Copyright vietjack.com

/* book 1 specification */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;

/* book 2 specification */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;

/* print Book1 info by passing address of Book1 */


printBook( &Book1 );

/* print Book2 info by passing address of Book2 */


printBook( &Book2 );

return 0;
}
void printBook( struct Books *book )
{
printf( "Book title : %s\n", book->title);
printf( "Book author : %s\n", book->author);
printf( "Book subject : %s\n", book->subject);
printf( "Book book_id : %d\n", book->book_id);
}

Khi on code trn c bin dch v thc thi, n to ra kt qu sau:


Book title : C Programming

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 72

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Book author : Nuha Ali


Book subject : C Programming Tutorial
Book book_id : 6495407
Book title : Telecom Billing
Book author : Zara Ali
Book subject : Telecom Billing Tutorial
Book book_id : 6495700

Cc trng bit - Bit Fields


Cc trng bit cho php ng gi d liu trong mt cu trc. N gip ti u ha b nh.
C cho php bn thc hin iu ny trong mt nh ngha cu trc bi vic t : di bit sau bin.
V d:
struct packed_struct {
unsigned int f1:1;
unsigned int f2:1;
unsigned int f3:1;
unsigned int f4:1;
unsigned int type:4;
unsigned int my_int:9;
} pack;

y, packed_struct cha 6 phn t: 4 phn t f1..f4 l 1 bit, mt type l 4 bit v mt my_int 9 bit.
C t ng ng gi cc trng bit trn cng gn cng tt, min l chiu di ti a ca trng ny
nh hn hoc bng vi chiu di t nguyn ca my tnh.

Union trong C
Mt Union l d liu c bit trong ngn ng C cho php bn d tr cc kiu d liu khc nhau
trong cng mt vng nh. Bn c th nh ngha Union vi rt nhiu tham s, nhng ch mt thnh
phn cha gi tr ti mt thi im. Union cung cp mt cch hiu qu cho vic s dng mt vng
nh cho nhiu mc ch.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 73

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

nh ngha mt Union
nh ngha mt Union, bn phi cung cp cu lnh union theo cch tng t nh bn nh
ngha structure. Cu lnh union nh ngha kiu d liu mi, vi hn mt thnh vin trong chng
trnh ca bn. Dng ca lnh union nh sau:
union [union tag]
{
member definition;
member definition;
...
member definition;
} [one or more union variables];

union tag l gi tr ty chn v mt nh ngha thnh l nh ngha bin thng thng, nh int i,
hoc float j v cc kiu nh ngha bin khc. cui nh ngha Union trc du chm phy cui
cng, bn c th xc nh mt hoc nhiu bin Union nhng n l ty chn. y l cch bn nh
ngha kiu Union tn Data vi 3 thnh vin i, f v str:
union Data
{
int i;
float f;
char

str[20];

} data;

By gi kiu Data c th cha mt integer, mt s float v mt chui k t. iu ny ngha l l


mt bin ring r c cng vng nh c th c s dng lu tr nhiu kiu d liu khc nhau.
Bn c th s dng cch kiu d liu c sn hoc bn t nh ngha bn trong Union da vo yu
cu ca bn.
B nh c chim dng bi Union c ln ln gi gi tr ca thnh phn ln nht ca
Union. V d, v d trn kiu Data cha 20 bytes ca b nh bi v n cha khong nh ti a
ca i tng chui. Di y l v d hin th b nh tng cng ca Union trn:
#include <stdio.h>
#include <string.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 74

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

union Data
{
int i;
float f;
char

str[20];

};

int main( )
{
union Data data;

printf( "Memory size occupied by data : %d\n", sizeof(data));

return 0;
}

Khi on code trn c bin dch v thc thi, n s cung cp kt qu sau y:


Memory size occupied by data : 20

Truy xut thnh vin ca Union


truy xut cc thnh vin ca Union bn s dng ton t truy xut thnh vin(.). Ton t truy
cp thnh vin c v tr ngn cch gia tn bin Union v thnh vin m bn mun truy xut.
Chng ta s s dng t kha union nh ngha kiu bin Union. Di y l v d cho vic s
dng Union:
#include <stdio.h>
#include <string.h>

union Data
{
int i;
float f;
char

str[20];

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 75

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

};

int main( )
{
union Data data;

data.i = 10;
data.f = 220.5;
strcpy( data.str, "C Programming");

printf( "data.i : %d\n", data.i);


printf( "data.f : %f\n", data.f);
printf( "data.str : %s\n", data.str);

return 0;
}

Khi on code c bin dch v thc hin, n s in ra kt qu di y:


data.i : 1917853763
data.f : 4122360580327794860452759994368.000000
data.str : C Programming

y bn c th rng gi tr thnh vin i v f ca Union c th xung t bi v gi tr final c


gn cho bin chim trong mt vng nh v l l do bn c th s dng gi tr thnh
vin str in ra kt qu tt. By gi hy xem v d di y khi bn tp trung vo mt bin ti mt
thi im l mc ch chnh cho vic s dng Union.
#include <stdio.h>
#include <string.h>

union Data
{
int i;
float f;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 76

http://vietjack.com/cprogramming/index.jsp
char

Copyright vietjack.com

str[20];

};

int main( )
{
union Data data;

data.i = 10;
printf( "data.i : %d\n", data.i);

data.f = 220.5;
printf( "data.f : %f\n", data.f);

strcpy( data.str, "C Programming");


printf( "data.str : %s\n", data.str);

return 0;
}

Khi on code trn c bin dch, n s in ra kt qu di y:


data.i : 10
data.f : 220.500000
data.str : C Programming

y, tt c cc thnh vin u c in ra rt tt bi v mt thnh vin c s dng mt thi


im.

Trng Bit trong C


Gi s chng trnh C ca bn bao gm mt s lng bin TRUE/FALSE c nhm trong mt
cu trc gi l status nh sau:
struct
{
unsigned int widthValidated;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 77

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

unsigned int heightValidated;


} status;

Cu trc ny yu cu 8 bytes b nh nhng thc t n d tr 0 hoc 1 byte mi bin. Ngn ng


lp trnh C c mt cch ti u b nh trong trng hp ny. Bn ang s dng cc bin bn trong
cu trc sau bn c th nh ngha ln cc bin, n s thng bo cho trnh bin dch C vic
ch s dng s lng byte ny. V d, cu trc bn trn c th c vit li nh sau:
struct
{
unsigned int widthValidated : 1;
unsigned int heightValidated : 1;
} status;

By gi cu trc trn s yu cu 4 byte cho b nh cho bin status nhng ch 2 bit c s dng
lu tr gi tr. Bn phi s dng n 32 bin vi di 1 bit ny, do cu trc ny s s dng
4 byte v khi bn c 33 bin, n s cp pht v tr tip theo trong b nh v bt u s dng 8 byte.
By gi chng ta hy kim tra v d di y hiu v nh ngha ny.
#include <stdio.h>
#include <string.h>

/* define simple structure */


struct
{
unsigned int widthValidated;
unsigned int heightValidated;
} status1;

/* define a structure with bit fields */


struct
{
unsigned int widthValidated : 1;
unsigned int heightValidated : 1;
} status2;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 78

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

int main( )
{
printf( "Memory size occupied by status1 : %d\n", sizeof(status1));
printf( "Memory size occupied by status2 : %d\n", sizeof(status2));

return 0;
}

Khi on code trn c bin dch v thc thi, n s in ra kt qu trn:


Memory size occupied by status1 : 8
Memory size occupied by status2 : 4

Khai bo Trng Bit


Khai bo mt Trng Bit bn trong mt cu trc c mu nh sau:
struct
{
type [member_name] : width ;
};

Di y l m t cho cc phn t bin trong mt Trng Bit:

Phn t

Miu t

type

Mt kiu integer c th xc nh cch Trng Bit c


thng dch. Kiu ny c th l int, signed int, unsigned int

member_name Tn ca Trng Bit.

width

S lng bit c trong mt trng. di phi nh hn


hoc bng di Trng Bit ca mt i tng c th.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 79

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Mt bin c nh ngha vi gi tr ln c cho sn c gi l Trng Bit. Mt Trng Bit


c th lu tr nhiu hn mt bit n v d bn cn mt bin lu tr cc gi tr t 0 n 7, sau
bn c th nh ngha Trng Bit vi di ti a l 3 bit nh sau:
struct
{
unsigned int age : 3;
} Age;

Vic nh ngha trn s hng dn trnh bin dch C l bin s s dng 3 bit d tr cc gi tr,
nu bn s dng nhiu hn 3 bit n s khng cho php bn lm th. By gi hy th v d di
y:
#include <stdio.h>
#include <string.h>

struct
{
unsigned int age : 3;
} Age;

int main( )
{
Age.age = 4;
printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
printf( "Age.age : %d\n", Age.age );

Age.age = 7;
printf( "Age.age : %d\n", Age.age );

Age.age = 8;
printf( "Age.age : %d\n", Age.age );

return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 80

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi on code trn c bin dch v thc thi s c cnh bo, n s in ra kt qu di y:


Sizeof( Age ) : 4
Age.age : 4
Age.age : 7
Age.age : 0

T kha typedef trong C


Ngn ng chng trnh C cung cp mt t kha typedef, m bn c th s dng cung cp kiu
cho mt tn mi. Di y l mt v d nh ngha mt mc BYTE cho cc s 1 byte (nh
unsigned char).
typedef unsigned char BYTE;

Sau khi nh ngha kiu ny, nh danh BYTE c th c s dng nh l tn vit tt cho cc
kiu unsigned char, v d:
BYTE

b1, b2;

Theo quy c, cc ch ci vit hoa c s dng cho nhng nh ngha ny cho ngi s
dng d ghi nh, nhng bn c th s dng kiu ch thng nh sau:
typedef unsigned char byte;

Bn cng c th s dng typedef cung cp mt tn cho ngi s dng kiu d liu c


nh ngha. V d, bn c th s dng typedef vi cu trc nh ngha mt kiu d liu mi v
sau s dng kiu d liu nh ngha cc bin cu trc mt cch trc tip nh sau:
#include <stdio.h>
#include <string.h>

typedef struct Books


{
char

title[50];

char

author[50];

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 81

http://vietjack.com/cprogramming/index.jsp
char

subject[100];

int

book_id;

Copyright vietjack.com

} Book;

int main( )
{
Book book;

strcpy( book.title, "C Programming");


strcpy( book.author, "Nuha Ali");
strcpy( book.subject, "C Programming Tutorial");
book.book_id = 6495407;

printf( "Book title : %s\n", book.title);


printf( "Book author : %s\n", book.author);
printf( "Book subject : %s\n", book.subject);
printf( "Book book_id : %d\n", book.book_id);

return 0;
}

Khi on code trn c bin dch v thc thi, n cho kt qu sau:


Book

title : C Programming

Book

author : Nuha Ali

Book

subject : C Programming Tutorial

Book

book_id : 6495407

typedef vs #define
#define l mt directive trong C m cng c s dng nh ngha tn hiu (vit tt) cho cc
kiu d liu a dng tng t nh typedef nhng c nhng im khc nhau sau:

typedef c gii hn ch cung cp cc tn vit tt cho cc kiu, trong khi #define c th


c s dng nh ngha tn hiu cho c cc gi tr, nh bn c th nh ngha 1 l
ONE, .

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 82

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

S phin dch typedef c thc hin bi b bin dch, trong khi lnh #definec x l
bi b tin x l.

Sau y l cch s dng n gin nht ca #define:


#include <stdio.h>

#define TRUE

#define FALSE 0

int main( )
{
printf( "Value of TRUE : %d\n", TRUE);
printf( "Value of FALSE : %d\n", FALSE);

return 0;
}

Khi on code trn c bin dch v thc thi, n s cho kt qu sau:


Value of TRUE : 1
Value of FALSE : 0

Input & Output trong C


Khi chng ta ni v Input ngha l chng ta ang ni v d liu u vo cho chng trnh. N c
th c cung cp t dng lnh hoc t mt file no . Ngn ng chng trnh C cung cp mt
tp hp cc hm c sn c cc d liu u vo nhp v cung cp n cho cc chng trnh
theo yu cu.
Khi chng ta ni v Output ngha l chng ta ang ni v kt qu hin th trn mn hnh, my in
hoc bt k file no. Ngn ng C cung cp mt tp hp cc hm xut d liu kt qu trn mn
hnh my tnh cng nh c th lu d liu trong cc file vn bn hoc nh phn.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 83

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Cc File tiu chun


Ngn ng C i x tt c cc thit b nh l cc file. V th cc thit b nh mn hnh hin th c
nh v theo cng mt cch nh cc file v theo c 3 file c t ng m khi mt chng trnh
thc hin cung cp s truy cp ti bn phm v mn hnh.

File chun

Con tr ti File

Thit b

u vo chun

stdin

Bn phm

stdout

Mn hnh

stderr

Mn hnh ca bn

Standard input
u ra chun
Standard output
Li chun
Standard error
Con tr file c ngha l truy cp file cho mc ch c v vit. Khu vc ny s gii thch cho
bn cch c gi tr t mn hnh v cch in kt qu trn mn hnh.

Hm getchar() & putchar()


Hm int getchar(void) c k t c sn tip theo t mn hnh v tr v mt s integer. Hm ny
ch c mt k t n ti mt thi im. Bn c th s dng phng thc ny trong vng lp trong
trng hp bn mun c nhiu hn mt k t t mn hnh.
Hm int putchar(int c) t k t c truyn vo ln mn hnh v tr v chnh k t . Hm
ny ch t mt k t n mt thi im. Bn c th s dng phng thc ny trong vng lp
trong trng hp bn mun hin th nhiu hn mt k t trn mn hnh. Kim tra v d sau:
#include <stdio.h>
int main( )
{
int c;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 84

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

printf( "Enter a value :");


c = getchar( );

printf( "\nYou entered: ");


putchar( c );

return 0;
}

Khi on code trn c bin dch v c thc thi, n i cho bn nhp vn bn v nhn ENTER
th chng trnh x l v ch c mt k t n ri sau hin th:
$./a.out
Enter a value : this is test
You entered: t

Hm gets() & puts()


Hm char *gets(char *s) c mt dng t stdin trong b m c tr ti bi s ti khi hoc dng
lnh mi kt thc hoc EOF.
Hm int puts(const char *s) vit chui s v mt dng mi ti stdout.
#include <stdio.h>
int main( )
{
char str[100];

printf( "Enter a value :");


gets( str );

printf( "\nYou entered: ");


puts( str );

return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 85

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n i cho bn nhp vn bn v nhn ENTER, sau
chng trnh x l v c c dng v hin th n nh sau:
$./a.out
Enter a value : this is test
You entered: This is test

Hm scanf() v printf()
Hm int scanf(const char *format, ...) c u vo t u vo tiu chun stdin v qut u vo
theo format c cung cp..
Hm int printf(const char *format, ...) vit kt qu u ra ti u ra tiu chun stdout v x l
u ra theo format cung cp.
format c th l chui n gin, nhng bn c th xc nh %s, %d, %c, %f, in hoc c
chui, integer, character hoc float tng ng. C nhiu ty chn c sn m c th c s dng
theo yu cu. bit thm chi tit v cc hm ny, bn c th truy cp vo trang tr gip. By gi
chng ta x l mt v d n gin sau:
#include <stdio.h>
int main( )
{
char str[100];
int i;

printf( "Enter a value :");


scanf("%s %d", str, &i);

printf( "\nYou entered: %s %d ", str, i);

return 0;
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 86

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi on code trn c bin dch v thc thi, n i cho bn nhp vn bn v nhn ENTER, sau
chng trnh x l v c u vo v hin th nh sau:
$./a.out
Enter a value : seven 7
You entered: seven 7

Bn nn ghi nh rng scanf() mong i rng u vo bn nhp trong cng mt nh dng nh bn


cung cp: %s v %d, ngha l bn phi cung cp u vo hp l nh string integer, nu bn
cung cp string string hoc integer integer th sau n s cho l u vo bn nhp vo l
sai. iu th hai, trong khi c mt chui, hm scanf() dng c ngay sau khi n gp mt khong
trng, v th this is test l 3 chui cho hm scanf().

Nhp - Xut File trong C


Chng trc gii thch v cc thit b nhp xut tiu chun c x l bi ngn ng C.
chng ny chng ta s thy cch lp trnh vin to, m v ng cc file vn bn hoc file nh
phn vi cc d liu lu tr.
Mt file biu din mt chui cc bytes, khng k l file vn bn hay file nh phn. Ngn ng lp
trnh C cung cp cc hm truy cp mc cao cng nh thp (mc h iu hnh) thao tc vi
file trn thit b lu tr. Chng ny s a bn n nhng cch gi hm quan trng cho vic
qun l file.

M file
Bn c th s dng hm fopen() to file mi hoc m cc file tn ti. Cch gi ny s
khi to i tng loi FILE, m bao gm thng tin cn thit iu khin lung. Di y l mt
cch gi hm:
FILE *fopen( const char * filename, const char * mode );

y, filename l mt chui, c coi nh tn file v gi tr mode truy cp c th l nhng gi tr


di y:

Mode Miu t

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 87

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

M cc file tn ti vi mc ch c

M cc file vi mc ch ghi. Nu cc file ny cha tn ti thi file


mi c to ra. y, chng trnh bt u ghi ni dung t phn
m u ca file

M file vn bn cho vic ghi ch ghi tip theo vo cui, nu n


cha tn ti th file mi c to. y l chng trnh ghi ni dung
vi phn cui ca file tn ti.

r+

M file vn bn vi mc ch c v ghi.

w+

M mt file vn bn cho ch c v ghi. N lm trng file tn


ti nu file ny c v to mi nu file ny cha c.

a+

M file tn ti vi mc ch c v ghi. N to file mi nu khng


tn ti. Vic c file s bt u c t u nhng ghi file s ch ghi
vo cui file.

Nu bn thao tc vi cc file nh phn, bn c th c cc cch truy xut thay cho cc trng hp


trn nh sau:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

ng file
ng 1 file bn c th s dng hm fclose() di y:
int fclose( FILE *fp );

Hm fclose( ) tr v gi tr zero nu thnh cng hoc EOF nu c li trong qu trnh ng file. Hm


ny thc t xa cc d liu trong b m i vi file, ng file v gii phng b nh c s dng
vi file. EOF l mt hng s c nh ngha trong phn stdio.h.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 88

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

C nhiu hm a dng c cung cp bi th vin chun ca ngn ng C c v ghi tng k


t v trong mt dng vi s lng k t c nh. Chng ta s xem xt trong v d sau y:

Ghi mt file
Di y l hm n gin nht thc hin vic ghi cc k t ring ti mt lung:
int fputc( int c, FILE *fp );

Hm fputc() ghi cc k t vi gi tr tham s c n mt lung ra tham chiu bi con tr fp. N s


tr v k t c vit nu thnh cng hoc EOF nu c li. Bn c th s dng hm sau y
ghi mt chui kt thc bng k t null n mt lung:
int fputs( const char *s, FILE *fp );

Hm fputs() vit chui s n mt lung ra tham chiu bi fp. N tr v mt gi tr khng m nu


thnh cng v tr v k t EOF nu xy ra mt li. Bn c th s dng hm int fprintf(FILE
*fp,const char *format, ...) ghi mt chui ra file . Th v d di y:
Bn phi chc chn bn c th mc /tmp, nu khng c, bn phi to th mc ny trn my bn.
#include <stdio.h>

main()
{
FILE *fp;

fp = fopen("/tmp/test.txt", "w+");
fprintf(fp, "This is testing for fprintf...\n");
fputs("This is testing for fputs...\n", fp);
fclose(fp);
}

Khi on code trn c bin dch v thc hin, n to file mi l test.txt trong th mc /tmp v
ghi vo 2 dng ca 2 hm khc nhau. Cng c file ny phn tip theo.

c file
Di y l hm n gin nht c mt k t ring r t file:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 89

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

int fgetc( FILE * fp );

Hm fgetc() c mt k t t mt file tham chiu bi con tr fp. Gi tr tr v l k t c c nu


thnh cng, v trong trng hp li tr v EOF. Hm di y cho php bn c chui t mt
lung:
char *fgets( char *buf, int n, FILE *fp );

Hm fgets() c n-1 k t t mt lung vo tham chiu bi fp. N copy chui c n b m buf,


gn k t null vo kt thc chui.
Nu hm gp phi mt k t newline (xung dng) \n hoc k t EOF trc khi c c s
lng ti a cc k t, n s ch tr v cc k t cho n k t xung dng v k t xung dng
mi. Bn c th s dng hm int fscanf(FILE *fp, const char *format, ...) c chui t mt
file, nhng dng vic c khong trng u tin gp phi:
#include <stdio.h>

main()
{
FILE *fp;
char buff[255];

fp = fopen("/tmp/test.txt", "r");
fscanf(fp, "%s", buff);
printf("1 : %s\n", buff );

fgets(buff, 255, (FILE*)fp);


printf("2: %s\n", buff );

fgets(buff, 255, (FILE*)fp);


printf("3: %s\n", buff );
fclose(fp);

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 90

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi on code c bin dch v thc thi, n c t file c to t khu vc trc v in ra kt qu


sau y:
1 : This
2: is testing for fprintf...

3: This is testing for fputs...

Cng xem mt cht chi tit hn v iu xy ra ti y. u tin fscanf() ch c This bi v sau


n gp phi du cch, tip theo hm fgets() tr v cc dng cn li cho n khi gp k t cui
file. Cui cng n gi hm fgets() c hon ton dng th 2.

Hm Nhp Xut nh phn


Di y l hai hm, c th s dng cho vic input v output nh phn:
size_t fread(void *ptr, size_t size_of_elements,
size_t number_of_elements, FILE *a_file);

size_t fwrite(const void *ptr, size_t size_of_elements,


size_t number_of_elements, FILE *a_file);

C 2 hm trn c s dng c v ghi cc khi b nh, thng l cc mng hoc cu trc.

B tin x l trong C
B tin x l trong C y khng phi l mt phn ca b bin dch, nhng c nhng bc ring
r trong qu trnh bin dch. Theo cch hiu c bn nht, b tin x l trong ngn ng C l cc
cng c thay th vn bn v hng dn trnh bin dch khng yu cu tin x l trc khi c
bin dch. Chng ti hng n b tin x l C nh CPP.
Tt c cc lnh tin x l bt u vi k th #. N t nht khng phi l k t trng, d dng
c. Di y l danh sch cc th tin x l quan trng.

Ch dn

Miu t

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 91

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

#define

Thay th cho b tin x l macro

#include

Chn mt header c bit t file khc

#undef

Khng nh ngha mt macro tin x l

#ifdef

Tr v gi tr true nu macro ny c nh ngha

#ifndef

Tr v gi tr true nu macro ny khng c nh ngha

#if

Kim tra nu iu kin bin dch l ng

#else

Phn thay th cho #if

#elif

#else mt #if trong mt lnh

#endif

Kt thc iu kin tin x l

#error

In thng bo li trn stderr

#pragma

Thng bo cc lnh c bit n b bin dch, s dng mt


phng thc c tiu chun ha

V d b tin x l
Phn tch cc v d sau hiu cc ch dn a dng.
#define MAX_ARRAY_LENGTH 20

Tin x l ny thng bo cho trnh bin dch C thay th MAX_ARRAY_LENGTH vi 20. S


dng #define cho cc hng s lm tng kh nng c ca chng trnh.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 92

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

#include <stdio.h>
#include "myheader.h"

Tin x l ny thng bo cho trnh bin dch ly th vin stdio.h t Th vin h thng v thm vo
m ngun hin ti. Dng k tip thng bo cho trnh bin dch ly tpmyheader.h t th mc my
tnh v thm ni dung v m ngun hin ti.
#undef

FILE_SIZE

#define FILE_SIZE 42

Tin x l ny thng bo cho trnh bin dch v hiu ha bin FILE_SIZE v nh ngha mi c gi
tr 42.
#ifndef MESSAGE
#define MESSAGE "You wish!"
#endif

iu ny thng bo cho trnh bin dch ngn ng C nh ngha MESSAGE nu MESSAGE khng
c nh ngha.
#ifdef DEBUG
/* Your debugging statements here */
#endif

iu ny thng bo cho tin x l thao tc on lnh nu DEBUG c nh ngha.

Cc Macro nh ngha trc


ANSI C nh ngha mt s cc macro. Mc d mi macro ny c sn cho bn s dng trong
chng trnh, bn khng nn chnh sa mt cch trc tip cc macro c nh ngha trc ny.

Macro

Miu t

__DATE__

Ngy hin ti, nh l mt hng s k t, trong nh dng


"MMM DD YYYY"

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 93

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

__TIME__

Thi gian hin ti, nh l mt hng s k t, trong nh dng


"HH:MM:SS"

__FILE__

N cha tn file hin ti nh l mt hng s chui

__LINE__

N cha s dng hin ti nh l mt hng s thp phn

__STDC__

c nh ngha l 1 khi b bin dch bin dch vi chun


ANSI

Bn th v d sau:
#include <stdio.h>

main()
{
printf("File :%s\n", __FILE__ );
printf("Date :%s\n", __DATE__ );
printf("Time :%s\n", __TIME__ );
printf("Line :%d\n", __LINE__ );
printf("ANSI :%d\n", __STDC__ );

Khi on code trn trong file test.c c bin dch v thc hin. N s in ra kt qu sau y:
File :test.c
Date :Jun 2 2012
Time :03:36:24
Line :8
ANSI :1

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 94

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Ton t tin x l
Ngn ng C cung cp cc ton t sau gip bn to cc macro:

Phn tip tc macro (\)


Mt macro thng c bao gm trong 1 dng n. Ton t tip tc ca macro thng c s
dng tip tc mt macro nu c nhiu hn mt dng. V d:
#define

message_for(a, b)

printf(#a " and " #b ": We love you!\n")

Du thng (#)
Ton t stringize - du thng ('#'), khi c s dng trong mt nh ngha macro, chuyn i mt
tham s macro thnh mt hng s chui. Ton t ny c th s dng vi macro xc nh mt
tham s c th trong danh sch tham s. V d:
#include <stdio.h>

#define

message_for(a, b)

printf(#a " and " #b ": We love you!\n")

int main(void)
{
message_for(Carole, Debra);
return 0;
}

Khi on code trn c bin dch v thc hin, n s in ra kt qu sau y:


Carole and Debra: We love you!

Ton t Token Pasting (##)


Ton t token pasting (##) s dng trong mt nh ngha macro kt ni 2 tham s. N cho php 2
token ring bit trong nh ngha marco c th kt hp thnh 1 token. Do n cn c gi
l ton t ghp. V d:
#include <stdio.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 95

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

#define tokenpaster(n) printf ("token" #n " = %d", token##n)

int main(void)
{
int token34 = 40;

tokenpaster(34);
return 0;
}

Khi on code trn c bin dch v thc hin, n s in ra kt qu sau y:


token34 = 40

N xy ra th no, bi v v d ny c kt qu l u ra thc s t b tin x l:


printf ("token34 = %d", token34);

V d ny ch ra s mc ni ca token##n trong token34 v y chng ti s dng


cstringize v token-pasting.

Ton t defined()
Ton t tin x l defined c s dng vi biu thc hng xc nh nu mt nh danh c
nh ngha bi #define. Nu nh danh xc nh c nh ngha, th gi tr l true (khc 0). Nu
cha c nh ngha th gi tr l false (zero). Ton t c nh ngha c xc nh nh sau:
#include <stdio.h>

#if !defined (MESSAGE)


#define MESSAGE "You wish!"
#endif

int main(void)
{
printf("Here is the message: %s\n", MESSAGE);
return 0;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 96

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Khi code trn c bin dch v thc thi, n to ra kt qu sau:


Here is the message: You wish!

Macro tham s
Mt trong nhng tnh nng mnh m ca CPP l kh nng bt chc cc hm bi s dng cc
macro tham s. V d, chng ta c th c mt on code bnh phng mt s nh sau:
int square(int x) {
return x * x;
}

Chng ta c th vit li code trn bi s dng mt macro nh sau:


#define square(x) ((x) * (x))

Cc macro vi cc tham s phi c nh ngha bi s dng #define trc khi chng c th


c s dng. Danh sch tham s c bao quanh trong du ngoc n v phi ngay lp tc
theo tn macro. Cc khong trng l khng c php gia tn macro v cc du ngoc n
m. V d:
#include <stdio.h>

#define MAX(x,y) ((x) > (y) ? (x) : (y))

int main(void)
{
printf("Max between 20 and 10 is %d\n", MAX(10, 20));
return 0;
}

Khi code trn c bin dch v thc thi, n to ra kt qu sau:


Max between 20 and 10 is 20

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 97

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Header File trong C


Mt Header file l mt file vi nh dng .h cha cc khai bo hm v nh ngha marco v c th
c chia s qua nhiu file ngun. C 2 loi Header file l : File m lp trnh vin vit ra v file i
km vi trnh bin dch ca bn.
Bn yu cu vic s dng Header file trong chng trnh bi vic thm n vo chng trnh, vi k
t tin x l #include nh vic bn thm stdio.h vo phn Header file, n s i km vi trnh bin
dch ca bn.
Vic bao gm Header file tng ng vi vic bn sao chp ni dng ca Header file nhng bn
khng cn phi lm nh th, m ch cn #include, code bn s gn v p hn m vn s dng
c ni dung ca Header file.
Trong thc t chng trnh C v C++ chng ta lu tr hu ht cc hng s, marco v bin ton
cc v cc nguyn mu ca hm trong cc Header file v include cc file ny khi bn cn s dng.

C php Include
C Header file ngi dng v h thng u c include s dng ch dn tin x l#include. Di
y l 2 dng:
#include <file>

Dng ny c s dng cho cc file h thng. N s tm file vi tn l file trong danh sch cc th
mc ca h thng.
#include "file"

Dng ny c s dng cho nhng file trong chng trnh ca bn. N s tm kim cc file vi
tn file trong th mc cng cha vi file hin ti.

Hot ng Include
Ch dn #include lm vic bi ch o trc tip b tin x l trong ngn ng C qut cc file nht
nh thm vo file hin ti trc khi bt u vi on m ngun hin ti. V d nu bn c mt
Header file l header.h nh sau:
char *test (void);

v chng trnh chnh gi program.c s dng Header file, ging nh:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 98

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

int x;
#include "header.h"

int main (void)


{
puts (test ());
}

v trnh bin dch s thy lung token tng t, khi chng trnh program.c c nh sau:
int x;
char *test (void);

int main (void)


{
puts (test ());
}

Once-Only Header
Nu Header file c include 2 ln, trnh bin dch s bo li v in ra kt qu li. Cch tiu chun
trnh trng hp ny dng biu thc iu kin nh sau:
#ifndef HEADER_FILE
#define HEADER_FILE

the entire header file file

#endif

Trong trng hp include ri, chng trnh trn s khng include ln 2 na.

Include vi cc iu kin
i khi bn cn thit phi chn mt trong s cc header include vo chng trnh, bn phi c
tham s cu hnh ca h iu hnh s dng. Bn c th thc hin iu ny vi mt dy cc
iu kin nh sau:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 99

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

#if SYSTEM_1
# include "system_1.h"
#elif SYSTEM_2
# include "system_2.h"
#elif SYSTEM_3
...
#endif

Nhng khi s iu kin ny l nhiu, n tr ln t nht, thay vo b tin x l cung cp kh


nng s dng mt macro cho tn Header. iu ny c gi l Include c iu kin. Thay v vit
mt tn Header nh l tham s trc tip ca #include, mt cch n gin bn t mt tn macro
thay cho n:
#define SYSTEM_H "system_1.h"
...
#include SYSTEM_H

SYSTEM_H s c m rng, v b tin x l s tm kim system_1.h nu #include c vit


theo cch ban u. SYSTEM_H c th c nh ngha bi file m bn to vi ty chn -D.

p kiu trong C
p kiu l cch chuyn i mt bin t kiu d liu ny sang kiu d liu khc. V d, khi bn
mun lu tr mt gi tr long cho mt s integer, bn phi p kiu long thnh int. Bn c th
chuyn i gi tr t mt kiu ny sang mt kiu khc s dng ton t p kiu nh sau:
(type_name) expression

Xem xt v d sau m ton t p kiu lm cho php chia mt bin nguyn c thc hin nh l
mt hot ng du chm ng:
#include <stdio.h>

main()
{
int sum = 17, count = 5;
double mean;

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 100

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

mean = (double) sum / count;


printf("Value of mean : %f\n", mean );

Khi thc hin on code, kt qu sau y c in ra, bin mean c kiu double:
Value of mean : 3.400000

Nn ghi nh rng y ton t p kiu c quyn u tin hn php chia, v th gi tr casum u


tin c bin i sang kiu double v cui cng n thc hin chia bi tnh ton trong trng gi
tr double.
Bin i kiu c th l c n i tc l c thc hin t ng bi b bin dch, hoc n c th
c xc nh mt cch r rng bi s dng ton t p kiu. N l tt cho bn nn s dng ton
t p kiu bt c u m cn bin i kiu.

S nng cp integer
S nng cp integer l qu trnh m cc gi tr ca integer nh hn int hoc unsigned intchuyn
i thnh kiu int hoc unsigned int. Gi s bn c v d v vic thm mt k t vo mt s int:
#include <stdio.h>

main()
{
int

i = 17;

char c = 'c'; /* ascii value is 99 */


int sum;

sum = i + c;
printf("Value of sum : %d\n", sum );

Khi on code trn c bin dch v thc hin, n s in ra kt qu di y:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 101

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Value of sum : 116

y, gi tr ca bin sum l 116 bi v trnh bin dch thc hin s nng cp integer v chuyn
i gi tr c thnh ACII trc khi thc hin php ton thm.

Php chuyn i s hc thng thng


Php chuyn i s hc thng thng l cch p kiu gi tr ca n thnh mt kiu thng
dng. Trnh bin dch u tin s thc hin nng cp integer, n chuyn i t thp n cao, di
y l th bc:

Php chuyn i s hc thng thng khng c thc hin cho cc ton t gn, cho cc ton t
logic: && v ||. Chng ta theo di v d sau hiu khi nim ny:
#include <stdio.h>

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 102

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

main()
{
int

i = 17;

char c = 'c'; /* ascii value is 99 */


float sum;

sum = i + c;
printf("Value of sum : %f\n", sum );

Khi on code trn c bin dch v thc thi, n cho kt qu sau:


Value of sum : 116.000000

y, cch n gin hiu l u tin gi tr c chuyn thnh integer, nhng bi v gi tr cui


cng l double, v th php chuyn i s hc thng thng p dng v b bin dch bin i i v c
thnh kiu float v ly kt qu php cng chuyn sang kiu float.

X l li trong C
Cc ngn ng lp trnh nh ngn ng C khng cung cp trc tip h tr vic x l li nhng bi v
l ngn ng chng trnh h thng, n cung cp mc thp nht cc dng ca gi tr tr v. Hu ht
cc hm ca C v hm trong Unix tr v gi tr 1 hoc null trong bt k trng hp li no v thit
lp mt m li errno cho bin ton cc v ch dn c li xy ra trong qu trnh gi hm. Bn c th
tm thy nhiu m li khc nhau trong Header file c tn l <error.h>.
V th mt lp trnh vin C c th kim tra gi tr tr v v thc hin hnh ng chnh xc da vo
gi tr tr v. Trong thc t, lp trnh vin nn thit lp gi tr errno l 0 ti thi im khi to
chng trnh. Mt gi tr 0 th hin rng khng c li trong chng trnh.

Hm perror() v strerror() v thng bo li errno


Ngn ng chng trnh C cung cp cc hm perror() v strerror() c th c s dng hin
th thng bo li errno.

Hm perror() hin th chui m bn truyn cho n, theo sau bi du hai chm, mt khong
trng v sau l on vn bn m t gi tr li hin ti.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 103

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Hm strerror() tr v con tr n on vn bn biu din gi tr li.

Cng th m phng mt iu kin li v th m mt file khng tn ti. Ti y ti s dng c hai


hm ch ra cch s dng, nhng bn c th s dng mt hoc nhiu cch in ra gi tr li ca
bn. im quan trng th 2 cn ghi nh l bn nn s dng stderr a ra tt c cc li.
#include <stdio.h>
#include <errno.h>
#include <string.h>

extern int errno ;

int main ()
{
FILE * pf;
int errnum;
pf = fopen ("unexist.txt", "rb");
if (pf == NULL)
{
errnum = errno;
fprintf(stderr, "Value of errno: %d\n", errno);
perror("Error printed by perror");
fprintf(stderr, "Error opening file: %s\n", strerror( errnum ));
}
else
{
fclose (pf);
}
return 0;
}

Khi on code trn c bin dch v thc hin, n s in ra kt qu sau:


Value of errno: 2
Error printed by perror: No such file or directory

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 104

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Error opening file: No such file or directory

Li chia cho s 0
y l mt trong nhng li rt ph bin trong qu trnh chia, bt c lp trnh vin no khng kim
tra iu kin s b chia l s 0 c th gp li ny trong qu trnh thc hin.
on code bn di sa li ny bi vic kim tra iu kin nu s b chia l s 0 trc khi chia:
#include <stdio.h>
#include <stdlib.h>

main()
{
int dividend = 20;
int divisor = 0;
int quotient;

if( divisor == 0){


fprintf(stderr, "Division by zero! Exiting...\n");
exit(-1);
}
quotient = dividend / divisor;
fprintf(stderr, "Value of quotient : %d\n", quotient );

exit(0);
}

Khi on code trn c bin dch v thc hin s in ra kt qu sau:


Division by zero! Exiting...

Trng thi thot chng trnh


Trong thc t thot chng trnh vi gi tr EXIT_SUCCESS trong trng hp chng trnh
thot ra sau khi mt hot ng thnh cng. y EXIT_SUCCESS l mt macro c nh ngha
l gi tr 0.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 105

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Nu bn c iu kin li trong chng trnh ca bn, bn nn thot ra vi mt trng thi tr v l


EXIT_FAILURE c nh ngha c gi tr l -1. By gi vit chng trnh trn nh sau:
#include <stdio.h>
#include <stdlib.h>

main()
{
int dividend = 20;
int divisor = 5;
int quotient;

if( divisor == 0){


fprintf(stderr, "Division by zero! Exiting...\n");
exit(EXIT_FAILURE);
}
quotient = dividend / divisor;
fprintf(stderr, "Value of quotient : %d\n", quotient );

exit(EXIT_SUCCESS);
}

Kt qu in ra sau khi chng trnh c thc hin nh sau:


Value of quotient : 4

quy trong C
quy l qu trnh lp i lp li mt thnh phn theo cng mt cch. Di y l mt v d minh
ha tng qut:
void recursion()
{
recursion(); /* function calls itself */
}

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 106

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

int main()
{
recursion();
}

Ngn ng lp trnh C h tr quy, v d, mt hm c th gi n chnh n. Nhng khi bn s


dng hm quy, lp trnh vin cn phi cn thn nh ngha iu kin thot khi hm, phng khi
gp phi vng lp v hn.
Hm lp quy rt hu dng gii quyt cc vn trong ton hc nh tnh ton giai tha, to
dy Fibonacci,

Tnh ton giai tha


Di y l mt v d, c th tnh ton giai tha ca mt s cho trc s dng hm quy:
#include <stdio.h>

int factorial(unsigned int i)


{
if(i <= 1)
{
return 1;
}
return i * factorial(i - 1);
}
int

main()

{
int i = 15;
printf("Factorial of %d is %d\n", i, factorial(i));
return 0;
}

Khi on code trn c bin dch v thc thi, s in ra kt qu sau y:


Factorial of 15 is 2004310016

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 107

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Dy Fibonacci
Di y l mt v d khc, to ra dy Fabonacci cho mt s cho trc s dng hm quy:
#include <stdio.h>

int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}

int

main()

{
int i;
for (i = 0; i < 10; i++)
{
printf("%d\t%n", fibonaci(i));
}
return 0;
}

Khi on code trn c bin dch v thc thi, s in ra kt qu sau y:


0

13

21

34

Tham s bin trong C


http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 108

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

i khi trong mt s trng hp, khi bn mun c mt hm, m c th nhn cc tham s, v d:


cc tham s, , thay cho cc tham s c nh ngha trc. Ngn ng C cung cp cho bn
gii php cho tnh hung ny v bn c php nh ngha mt hm m chp nhn cc tham s
hm da vo cc yu cu ca bn. Di y l v d cho vic nh ngha cc hm nh vy:
int func(int, ... )
{
.
.
.
}

int main()
{
func(1, 2, 3);
func(1, 2, 3, 4);
}

Bn nn ghi nh rng hm func() c tham s cui dng tnh, v d: ba du chm () v tham s


trc n lun lun l int m s biu din tng s tham s bin c truyn. s dng tnh nng
ny, bn cn s dng Header file l stdarg.h m cung cp cc hm v macro thc hin tnh
nng ny theo cc bc:

nh ngha mt hm vi tham s cui dng tnh v tham s ng trc n lun lun


l int m biu din s cc tham s.

To mt bin kiu va_list trong nh ngha hm. Kiu ny c nh ngha trong stdarg.h.

S dng tham s int v macro l va_start khi to bin va_list ti mt danh sch tham
s. Macro va_start ny c nh ngha trong stdarg.h.

S dng macro l va_arg v bin va_list truy cp mi mc trong danh sch tham s.

S dng mt macro l va_end xa b nh c ch nh ti bin va_list.

By gi chng ta theo cc bc trn v vit mt hm n gin m c th nhn cc tham s v tr


li gi tr trung bnh ca chng:

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 109

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

#include <stdio.h>
#include <stdarg.h>

double average(int num,...)


{

va_list valist;
double sum = 0.0;
int i;

/* initialize valist for num number of arguments */


va_start(valist, num);

/* access all the arguments assigned to valist */


for (i = 0; i < num; i++)
{
sum += va_arg(valist, int);
}
/* clean memory reserved for valist */
va_end(valist);

return sum/num;
}

int main()
{
printf("Average of 2, 3, 4, 5 = %f\n", average(4, 2,3,4,5));
printf("Average of 5, 10, 15 = %f\n", average(3, 5,10,15));
}

Khi on code trn c bin dch v thc hin, n cho kt qu sau. Bn nn ghi nh rng
hm average() c gi hai ln v trong mi ln th tham s u tin biu din tng cc tham s
bin c truyn. Ch c cc tham s tnh s c s dng truyn s cc tham s.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 110

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Average of 2, 3, 4, 5 = 3.500000
Average of 5, 10, 15 = 10.000000

Qun l b nh trong C
Chng ny s gii thch v cch qun l b nh ng trong ngn ng C. Ngn ng lp trnh C
cung cp vi hm khc nhau cho vic cp pht v qun l b nh. Nhng hm ny c th tm thy
trong Header file l <stdlib.h>.

STT Hm v Miu t

void *calloc(int num, int size);


Hm ny cp pht mt mng cc phn t num m kch c ca mi phn
t c tnh bng byte s l size.

void free(void *address);


Hm ny gii phng mt khi b nh c xc nh bi address.

void *malloc(int num);


Hm ny cp pht b nh ng vi kch thc num.

void *realloc(void *address, int newsize);


Hm ny thay i kch c b nh cp pht thnh kch c
minewsize.

Cp pht b nh ng
Khi bn lp trnh, bn phi nhn thc v ln ca mt mng, sau n l d dng cho vic nh
ngha mng. V d, bn lu tr mt tn ca ngi bt k no, n c th ln ti ti a 100 k t v
th bn c th nh ngha nh sau:
char name[100];

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 111

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

By gi hy xem xt trng hp bn khng c mt tng no v ln ca mng bn d nh


lu tr, v d bn mun lu tr mt miu t chi tit v mt ch . Ti y bn cn nh ngha mt
con tr ti k t m khng nh ngha bao nhiu b nh c yu cu v sau da vo yu cu
chng ta s cp pht b nh nh v d di y:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char name[100];
char *description;

strcpy(name, "Zara Ali");

/* allocate memory dynamically */


description = malloc( 200 * sizeof(char) );
if( description == NULL )
{
fprintf(stderr, "Error - unable to allocate required memory\n");
}
else
{
strcpy( description, "Zara ali a DPS student in class 10th");
}
printf("Name = %s\n", name );
printf("Description: %s\n", description );
}

Khi on code trn c bin dch v thc hin, n s in ra kt qu di y:


Name = Zara Ali
Description: Zara ali a DPS student in class 10th

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 112

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Chng trnh nh trn c th c vit bi s dng calloc(), thay cho malloc nh sau:
calloc(200, sizeof(char));

Nh th l bn hon ton iu khin vic cp pht b nh v bn c th truyn bt c gi tr


kch c no trong khi cp pht b nh, khng ging nh mng c di c nh khng th thay i
c.

Thay i v gii phng b nh


Khi chng trnh ca bn kt thc, h iu hnh s t ng gii phng b nh cp pht cho
chng trnh, nhng trong thc t khi bn khng cn b nh na, bn nn gii phng b nh bng
cch s dng hm free().
Mt cch khc, bn c th tng hoc gim c ca khi b nh cp pht bng cch gi
hm realloc(). Hy kim tra chng trnh trn li mt ln v s dng hm realloc() v free():
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
char name[100];
char *description;

strcpy(name, "Zara Ali");

/* allocate memory dynamically */


description = malloc( 30 * sizeof(char) );
if( description == NULL )
{
fprintf(stderr, "Error - unable to allocate required memory\n");
}
else
{

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 113

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

strcpy( description, "Zara ali a DPS student.");


}
/* suppose you want to store bigger description */
description = realloc( description, 100 * sizeof(char) );
if( description == NULL )
{
fprintf(stderr, "Error - unable to allocate required memory\n");
}
else
{
strcat( description, "She is in class 10th");
}

printf("Name = %s\n", name );


printf("Description: %s\n", description );

/* release memory using free() function */


free(description);
}

Khi on code trn c bin dch v thc thi, n cho kt qu sau:


Name = Zara Ali
Description: Zara ali a DPS student.She is in class 10th

Bn c th th v d trn m khng s dng vic cp pht thm v hm strcat() s thng bo li


do khng b nh cp pht.

Tham s dng lnh trong C


N l c th truyn cc gi tr t dng lnh command line cho chng trnh C khi n c
thc hin. Nhng gi tr ny c gi l Tham s dng lnh - command line argument v nhiu
khi rt quan trng cho chng trnh ca bn khi bn iu khin chng trnh ca bn bn ngoi
thay v bin m th nhng gi tr bn trong on code.

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 114

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Cc tham s dng lnh c x l bi s dng cc tham s hm main(), vi argc hng n s


lng tham s bn truyn v argv[] l mng con tr hng n bt k tham s no cung cp cho
chng trnh . Di y l v d kim tra nu c bt k tham s c cung cp t dng lnh v
thc hin cc hnh ng tng ng:
#include <stdio.h>

int main( int argc, char *argv[] )


{
if( argc == 2 )
{
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}
}

Khi on code trn c bin dch v thc thi vi 1 tham s, n s in ra kt qu sau:


$./a.out testing
The argument supplied is testing

Khi bn truyn 2 tham s cho on code trn n s in ra kt qu sau y:


$./a.out testing1 testing2
Too many arguments supplied.

Khi on code trn c thc hin v thc thi vi khng c tham s no c truyn vo, n s in
ra kt qu di y:
$./a.out

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 115

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

One argument expected

Ch rng argv[0] gi gi tr tn ca chnh chng trnh v argv[1] l mt con tr n tham s


dng lnh u tin cung cp, argv[n] l tham s cui. Nu khng c tham s no c cung
cp, argc s l 1, nu bn truyn 1 tham s th sau argc c gi tr 2.
Bn truyn tt c tham s dng lnh ring r nhau bi khong trng, nhng nu cc tham s t n
c mt khong trng th bn c th truyn cc tham s ny bi t chng trong du trch dn kp
() hoc trch dn n (). By gi chng ta vit li chng trnh trn khi bn in ra tn chng trnh
v truyn cc tham s dng lnh t bn trong du trch dn kp ().
#include <stdio.h>

int main( int argc, char *argv[] )


{
printf("Program name %s\n", argv[0]);

if( argc == 2 )
{
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}
}

Khi on code trn c bin dch v thc hin vi mt tham s n ring r bi du cch bn
trong du trch dn kp, kt qu sau y c in ra:
$./a.out "testing1 testing2"

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 116

http://vietjack.com/cprogramming/index.jsp

Copyright vietjack.com

Progranm name ./a.out


The argument supplied is testing1 testing2

C - Ti liu tham kho


Cc ti liu di y cha cc thng tin hu ch v Ngn ng C. Bn nn s dng chng nng
co kin thc ca mnh cng nh hiu cc ch trong lot bi hng dn ny.

Cc ng link hu ch v C

Tutorialspoint Lot bi hng dn ca chng ti xy dng da trn ngun ny.

Compile and Execute C Online Bin dch v thc thi chng trnh C trc tuyn.

History of C S pht trin ca Ngn ng C, Dennis M. Ritchie

Notes on K&R2 Mt quyn sch hng dn tuyt vi v K&R2

Programming in C Cc tc phm, lch s, vn ha v Ngn ng chng trnh C.

Learn GNU Debugger - GDB Mt cng c dubug li trong cc chng trnh C v C++.

Unix Makefile Mt file ch dn chng trnh cch bin dch v kt ni mt chng trnh C
hoc C++.

C++ tutorial Nu bn lm vic vi C th l lc nn tm hiu v C++

http://vietjack.com/ Trang chia s cc bi hc online min ph

Trang 117

You might also like