NGÔN NG

Giáo viên

L PC

V V n

nh

Bài 1: T ng quan v ngôn ng l p trình C 

Ngôn ng C có m t s các sau : 

c i mn ib t

B l nh phù h p v i ph ng pháp l p trình c u trúc.  Ki u d li u phong phú.  M t ch ng trình C bao gi c ng g m m t ho c nhi u hàm và các hàm r i nhau.  Là ngôn ng linh ng v cú pháp, ch p nh n nhi u cách th hi n ch ng trình .
Ngôn ng l p trình C 2

I. H
1.

ng d n s d ng môi tr Kh i ng

ng k t h p Turbo C

C1: T DOS [ ng d n ]\ TC.EXE ]\ C2: T Win C -> TC -> BIN -> TC.EXE C3: Start -> Run -> C:\TC\BIN\TC.EXE C:\TC\BIN\
2.

3.

M File M file m i : File -> New M file ã có: File -> Open Ghi File Save (F2) : Ghi t p m i ang so n th o vào a Save as : Ghi t p ang so n th o vào a theo tên m i ho c e lên t p ã có
Ngôn ng l p trình C 3

 Ch y m t ch  ng trình ng trình F9 : Biên d ch  Ctrl F9 : Th c thi ch  Alt F5 : Xem k t qu  Thoát kh i C Thoát t m th i v DOS : Dos Shell  Thoát h n kh i C: File \ Quit ( Alt + X)  Ngôn ng l p trình C 4 .

for. float. do. While. . do.« Là nh ng t có m t ý ngh a hoàn toàn xác Asm. Gi i thi u ngôn ng l p trình C 1.9 Ký hi u toán h c : +-*/=() Ký t g ch n i: _ Các ký hi u c bi t khác nh : .II.. Z. : [ ] { } ? ! \ & | % # $. . Các thành ph n c a NNLT C  T p các ký t      Ch cái: A ... int. char. z Ch s : 0. a .« nh  T khoá    Tên    Dùng xác nh các i l ng khác nhau trong m t ch B t u b ng ch cái ho c g ch n i dài c c i m c nh là 32 Ngôn ng l p trình C ng trình 5 .

Ngôn ng l p trình C 6 . Các ki u d li u c s trong C  Ki u s ký t (char)  Ki u s nguyên (int)  Ki u d u ph y ng (chính xác chính xác kép (double))  Ki u void n (float).2.

2.  Ví d Ký t 0 1 2 A a Ngôn ng l p trình C Mã ASCII 48 49 50 65 97 7 .1 Ki u ký t (char)  M t giá tr ki u ký t (char) chi m 1 byte trong b nh và bi u di n m t ký t thông qua b ng mã ASCII.

ch1. Trong ngôn ng C cung c p hai ki u ký t (char) là signed char và unsigned char Ph m vi signed char unsigned char S ký t -128..255 Kích th c 1 byte 1 byte Ví d : char ch..127 0. Ngôn ng l p trình C 8 . ch= µa¶ . ch1= 97.

2.2 Ki u s nguyên (int) Ki u s nguyên trong C g m các ki u sau: Ki u int Unsigned int Ph m vi bi u di n Kích th -32768 -> 32767 0 -> 65535 -2147483648 2 byte 2 byte 4 byte 4 byte c Ngôn ng l p trình C 9 .

41.4E-4932 -> 1.7E- S ch s có ngh a 7 -8 15-16 15- Kích th c 4 byte 8 byte 10 byte 3.4E3.2.7E-308 -> 1.3 Ki u s th c hay còn g i là ki u d u ph y ng Ki u float double laong double Ph m vi bi u di n 3.7E+308 1.4E+38 3.4-38E -> 3.1E+4932 17-18 17- Ngôn ng l p trình C 10 .

3 H ng và bi n 3.1 H ng:  Khái ni m: h ng là giá tr b t bi n trong ch ng trình không thay i. Các lo i h ng c s d ng trong C t ng ng v i các ki u d li u nh t nh  Trong C có ba lo i h ng :    H ng s H ng chu i H ng ký t Ngôn ng l p trình C 11 . không bi n i v m t giá tr .

và c l u theo ki u float.031). ho c ghi d i d ng s có m . Ví d : 43L ho c 43l là h ng nguyên l u theo ki u long int. 3. N u giá tr v t quá mi n giá tr c a int ho c có ký t l (hay L ) theo sau giá tr thì l u theo ki u long int.1e-2=0. Ví d : 1. double.1e- Ngôn ng l p trình C 12 .2 . Ví d : 12.1E -3 (2.1E3=0.1E(2. 2. long double. có th là ki u nguyên hay ki u th c  H ng nguyên: Giá tr ch bao g m các ch s .1e-2 (3. d u +.-12 12.H ng s : là các giá tr s ã xác nh.  H ng th c: Trong giá tr có d u ch m th p phân. c l u tr theo ki u int.0021) ho c 3.1e.(3.

 H ng ký t 'A' th c s ng ngh a v i giá tr nguyên 65.'1'= 56-49=7. 56- Ngôn ng l p trình C 13 . Ð i v i m t vài h ng ký t c bi t. nguyên là giá tr trong b ng mã ASCII c a ch hoa 'A' (Nh v y giá tr c a h ng chính là mã ASCII c a nó).H ng ký t  M t h ng ki u ký t c vi t trong d u ngo c n (' ) nh 'A' ho c 'z'. nh '\t' t ng ng v i phím tab:  H ng ký t có th tham gia vào phép toán nh m i s nguyên khác: VD: '8' . ta c n s d ng cách vi t thêm d u \ .

Cách vi t µ\n¶ µ\t¶ µ\o¶ µ\b¶ µ\r¶ µ\f¶ µ\\¶ µ \´ ¶ µ \¶ ¶ Ký t Xu ng hàng Tab ³nul´ t ng ng v i giá tr nguyên 0 trong b ng mã ASCII Backspacse V u dòng Sang trái \ ´ ¶ Ngôn ng l p trình C 14 .

ví d chu i "Turbo C" c l u tr trong b nh nh sau: T u r b o C \0 Ngôn ng l p trình C 15 .H ng chu i  Là chu i ký t n m trong c p d u nháy kép " ". "Ngôn ng C++ \n\r"  M t h ng chu i c l u tr t n cùng b ng m t ký t Nul cùng (\0).  Ví d : "Turbo C". Các ký t này c ng có th là các ký t c bi u di n b ng chu i thoát.

1415 Ngôn ng l p trình C 16 .Cách nh ngh a h ng s d ng trong ch ng trình trình  V i các giá tr h ng th ng c dùng trong m t dùng ch ng trình ta nên nh ngh a u ch ng trình trình (sau các dòng khai báo nh ng th vi n chu n) theo cú pháp: #define <tên h ng> <giá tr > Ví d : #define PI 3.

d=1. .2 Bi n .Cách khai báo: M i bi n trong ch ng trình u ph i c khai báo tr c khi s d ng v i cú pháp khai: Ki u d li u <danh_sách_tên_bi n>. float x. Ngôn ng l p trình C 17 . Vi c làm này g i là kh i u cho bi n.b=6.Kh i u cho các bi n Ngay trên dòng khai báo ta có th gán cho bi n m t giá tr .3. ng n cách Ví d : int a.  L u ý: n u có nhi u tên bi n thì gi a các tên bi n ph i có d u . Ví d : int a.b.

Ð nh n scanf. t :& Ví d : &tên_bi n .  Cách truy xu t n a ch M t s hàm c a C dùng nh hàm scanf.&a : c a bi n n a ch c a bi n ví d a ch c a bi n dùng toán dùng a ch c a bi n a Ngôn ng l p trình C 18 .

2. 4.3. khai báo bi n Khai báo hàm Ch ng trình chính Ngôn ng l p trình C 19 . 3.3 C u trúc t ng quát c a ch ng trình C 1. 5. M t ch ng trình C chu n g m có các thành ph n sau: Các ch th ti n biên d ch Khai báo các ki u d li u m i Khai báo h ng.

Hàm main có th tr v giá tr ki u nguyên (int) ho c không tr v giá tr nào (void) Ngôn ng l p trình C 20 . Khai báo h ng và bi n: khai báo các h ng s và bi n dùng trong ch ng trình Khai báo hàm: khai báo các hàm t vi t Ch ng trình chính: hàm main là hàm b t bu c trong ch ng trình. 3. typedef float mang[10]. VD: typedef int songuyen. Ch th ti n biên d ch: giúp trình biên d ch th c hi n m t s công vi c tr c khi th c hi n m t s công vi c tr c khi th c hi n biên d ch chính th c VD: #include <stdio.h>. Khai báo ki u d li u m i: dung t khoá typedef. #include <conio.1. 2.h>. 5. 4.

/* Ch ng trình in ra dòng ch Trung tâm ào t o Trí c trên màn hình */ # include <stdio.h> void main () /* Ham chinh */ { printf(" \n Trung tâm ào t o Trí c "). /*xuong dong in chu Trung tâm ào t o Trí c */ } Ngôn ng l p trình C 21 .

2f\nDien tich = %10.1 void main () { float cv.2f".* Ch ng trình tính chu vi và di n tích hình tròn.dt.cv. /* Tam dung chuong trinh */ } Ngôn ng l p trình C 22 .h> /* khai báo th vi n hàm nh p xu t chu n */ # include <math. bi t bán kính r là m t h ng s có giá tr =3.h> /* khai báo th vi n hàm toán h c */ #define r 3. /* khai bao bien chu vi va dien tich kieu so thuc */ cv=2*r*M_PI.dt).1 */ # include <stdio. /* In ket qua len man hinh */ getch(). /* Tinh dien tich */ printf("\nChu vi = %10. /* tinh chu vi */ dt=M_PI*r*r.

printf("%f la mot so thuc.so_nguyen). /* Khai báo/kh i u kí t . /* Khai báo kh i u s nguyên */ float so_thuc = 27.\n".h> void main() { char ki_tu = 'a'.so_thuc). */ int so_nguyen = 15. /* Khai báo/kh i u s th c/ printf("%c la mot ki tu. printf("%d la mot so nguyen. v a kh i u m t bi n trong C */ #include <stdio.*Ch ng trình này minh h a cách v a khai báo.\n".62.\n". } Ngôn ng l p trình C 23 .ki_tu).

|| : phép ho c)  Ngôn ng l p trình C 24 .Bài 2: Bi u th c và các phép toán  I. các hàm  Bi u th c logic bao g m các bi n. hàm và phép toán logic (!: phép ph nh. Bi u th c Là s k t h p các phép toán và các toán h ng di n t m t công th c toán h c nào ó.  Bi u th c trong C g m có bi u th c toán h c và bi u th c logic  Bi u th c toán h c bao g m các phép toán s h c và các h ng. h ng. các bi n. &&: phép và.

II. Các phép toán  Phép toán s h c Phép toán Ý ngh a + C ng Tr * Nhân / Chia % L y ph n d Chú ý: -Phép toán chia 2 s nguyên s ch t c t ph n th p phân. -Phép toán l y ph n d không áp d ng cho các giá tr float và double Ngôn ng l p trình C 25 .

Các phép toán  Phép toán quan h Phép toán Ý ngh a Ví d > Có l n h n không? a>b >= Có l n h n hay b ng không? a>=b < Có nh h n không? a<b <= Có nh h n hay b ng không? a<=b == Có b ng hay không? a==b != Có khác nhau không? a!=b Các phép toán quan h có u tiên th p h n so v i các phép toán s h c Ngôn ng l p trình C 26 .II.

II. Các phép toán  Phép toán logic Phép ph nh !  Phép và (AND) &&  Phép ho c (OR) ||   Các phép toán quan h có u tiên nh h n so v i ! nh ng l n h n so v i phép && và || Ngôn ng l p trình C 27 .

m = y + 2 ± m. Ngôn ng l p trình C 28 . Câu l nh gán và bi u th c Cú pháp c a l nh gán: <tên bi n> = <bi u th c>. Trong C cho phép ng i s d ng c g p l nh gán theo cú pháp : a = b = c = 7. VD: x = -10.

--m .     Phép toán t ng gi m Toán t + + : dùng t ng giá tr c a các bi n nguyên hay bi n th c Toán t . n+ +.ng tr c toán h ng thì giá tr c a toán h ng c t ng ho c gi m tr c khi s d ng và ng c l i n u toán t ++.ng sau toán h ng thì toán h ng c t ng hay gi m sau khi th c hi n Ngôn ng l p trình C 29 . -. -.dùng gi m giá tr c a bi n nguyên hay bi n th c Toán t + + và -.. --m m--. m--.u có th ng tr c ho c sau toán h ng VD: + + n . Khi các toán t + +.

Chuy n i ki u giá tr Vi c chuy n i ki u giá tr trong C th ng di n ra t ng trong tr ng h p sau:  Trong bi u th c có các toán h ng khác ki u  Khi gán m t giá tr ki u này cho m t giá tr ki u khác  Ngoài ra ta có th dùng phép chuy n ki u ép ki u d li u sang ki u khác (type) bi u_th c Chú ý: .Khi chuy n i ki u t ng bi u th c thì i v i toán h ng có ki u th p h n s c nâng thành ki u cao h n tr c khi ht c hi n phép toán và k t qu thu c s có k t qu theo ki u cao h n Ngôn ng l p trình C 30 .

Ki u int và ki u long thì int ----> long ---->  int và float thì int ---> float --->  Float và double thì float -----> double ----->  Ki u int có th chuy n thành float và ng  cl i Ngôn ng l p trình C 31 .

. M i bi Ngônth l ctrình C c t t ng ng u ng p có 32 ..Bài 3 Các hàm vào ra d li u I.. Hàm xu t nh p chu n trong th vi n <stdio. bt1..btk : là k bi u th c c n in k t qu ra màn hình <dòng i u khi n> là m t h ng xâu ký t bao g m 3 lo i: Ký t di u khi n vi c xu ng dòng ti p theo µ\n¶ µ\ Ký t hi n th : là ký t c in ra màn hình Ký t mô t cách a ra màn hình c a các bi n( c t c a ki u).btk)... bt2.h>  Hàm a k t qu ra màn hình Cú pháp: printf(<dòng i u khi n>. pháp: Ý ngh a: a: bt1.

Trong ó m là s ch s sau d u ph y. n là m t s nguyên xác nh r ng t i thi u trên màn hình cho giá tr c a bi u th c: VD: Ngôn ng l p trình C 33 . Trong ó n là s nguyên xác nh r ng t i thi u dành cho giá tr bi u th c in ra màn hình c t ki u s th c %[n][.m]f.  c t ki u nguyên i v i bi u th c có giá tr ki u s nguyên %[n]d .

%c : in m t ký t có mã ASCII t ng ng  %[n]d : in m t s nguyên v i chi u dài t i thi u là n  %[n]ld: in m t s nguyên (long int)  %[n.m]f : in m t s th c v i chi u dài n và l y m s th p phân  %s : in ra chu i ký t  Ngôn ng l p trình C 34 .

sau khi in xong thì con tr s c chuy n xu ng dòng. Trong ó s là con tr ki u char tr t i vùng ch a xâu ký t Hàm a m t ký t ra màn hình Cú pháp: pháp: int putchar(int ch). Ý ngh a: Hi n th m t xâu ký t s lên màn hình. Ý ngh a: Hàm s ký t ch ra màn hình v i ch là mã c a lý t a: c n in Ngôn ng l p trình C 35 .  Hàm hi n th m t xâu ký t ra màn hình Cú pháp: int puts(char *s).

&bi nk: là a ch c a bi n trong b nh  Hàm nh n t bàn phím m t xâu ký t Cú pháp: int *getchar(char *s). Ý ngh a:  Hàm nh n dãy ký t t bàn phím vào cho n khi g p ký t ¶\n· thì d ng l i  s là con tr tr t i vùng nh s ch a xâu v a nh n  Ngôn ng l p trình C 36 ..&bi nk). .. Hàm nh n d li u t bàn phím Cú pháp: scanf(´dt1dt2..dtkµ.. .dtk là m t h ng xâu ký t c t c a k bi n  &bi n1.. Ý ngh a: dt1... &bi n1.

 Hàm nh n m t ký t t bàn phím Cú pháp: pháp: getchar(void). Ý ngh a: nh n ký t c nh p t bàn phím Ngôn ng l p trình C 37 .

h>  Hàm getch() và getche Cú pháp : int getch( void ) int getche( void ) . Hàm xu t nh p chu n trong th vi n <conio. N u b m r ng thì ch .h .Hàm getche() cho hi n ký t lên màn hình còn getch() thì không .K t qu tr v c a hàm là ký t c n trên bàn phím.Hai hàm trên ch nh n m t ký t tr c ti p t b m bàn bàn phím. Khi m t phím thì c n thì nh n ngay ký t ó mà không c n ph i enter nh các thì mà hàm nh p t stdio.II. Ngôn ng l p trình C 38 .

Vì bàn v y v i hàm cscanf ta c ng ph i kh ký t \n trong b m b ng %*c ho c b ng hàm getch() hàm  Ngôn ng l p trình C 39 .Xu t ký t có màu Cú pháp : cprintf Ý ngh a: in ra ký t có màu a: c n nh b i hàm hàm textcolor.  Nh p ký t có màu Cú pháp: cscanf Ý ngh a: + N i dung nh p có màu c n nh b i hàm hàm textcolor + Nh n n i dung tr c ti p t b m bàn phím.

y  Hàm t m u n n textbackground void textbackground(int color). tiên Ngôn ng l p trình C 40 . t m u n n Color là m t bi u th c nguyên có giá tr t 0 n 7 t ng ng v i m t trong 8 h ng s màu u tiên c a b ng m u v n b n. Có tác d ng xóa toàn b m àn hình và sau khi xóa con tr s v trí góc phía bên trái. int y). t con tr t i v trí x.III.  Hàm t t a con tr : gotoxy(int x.M t s hàm thao tác trên màn hình  Hàm xóa màn hình: clrscr().

L a ch n màu ký t m i newColor. t m u ch textcolor void textcolor(int newColor).Trong ó newColor là màu m t bi u th c nguyên có giá tr t 0 n 15 t ng ng v i m t trong các h ng s màu c a b ng m u v n b n. Hàm Ngôn ng l p trình C 41 .

 Kh i l nh: là t p h p các câu l nh b t nh: câu u b ng d u ³{³ và k t thúc b ng d u ³}´  Ngôn ng l p trình C 42 .Bài 4: C u trúc i u khi n  Câu l nh. kh i l nh Câu l nh: m i câu l nh th c hi n m t công vi c và nh: câu c k t thúc b i d u .

Ý ngh a: bt là bi u th c lôgic. else s1 . n u bt nhân giá tr true thì th c hi n s. C u trúc if d ng 1 Cú pháp: if (bt) s. s là l nh n ho c l nh ph c. n u bt nh n giá tr true thì th c hi n s b qua s1. ng c l i s c b qua 2. C u trúc i u khi n if 1. Ý ngh a: bt là bi u th c lôgic.I. C u trúc if d ng 2 Cú pháp: if(bt) s. ng c l i n u bt nh n giá tr flase thì th c hi n s1 b qua s(s và s1 có th là l nh n ho c l nh ph c) Ngôn ng l p trình C 43 .

Gi i h ph ng trình b c nh t hai n s ax + by = c dx + ey = f  Ngôn ng l p trình C 44 .Chú ý : trong C cho phép s d ng các c u trúc if l ng nhau gi i quy t bài toán 3.Nh p 2 s th c a. Tìm và in ra màn hình s l n nh t và s bé nh t . Bài t p . b t bàn phím.

C u trúc r nhánh switch 1..II. case nk : sk [default : s(k+1 )] } Ngôn ng l p trình C 45 ... C u trúc t ng quát Cú pháp: switch (bt) { case n1 : s1 case n2 : s2 .

k): là các l nh n ho c l nh ph c  [default : s(k+1 )] : là ph n tu ch n có th có ho c không Ngôn ng l p trình C 46 . ki u h ng ký t ..k): là các s ki u nguyên.Ý ngh a:  Bt: là bi u th c toán h c có giá tr ki u nguyên  Ni(i=1. ho c bi u th c  Si(i=1..

ch ng trình thoát kh i nhãn). trình l nh switch sau khi th c hi n xong m t tr ng h p. ta dùng l nh break. Khi giá tr bi u th c khác t t c các ni thì th c hi n câu l nh sau default n u có. Ngôn ng l p trình C 47 . Vì v y. ho c thoát kh i câu l nh switch.   Ho t ng: l nh switch ph thu c vào giá tr c a bi u th c bt vi t sau switch. n u: Giá tr bt = ni thì th c hi n câu l nh sau case ni. Khi ch ng trình ã th c hi n xong câu l nh c a case ni nào ó thì nó s th c hi n luôn các l nh thu c case bên thì d i nó mà không xét l i i u ki n ( do các ni còn c xem nh các nhãn).

3.Cho m t s t nhiên. in ra màn hình tên g i c a s lên màn hình(Bài s 12) Ngôn ng l p trình C 48 . Bài t p Vi t ch ng trình nh p vào t bàn phím m t mã s nguyên và a ra ánh gía trình theo yêu c u:  1: trình s c p  2 : trình trung c p  3: trình ih c  4: trình Cao h c  5: trình Ti n s  Các s khác: Không xác nh .

<bt3>) | | | S. giá tr c a bi u th c lôgic này quy t nh vòng l p ti p t c hay k t thúc bt3: th ng là l nh gán có tác d ng làm thay i giá tr c a bi n i u khi n Ngôn ng l p trình C 49 . | Ý ngh a: S là l nh n ho c l nh ph c bt1 : th ng là m t l nh gán kh i t o cho bi n i u khi n bt2: là bi u th c logic. Câu l nh l p for 1.III. Cú pháp: for(<bt1> . <bt2> .

xác nh giá tr c a bt2  B c 3: N u bt2 có giá tr false thì thoát kh i vòng l p.Ho t ng:  B c 1: Th c hi n bt1  B c 2: Tính toán. <bt3> và S có th c tính toán và th c hi n l p nhi u l n Ngôn ng l p trình C 50 . Ng c l i bt2 có giá tr true thì s c th c hi n  B c 4: sau khi th c hi n s th c hi n bt3 và quay l i b c2 Nh n xét:  <t1> ch c th c hi n duy nh t m t l n khi b t u vòng l p  <bt2>.

)  Tr ng h p c bi t <bt2> không có thì luôn c xem là nh n giá tr true. <bt2>. goto ho c return  Có th dùng c u trúc các vòng for l ng nhau  Khi g p l nh break thì ch ng trình s thoát kh i vòng for sâu nh t còn ch a l nh break  Trong vòng for có th s d ng l nh continue chuy n t i chu trình m i c a vòng l p Ngôn ng l p trình C 51 .Chú ý khi s d ng vòng l p for  <bt1>. mu n thoát kh i vòng l p ph i dùng l nh break. <bt3> u có th v ng m t nh ng v n ph i gi l i d u ( .

Bài t p  Vi t ch sau:  ng trình tính t ng c a n s u tiên c a dãy s tiên S = 1+1/2+1/3+1/4+. hàng n v s b ng s nguyên ó. hàng hàng ch c. Vi t ch ng trình tìm t t c các s nguyên có ba ch s sao cho t ng tam th a c a ba ch s hàng tr m.2. Ví d : 13+53+33=153 Ngôn ng l p trình C 52 ..+1/n..

S là m t l nh ho c m t dãy a: l nh Ho t ng Xác nh giá tr c a bt. Ý ngh a: bt là bi u th c lôgic. N u giá tr c a bt= true(<>0) thì chuy n sang b c 2. - Cú pháp : While (bt) S. ng c l i thì thoát kh i vòng l p Th c hi n S sau ó quay v b c 1(L nh S có th c th c hi n nhi u l n ho c không c th c hi n l n nào n u bt =false ngay t u) Ngôn ng l p trình C 53 . Câu l nh while 1.IV.

Nh p hai s nguyên t bàn phím. Bài t p : . tìm và in ra màn hình c s chung l n nh t c a hai s .Tìm hình ch nh t có di n tích l n nh t khi bi t chu vi c a nó(bài s 25) Ngôn ng l p trình C 54 .Chú ý : trong câu l nh l p while ta có th dùng câu l nh break thoát kh i vòng l p theo ý mu n 2.

N u giá tr c a bt = true thì chuy n sang b c (1). bt là bi u th c lôgic Ho t ng: (1) Th c hi n l nh S (2) Xác nh giá tr c a bt. while 1. ng c l i thì thoát kh i vòng l p L nh S luôn c th c hi n ít nh t 1 l n trong câu l nh Ngôn ng l p trình C 55 ..V. Cú pháp do S while (bt). Câu l nh do. Ý ngh a: S là m t câu l nh n ho c ph c.

Bài 5: D li u ki u m ng 1.    Khái ni m: M ng c hi u là m t t p h p các giá tr có cùng ki u d li u n m liên ti p nhau trong b nh máy tính M ng c coi nh m t bi n m ng và tên m ng c t theo quy t c t tên bi n M ng có nh ng thành ph n sau:  Ki u d li u c a các ph n t trong m ng  Tên m ng  S chi u và kích th c c a m i chi u Ngôn ng l p trình C 56 .

2. //m ng 1 chi u A g m 10 ph n t ki u s nguyên float B[2] [3]. Cách khai báo bi n m ng <ki u_dl> <tên_m ng><ds các chi u c a m ng> VD: int A[10]. // M ng 2 chi u B g m 2 hàng và 3 c t. các ph n t có ki u s th c Ngôn ng l p trình C 57 .

3. Cách truy c p theo a ch &tên_bi n[i] trong ó i là ch s c a ph n t  VD: a= &a[0] //Tên m ng ch t i a ch ph n t u tiên c a m ng Ngôn ng l p trình C 58 . Ch s c a ph n t trong m ng luôn là m t s nguyên không v t qua kích th c c a m ng  Các ph n t c a m ng c s p x p li n nhau trong b nh c a máy tính và ch cho phép truy c p n a ch tr c ti p c a ph n t i v i m ng m t chi u. Cách t ch c và truy xu t n ph n t m ng  Ph n t c a m ng c xác nh thông qua ch s .

4.a[i]) Ngôn ng l p trình C 59 .i). } .i<5.Nh p d li u cho m ng for( i=0. scanf(´%dµ.i++) printf(´%6dµ. Cách xu t nh p d li u trên m ng .i++) { printf(´Phan tu thu %d= µ.In các ph n t c a m ng ra màn hình for(i=0.i<n.Nh p xu t tr c ti p ng d ng cho m ng m t chi u và m ng hai chi u có ph n t ki u int thông qua a ch . &a[i]).

Tìm và in ra s th c l n nh t trong ma tr n Ngôn ng l p trình C 60 .- Nh p xu t d li u gián ti p thông qua m t bi n trung gian i v i m ng m t chi u và m ng a chi u for(i=0.&temp).%d]µ. tìm và in ra màn hình s nguyên l n nh t và s nguyên nh nh t .j<3.i++) for(j=0. } .j++) { printf(´a[%d. scantf(´%fµ.i<2.Nh p ma tr n các s th c kích th c n hàng và m c t. a[i] [j] = temp. j).Nh p vào t bàn phím n s nguyên. i.Bài t p .

y. p. M i lo i a ch thì có lo i con tr t ng ng. y là hai bi n ki u nguyên. *p. M i bi n có ki u khác nhau thì c l u vào các a ch khác nhau Con tr là m t bi n dùng ch a a ch . VD1: int x. *c. - - - Khái ni m con tr và a ch a ch : D a vào ki u d li u khi khai báo bi n máy s c p phát cho bi n m t a ch l u tr bi n ó trên vùng nh .Bài 6: Con tr 1. Tr c khi s d ng bi n con tr ta ph i khai báo tr c khi s d ng Khai báo: <ki u_DL> * <tên_bi n_con_tr >. c là hai bi n con tr ki u nguyên Ngôn ng l p trình C 61 . x.

/* l u a ch trong p vào con tr q*/ Ngôn ng l p trình C 62 .VD2: float *t. *d . //Khai báo bi n con tr t và d có ki u th c Bi n con tr c dùng theo hai tr ng h p sau:  Tên con tr ch n a ch c a bi n c l u trong con tr : float a.*p. p=&a. /* l u a ch c a bi n a vào con tr p */ q= p.*q.

*py=3*x+z. z=20. y . Ngôn ng l p trình C 63 . px=& x. D ng khai báo c a con tr ch n giá tr l u t i vùng nh mà con tr tr t i. *pz. *py=3*(*px)+*pz. *px. /* *pz=z=20*/ khi ó ba bi u th c sau là t ng ng: y=3*x+z. VD: float x=5. /* khi ó *px = x =5*/ pz=&z..*py.

2.i pa +i pa V y a[k-1] a[k] Ngôn ng l p trình C a[k+1] 64 . Con tr và m ng m t chi u Các ph n t c a m ng có th c xác nh thông qua con tr . //Khai báo m ng g m 10 ph n t ki u th c Ta có tên m ng chính là m t h ng a ch tr t i a ch ph n t u tiên c a m ng và a t ng ng v i &a[0] a+i t ng ng v i &a[i] *(a+i) t ng ng v i a[i] pa . Ta có khai báo : float a[10].

  Các cách vi t a[i]. p[i] là t ng ng nhau VD: Nh p t bàn phím các ph n t c a m ng và tính t ng các ph n t ó Ngôn ng l p trình C 65 . *(a+i). *(p+i).

} s=0.i++) s+=a[i].i<5. printf(³\n Tong =%8.#include<stdio.2f´.i<5.h> #include<stdio. for (i=0.s). scanf(³%f´. s . int i. printf(³\ getch().&a[i]). } Ví d : Tro1 Ngôn ng l p trình C 66 .i++) { printf(³\ printf(³\na[%d]= ´.h> void main() { float a[5].i). for(i=0.

Ð tính toán a ch c a thành ph n a[i][j] chúng ta s d ng công th c sau : (float *)a+i*n+j. a là m t h ng con tr tr n các dòng c a m t ma trân hai chi u. vì v y a tr n dòng th nh t a+1 tr n dòng th hai a+2 tr n dòng th ba Ngôn ng l p trình C 67 .3. Con tr v i m ng nhi u chi u Phép toán l y a ch nói chung không dùng dùng c i v i các thành ph n c a m ng nhi u chi u (tr tr ng thành h p m ng hai chi u các s nguyên).

a[i][j] s có a ch là (float *a) +i*n+j Xét VD nh p giá tr c a ma tr n hai chi u: Tro2 Ngôn ng l p trình C 68 . Ð tính toán c a ch c a ph n t dòng i c t j dòng chúng ta ph i dùng phép chuy n i ki u b t bu c i v i a: (float * )a a là con tr tr n thành ph n a[0][0] c a ma tr n.

scanf("%n".(float *)a+i*20+j).j.h> void main() { float a[10][20]. } Ngôn ng l p trình C 69 .n. for(i=0.j<n.i<n.j). printf("Nhap vao kich thuoc ma tran n=").&n). scanf("%f".i.j++) { printf("a[%d][%d] = ".h> #include <stdio.#include <stdio.i++) for(j=0. int i. } getch().

4. *px. px=&x[10].// p là con tr th c tr t i ph n t x[10] px+i tr t i ph n t x[10+i] px ± i tr t i ph n t x[10-i] x[10Ngôn ng l p trình C 70 . p=(char*)(&x).Phép t ng gi m a ch VD: float x[30]. char *p. khi th c hi n trên con tr ph i th c hi n phép ép ki u: Vd: int x.Phép gán: ch nên th c hi n trên các con tr có cùng ki u. . Phép toán trên con tr .

nó có th nh n b t k a ch nào. gi s p1 và p2 là hai con tr ki u float thì t n t i phép so sánh p1 < p2 // a ch p1 tr t i th p h n a ch p2 tr t i p1==p2 5. so sánh không dùng c con tr ki u void Ngôn ng l p trình C 71 . Con tr ki u void Là con tr c bi t không có ki u.- Phép so sánh: dùng so sánh các con tr cùng ki u. Con tr ki u void th ng dùng làm i nh n b t k a ch nào thông qua phép ép ki u trong thân hàm Các phép toán t ng gi m a ch .

M ng con tr có nhi u ki u. m i ph n t c a m ng ki u nào thì s ch a a ch ki u t ng ng v i nó. tr c khi s d ng m ng con tr c n gán cho m i ph n t m t giá tr là a ch c a m t bi n ho c c a m t ph n t trong m ng Ngôn ng l p trình C 72 .6. M ng con tr M ng con tr là m t m ng mà m i ph n t c a nó có th ch a m t a ch nào ó. M ng con tr c khai báo theo m u sau: <ki u Dl> *<tênm ng>[N] Khi g p khai báo m ng con tr thì máy s c p phát N kho ng nh liên ti p cho N ph n t t ng ng trong m ng Chú ý: M ng con tr không dùng l u s li u.

trình. Hàm main() là thành ph n b t bu c c a ch ng trình.Bài 7: Hàm và ch 1. trình c i m c a hàm:  Là m t nv c l p c a ch ng trình.  Không cho phép xây d ng m t hàm bên trong m t hàm khác. cùng Hàm: Hàm: Là m t o n ch ng trình c l p th c hi n tr n trình v n m t công vi c r i tr v m t giá tr cho ch ng trình ã g i nó. Ch ng trình b t u th c hi n t câu l nh u tiên c a hàm main( ) cho n khi g p d u } tiên cu i cùng c a hàm này. Ngôn ng l p trình C 73 . ng trình Khái ni m Ch ng trình: M t ch ng trình C bao g m m t ho c trình: nhi u hàm.

Ngôn ng l p trình C 74 .

khi không khai báo nguyên m u thì b biên d ch s ki m tra vi c truy n tham s . giá tr tr v có phù h p hay không r i m i cho th c hi n hàm.Nguyên m u c a hàm: Bao g m <ki u dl c a hàm> <tên hàm(ds các tham s )>. Quy t c xây d ng hàm: M t hàm g m có các thành ph n sau . hàm main(). <tên hàm(ds Có th có ho c không khai báo nguyên m u c a hàm.2. Ngôn ng l p trình C 75 . T t c nguyên m u c a các hàm có trong ch ng trình nên t tr c hàm main().

nguyên m u và khi khai báo ph i gi ng nhau. Tên hàm trong nh.    Ki u giá tr c a hàm Giá tr tr v c a hàm c xác nh d a vào m c ích vào c a hàm. Tên hàm Ð t theo qui nh i v i danh nh. N u các hàm không tr v giá tr ta ph i khai báo hàm. hàm ki u void. Tham s c a hàm Khi vi t m t hàm ta ph i xác nh xem hàm có bao nhiêu hàm tham s ? N i dung c a hàm Ngôn ng l p trình C 76 .

<Các câu l nh trong thân hàm>. for(i=0.C u trúc c a m t hàm <Ki u tr v ><Tên hàm>(<ds tham s hình th c hay i s >) { <Khai báo bi n c c b >. } Ngôn ng l p trình C 77 . }.Hàm không có i thì dùng ki u void khai báo i. [return<bt tr v giá tr hàm>]. Chú ý: i v i các hàm không có ki u tr v ta có hàm ki u void .i<10. VD void bell(void) { int i.i++) putch(7).

 -      Cách s d ng hàm: Hàm hàm: c s d ng thông qua l i g i hàm. <tên hàm> ([ds tham s th c]) Tham s th c ph i b ng tham s hình th c Ki u c a tham s th c ph i phù h p v i ki u c a tham s hình th c Ho t ng c a hàm khi có l i g i hàm C p phát b nh cho tham s hình th c và bi n c c b Gán giá tr c a tham s th c cho tham s hình th c Th c hi n các l nh trong thân hàm Khi g p câu l nh return ho c d u hi u k t thúc hàm thì b nh s xoá các tham s hình th c và bi n c c b sau ó thoát kh i hàm quay v ch ng trình g i hàm Ngôn ng l p trình C 78 .

3.1 Phân lo i tham s theo cách s d ng o Tham s hình th c: Các tham s mà ta ghi trong nguyên m u hay ghi lúc khai báo hàm g i là tham s hình th c. các tham là s th c l i chia ra làm hai lo i:  Tham chi u: Là các tham s th c mà ta truy n cho Hàm d i d ng con tr (d ng a ch ). o Tham s th c:Các giá tr .  Tham tr : Là các tham s th c mà ta truy n cho Hàm d i d ng bi n. Tham tr không b o l u l i nh ng k t qu thay i c a nó c tính toán trong Hàm khi Hàm k t thúc. Trong C. Các tham s trong hàm 3. Hàm Ngôn ng l p trình C 79 . Tham chi u m i ghi nh n l i c nh ng k t qu v a tính toán trong Hàm khi Hàm Hàm k t thúc. bi n mà ta ghi sau tên hàm khi g i hàm ó th c hi n g i là tham s th c.

hàm.2 Phân lo i theo công d ng  Tham s c a m t hàm có hai công d ng:  Cung c p các giá tr cho hàm khi ta g i nó th c hi n .  L u các k t qu tính toán c trong quá trình hàm trình ho t ng T ng ng v i công d ng ta có các lo i tham s :  Tham s vào: Cung c p giá tr cho hàm. v a ra: v a cung c p giá tr cho hàm.  Tham s v a vào. hàm.  Tham s ra: L u k t qu tính toán c trong hàm. Ngôn ng l p trình C 80 . v a l u k t qu tính toán c trong hàm.3.

double.double. Khi ó a ch c a bi n (float. ) thì tham hàm s th c t ng ng ph i là a ch c a bi n ki u int (float...double. Khi mu n b o l u l i k t qu tính toán c c a các i s trong hàm s d ng cho ch ng trình g i hàm có i s thì chúng ta ph i khai báo i s c a hàm là tham chi u (con tr hay d ng a ch ). Hàm có i con tr i s c a hàm là con tr ki u int (float.). VD: Ngôn ng l p trình C 81 ..).4. c truy n cho i con tr t ng ng.

M t chu i ký t c c p phát m t kho ng nh cho m t m ng ki u char ch a các ký t c a chu i và ch a thêm ký t ''\0' là ký t k t thúc chu i.Bài 8: Chu i ký t 1. Chu i r ng c ký hi u b ng hai d u nháy kép i li n nhau. Chu i ký t là m t tr ng h p riêng c a m ng m t chi u khi m i thành ph n c a m ng là ký t Chu i ký t th ng c khai báo theo khai báo theo hai m u: char ten_chuoi[] . Ngôn ng l p trình C 82 . ho c char *ten_chuoi.    Khái ni m Chu i ký t là m t dãy các ký t t trong c p d u nháy kép. và \ M i ký t c a chu i c ch a trong m t ph n t c a m ng.

2. này. tr tiên v a ch c a ký t này.  Hàm strlen: int strlen(char s[]) Tr v dài dài c a chu i s. char c) Tìm l n xu t hi n u tiên c a ký t c trong chu i s.  Hàm strchr: char *strchr(char s[]. gán n i dung c a chu i này cho chu i khác. Ngôn ng l p trình C 83 .h>. Các thao tác trên chu i Trong C không t n t i các phép toán so sánh.h>.  Hàm strcpy: strcpy(char dest[]. Ð th c hi n các thao tác này ta s d ng m t th vi n các hàm chu n là <string. <string. char source[]) Sao chép n i dung chu i source vào chu i dest. chính là ch s c a ký t NULL trong chu i.

  

Hàm strncpy: strncpy(char dest[], char source[], int n) Sao chép n ký t trong chu i source vào chu i dest. Trong tr ng h p không có n ký t trong source thì thì hàm s i n thêm các ký t tr ng vào chu i dest. thêm Hàm strcat : strcat(char ch1[], char ch2[]) N i chu i ch2 vào cu i chu i ch1. Sau l i g i hàm này dài chu i ch1 b ng t ng dài c a c hai chu i ch1 dài dài và ch2 tr c l i g i hàm. Hàm strncat : strncat(char ch1[], char ch2[],int n) N i n ký t u tiên c a ch2 vào ch1 tiên

Ngôn ng l p trình C

84

 

Hàm strstr : char *strstr(char s1[], char s2[]) Tìm ki m chu i s2 trong chu i s1, Tr v a ch c a l n xu t hi n u tiên c a s2 trong s1 ho c tiên NULL khi không tìm th y. Hàm strcmp : int strcmp(char ch1[], char ch2[]) So sánh hai chu i ch1 và ch2. Nguyên t c so sánh theo ki u t i n. Giá tr tr v :  = 0 n u chu i ch1 b ng chu i ch2  > 0 n u chu i ch1 l n h n chu i ch2  < 0 n u chu i ch1 nh h n chu i ch2 VD: m s l n xu t hi n c a ký t a trong m t xâu ký t cho tr c
Ngôn ng l p trình C 85

#include<stdio.h> #include<conio.h> #define HANG 128 void main() { char xau[HANG]; int i,na; clrscr(); printf("\nNhap mot xau ky tu:");gets(xau); printf("\ na=i=0; while(xau[i]) if (xau[i++]=='a') na++; printf("\nXau co %d chu a",na); printf("\ getch(); return; }
Ngôn ng l p trình C 86

s p x p l i theo th t và in k t qu ã s p x p ra. Khai báo theo m u type *pointer_array[size]. s khai báo m t m ng 10 con tr char có th c dùng dùng khai báo m t m ng l u tr a ch c a m i chu i ký t nào ó.  VD: khai báo char *temp[10]. nào  Bài t p:vi t ch ng trình nh p nhi u tên ng i vào t bàn phím. Ngôn ng l p trình C 87 . + S p x p l i các tên này theo th t alphabet + In các tên ra theo th t ó. M ng và chu i ký t  M t d ng s d ng con tr c bi t là vi c s d ng m t là m ng các bi n con tr .3.

 VD: xét m t m ng các con tr ptr_array c gán các a ch c a các bi n int có giá tr và v trí và b t k . Ngôn ng l p trình C 88 . Lúc ó dù chúng ta không làm thay i v trí ho c dù thay i các giá tr c a các bi n nh ng m ng v n gi ng nh m t m ng ch n các giá tr ã s p x p có th t . Dùng m t hàm s p x p l i các a ch này trong m ng sao cho các a ch c a các s bé c x p tr c a ch c a các s l n h n.

Bài t p:   Vi t ch ng trình m s l n xu t hi n c a m t ký t trong m t xâu ký t Vi t ch ng trình nh p m t ch . xu t ra ch ó nhi u l n dùng con tr Ngôn ng l p trình C 89 .

Cách t o ra bi n ng và truy nh p n bi n ng c ti n hành nh sau Vi c t o ra bi n ng và xóa nó i ( thu h i l i b nh ) c th c hi n nh các hàm nh malloc() và free() ã có s n trong th vi n stdlib.h Ngôn ng l p trình C 90 . tùy theo nhu c u. c xác nh t tr c.  ng  Khái ni m Bi n ng: Là các bi n c t o ra lúc ch y ch ng trình.Bài 9: C p phát và gi i phóng b nh 1. S bi n này hoàn toàn không trình. Các bi n ng không có tên tên (vi c t tên th c ch t là gán cho nó m t a ch xác tên nh).

   Vi c truy nh p n bi n ng c ti n hành nh các bi n con tr . Ngôn ng l p trình C 91 ./* T o bi n ng*/ Ðo n ch ng trình trên s c p phát 100 bytes trong b nh và gán a ch kh i b nh này cho p VD2: c p phát b nh chính xác cho 70 ký t : /* Khai báo bi n con tr ki u char */ char *cp. /* T o bi n ng */ cp=(char *) malloc(70). Các bi n con tr c nh ngh a nh các bi n t nh ( c khai báo ngay t u trong ph n khai báo bi n) và c dùng ch a a ch các bi n ng VD1: int *p. /* Khai báo bi n con tr p*/ p= (int *) malloc(100).

1 C p phát b nh ng b ng hàm malloc( ) Cú pháp void *malloc(ki u _dl size)  Ch c n ng: Hàm malloc c p phát m t vùng nh có kích Hàm th c là size.  size là m t giá tr ki u_dl (là m t ki u d li u nh s n trong th vi n stdlib. N u không vùng nh vùng c p phát hàm tr v giá tr NULL.h).2.h) 2. vì v y ph i ki m tra NULL. giá tr tr v khi s d ng hàm malloc.  Hàm malloc tr v con tr ki u void ch a a ch ô nh u c a vùng nh vùng c c p phát. C p phát và gi i phóng b nh ng (các hàm thu c stdlib.h và alloc. Ngôn ng l p trình C 92 .

2. datatype có th là ki u d li u c s ho c ki u d li u m i Ngôn ng l p trình C 93 . n là s l ng object thu c ki u datatype c n c p phát b nh . sizeof(object)).2 C p phát b nh Cú pháp ng b ng hàm calloc    (datatype *) calloc(n. Hàm calloc c p phát b nh ng cho các ki u d li u Trong ó: ó: (datatype *) là ki u con tr tr t i ki u d li u datatype.

2. có th l n ho c nh h n. Hàm có ch c n ng c p phát l i b nh Trong ó: buf_p là con tr ang tr n vùng ô nh ã cc p phát t tr c. Ngôn ng l p trình C 94 . newsize). newsize là kích th c m i c n c p phát.3 C p phát b nh Cú pháp ng b ng hàm relloc   (datatype *) realloc(buf _p.

N u con tr ptr = NULL thì hàm free không làm gì c . Ngôn ng l p trình C 95 .2.4 Gi i phóng b nh b ng hàm free Cú pháp void free( void *prt) Hàm free gi i phóng vùng nh c tr n b i con tr ptr.

b nh 96 . là Nó luôn tr vào byte t do u tiên c a vùng ô nh còn tiên t do c a HEAP. Ng c l i. con tr c a HEAP c d ch chuy n v phía nh c a vùng ô nh t vùng do m t s byte t ng ng v i kích th c c a bi n ng m i t o ra. B nh HEAP và c ch t o bi n  ng Các bi n ng do malloc t o ra c C x p vào m t vào vùng ô nh t do theo ki u x p ch ng và c g i là là HEAP ( b nh c p phát ng). M i l n g i malloc(). Ngôn ng C qu n lý HEAP thông qua m t con tr c a HEAP là HEAPPTR. m i khi gi i phóng b nh bi n bi n ng c thu h i Ngôn ng l p trình C  ng.3.

Ngôn ng l p trình C 97 .

 Ki u enum Câu l nh khai báo ki u enum có th vi t theo b n cách enum tk {pt1...} tb1.}. pt1..... enum tk {pt1..tb2.pt2..pt2..} tb1....pt2.... enum {pt1. enum {pt1..}.tb2.Bài 10: Ki u c u trúc 10: 1...... tb1.pt2.pt2. Ngôn ng l p trình C 98 .....     Trong ó : Tk là tên ki u enum (m t ki u d li u m i).. là tên các ph n t .tb2. là tên bi n ki u enum.

Chú ý bi n ki u enum th c ch t là bi n nguyên.THURSDAY. FRIDAY.MONDAY.  Ví d : khai báo ki u d li u làm vi c v i các ngày trong tu n ta có th dùng ki u weekday và bi n day nh sau: enum weekday{SUNDAY. SATURDAY} day.W EDSDAY. Ngôn ng l p trình C 99 . nó c c p phát 2 byte b nh và nó có th nh n m t giá tr nguyên b t k .TUESDAY.

Ki u c u trúc 2. Ngôn ng l p trình C 100 . Các thành ph n c truy nh p thông qua m t tên tên 2.2 Cú pháp t ng quát struct [tên_c u_trúc] { khai báo các thành ph n } [danh sách các bi n c u trúc].1 nh ngh a C u trúc là m t ki u d li u bao g m nhi u thành ph n có th thu c nhi u ki u d li u khác nhau.2.

} hs. float diem. dùng  [danh sách các bi n c u trúc] li t kê các bi n có ki u c u trúc v a khai báo  VD: struct hoc_sinh { char ho_ten[20]. dshs[100].trong ó:  struct là t khóa ng tr c m t khai báo c u trúc.  tên_c u_trúc là m t tên h p l tên_ c dùng làm tên c u trúc. Ngôn ng l p trình C 101 .

tên.2. tên_ki u_m i là tên m i mà ta mu n t. trong ó : ki u_ ã_có là ki u d li u mà ta mu n i tên. Ngôn ng l p trình C 102 .3 Cú pháp nh ngh a ki u d li u m i   Ngôn ng C cho phép ta t l i tên ki u d li u m i b ng tên câu l nh: typedef ki u_ ã_có tên_ki u_m i.

2.4 Nguyên t c truy c p n thành ph n c a c u trúc  Các thành ph n c a c u trúc c truy nh p thông qua tên bi n c u trúc và tên thành ph n.ho_ten hs. tên tên_bi n_c u_trúc.tên_thành_ph n truy nh p n các thành ph n c a bi n hs chúng ta thành vi t nh sau: hs.diem Chú ý:Không nên s d ng toán t & i v i các thành ph n thành c u trúc ( c bi t i v i các thành ph n không nguyên) trong thành khi nh p d li u Ngôn ng l p trình C 103 .

Cú pháp nào khai báo m t bi n con tr c u trúc nh sau: struct tên_c u_trúc *tên_con_tr .5 Con tr c u trúc Cách khai báo  M t bi n c u trúc c ng là m t bi n trong b nh . có th l y a ch c a m t bi n c u trúc b ng toán t l y a ch &. Giá tr tr l i là a ch n tr ng u c a c u trúc.2.  Vi c truy xu t n m t thành ph n c a c u trúc thông thành qua m t con tr c th c hi n b ng phép toán kép -> Ngôn ng l p trình C 104 . VD: struct hoc_sinh *ptrhs. là  Có th khai báo m t bi n con tr ch n m t c u trúc có th l u a ch c a m t bi n c u trúc nào ó.

VD: printf("\nHo va ten hoc sinh %s".diem).ptrhs->diem).ho_ten).ptrhsprintf("\nDiem %6. printf("\ %s".3f". printf("\  Vi c s d ng con tr ch n c u trúc th ng cs d ng truy n c u trúc n cho m t hàm hàm  M t ng d ng khác c a con tr c u trúc là dùng xây d ng các c u trúc t tr nh : danh sách liên k t (còn g i là danh sách móc n i).ptrhsk t qu th c hi n hai câu l nh này t ng ng v i hai câu l nh sau: printf("\nHo va ten hoc sinh %s". Ngôn ng l p trình C 105 . printf("\ %6.3f". printf("\ printf("\nDiem %6.hs.ptrhs->ho_ten).3f".hs.

//hoc_sinh là ki u c u trúc Vi c s d ng các m ng c u trúc s làm cho vi c x lý m t t p h p các bi n c u trúc tr nên d nhìn h n.2. Khai báo m t m ng các c u trúc hoàn toàn t ng t nh i v i khai báo m t m ng bình bình th ng. Các quy nh v m ng c ng c áp d ng i v i m ng các c u trúc. Ví d v khai báo m t m ng có c u trúc: struct hoc_sinh dshs[100]. ch có m t i m khác là thay cho tên các ki u d là li u bình th ng là m t tên ki u d li u c u trúc.6 M ng có c u trúc M ng mà g m các thành ph n có ki u c u trúc cg i là m ng c u trúc. Ngôn ng l p trình C 106 .

C u trúc t tr C u trúc có ít nh t m t thành ph n là con tr ch n b n thân c u trúc c g i là c u trúc t tr . Danh sách này ch truy c p c theo m t chi u Ngôn ng l p trình C 107 . float diem. } struct h_sinh *next .3. là Ví d struct h_sinh{ char ho_ten[20]./*con tr ch n h c sinh ti p theo trong danh sách*/ khai báo này nh ngh a m t c u trúc t tr có th dùng ngh qu n lý danh sách h tên h c sinh và i m s h c sinh.

m i ph n t có hai vùng chính: vùng d li u danh sách và vùng liên k t.3.1 Danh sách liên k t: danh sách liên k t g m các ph n t . Vùng liên k t là m t ho c nhi u con tr ch n các ph n t tr c ho c sau ph n t ang c xem xét tùy thu c vào yêu c u c a công vi c c th Cú pháp chung cho khai báo danh sách liên k t s d ng ki u d li u con tr nh sau: typedef struct ki u_d _li u{ <khai báo ph n d li u> <khai báo các con tr liên k t> }t_ki u_d _li u Ngôn ng l p trình C 108 .

Các hàm này làm vi c v i t p tin thông qua m t con tr t p tin.Bài 11: Ki u t p tin(File) 11:     File là lo i d li u có th ghi lên a dùng nhi u l n.Trong C ch có m t lo i File. Có các hàm ph c v cho vi c c ghi trên t ng lo i d li u (s .. Trong C có hai lo i hàm thao tác trên file: Dùng nh ng hàm c p th p làm vi c v i t p tin thông qua m t s hi u t p tin (file handle). c u trúc. Ngôn ng l p trình C 109 . Dùng nh ng hàm c xây d ng t nh ng hàm c p th p. C u trúc này c hình thành khi ta ghi d li u lên File. d s d ng h n.). nó ph thu c vào hàm mà ta dùng ghi d li u lên a. Con tr này c xác nh khi ta m t p tin.. ký t . chu i. nh ng c u trúc c a m i File có th khác nhau.

Các ki u xu t nh p d li u trong t p tin 1.1 Xu t nh p ki u nh phân D li u ghi lên t p tin không b thay i và khi óng t p tin thì mã k t thúc t p tin s c ghi lên a là -1. 1. 1. Ngôn ng l p trình C 110 .2 Xu t nh p ki u v n b n  Ch khác ki u nh p xu t nh phân khi x lý ký t xu ng dòng và khi ta óng t p tin thì mã k t thúc t p tin s c ghi lên a là 26.  Khi c n u g p hai ký t liên ti p là mã 10 và mã 13 s gom l i thành m t ký t là mã 10.  Khi ghi m t ký t chuy n dòng lên a (mã 10) s ghi thành 2 ký t mã 13 và mã 10.

2. 2. N u không vi c x lý s không chính xác. Các hàm thao tác trên t p tin  Các hàm sau ây dùng chung cho c hai ki u nh phân và v n b n.1 M file FILE *fopen(const char *tên_t p_tin.const char *ki u). có hàm ch dùng nh p xu t cho m t ki u nào ó.  Trong C có hàm dùng nh p xu t cho c hai ki u. Ngôn ng l p trình C 111 .Chú ý:  T p tin khi ghi lên a d i d ng nào thì ph i c d i d ng ó.

N u thành công tr v k t qu là con tr FILE t ng ng v i file v a m . ng c l i tr v giá tr NULL.   M m t t p tin.Sau khi m file ph i ki m tra xem thao tác m t p tin thành công hay không. * ki u: là h ng chu i cho bi t ki u truy nh p: Ngôn ng l p trình C 112 . ho c m t con tr ch n vùng nh ch a tên t p tin. * tên t p tin: Là m t h ng chu i.

ng c l i cho giá tr EOF. N u thành công thì giá tr c a hàm = 0 ng c l i có giá tr EOF.2. Sau khi óng con tr f s không còn tr n file tr c ó n a 2. N u thành công giá tr c a hàm b ng s t p tin ang m . N u thành công cho giá tr 0. int flushalll(void)  Làm s ch vùng m c a t t c các t p tin ang m .3 Làm s ch vùng m int fflush(FILE *f)  Làm s ch vùng m c a t p tin c ch n b i con tr f. ng c l i cho giá tr EOF Ngôn ng l p trình C 113 .2 óng file int fclose(FILE *f)  Ðóng t p tin c ch n b i con tr f.

2.4 Xoá t p tin int unlink(const char *tên_t p_tin)  Xóa m t t p tin trên a. N u thành công giá tr c a hàm b ng 0 , ng c l i cho giá tr EOF 2.5 i tên t p tin int rename(const char *tên_c ,const char *tên_m i)  Ð i m t t p tin trên a. N u thành công giá tr c a hàm b ng 0 , ng c l i cho giá tr EOF 2.6 Ki m tra k t thúc t p tin int feof(FILE *f)  Cho giá tr khác không n u cu i t p tin, ng c l i =0
Ngôn ng l p trình C 114

3. Xu t nh p d li u cho file 3.1 Nh p xu t ký t : (file ki u nh phân và v n b n)  Ghi ký t lên t p tin: int putc(int ch, FILE *f) int fputc(int ch, FILE *f) Ghi lên file f ký t có mã = ch % 256 N u thành công k t qu = mã c a ký t ã ghi, ng c l i =EOF (-1) (Trong tr ng h p ghi theo v n b n thì khi g p mã 10 s ghi thành 13 và 10  Ð c ký t t t p tin: int getc( FILE *f) int fgetc( FILE *f) Ð c m t ký t t file f . N u thành công k t qu = mã c a ký t c c, ng c l i = -1
Ngôn ng l p trình C 115

3.2 Nh p xu t chu i: (Dùng cho ki u v n b n)  Ghi m t chu i: int fputs(const char *s, FILE *f) Ghi m t chu i c ch t i b i con tr s vào file f. K t qu = ký t cu i c ghi n u thành công, ng c l i =EOF  Ð c m t chu i: char *fgets(const char *s, int n, FILE *f) Ð c m t chu i t File f và a vào vùng nh do s tr n. Vi c c k t thúc khi ã c c n-1 ký t , ho c g p nký t xu ng dòng , ho c g p ký t k t thúc File. N u vi c c có l i k t qu c a hàm =NULL.
Ngôn ng l p trình C 116

d li u s c c t File f r i a vào các i s t ng ng. Ngôn ng l p trình C 117 ... const char * c t .) ...3...  Ð c d li u theo khuôn d ng: fscanf(FILE *f .3 Ð c ghi d li u theo khuôn d ng: (Dùng cho ki u v n b n)  Ghi d li u theo khuôn d ng: int fprintf(FILE *f .. S d ng gi ng nh hàm scanf. const char * c t ... d li u s c ghi lên file.... S d ng gi ng nh hàm printf. là danh sách các i s t ng ng v i các c t .) . là danh sách các i s t ng ng v i các c t .

Sign up to vote on this title
UsefulNot useful