You are on page 1of 152

?

Lӡi mӣ đҫu
?
?
?
?
?
?

?
LӠI MӢ ĐҪU
?
?
?
?
?
Khi bҳt đҫu làm quen vӟi ngôn ngӳ lұp trình ± Cө thӇ là ngôn ngӳ C ± Sinh Viên thưӡng
gһp khó khăn trong viӋc chuyӇn vҩn đӅ lý thuyӃt sang cài đһt cө thӇ trên máy. Sách
³÷iáo Trình Bài Tұp Kӻ Thuұt Lұp Trìnho nhҵm cung cҩp cho các Hӑc Sinh - Sinh
Viên Trưӡng CĐ Công NghӋ Thông Tin Tp. Hӗ Chí Minh hӋ thӕng các bài tұp, nhӳng
kӻ năng thӵc hành cơ bҧn và nâng cao vӅ ngôn ngӳ lұp trình C. Cuӕn sách này đưӧc
xem như tài liӋu hưӟng dүn tӯng bưӟc cho Hӑc Sinh - Sinh Viên cӫa Trưӡng trong viӋc
hӑc và áp dөng kiӃn thӭc lý thuyӃt trên lӟp mӝt cách thành thҥo và sâu rӝng.
?
Giáo trình đưӧc chia thành 10 chương theo tӯng nӝi dung kiӃn thӭc, kèm theo Các đӅ
thi mүu và 1 phө lөc hưӟng dүn viӃt chương trình, chuҭn đoán lӛi và sӱa lӛi. Mӛi
chương gӗm 2 phҫn:
! Ohҫn lý thuyӃt: đưӧc tóm tҳt ngҳn gӑn vӟi đҫy đӫ ví dө minh hoҥ kèm theo.
! Ohҫn bài tұp: vӟi nhiӅu bài tұp đưӧc chia làm hai mӭc đӝ cơ bҧn và luyӋn tұp

nâng cao, bài tұp có đánh dҩu * là bài tұp khó dành cho sinh viên lu yӋn tұp thêm.
! Ohҫn kӃt luұn: Tóm tҳt nӝi dung và các thao tác mà sinh viên cҫn nҳm hay
?
nhӳng lưu ý cӫa chương đó.
?
?
Trong quá trình biên soҥn, chúng tôi đã cӕ gҳng trích lӑc nhӳng kiӃn thӭc rҩt cơ bҧn,
nhӳng lӛi hay gһp đӕi vӟi ngưӡi mӟi lұp trình. Bên cҥnh đó chúng tôi cũng bә sung
thêm mӝt sӕ bài tұp nâng cao đӇ rèn luyӋn thêm kӻ năng lұp trình.
?
Tuy nhiên, chӫ đích chính cӫa giáo trình này là phөc vө cho mӝt môn hӑc nên chҳc chҳn
không thӇ tránh khӓi nhӳng thiӃu sót, vì thӃ, rҩt mong nhұn đưӧc nhӳng góp ý quý báu
cӫa các thҫy cô, các đӗng nghiӋp và các bҥn Hӑc Sinh ± Sinh Viên đӇ giáo trình này
ngày càng hoàn thiӋn hơn.
?
Chân thành cҧm ơn.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 1


?
? Lӏch trình thӵc hành
?
?
?
?
LӎCH TRÌNH THӴC HÀNH
?


?
?
?
Tәng thӡi gian: 90 tiӃt.
?
? ? ?
ÑTT NӜI DUN÷ Ñ TIӂT
1 Chương 1: Lưu đӗ thuұt toán 03

2 Chương 2: Cҩu trúc điӅu khiӇn 06

3 Chương 3: Hàm con 12

4 Chương 4: Mҧng mӝt chiӅu 24

5 Chương 5: Chuӛi ký tӵ 06

6 Chương 6: Mҧng hai chiӅu 12

7 Chương 7: KiӇu dӳ liӋu có cҩu trúc 12

8 Chương 8: Tұp tin 06

9 Chương 9: ĐӋ qui 06

10 Chương 10: Hưӟng dүn lұp trình bҵng phương pháp Oroject 03

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 2


?
? Lưu đӗ thuұt toán
?
?
CHƯƠN÷ 1 LƯU ĐӖ THUҰT TOÁN (FLOWCHART)
?
?
?
?
Các ký hi͏u bi͋u di͍n lưu đ͛ thu̵t toán, cách bi͋u di͍n các c̭u trúc đi͉u khi͋n rͅ
?
nhánh, c̭u trúc l̿p và các kͿ thu̵t liên quan đ͇n lưu đ͛ thu̵t toán.
?
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Lưu đӗ thuұt toán là công cө dùng đӇ biӇu diӉn thuұt toán, viӋc mô tҧ nhұp
?
input), dӳ liӋu Èuҩt output) và luӗng xӳ lý thông qua các ký hiӋu hình hӑc.
?
?
I.2. Ohương pháp duyӋt
@ DuyӋt tӯ trên xuӕng.
@ DuyӋt tӯ trái sang phҧi.
?
?
I.3. Các ký hiӋu
?
?
ÑTT KÝ HIӊU DIӈN ÷IҦI
?
˜ Bҳt đҫu chương trình
?
?
2 KӃt thúc chương trình
?
3 Luӗng xӱ lý
?
?
4 ĐiӅu khiӇn lӵa chӑn
?
?
?
5 Nhұp
?
?
?
?
6 Xuҩt
?
?
?
?
7 Xӱ lý, tính toán hoһc gán
?
?
?
8 Trҧ vӅ giá trӏ return)
?
ĐiӇm nӕi liên kӃt tiӃp theo Sӱ dөng khi lưu
9
đӗ vưӧt quá trang)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 3


?
? Lưu đӗ thuұt toán
?

I.4. Các cҩu trúc điӅu khiӇn cơ bҧn


?
?
a. C̭u trúc tu̯n t͹
Tuҫn tӵ thӵc thi tiӃn trình. Mӛi lӋnh đưӧc thӵc thi theo mӝt chuӛi tӯ trên
Èuӕng, Èong lӋnh này rӗi chuyӇn Èuӕng lӋnh kӃ tiӃp.
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
è dͭ: Nh̵p vào 3 s͙ nguyên a, b, c và xṷt ra màn hình vͣi giá tr͓ cͯa m͟i
?

s͙ tăng lên 1.
?
BAÉTÑAÀU
?
?
?
?
a, b, c
?
?
?
O O
?
?
?

?
?
?
 
?
?
?
?
O  
?
?
?
?
KEÁT THUÙC

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 4


?
? Lưu đӗ thuұt toán
?
?
¦. C̭u trúc l͹a ch͕n
?
ĐiӇm quyӃt đӏnh cho phép chӑn mӝt trong hai trưӡng hӧp.
@ if
ChӍ xét trưӡng hӧp đúng.
?
?
?
Bieåu thöùc
Ñuùng
ñieàu kieän
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
è dͭ: Nh̵p vào s͙ nguyên n. Ki͋m tra n͇u n > 0 tăng n lên 1 đơn v͓.
?
œṷt k͇t qu̫.
?
BAÉTÑAÀU
?
?
?
?
n
?
?
?
?
O Ñuùng
?
?
n = n+˜
?
?
?
?
?
n
?
?
?
?
?
KEÁT THUÙC

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 5


?
? Lưu đӗ thuұt toán
@ if«else
Xét trưӡng hӧp đúng và trưӡng hӧp sai.
?
?
? ?
Bieåu thöùc
Sai Ñuùng
ñieàu kieän
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
è dͭ: Nh̵p vào s͙ nguyên n. Ki͋m tra n͇u n ch̽n xṷt ra màn hình ³n
?
ch̽n´, ngưͫc l̩i xṷt ³n l̓´.
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
c. C̭u trúc l̿p
?
Thӵc hiӋn liên tөc 1 lӋnh hay tұp lӋnh vӟi sӕ lҫn lһp dӵa vào điӅu kiӋn.
Lһp sӁ kӃt thúc khi điӅu kiӋn đưӧc thӓa.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 6


?
? Lưu đӗ thuұt toán
@ for / while (KiӇm tra điӅu kiӋn trưӟc khi lһp)
?
?
?
?
?
?
?
Ñieàu
Ñuùng
kieän laëp
?
Sai
?
?
?
?
?
?
?
?
?
?
?
?
?
?
è dͭ: Nh̵p vào s͙ nguyên n. œṷt ra màn hình tͳ 1 đ͇n n.
?
BAÉT ÑAÀU
?
?
?
n
?
?
?
i=˜
?
?
?
?
i n Ñuùng
?
?
i
?
?
Sai ?
i=i+˜
?
?
?
KEÁT THUÙC

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 7


?
? Lưu đӗ thuұt toán
@ do « while (Thӵc hiӋn lһp trưӟc khi kiӇm tra điӅu kiӋn)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
è dͭ: Nh̵p vào s͙ nguyên dương n. N͇u nh̵p sai yêu c̯u nh̵p l̩i.
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
ß. Các ví ß
?
Ví dө ˜: Giҧi và biӋn luұn phương trình: ax+b=0.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 8


?
? Lưu đӗ thuұt toán
?
BAÉT ÑAÀU
?
?
?
?
a, b, c
?
?
?
?
Sai a=0 Ñuùng
?
?
?
Sai b 0 Ñuùng
?
?
?
? ?
Nghieäm ? ?
x=-b/a Voâ Soá Voâ
Nghieäm Nghieäm
?
?
?
?
?
? KEÁT THUÙC
? ?

Ví dө 2: Tính tәng: Ñ ˜ 2 3 L n , vӟi n>0


?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
? ?
˜ 3 5 2n ˜
Ví dө 3: Tính tәng: Ñ n)    ...  , vӟi n>0
2 4 6 2n 2

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 9


?
? Lưu đӗ thuұt toán
?
BAÉT ÑAÀU
?
?
?
?
n
?
?
?
i=0
S=0t
=˜m
=2
?
?
?
? i <= n Ñuùng
Sai
?
?
S = S + t/m
t=t+2
S m=m+2
?
?
?
i = i +˜
?
?
?
? KEÁT THUÙC ?
? ?
? ?
Ví dө 4: Tính tәng: Ñ n) ˜ 2 3 4 L ˜) n ˜ n , vӟi n>0
?
BAÉT ÑAÀU
?
?
?
?
n
?
?
?
i=˜
S=0
dau = ˜
?
?
?
?
?
? i <= n Ñuùng
Sai
?
?
S = S + dau*i
S dau = -dau
?
?
?
i = i +˜
?
?
?
KEÁT THUÙC

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 10


?
? Lưu đӗ thuұt toán
?

II. BÀI TҰO


?
è lưu đӗ thuұt toán sau
?
?
II.1. Bài tұp cơ bҧn
?
˜. Nhұp vào hai sӕ x, y. Xuҩt ra màn hình tәng, hiӋu, tích, thương cӫa hai sӕ
?
trên.
?
2. Nhұp vào sӕ nguyên n, kiӇm tra xem n chҹn hay lҿ và xuҩt ra màn hình.
?
3. Nhұp vào ba cҥnh a, b, c cӫa tam giác. Xuҩt ra màn hình tam giác đó thuӝc
loҥi tam giác gì? Thưӡng, cân, vuông, đӅu hay vuông cân).
4. Nhұp vào sӕ nguyên n. Xuҩt ra n màn hình NӃu n chҹn thì gҩp đôi giá trӏ).
5. Nhұp vào sӕ nguyên n. NӃu n>5 thì tăng n lên 2 đơn vӏ và trҧ vӅ giá trӏ n,
ngưӧc lҥi trҧ vӅ giá trӏ 0.
?
6. Tính n!, vӟi n 7 0
7. Tính On) ˜.3.5K 2n ˜) , vӟi n 70
8. Tính Ñ n) ˜ 3 5 L 2 n ˜) , vӟi n 70
9. Tính Ñ n) ˜ 2 3 4 L ˜) n ˜ n , vӟi n  0
˜0. Tính Ñ n) ˜ ˜.2 ˜.2.3 L ˜.2.3K n , vӟi n  0
˜˜. Tính Ñ n) ˜2 2 2 32 L n 2 , vӟi n  0
? ?
˜ ˜ ˜
˜2. Tính Ñ n) ˜   L  , vӟi n  0
2 3 n ? ? ?
? ? ? ?
˜ ˜ ˜
˜3. (*) Tính Ñ n) ˜   L  , vӟi n  0
? ˜ 2 ˜ 2 3 ˜ 2 3 L n
˜4. Tính O x, y) x y .
?
˜5. Tính Ñ n) ˜ ˜ 2) ˜ 2 3) L ˜ 2 3 L n) , vӟi n  0
?
˜6. Cho sӕ nguyên n. Tính trӏ tuyӋt đӕi cӫa n.
?
˜7. Cho sӕ nguyên dương n gӗm k chӳ sӕ. Tìm chӳ sӕ có giá trӏ lӟn nhҩt.
?
˜8. ĐӃm sӕ lưӧng ưӟc sӕ chҹn cӫa sӕ nguyên dương n.
?
˜9. In ra chӳ sӕ đҫu tiên cӫa sӕ nguyên dương n gӗm k chӳ sӕ.
?
20. Cho 2 sӕ nguyên dương a, b. Tìm USCLN cӫa a và b.
?
2˜. Cho 2 sӕ nguyên dương a, b. Tìm BSCNN cӫa a và b.
?
22. Cho sӕ nguyên dương x. KiӇm tra xem x có phҧi là sӕ nguyên tӕ không?
?
23. Cho sӕ nguyên dương x. KiӇm tra x có phҧi là sӕ chính phương không?
?
24. Cho sӕ nguyên dương x. KiӇm tra xem x có phҧi là sӕ hoàn thiӋn không?

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 11


?
? Lưu đӗ thuұt toán
? ?

II.2. Bài tұp luyӋn tұp và nâng cao ?


? ?

25. Tính Ñ n) ˜ 2 2 33 L n n , vӟi n 70


?
˜ 2 3 n
Ñ n)    L 
26. Tính 2 3 4 n ˜ , vӟi n  0
?
˜ ˜ ˜
Ñ n) ˜   L 
27. Tính 2! 3! n! , vӟi n  0
˜ 2 ˜ 2 3 ˜ 2 3 L n
Ñ n) ˜   L 
28. Tính 2! 3! n! , vӟi n  0
2
29. Giҧi và biӋn luұn phương trình: ax bx c 0
?
30. Giҧi và biӋn luұn phương trình: ax 4 bx 2 c 0
?
?
3˜. (*) Tính Ñ n)  n  n ˜)  n 2) ...  ˜, vӟi n  0
?
?
32. (**) Tính Ñ n)  ˜  2  3 ...  n , vӟi n  0
?
?
III. KӂT LUҰN
?
Lưu đӗ thuұt toán rҩt hӳu ích trong viӋc mô tҧ cách giҧi quyӃt cӫa mӝt bài toán.
ViӋc mô tҧ này rҩt trӵc quan thông qua các ký hiӋu hình hӑc, đây là giai đoҥn đҫu
tiên trưӟc khi bҳt tay vào lұp trình trên mӝt ngôn ngӳ lұp trình cө thӇ.
Khi xây dӵng lưu đӗ thuұt toán, chúng ta cҫn chú ý mӝt vài điӇm sau:
! Mӝt lưu đӗ phҧi có điӇm bҳt đҫu và điӇm kӃt thúc điӅu kiӋn kӃt thúc).
! Ohҧi có dӳ liӋu vào, dӳ liӋu ra sau khi xӱ lý tính toán.
! Tҥi mӛi vӏ trí quyӃt đӏnh lӵa chӑn rӁ nhánh phҧi ghi rõ điӅu kiӋn đúng hoһc

sai thì đi theo nhánh nào.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 12


?
? Cҩu trúc điӅu khiӇn
?
?
CHƯƠN÷ 2 CҨU TRÚC ĐIӄU KHIӆN
?
?
?
?
Rìm hi͋u và cài đ̿t các c̭u trúc rͅ nhánh, l͹a ch͕n, l̿p và các ký hi͏u phép toán trong
ngôn ngͷ C. Mô t̫ cách ho̩t đ͡ng và hưͣng d̳n ch̩y tͳng bưͣc chương trình.
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Các ký hiӋu
?
? ? ?

ÑTT DIӈN ÷IҦI è DӨ
HIӊU
? ? ? void main)
? ?
Bҳt đҫu và kӃt thúc hàm hay khӕi {
˜ {}
lӋnh. ?
}
? ? KӃt thúc khai báo biӃn, mӝt lӋnh, ?
int x;
2 ; mӝt lӡi gӑi hàm, hay khai báo
void NhapMangint a[], int &n);
nguyên mүu hàm.
? ? Chú thích ghi chú) cho mӝt dòng. ?
//Ham nay dung de nhap mang
3 // ChӍ có tác dөng đӕi vӟi ngưӡi đӑc
void NhapMangint a[], int &n);
chương trình.
? /* ?
/* Dau tien nhap vao n. Sau do
Tương tӵ như ký hiӋu //, nhưng
4 ? nhap cho tung phan tu */
cho trưӡng hӧp nhiӅu dòng.
*/ void NhapMangint a[], int &n);
?
I.2. Các kiӇu dӳ liӋu cơ bҧn trong C
?
? ? ?
KCH ĐӎNH
ÑTT KIӆU ÷HI CHÚ
THƯӞC DҤN÷
KIӆU LIÊN TӨC (Ñ THӴC)
˜ float ? 4 bytes %f
2 double ? 8 bytes %lf
3 long double ? ˜0 bytes %lf
KIӆU RӠI RҤC (Ñ N÷UYÊN)
? ?
Ký tӵ ˜ byte %c
˜ char
Sӕ nguyên ˜ byte %d
2 unsigned char Sӕ nguyên dương ˜ byte %d
3 int Sӕ nguyên 2 bytes %d
4 unsigned int Sӕ nguyên dương 2 bytes %u
5 long Sӕ nguyên 4 bytes %ld
6 unsigned long Sӕ nguyên dương 4 bytes %lu
7 char * Chuӛi ? %s

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 13


?
? Cҩu trúc điӅu khiӇn
?
I.3. Bҧng ký hiӋu các phép toán
?
? ? ?
OHÉO
ÑTT Ý N÷HĨA ÷HI CHÚ
TOÁN
OHÉO TOÁN Ñ HӐC
˜ + Cӝng ?

2 - Trӯ ?

3 * Nhân ?

4 / Chia lҩy phҫn nguyên ?


5 % Chia lҩy phҫn dư ?

OHÉO TOÁN QUAN Hӊ


˜ > Lӟn hơn ?

2 < Nhӓ hơn ?

3 >= Lӟn hơn hoһc bҵng ?

4 <= Nhӓ hơn hoһc bҵng ?

5 == Bҵng nhau ?

6 != Khác nhau ?

OHÉO TOÁN LO÷IC


˜ ! NOT ?

2 && AND ?

3 || OR ?

TOÁN TӰ TĂN÷ ÷IҦM


˜ ++ Tăng ˜ NӃu toán tӱ tăng giҧm đһt trưӟc thì tăng
giҧm trưӟc rӗi tính biӇu thӭc hoһc ngưӧc
2 -- Giҧm ˜ lҥi.
OHÉO TOÁN THAO TÁC TRÊN BIT
˜ & AND ?

2 | OR ?

3 ^ XOR ?

4 << Dӏch trái ?

5 >> Dӏch phҧi ?

6 ~ Lҩy phҫn bù theo bit ?

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 14


?
? Cҩu trúc điӅu khiӇn
?
I.4. Các hàm cơ bҧn
?
? ? ? ?
TÊN
ÑTT THƯ èIӊN DIӈN ÷IҦI è DӨ
HÀM
˜ printf #include<stdio.h>
Xuҩt ra màn hình. include<stdio.h>
? ? ?
Lҩy dӳ liӋu tӯ bàn #inclußconio.h>
2 scanf #include<stdio.h>
phím. #inclußßos.h>
? ? ? Di chuyӇn dҩu nháy voiß main()
3 gotoxy #include<conio.h> đӃn tӑa đӝ x, y) trên {
màn hình văn bҧn. int c = 1, n;
? ? ?
Đһt màu cho chӳ có ?
4 textcolor #include<conio.h> clrscr();
giá trӏ tӯ 0 đӃn ˜5).
? ? ? Xuҩt ra màn hình vӟi printf(³Nhap n:´);
5 cprintf #include<stdio.h> màu chӳ đã đӏnh liӅn scanf(³%ß´, &n);
trưӟc đó. ßo{
? ? ? Dӯng thӵc hiӋn lӋnh ttcolor(c);
6 delay #include<dos.h> tiӃp sau mӝt khoҧng goto(20, 10);
thӡi gian. cprintf(³%ß´, n);
?
?
?
?
?
?
? c++;
?
? ? ? ? if (c>15)
? ? ?
KiӇm tra xem có c = 1;
7 kbhit #include<conio.h>
nhҩn phím. ßla(200);
} whil(!k¦hit());
}
?
I.5. Cҩu trúc r nhánh
?
?
a. C̭u trúc if
?
if biӇu thӭc điӅu kiӋn)
{
<khӕi lӋnh> ;
}
?
N͇u bi͋u thͱc đi͉u ki͏n cho k͇t qu̫ khác không thì th͹c hi͏n kh͙i l͏nh.
?
Ví dө:
#incluß conio.h>
#incluß stßio.h>
voiß main ()
K
float num¦r ;
?
printf ( ³Nhap mot so trong khoang tu 1 ßn 10 => ³) ;
scanf ( ³%f´, &num¦r) ;
if (num¦r >5)
printf ( ³So ¦an nhap lon hon 5. \n´) ;
printf ( ³%f la so ¦an nhap. ³ , num¦r);
}

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 15


?
? Cҩu trúc điӅu khiӇn
?

¦. C̭u trúc if « ls


?
if biӇu thӭc điӅu kiӋn)
{
<khӕi lӋnh ˜>;
}
else
{
<khӕi lӋnh 2>;
}
N͇u bi͋u thͱc đi͉u ki͏n cho k͇t qu̫ khác không thì th͹c hi͏n kh͙i l͏nh 1,
ngưͫc l̩i thì cho th͹c hi͏n kh͙i l͏nh thͱ 2. Bi͋u thͱc đi͉u ki͏n ph̫i đ̿t trong
c̿p ḓu ngo̿c tròn.
Ví dө: Giҧi và biӋn luұn phương trình: ax+b=0
?
#incluß conio.h>
#incluß stßio.h>
voiß main 
K
float a, ¦;
printf ( ³\n Nhap vao a:´);
scanf ( ³%f´, &a);
printf ( ³ Nhap vao ¦:´);
scanf ( ³%f´, &¦) ;
if (a= = 0)
if (¦= = 0)
printf ( ³ \n PTVSN´);
? ls ?
?

?
? printf ( ³ \n PTVN´);
ls
printf ( ³ \n Nghim =%f´, -¦a);
gtch ();
b
?
I.6. Cҩu trúc lӵa chӑn switch
?
switch biӇu thӭc)
K
?
case n˜: ?
? các câu lӋnh ;
?
? break ;
case n2: ?
? các câu lӋnh ;
?
? break ;
««« ??
case nk: ?
<các câu lӋnh> ;
break ;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 16


?
? Cҩu trúc điӅu khiӇn
?

[default: các câu lӋnh]


b
@ ni là các hҵng sӕ nguyên hoһc ký tӵ.
@ Ohө thuӝc vào giá trӏ cӫa biӇu thӭc viӃt sau switch, nӃu:
 Giá trӏ này = ni thì thӵc hiӋn câu lӋnh sau case ni.
?

 Khi giá trӏ biӇu thӭc không thӓa tҩt cҧ các ni thì thӵc hiӋn câu lӋnh sau
?

default nӃu có, hoһc thoát khӓi câu lӋnh switch.


 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 dưӟi nó mà không xét lҥi điӅu kiӋn
do các ni đưӧc xem như các nhãn) \ Vì vұy, đӇ chương trình thoát khӓi
?

lӋnh switch sau khi thӵc hiӋn xong mӝt trưӡng hӧp, ta dùng lӋnh break.
?
Ví dө: Tҥo menu cҩp ˜ cho phép chӑn menu bҵng sӕ nhұp tӯ bàn phím.
?
#inclußstßio.h>
#inclußconio.h>
int ChonTD ()
K
int chon ;
?
printf ("Thuc Don") ; printf
("\n1. Lau thai!") ; printf
("\n2. Nuoc ngot!") ;
printf ("\n3. Ca loc hap ¦au!") ;
printf ("\n4. Chuot ßong!") ;
printf ("\n Xin moi ¦an chon mon an!") ;
scanf ("%ß",&chon) ;
rturn chon ;
b
?
voiß TDchon(int chon)
K
switch (chon)
K
cas 1:
printf ("\nBan chon lau thai!") ;
¦rak ;
cas 2:
printf ("\nBan chon nuoc ngot!") ;
¦rak ;
cas 3:
printf ("\nBan chon ca loc hap ¦au!") ;
¦rak ;
cas 4:
printf ("\Ban chon chuot ßong!") ;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 17


?
? Cҩu trúc điӅu khiӇn
?

¦rak ;
ßfault:
printf ("\nBan chon khong ßung!") ;
b
b
?
voiß main()
K
clrscr() ; int c
; c=ChonTD()
; TDchon(c) ;
gtch() ;
}
?
I.7. Cҩu trúc lһp
?
?
a. for
?
for <biӇu thӭc khӣi gán>; <biӇu thӭc điӅu kiӋn>; <biӇu thӭc tăng/giҧm>)
{
<khӕi lӋnh>;
}
?
B̭t kǤ bi͋u thͱc nào trong 3 bi͋u thͱc nói trên đ͉u có th͋ v̷ng nhưng ph̫i
giͷ ḓu ch̭m pẖy (;).
Hoҥt đӝng cӫa cҩu trúc điӅu khiӇn for:
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Bưͣc 1: Khͧi gán cho bi͋u thͱc 1
?
Bưͣc 2: Ki͋m tra đi͉u ki͏n cͯa bi͋u thͱc 2.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 18


?
? Cҩu trúc điӅu khiӇn
@ N͇u ¦i͋u thͱc 2 æ0 thì cho th͹c hi͏n các l͏nh cͯa vòng l̿p, th͹c hi͏n
bi͋u thͱc 3. Quay trͧ l̩i bưͣc 2.
@ Ngưͫc l̩i thoát kh͗i l̿p.
?
?
Ví dө: In ra màn hình bҧng mã ASCII tӯ ký tӵ sӕ 33 đӃn 255.
?
#inclußconio.h>
#inclußstßio.h>
voiß main()
{
for (int i=33;i=255;i++)
printf("Ma ASCII cua %c: %ß\t", i, i) ;
gtch () ;
}
?
¦. whil
?
< Khӣi gán>
while  <biӇu thӭc điӅu kiӋn>)
K
lӋnh/ khӕi lӋnh;
< tăng/giҧm chӍ sӕ lһp>;
b
?
?
 Lưu ý: Cách ho̩t đ͡ng cͯa whil gi͙ng for
?
?
Ví dө: Tính giá trӏ trung bình các chӳ sӕ cӫa sӕ nguyên n gӗm k chӳ sӕ.
?
#inclußstßio.h>
#inclußconio.h>
voiß main()
K
long n, tong=0;
int sochuso=0;
float t¦;
?
printf ("Nhap vao gia tri n gom k chu so") ;
scanf ("%lß",&n) ;
whil(n>0)
K
tong=tong+n%10 ;
sochuso++ ;
n=n10 ;
b
?
t¦=1.0*tongsochuso ;
printf ("Gia tri trung ¦inh la: %f", t¦) ;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 19


?
? Cҩu trúc điӅu khiӇn
?

gtch () ;
b
?
?
c. ßo « whil
?
do
{
< khӕi lӋnh> ;
} while biӇu thӭc điӅu kiӋn) ;
?
Rh͹c hi͏n kh͙i l͏nh cho đ͇n khi bi͋u thͱc có giá tr͓ b̹ng 0.
?
Ví dө: Nhұp ký tӵ tӯ bàn phím hiӇn thӏ lên màn hình mã ASCII cӫa ký tӵ đó,
thӵc hiӋn đӃn khi nhҩn phím ESC Mã ASCII cӫa phím ESC là 27).
#inclußstßio.h>
#inclußconio.h>
?
voiß main()
K
int ma ;
ßoK
ma=gtch ();
if (ma !=27)
printf ("Ma ASCII %c:%ß\t", ma, ma);
bwhil (ma!=27) ;
?
gtch () ;
b
?
?
 |̿p whil ki͋m tra đi͉u ki͏n trưͣc khi th͹c hi͏n l̿p, còn vòng l̿p ßo«whil
th͹c hi͏n l͏nh l̿p r͛i mͣi ki͋m tra đi͉u ki͏n. Do đó vòng l̿p ßo...whil th͹c hi͏n
l͏nh t nh̭t m͡t l̯n.
?
?
I.8. break và continue
?
?
a. ¦rak
?
Dùng đӇ kӃt thúc vòng lһp trӵc tiӃp chӭa nó khi thӓa điӅu kiӋn nào đó.
?
Ví dө: Cho phép ngưӡi dùng nhұp liên tөc giá trӏ n cho đӃn khi nhұp âm thì
dӯng.
#inclußstßio.h>
#inclußconio.h>
?
voiß main()
K
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 20
?
? Cҩu trúc điӅu khiӇn
?

whil (1)
{
printf(³\nNhap n: ´);
scanf(³%ß´, &n);
if(n0)
¦rak;
}
?
gtch () ;
b
?
?
¦. continu
?
Dùng đӇ bӓ qua mӝt lҫn lһp khi thӓa điӅu kiӋn nào đó.
?
Ví dө: In ra màn hình giá trӏ tӯ ˜0 đӃn 20 trӯ đi sӕ ˜3 và sӕ ˜7.
?
#inclußstßio.h>
#inclußconio.h>
?
voiß main()
K
for(int i=10 ; i=20; i++)
{
if(i==13||i==17)
continu;
printf(³%ß\t´, i);
}
gtch () ;
b
?
?
II. BÀI TҰO
?
?
II.1. Ohương pháp chҥy tay tӯng bưӟc đӇ tìm kӃt quҧ chương trình
! Xác đӏnh chương trình có sӱ dөng nhӳng biӃn nào.
! ÷iá trӏ ban đҫu cӫa mӛi biӃn.
! Nhӳng biӃn nào s bӏ thay đәi trong quá trình chҥy chương trình thì lұp

thành bҧng có dҥng sau:


?

? ? ? ?
Bưӟc KӃt quҧ in ra
BiӃn 1 BiӃn 2 « BiӃn n
(Hoһc lҫn thӵc hiӋn) màn hình
0 Giá trӏ 0 Giá trӏ 0 « Giá trӏ 0 ?
˜ Giá trӏ ˜ Giá trӏ ˜ « Giá trӏ ˜ ?
2 Giá trӏ 2 Giá trӏ 2 « Giá trӏ 2 ?
... « « « « ?
« « « « « ?

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 21


?
? Cҩu trúc điӅu khiӇn
 |ưu ý tͳng l͏nh và bi͋u thͱc đi͉u ki͏n trong đo̩n chương trình

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 22


?
? Cҩu trúc điӅu khiӇn
è dө: Cho biӃt kӃt quҧ cӫa đoҥn chương trình sau:
?
voiß main()
?
{
?
int i, a = 4;
?
clrscr();
?
for(i = 0 ; ia; i++)
?
printf(³%ß\n´, i);
?
}
?
Chương trình gӗm 2 biӃn i và a, chӍ có biӃn i có giá trӏ thay đәi trong quá trình
chҥy chương trình nên ta lұp bҧng sau:
a có giá tr͓ là 4
?
?
÷iá trӏ KӃt quҧ in ra
Bưӟc thӵc hiӋn
cӫa biӃn i màn hình
0 0 0
? ?
0
˜ ˜
1
? ? 0
2 2 ˜
2
? ? 0
? ?
˜
3 3
2
3
4 4 ?
Tҥi bưӟc 4, giá trӏ cӫa i = 4 vi phҥm điӅu kiӋn lһp i<a) nên vòng
?
lһp kӃt thúc. Do đó kӃt quҧ in ra màn hình:
?
0
1
2
3
?
II.2. Bài tұp cơ bҧn
?
?
a. C̭u trúc if  if..ls và switch
?
˜. Cho biӃt kӃt quҧ cӫa đoҥn chương trình sau:
?
int a=9, ¦=6;
?
a++;
a=a+¦--;
a=a+(--¦);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 23


?
? Cҩu trúc điӅu khiӇn
?

if(a%2==0)
?
printf("Gia tri cua a la chan´);
?
printf(³Tong cua a va ¦ la: %ß´, a+¦) ;
?
2. Cho biӃt kӃt quҧ cӫa đoҥn chương trình sau:
?
int a=7, ¦=8;
?
a++;
?
a=a+(¦--);
?
--¦;
?
a--;
?
a=(--a)+(--¦);
?
if(a%2!=0)
?
printf("\n a la so l");
? ?
ls ?
?
printf("\n a la so chan");
?
printf("\na = %ß",a);
?
3. Cho biӃt kӃt quҧ cӫa đoҥn chương trình sau:
?
int =5, ;
?
=++ + 5;
?
printf(³=%ß, =%ß\n´, , );
?
*=6;
?
=%7;
?
printf(³=%ß,=%ß,=%ß´, , , );
?
?
4. Nhұp vào hai sӕ nguyên a, b. In ra màn hình giá trӏ lӟn nhҩt.
?
5. Cho ba sӕ a, b, c đӑc vào tӯ bàn phím. Hãy tìm giá trӏ lӟn nhҩt cӫa ba sӕ
?
trên và in ra kӃt quҧ.
?
6. Cho ba sӕ a, b, c đӑc vào tӯ bàn phím. Hãy in ra màn hình theo thӭ tӵ tăng
dҫn các sӕ. ChӍ đưӧc dùng thêm hai biӃn phө).
7. ViӃt chương trình nhұp vào mӝt sӕ nguyên n gӗm ba chӳ sӕ. Xuҩt ra màn
hình chӳ sӕ lӟn nhҩt ӣ vӏ trí nào?
Ví dө: n=291. Chͷ s͙ lͣn nh̭t n̹m ͧ hàng chͭc (9).
?
8. ViӃt chương trình nhұp vào sӕ nguyên n gӗm ba chӳ sӕ. Xuҩt ra màn hình
theo thӭ tӵ tăng dҫn cӫa các chӳ sӕ.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 24


?
? Cҩu trúc điӅu khiӇn
Ví dө: n=291. œṷt ra 129.
?
9. Nhұp vào ngày, tháng, năm. KiӇm tra xem ngày, tháng, năm đó có hӧp lӋ
?
hay không? In kӃt quҧ ra màn hình.
?
˜0. Nhұp vào giӡ, phút, giây. KiӇm tra xem giӡ, phút, giây đó có hӧp lӋ hay
không? In kӃt quҧ ra màn hình.
˜˜. ViӃt chương trình nhұp vào ngày, tháng, năm hӧp lӋ. Cho biӃt năm này có
phҧi là năm nhuұn hay không? In kӃt quҧ ra màn hình.
˜2. ViӃt chương trình tính diӋn tích và chu vi các hình: tam giác, hình vuông,
hình chӳ nhұt và hình tròn vӟi nhӳng thông tin cҫn đưӧc nhұp tӯ bàn phím.
˜3. ViӃt chương trình tính tiӅn cưӟc TAXI. BiӃt rҵng:
?
-
KM đҫu tiên là 5000đ.
?
-
200m tiӃp theo là ˜000đ.
?
-
NӃu lӟn hơn 30km thì mӛi km thêm sӁ là 3000đ.
Hãy nhұp sӕ km sau đó in ra sӕ tiӅn phҧi trҧ.
˜4. Nhұp vào 3 sӕ nguyên dương a, b, c. KiӇm tra xem 3 sӕ đó có lұp thành tam
giác không? NӃu có hãy cho biӃt tam giác đó thuӝc loҥi nào? Cân, vuông,
đӅu, «).
˜5. ViӃt chương trình nhұp vào sӕ nguyên dương n. KiӇm tra xem n có phҧi là
sӕ chính phương hay không? sӕ chính phương là sӕ khi lҩy căn bһc 2 có kӃt
quҧ là nguyên).
?
¦. C̭u trúc l̿p
?
˜6. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=18;
?
for(int i=1; i=a; i++)
?
if(a%i= =0)
?
printf("\t %ß", i);
?
˜7. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
for(int i=0; i5; i++)
?
{
?
for(int j=0; j=i; j++)
?
printf(³%ß\t´, j);
?
printf(³\n´);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 25


?
? Cҩu trúc điӅu khiӇn
?

}
?
˜8. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int i=10, s=0;
?
whil(i>0)
?
{
?
if(i%2= =0)
?
s+=i;
? ? ?
ls ? ?
? ? ?
? if(i>5) ?
? ?
? s+=2*i;
?
i--;
?
}
?
printf(³s = %ß´,s);
?
˜9. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=18, i=1;
?
ßo{
?
if(a%i==0)
?
printf("\t %ß",i);
?
i++;
?
} whil(i=a);
?
20. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=11, ¦=16, i=a;
?
whil( i¦ )
?
{
?
if(i%2==0)
?
{
? ?
? printf("\t %ß", i);
? ?
? ¦rak;
?
}
?
i++;
?
}
?
2˜. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int a=10, s=0, i=0;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 26


?
? Cҩu trúc điӅu khiӇn
?

whil( ia )
?
{
?
i++;
?
if(i%2==0) continu;
?
ls s=s+i;
?
}
?
printf("s=%ß",s);
?
22. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
int i=1,s=0;
?
whil(1)
?
{
?
s=s+i++;
?
if(i%2)
?
i=i+2;
? ?
ls ?
?
i=i+1;
?
if(i>20)
?
¦rak;
?
}
? ? ?
printf("%ß",s); ? ?
? ?
m n
23. ViӃt chương trình in ra màn hình hình chӳ nhұt đһc kích thưӟc m, n
nhұp tӯ bàn phím).

?
Ví dө: Nh̵p m=5, n=4
f f f f f
f f f f f
f f f f f
f f f f f
24. ViӃt chương trình in ra màn hình hình chӳ nhұt rӛng kích thưӟc m n m, n
?
nhұp tӯ bàn phím).
?

?
Ví dө: Nh̵p m=5, n=4
f f f f f
f ? ? ? f
f ? ? ? f
f f f f f
25. ViӃt chương trình in ra màn hình tam giác vuông cân đһc có đӝ cao h h
?
nhұp tӯ bàn phím).
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 27
?
? Cҩu trúc điӅu khiӇn
Ví dө: Nh̵p h=4
?
f
f f
f f f
f f f f
26. ViӃt chương trình in ra màn hình tam giác cân rӛng có đӝ cao h h nhұp tӯ
?
bàn phím).
?
Ví dө: Nh̵p h=4
?
f
f f
f f
f f f f
27. ViӃt chương trình in ra màn hình tam giác cân đһc có đӝ cao h h nhұp tӯ
?
bàn phím).
?
Ví dө: Nh̵p h=4
?
f
f f f
f f f f f
f f f f f f f
28. ViӃt chương trình in ra màn hình tam giác cân rӛng có đӝ cao h h nhұp tӯ
?
bàn phím).
?
Ví dө: Nh̵p h=4
?
f
f f
f f
f f f f f f f
29. ViӃt chương trình nhұp sӕ nguyên dương n. LiӋt kê n sӕ nguyên tӕ đҫu tiên.
?
30. ViӃt chương trình nhұp vào hai sӕ nguyên dương a và b. Tìm ưӟc sӕ chung
lӟn nhҩt và bӝi sӕ chung nhӓ nhҩt cӫa a và b.
3˜. ViӃt chương trình nhұp vào mӝt sӕ nguyên n gӗm tӕi đa ˜0 chӳ sӕ 4 bytes).
?
In ra màn hình giá trӏ nhӏ phân cӫa sӕ trên. Hưӟng dүn: chia lҩy dư cho 2 và
xuҩt theo thӭ tӵ ngưӧc lҥi dùng hàm gotoxy, wherex, wherey).
32. ViӃt chương trình đӃm sӕ ưӟc sӕ cӫa sӕ nguyên dương N.
?
Ví dө: N=12
?
s͙ ưͣc s͙ cͯa 12 là 6
?
33. Mӝt sӕ hoàn thiӋn là mӝt sӕ có tәng các ưӟc sӕ cӫa nó không kӇ nó) bҵng
chính nó. Hãy liӋt kê các sӕ hoàn thiӋn nhӓ hơn 5000.
Ví dө: s͙ 6 là s͙ hòan thi͏n vì t͝ng các ưͣc s͙ là 1+2+3=6.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 28


?
? Cҩu trúc điӅu khiӇn
34. Nhұp vào ngày, tháng, năm. Cho biӃt đó là ngày thӭ mҩy trong năm.
?
35. In ra dãy sӕ Fibonaci
f˜ = f0 =˜ ;
fn = fn-˜ + fn-2 ; n>˜)
?
?
II.3. Bài tұp luyӋn tұp và nâng cao
?
36. Cài đһt tҩt cҧ các lưu đӗ đã vӁ ӣ chương ˜.
?
37. Nhұp vào ngày, tháng, năm. KiӇm tra xem ngày, tháng, năm đó có hӧp lӋ
?
hay không, nӃu hӧp lӋ cho biӃt ngày sau đó là bao nhiêu.
Ví dө: Nh̵p 31/12/2003
Ngày sau đó 01/01/2004
?
38. Nhұp vào ngày, tháng, năm. KiӇm tra xem ngày, tháng, năm đó có hӧp lӋ
?
hay không, nӃu hӧp lӋ cho biӃt ngày trưӟc đó là bao nhiêu.
Ví dө: Nh̵p 01/01/2003
Ngày trưͣc đó 31/12/2002
?
39. (*) Nhұp vào ngày, tháng, năm cӫa năm 2003. Hãy kiӇm tra xem dӳ liӋu có
hӧp lӋ hay không? NӃu hӧp lӋ hãy cho biӃt đó là ngày thӭ mҩy trong tuҫn.
hai, ba, tư, «, CN).Hưӟng dүn: lҩy ngày 0˜ tháng 0˜ năm 2003 là ngày
thӭ tư làm mӕc).
40. Nhұp vào giӡ, phút, giây. KiӇm tra xem giӡ, phút, giây đó có hӧp lӋ hay
không, nӃu hӧp lӋ cho biӃt giӡ sau đó ˜ giây là bao nhiêu.
Ví dө: Nh̵p 01:59:59
?
÷iͥ sau đó 1 giây 02:00:00
?
4˜. Nhұp vào giӡ, phút, giây. KiӇm tra xem giӡ, phút, giây đó có hӧp lӋ hay
không, nӃu hӧp lӋ cho biӃt giӡ trưӟc đó ˜ giây là bao nhiêu.
Ví dө: Nh̵p 02:00:00
?
÷iͥ trưͣc đó 1 giây 01:59:59
?
42. ViӃt chương trình in ra bҧng cӱu chương tӯ 2 đӃn 9.
?
43. (*) VӁ hình cánh quҥt sau:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 29


?
? Cҩu trúc điӅu khiӇn
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Sӱ dөng các hàm cprintf), textcolor), delay), kbhit), « thay đәi màu đӇ
?
tҥo cҧm giác cho cánh quҥt xoay cho đӃn khi nhҩn mӝt phím bҩt kǤ.
?
?
III. KӂT LUҰN
?

! Cҩu trúc lһp và r nhánh lӵa chӑn) là hai cҩu trúc chính hình thành nên

chương trình. Dӵa vào nhӳng cҩu trúc điӅu khiӇn này ta có thӇ xây dӵng
thành nhӳng chương trình phӭc tҥp hơn. Vì vұy phҧi nҳm rõ cách hoҥt đӝng
cӫa nhӳng cҩu trúc điӅu khiӇn này đӇ cài đһt đúng yêu cҫu bài toán.
! Khi sӱ dөng phҧi lưu ý điӅu kiӋn thӵc hiӋn hay kӃt thúc cӫa mӝt thao tác
?
nào đó.
! Bên trong mӝt phát biӇu điӅu khiӇn phҧi là mӝt lӋnh hay mӝt khӕi lӋnh
?
(kh͙i l͏nh đưͫc đ̿t bên trong c̿p ḓu ngo̿c {}).
! Nhӳng biӃn không phө thuӝc vào vòng lһp nên đһt bên ngoài vòng lһp.
! Khi sӱ dөng cҩu trúc điӅu khiӇn lӗng nhau phҧi lưu ý vӏ tr mӣ ngoһc hay
?
đóng ngoһc cho hӧp lý.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 30


?
? Hàm con
?
?
CHƯƠN÷ 3 HÀM CON
?
?
?

Rrình bày c̭u trúc cͯa m͡t chương trình, các bưͣc xây d͹ng cài đ̿t chương trình theo
phương pháp thͯ tͭc hàm và m͡t s͙ kͿ thu̵t liên quan.
?
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Hàm là mӝt đoҥn chương trình đӝc lұp thӵc hiӋn trӑn vҽn mӝt công viӋc nhҩt
đӏnh sau đó trҧ vӅ giá trӏ cho chương trình gӑi nó, hay nói cách khác hàm là sӵ
chia nhӓ cӫa chương trình.
?
I.2. è dө
?
hai ¦áo thư vi͏n hàm
#inclußconio.h>
#inclußstßio.h>
#inclußstring.h>
#inclußßos.h>
#inclußprocss.h>
?
hai ¦áo ¦i͇n toàn c c và ngun m̳u hàm
voiß ThaTh(char * S, char *St );
voiß Doc1Sctor(int vt);
voiß Ghi1Sctor(int vt);
?
àm chính
voiß main()
{
unsignß char ¦uf[512];
char S[20], St[20];
printf("Nhap chuoi can tim: ");
gts(S);
printf("Nhap chuoi tha th:");
gts(St) ;
printf("\nXin cho«");
TimVaThaTh(S,St,¦uf);
printf("\n Thanh cong.");
gtch();
}
?
Cài đ̿t các hàm con
voiß ThaTh(char * S, char *St )
{

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 31


?
? Hàm con
?

int l=strln(St);
for(int i=0;il;i++)
S[i]=St[i];
}
?
voiß Doc1Sctor(int vt, char ¦uf[512])
{
if(a¦sraß(0,1,vt,¦uf))
{
printf("\n loi ßoc ßia, nhan ntr thoat");
gtch();
it(1);
}
}
?
voiß Ghi1Sctor(int vt, char ¦uf[512])
{
if(a¦swrit(0,1,vt,¦uf))
{
printf("\n loi ghi ßia, nhan ntr thoat");
gtch();
it(1);
}
}
?
voiß TimVaThaTh(char * S, char *St, unsignß char ¦uf[])
{
for(int i=33;i=500;i++)
{
Doc1Sctor(i, ¦uf);
char * p=strstr(¦uf, S);
if(p)
{
ThaTh(p, St);
Ghi1Sctor(i, ¦uf);
}
}
}

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 32


?
? Hàm con
?

I.3. Cҩu trúc mӝt chương trình C


?
?
?
Khӕi khai
báo
?
?
?
Hàm
main)
?
?
?
Các hàm con
nӃu có)
?
?
?
?
a. h͙i khai ¦áo
?
Bao gӗm các khai báo vӅ sӱ dөng thư viӋn, khai báo hҵng sӕ, khai báo hàm
con các nguyên mүu hàm), khai báo các biӃn toàn cөc và khai báo các kiӇu
dӳ liӋu tӵ đӏnh nghĩa.
?
¦. àm chính (main())
?
Chӭa các biӃn, các lӋnh và các lӡi gӑi hàm cҫn thiӃt trong chương trình.
?
?
c. Các hàm con
?
Đưӧc sӱ dөng nhҵm mөc đích:
@ Khi có mӝt công viӋc giӕng nhau cҫn thӵc hiӋn ӣ nhiӅu vӏ trí.
@ Khi cҫn chia mӝt chương trình lӟn phӭc tҥp thành các đơn thӇ nhӓ hàm
con) đӇ chương trình đưӧc trong sáng, dӉ hiӇu trong viӋc xӱ lý, quҧn lý
viӋc tính toán và giҧi quyӃt vҩn đӅ.
?
ß. Ngun m̳u hàm
?
<KiӇu dӳ liӋu cӫa hàm> Tên hàm [ danh sách các tham sӕ]);
?
Nguyên mүu hàm thӵc chҩt là dòng đҫu cӫa hàm thêm dҩu chҩm phҭy y) vào
cuӕi, tuy nhiên tham sӕ trong nguyên mүu hàm có thӇ bӓ phҫn tên.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 33


?
? Hàm con
?

I.4. Cách Èây dӵng mӝt hàm con


?
?
a. i͋u ß li͏u cͯa hàm
?
œác đӏnh dӵa vào kӃt quҧ cӫa bài toán (Output). ÷ӗm 2 loҥi :
@ void: Hàm không trҧ vӅ giá trӏ. Nhӳng hàm loҥi này thưӡng rơi vào nhӳng
nhóm chӭc năng: Nhұp / Èuҩt dӳ liӋu , thӕng kê, sҳp ÈӃp, liӋt kê.
?
void Rên_hàm (danh sách các tham s͙)
{
Khai báo các bi͇n cͭc b͡
Các câu l͏nh / kh͙i l͏nh hay lͥi g͕i đ͇n hàm khác.
}
@ KiӇu dӳ liӋu cơ bҧn (rӡi rҥc/ liên tөc) hay kiӇu dӳ liӋu có cҩu trúc:
KiӇu dӳ liӋu tùy theo mөc đích cӫa hàm cҫn trҧ vӅ giá trӏ gì thông qua viӋc
phân tích bài toán. Nhӳng hàm loҥi này thưӡng đưӧc sӱ dөng trong các
trưӡng hӧp: ĐӃm, kiӇm tra, tìm kiӃm, tnh trung bình, tәng, tch, «
<Ki͋u dͷ li͏u> Rên_hàm ([danh sách các tham s͙])
{
<Ki͋u dͷ li͏u> kq;
Khai báo các bi͇n cͭc b͡
Các câu l͏nh / kh͙i l͏nh hay lͥi g͕i đ͇n hàm khác.
?
rturn kq;
}
?
?
?
 a͙i vͣi nhͷng hàm tr̫ v͉ nhi͉u lo̩i giá tr͓ cho tͳng trưͥng hͫp cͭ th͋
?
(ch̻ng h̩n như ki͋m tra: đúng hay sai, so sánh: b̹ng , lͣn hơn hay nh͗
?
hơn, «) thì c̯n ghi chú rõ giá tr͓ tr̫ v͉ là gì cho tͳng trưͥng hͫp đó.
?
?
¦. Tham s͙
?
œác đӏnh dӵa vào dӳ liӋu đҫu vào cӫa bài toán (Input). ÷ӗm 2 loҥi :
@ Tham sӕ không là con trӓ (tham trӏ): Không thay đәi hoһc không cҫn
lҩy giá trӏ mӟi cӫa tham sӕ sau lӡi gӑi hàm. Tham sӕ dҥng này chӍ mang ý
nghĩa là dӳ liӋu đҫu vào.
@ Tham sӕ con trӓ (tham biӃn): Có sӵ thay đәi giá trӏ cӫa tham sӕ trong
quá trình thӵc hiӋn và cҫn lҩy lҥi giá trӏ đó sau khi ra khӓi hàm. Ӭng dөng
cӫa tham sӕ loҥi này có thӇ là dӳ liӋu đҫu ra kӃt quҧ) hoһc cũng có thӇ
?
vӯa là dӳ liӋu đҫu vào vӯa là dӳ liӋu đҫu ra.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 34


?
? Hàm con
?

c. Tn hàm
?
Đһt tên theo quy ưӟc đһt tên trong C sao cho tên gӑi đúng vӟi chӭc năng
hay mөc đch thӵc hiӋn cӫa hàm và gӧi nhӟ.
?
ß. Ví ß
?
Ví dө ˜: ViӃt chương trình nhұp sӕ nguyên dương n và in ra màn hình các ưӟc
sӕ cӫa n
Ohân tích bài toán:
@ Input: n ĐӇ xác đӏnh tham sӕ)
- KiӇu dӳ liӋu: sӕ nguyên dương unsigned int).
- Giá trӏ n không bӏ thay đәi trong quá trình tìm ưӟc sӕ \ Tham sӕ cӫa
hàm không là con tr͗.
@ Output: In ra các ưӟc sӕ cӫa n ĐӇ xác đӏnh kiӇu dӳ liӋu hàm)
- Không trҧ vӅ giá trӏ.
?
- KiӇu dӳ liӋu cӫa hàm là void .
@ œác đӏnh tên hàm: Hàm này dùng in ra các ưӟc sӕ cӫa n nên có thӇ đһt là
|ietKeUocÑo
?
Ta có nguyên mүu hàm:
?
voiß Lit
ocSo ( unsignß int n );
?
?
#inclußconio.h>
#inclußstßio.h>
?
hai ¦ao ngun mau ham
voiß Lit
ocSo ( unsignß int n );
?
voiß main()
{
unsignß int n;
?
printf(³Nhap n = ´);
scanf(³%u´,&n);
printf("Cac uoc so cua n : " );
Lit
ocSo(n);
gtch( );
}
?
voiß Lit
ocSo (unsignß int n)
{

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 35


?
? Hàm con
?

for(int i=1; i=n; i++)


printf(³%u\t´, i);
}
?
?
?
 Lưu ý cách gӑi hàm: a͙i vͣi hàm có ki͋u dͷ li͏u hàm là voiß thì khi
?
g͕i không c̯n ph̫i gán giá tr͓ vào ¦i͇n, ngưͫc l̩i ph̫i g͕i như trong ví
ß 2 (Oh̫i khai báo tương ͱng ki͋u vͣi ki͋u dͷ li͏u hàm sͅ g͕i và gán

?
giá tr͓ tr̫ v͉ vào bi͇n đó).
?
?
?
Ví dө 2: ViӃt chương trình nhұp sӕ nguyên dương n và tính tәng
?
Ñ ˜ 2 3 L n
? , vӟi n>0
Ohân tích bài toán:
?

@ Input: n ĐӇ xác đӏnh tham sӕ)


- KiӇu dӳ liӋu: sӕ nguyên dương unsigned int).
- Giá trӏ n không bӏ thay đәi trong quá trình tính tәng \ Tham sӕ cӫa
hàm không là con tr͗.
@ Output: Tәng S ĐӇ xác đӏnh kiӇu dӳ liӋu hàm)
- Trҧ vӅ giá trӏ cӫa S.
- S là tәng các sӕ nguyên dương nên S cũng là sӕ nguyên dương \ KiӇu

trҧ vӅ cӫa hàm là unsigned int hoһc unsigned long cho trưӡng hӧp giá
trӏ cӫa tәng lӟn hơn 2 bytes).
@ œác đӏnh tên hàm: Hàm này dùng tính tәng S nên có thӇ đһt là RongÑ.
?

Ta có nguyên mүu hàm:


?
unsignß long TongS ( unsignß int n );
?
?
#inclußconio.h>
#inclußstßio.h>
?
hai ¦ao ngun mau ham
unsignß long TongS ( unsignß int n );
?
voiß main()
{
unsignß int n;
unsignß long kq;
?
printf(³Nhap n = ´);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 36


?
? Hàm con
?

scanf(³%u´,&n);
kq = TongS ( n );
printf(³Tong can tinh la: %lu ´, kq);
gtch( );
}
unsignß long TongS (unsignß int n)
{
unsignß long S=0;
int i=1;
whil(i=n)
{
S+=i;
i++;
}
rturn S;
}
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
˜. Cài đһt lҥi tҩt cҧ các bài tұp ӣ chương 2 theo phương pháp hàm.
?
2. ViӃt chương trình tính diӋn tích và chu vi cӫa hình chӳ nhұt vӟi chiӅu dài và
chiӅu rӝng đưӧc nhұp tӯ bàn phím.
3. ViӃt chương trình tính diӋn tích và chu vi hình tròn vӟi bán kính đưӧc nhұp
tӯ bàn phím.
4. Nhұp sӕ nguyên dương n n>0). LiӋt kê tҩt cҧ các sӕ nguyên tӕ nhӓ hơn n.
?
5. Nhұp sӕ nguyên dương n n>0). LiӋt kê n sӕ chính phương đҫu tiên.
?
6. Nhұp sӕ nguyên dương n n>0). ĐӃm xem có bao nhiêu sӕ hoàn thiӋn nhӓ
?
hơn n.
?
7. Nhұp sӕ nguyên dương n 0 <= n< ˜000) và in ra cách đӑc cӫa n.
?
Ví dө: Nhұp n = 105. In ra màn hình: Mot tram le nam.
?
8. ViӃt chương trình tính tiӅn thuê máy dӏch vө Internet và in ra màn hình kӃt
quҧ. Vӟi dӳ liӋu nhұp vào là giӡ bҳt đҫu thuê GBD), giӡ kӃt thúc thuê
GKT), sӕ máy thuê SoMay).
- ĐiӅu kiӋn cho dӳ liӋu nhұp: 6<=GBD<GKT<=2˜. Giӡ là sӕ nguyên.
?
- Đơn giá: 2500đ cho mӛi giӡ máy trưӟc ˜7:30 và 3000đ cho mӛi giӡ máy
sau ˜7:30.
9. ViӃt chương trình tính tiӅn lương ngày cho công nhân, cho biӃt trưӟc giӡ vào
ca, giӡ ra ca cӫa mӛi ngưӡi.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 37


?
? Hàm con
?

÷iҧ sӱ rҵng:
?
- TiӅn trҧ cho mӛi giӡ trưӟc ˜2 giӡ là 6000đ và sau ˜2 giӡ là 7500đ.
?
- Giӡ vào ca sӟm nhҩt là 6 giӡ sáng và giӡ ra ca trӉ nhҩt là ˜8 giӡ (÷i̫ s͵
?
giͥ nh̵p vào nguyên).
?
˜0. Nhұp vào 2 sӕ nguyên p, q và tính biӇu thӭc sau:
?

-q/2+p3/27+q2/4)˜/2)˜/3 + -q/2 ± p3/27+q2/4)˜/2)˜/3


?
˜˜. Nhұp vào 3 sӕ thӵc a, b, c và kiӇm tra xem chúng có thành lұp thành 3 cҥnh
cӫa mӝt tam giác hay không? NӃu có hãy tính diӋn tích, chiӅu dài mӛi đưӡng
cao cӫa tam giác và in kӃt quҧ ra màn hình.
- Công thӭc tính diӋn tích s = sqrtp*p-a)*p-b)*p-c) )
?
- Công thӭc tính các đưӡng cao: ha = 2s/a, hb=2s/b, hc=2s/c.
?

(èͣi p là nͷa chu vi cͯa tam giác).


?
˜2. Nhұp vào 6 sӕ thӵc a, b, c, d, e, f . Giҧi hӋ phương trình sau :
!ax by c
!
!dx ey  f
?

˜3. ViӃt chương trình nhұp 2 sӕ nguyên dương a, b. Tìm USCLN và BSCNN cӫa
hai sӕ nguyên đó.
˜4. ViӃt chương trình tính tәng nghӏch đҧo cӫa n giai thӯa.
?
˜5. Cho 2 sӕ nguyên a, b. ViӃt hàm hoán vӏ giá trӏ 2 sӕ trên.
?
˜6. (*) ViӃt chương trình nhұp sӕ nguyên dương n gӗm 5 chӳ sӕ, kiӇm tra xem
các chӳ sӕ n có phҧi là sӕ đӕi xӭng hay không.
Ví dө: a͙i xͱng: 13531
?
Không đ͙i xͱng: 13921
˜7. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , đӃm xem n
có bao nhiêu chӳ sӕ chҹn và bao nhiêu chӳ sӕ lҿ.
˜8. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , đӃm xem
?
n có bao nhiêu chӳ sӕ là sӕ nguyên tӕ.
˜9. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , tính tәng
các ưӟc sӕ dương cӫa n.
Ví dө: Nh̵p n=6
?
R͝ng các ưͣc s͙ tͳ 1 đ͇n n: 1+2+3+6=12.
20. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Äk ã5) , tìm ưӟc
sӕ lҿ lӟn nhҩt cӫa n.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 38


?
? Hàm con
Ví dө: Žͣc s͙ l̓ lͣn nh̭t cͯa 27 là 9.
2˜. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , kiӇm tra
xem các chӳ sӕ cӫa n có toàn lҿ hay toàn chҹn không.
22. (*) ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , sҳp
?
xӃp các chӳ sӕ cӫa n theo thӭ tӵ tăng dҫn.
Ví dө: Nh̵p n=1536
K͇t qu̫ sau khi s̷p x͇p: 1356.
?
?
II.2. Bài tұp luyӋn tұp và nâng cao
23. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , sau đó
nhұp mӝt sӕ nguyên x, tìm vӏ trí xuҩt hiӋn cӫa chӳ sӕ có giá trӏ x trong n.
Ví dө: Nh̵p n=1526, x=2
?
K͇t qu̫: Chu so 2 o vi tri thu 3.
24. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , kiӇm tra
xem các chӳ sӕ cӫa n có đưӧc sҳp thӭ tӵ không.
Ví dө: Nh̵p n=1569 ho̿c n=8521
?
K͇t qu̫: Có thͱ t͹.
?
25. ViӃt chương trình nhұp 2 sӕ a, b sao cho: sӕ lӟn nhҩt trong 2 sӕ phҧi là mӝt sӕ
dương và chia hӃt cho 7. NӃu nhұp sai phҧi yêu cҫu nhұp lҥi cho đӃn khi
đúng.

26. ViӃt chương trình nhұp sӕ nguyên dương n gӗm k chӳ sӕ 0 Ä k ã5) , tính giá
?
trӏ trung bình các chӳ sӕ chҹn trong n.
?
27. (*) ViӃt chương trình in ra màn hình ngày/tháng/năm cӫa ngày hiӋn tҥi, cho
phép sӱ dөng các phím mũi tên lên, xuӕng đӇ tăng hoһc giҧm mӝt ngày.
28. (*) ViӃt chương trình in ra màn hình giӡ:phút:giây hiӋn tҥi, cho phép sӱ dөng
các phím mũi tên lên, xuӕng đӇ tăng hoһc giҧm mӝt giây.
?
III. KӂT LUҰN
?

! Trưӟc khi xây dӵng mӝt hàm ta phҧi Èác đӏnh mөc đch cӫa hàm là dùng đӇ

làm gì, trên cơ sӣ đó, ta mӟi xác đӏnh đưӧc các thành phҫn cӫa hàm và xây dӵng
nguyên mүu hàm.
! Mӛi hàm phҧi thӵc hiӋn mӝt chӭc năng đӝc lұp và tách biӋt vӟi các hàm khác
?
(không đưͫc l͛ng nhau).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 39


?
? Hàm con
! Đӕi vӟi hàm có giá trӏ trҧ vӅ phҧi lưu ý kiӇu dӳ liӋu phҧi tương ӭng kiӇu dӳ liӋu

cҧ giá trӏ trҧ vӅ và kiӇu dӳ liӋu cӫa biӃn đưӧc gán khi gӑi hàm. Trưӡng hӧp hàm
trҧ vӅ tӯ hai loҥi giá trӏ trӣ lên thì phҧi có dòng chú thch cho trưӡng hӧp
tương ӭng đӇ khi gӑi hàm biӃt đưӧc kӃt quҧ (ch̻ng h̩n như tìm ki͇m, ki͋m tra,
so sánh, « giá tr͓ tr̫ v͉ có 2 trưͥng hͫp: Có ho̿c không có ph̯n t͵ c̯n tìm,
th͗a đi͉u ki͏n ki͋m tra hay không? Do v̵y ta ph̫i quy ưͣc giá tr͓ cho tͳng
trưͥng hͫp).
! Nên đһt tên hàm sao cho gӧi nhӟ đưӧc chӭc năng, đһt tên theo quy tҳc nhҩt
?
đӏnh đӇ tránh viӋc gӑi sai tên hàm do lүn lӝn giӳa ký tӵ hoa và thưӡng, có dҩu
gҥch nӕi giӳa các tӯ trong hàm hay không?
! Khi gӑi hàm phҧi truyӅn đӫ tham sӕ, đúng kiӇu dӳ liӋu và đúng thӭ tӵ cӫa
?
tham sӕ.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 40


?
? Mҧng mӝt chiӅu
?
?
CHƯƠN÷ 4 MҦN÷ MӜT CHIӄU
?
?
?
?
Cách khai báo dͷ li͏u ki͋u m̫ng, các thao tác nh̵p xṷt, các kͿ thu̵t thao tác trên
m̫ng. Ͱng dͭng các kͿ thu̵t này trong vi͏c cài đ̿t các hàm tìm ki͇m, ki͋m tra, xây
d͹ng m̫ng, tách và ghép m̫ng.
?
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Mҧng thӵc chҩt là mӝt biӃn đưӧc cҩp phát bӝ nhӟ liên tөc và bao gӗm nhiӅu biӃn
thành phҫn.
Các thành phҫn cӫa mҧng là tұp hӧp các biӃn có cùng kiӇu dӳ liӋu và cùng tên.
Do đó đӇ truy xuҩt các biӃn thành phҫn, ta dùng cơ chӃ chӍ mөc.
?
I.2. Khai báo mҧng
?
ĐӇ khai báo mӝt mҧng, ta có 2 cách khai báo sau :
! Cách ˜: Con trӓ hҵng
?
Ä KiӇu dӳ liӋu > Ä Tên mҧng > [ Ä Ñӕ phҫn tӱ tӕi đa cӫa mҧng> ] y
è dө:
int a[100];  hai ¦ao mang so ngun a gom 100 phan tu
?
float ¦[50];  hai ¦ao mang so thuc ¦ gom 50 phan tu
! Cách 2: Con trӓ
?
Ý nghĩa: Khi ta khai báo mӝt mҧng vӟi kiӇu dӳ liӋu bҩt kì int, float, char,«)
?
thì tên cӫa mҧng thӵc chҩt là mӝt hҵng đӏa chӍ cӫa phҫn tӱ đҫu tiên.
?
Ä KiӇu dӳ liӋu > *Ä Tên mҧng >y
?
è dө :
?
int *p;  khai ¦ao con tro p
int ¦[100];
p = ¦;  p tro vao phan tu 0 cua mang ¦
?
Vӟi cách viӃt như trên thì ta có thӇ hiӇu các cách viӃt sau là tương đương
p[i]  *(p + i)  b[i]  *(b+i)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 41


?
? Mҧng mӝt chiӅu
 Lưu ý: Khi s͵ dͭng bi͇n con tr͗ đ͋ truy xṷt m̫ng, theo cách như trên

thì th͹c ch̭t con tr͗ p ch͑ chi͇m 2 byte b͡ nhͣ đ͋ chͱa đ͓a ch͑ mà thôi. a͋
t̩o m̫ng chͱa dͷ li͏u thành ph̯n thì ta ph̫i c̭p phát vùng nhͣ cho con tr͗ p.
Dùng hàm : malloc, calloc trong thư vi͏n stßli¦.h> đ͋ c̭p phát vùng nhͣ.
?
è dө:
?
+ Cách 1: dùng malloc
?
int *p; hai ¦áo con tr͗ p
?
p = (int *) malloc (100); C̭p phát 100 ô nhͣ ki͋u int cho con tr͗ p
?
+ Cách 2: dùng calloc
?
int *p; khai ¦áo con tr͗ p
?
p=(int *) calloc (100,sizof (int)); c̭p phát 10 ô nhͣ m͟i ô chi͇m 2¦ts
?
Sau khi sӱ dөng xong thì nên giҧi phóng vùng nhӟ bҵng hàm free
?
Ví ß : fr (p) ;  gi̫i phóng vùng nhͣ cho con tr͗ p.
?
?
I.3. Truy Èuҩt phҫn tӱ cӫa mҧng
?
Vӟi khái niӋm và cách khai báo như trên ta có hình dҥng cӫa mҧng mӝt chiӅu
như sau:

?
Ví dө : int A[5] // Khai báo mҧng A gӗm tӕi đa 5 phҫn tӱ nguyên.
ChӍ sӕ 0 ˜ 2 3 4
? A[0] A[˜] A[2] A[3] A[4]
è dө minh hoҥ:
?
Khai báo và gán giá trӏ cho mҧng
?
#incluß conio.h>
#incluß stßio.h>
?
voiß main ( )
{
clrscr ( );
int a[4] = {5,9,3,8};
for (int i = 0; i  4 ; i++)
printf (³ a [ %ß ] = %ß \t´, i , a[i] );
gtch ( );
}
?
Đӕi vӟi con trӓ: Lҩy đӏa chӍ cӫa phҫn tӱ trong mҧng ta dùng dҩu ³¾
?
Ví dө:
?
int a[7];

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 42


?
? Mҧng mӝt chiӅu
?

int *p = a[3]; Ḽ đ͓a ch͑ ph̯n t͵ thͱ 3


?
Ví dө :
?
int a[7];
?
int *p;
?
p = a; p tr͗ tͣi ph̯n t͵ thͱ 0
p = p + 4; p tr͗ tͣi ph̯n t͵ thͱ 4
Tӯ ví dө trên ta có thӇ mô hình hoá mҧng như sau:
?
px a[0] a[˜] a[2] a[3] a[4] a[5] a[6]
?
?
?
è dө minh hoҥ: ViӃt chương trình nhұp vào mҧng mӝt chiӅu ˜0 phҫn tӱ kiӇu sӕ
?
nguyên
?
#incluß conio.h>
#incluß stßio.h>
?
voiß main ( )
{
int a[10], i;
int *p;
?
for (i = 0 ; i  10 ; i ++)
{
? printf (³ a [ %ß ] = ³, i );
?
? scanf (³ %ß´, &a[i] );
}
p = a;
printf (³ \n Noi ßung mang vua nhap: ³);
for (i = 0; i  10 ; i ++)
printf (³ %ß \t ³, *(p + i));
gtch ( );
}
?
?
II. BÀI TҰO
?
II.1. Mӝt sӕ kĩ thuұt cơ bҧn
?
?
a.  thu̵t đ̿t cͥ hi͏u
?
Kĩ thu̵t này thưͥng đưͫc áp dͭng cho nhͷng bài toán ³ki͋m tra´ hay ³đánh
?
ß̭u´.
?
Vi͇t hàm ki͋m tra m m̫ng các s͙ ngun có thͱ t͹ tăng ß̯n không?
(Tr̫ v͉ 1: N͇u m̫ng tăng ß̯n, ngưͫc l̩i tr̫ v͉ 0).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 43


?
? Mҧng mӝt chiӅu
?

int imTraTang (int a[ ], int n)


{
int flag = 1;
for (int i = 0; i  n-1; i ++ )
if ( a[i] > a[i+1] )  Vi ph̩m đi͉u ki͏n tăng ß̯n
{
flag = 0;
¦rak;
}
rturn flag;
}
?
Vi͇t hàm ki͋m tra m trong m̫ng các s͙ ngun có t͛n t̩i s͙ ngun
l̓ lͣn hơn 100 ha không?
(Tr̫ v͉ 1: N͇u có t͛n t̩i s͙ l̓ và lͣn hơn 100, ngưͫc l̩i tr̫ v͉ 0).
?
int imTraL (int a[ ], int n)
{
int flag = 0;
for (int i = 0; i  n; i ++ )
if ( a[i] % 2 != 0 && a[i][j] > 100 ) G̿p ph̯n t͵ tho̫
{
flag = 1;
¦rak;
}
rturn flag;
}
?
¦.  thu̵t đ̿t lính canh
?
Kĩ thu̵t này thưͥng đưͫc áp dͭng cho nhͷng bài t̵p v͉ ³tìm ki͇m´, ³li͏t k´
?
theo m͡t đi͉u ki͏n nh̭t đ͓nh nào đó.
?
Vi͇t hàm tìm và tr̫ v͉ giá tr͓ lͣn nh̭t trong m̫ng m͡t chi͉u các s͙
?
ngun.
?
int TimMa (int a[], int n)
{
int ma, i = 1;
?
ma = a[0];
whil ( i  n )
{
if ( a[i] > ma )
ma = a[i] ;
i++;
}
rturn ma;
}

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 44


?
? Mҧng mӝt chiӅu
?

II.2. Bài tұp cơ bҧn


?
?
a. Nh̵p ṷt m̫ng m͡t chi͉u
?
Ohương pháp cơ bҧn
?
Vi͇t chương trình nh̵p ṷt m̫ng m͡t chi͉u các s͙ ngun.
?
#incluß conio.h>
#incluß stßio.h>
#ßfin MAX 100
?
voiß NhapMang (int a[], int &n)
{
printf (³Nhap so phan tu: ³);
scanf (³ %ß ´, &n);
for (int i = 0; i  n; i ++)
{
printf (³ a [%ß] = ³, i);
scanf (³ %ß ³, &a[i]);
}
}
?
voiß XuatMang (int a[], int n)
{
printf (³\nNoi ßung mang: ³);
for (int i = 0; i  n; i ++)
printf (³ %ß \t ³, a[i]);
}
?
voiß main ( )
?
{
? clrscr ( );
? int a[MAX] , n;
?
? NhapMang (a,n);
? XuatMang (a,n);
?
? gtch ( );
}
?
Bài tұp
?
˜. ViӃt chương trình nhұp xuҩt mҧng mӝt chiӅu các sӕ thӵc.
?
2. ViӃt chương trình khӣi tҥo giá trӏ các phҫn tӱ là 0 cho mҧng mӝt chiӅu các
sӕ nguyên gӗm n phҫn tӱ.
3. ViӃt chương trình phát sinh ngүu nhiên mҧng mӝt chiӅu các sӕ nguyên
âm.
4. ViӃt chương trình phát sinh ngүu nhiên mҧng mӝt chiӅu các sӕ nguyên sao
cho mҧng có thӭ tӵ tăng dҫn Không sҳp xӃp).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 45


?
? Mҧng mӝt chiӅu
5. ViӃt chương trình nhұp mҧng các sӕ thӵc và xuҩt các phҫn tӱ âm trong
mҧng.
6. ViӃt chương trình nhұp mҧng các sӕ nguyên và xuҩt các phҫn tӱ lҿ có
trong mҧng.
7. ViӃt chương trình nhұp vào mҧng mӝt chiӅu các sӕ nguyên và xuҩt ra các
phҫn tӱ chҹn nhӓ hơn 20.
8. ViӃt chương trình nhұp vào mҧng mӝt chiӅu các sӕ nguyên và xuҩt ra màn
hình các phҫn tӱ là sӕ nguyên tӕ.
9. ViӃt chương trình nhұp vào sӕ nguyên n và liӋt kê các sӕ nguyên tӕ nhӓ
hơn n, nӃu mҧng không tӗn tҥi sӕ nguyên tӕ nào nhӓ hơn n thì phҧi xuҩt ra
mӝt câu thông báo.
˜0. ViӃt chương trình nhұp vào mҧng mӝt chiӅu các sӕ nguyên và xuҩt ra màn
hình các phҫn tӱ là sӕ chính phương nҵm tҥi nhӳng vӏ trí lҿ trong mҧng.
?
¦. Tìm ki͇m trn m̫ng m͡t chi͉u
?
Ohương pháp cơ bҧn
?
Vi͇t hàm tìm ph̯n t͵ có giá tr͓  ṷt hi͏n đ̯u tin trong m̫ng m͡t
chi͉u.
(N͇u tìm th̭ tr̫ v͉ v͓ trí ṷt hi͏n , ngưͫc l̩i tr̫ v͉ -1)
?
int TimX (int a[], int n, int )
{
for (int i = 0; i  n ; i ++)
if ( ==a[i] )
?
rturn i;
? rturn -1;
}
?
Bài tұp
?
˜˜. ViӃt hàm tìm vӏ trí phҫn tӱ có giá trӏ x xuҩt hiӋn cuӕi cùng trong mҧng.
?
˜2. ViӃt hàm tìm vӏ trí cӫa phҫn tӱ nhӓ nhҩt trong mҧng các sӕ nguyên.
?
˜3. ViӃt hàm tìm vӏ trí cӫa phҫn tӱ lӟn nhҩt trong mҧng các sӕ nguyên.
?
˜4. ViӃt hàm in vӏ trí các phҫn tӱ nguyên tӕ trong mҧng các sӕ nguyên.
?
˜5. ViӃt hàm in vӏ trí các phҫn tӱ nguyên tӕ lӟn hơn 23.
?
˜6. ViӃt hàm tìm vӏ trí phҫn tӱ âm đҫu tiên trong mҧng. NӃu không có phҫn tӱ
?
âm trҧ vӅ ±˜.
?
˜7. ViӃt hàm tìm vӏ trí phҫn tӱ âm lӟn nhҩt trong mҧng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 46


?
? Mҧng mӝt chiӅu
˜8. ViӃt hàm tìm vӏ trí phҫn tӱ dương đҫu tiên trong mҧng. NӃu không có
phҫn tӱ âm trҧ vӅ ±˜.
˜9. ViӃt hàm tìm vӏ trí phҫn tӱ dương bé nhҩt trong mҧng.
?
20. ViӃt hàm in các phҫn tӱ là bӝi cӫa 3 và 5.
?
2˜. ViӃt hàm tìm sӕ chҹn cuӕi cùng có trong mҧng, nӃu không tӗn tҥi sӕ chҹn
hàm trҧ vӅ -˜ .
22. ViӃt hàm tìm sӕ lҿ lӟn nhҩt có trong mҧng, nӃu không tӗn tҥi sӕ lҿ hàm trҧ
?
vӅ -˜.
?
23. ViӃt hàm tìm và đәi chӛ phҫn tӱ lӟn nhҩt vӟi phҫn tӱ nhӓ nhҩt trong
mҧng.
24. Nhұp vào X. ViӃt hàm in ra màn hình nhӳng phҫn tӱ có giá trӏ tӯ ˜ đӃn X
?
có trong mҧng.
25. ViӃt chương trình nhұp vào mӝt dãy sӕ a gӗm n sӕ thӵc  n ã˜00 ), nhұp
vào dãy sӕ b gӗm m sӕ thӵc  m ã˜00 ).
@ In ra nhӳng phҫn tӱ chӍ xuҩt hiӋn trong dãy a mà không xuҩt hiӋn trong
dãy b.
@ In ra nhӳng phҫn tӱ xuҩt hiӋn ӣ cҧ hai dãy.
?
?
c. Đ͇m ± T̯n sṷt
?
Ohương pháp cơ bҧn
Vi͇t hàm đ͇m các ph̯n t͵ chia h͇t cho 5 trong m̫ng các s͙ ngun.
int Dm (int a[], int n )
{
int ßm = 0;
for (int i = 0; i  n ; i++ )
if ( a[i] % 5 == 0 )
?
ßm++;
? rturn ßm;
}
?
Bài tұp
?
26. ViӃt hàm đӃm các phҫn tӱ âm, dương trong mҧng.
?
27. ViӃt hàm đӃm các phҫn tӱ chҹn, lҿ trong mҧng.
?
28. ViӃt hàm đӃm sӕ lҫn xuҩt hiӋn cӫa phҫn tӱ x trong mҧng.
?
29. ViӃt hàm đӃm các phҫn tӱ nhӓ hơn x trong mҧng.
?
30. ViӃt hàm đӃm các phҫn tӱ là sӕ nguyên tӕ trong mҧng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 47


?
? Mҧng mӝt chiӅu
3˜. ViӃt hàm đӃm các phҫn tӱ là sӕ hoàn thiӋn trong mҧng.
?
32. ViӃt hàm đӃm các phҫn tӱ là bӝi cӫa 3 và 5 trong mҧng các sӕ nguyên.
?
?
ß. Tính t͝ng ± Trung ¦ình có đi͉u ki͏n
?
Ohương pháp cơ bҧn
Vi͇t hàm tính t͝ng các ph̯n t͵ trong m̫ng.
long TinhTong (int a[], int n )
{
long tong = 0;
for (int i = 0; i  n; i++ )
tong = tong + a[i] ;
rturn tong;
}
ViӃt hàm tính giá trӏ trung bình các phҫn tӱ có giá trӏ âm trong mҧng.
?
a͙i vͣi hàm t nh trung bình có đi͉u ki͏n ph̫i lưu ý khi chia giá tr͓ (Có th͋
?
m̫ng không có ph̯n t͵ nào tho̫ đi͉u ki͏n, n͇u ta chia tͱc là chia cho 0).
?
float TrungBinhAm (int a[], int n )
{
long tong = 0;
int spt=0;
for (int i = 0; i  n; i++ )
if( a[i]0 )
{
? tong = tong + a[i] ;
?
? spt++;
}
if(spt==0)
? rturn 0;
?
? rturn 1.0*tongspt;
}
Bài tұp
?
33. ViӃt hàm tính tәng các phҫn tӱ chҹn trong mҧng.
?
34. ViӃt hàm tính tәng các phҫn tӱ lҿ trong mҧng các sӕ nguyên.
?
35. ViӃt hàm tính tәng các phҫn tӱ nguyên tӕ trong mҧng.
?
36. ViӃt hàm tính tәng các phҫn tӱ nҵm ӣ vӏ trí chҹn trong mҧng các sӕ
?
nguyên.
?
37. ViӃt hàm tính tәng các phҫn tӱ nҵm ӣ vӏ trí nguyên tӕ trong mҧng.
?
38. ViӃt hàm tính tәng các phҫn tӱ chia hӃt cho 5 có trong mҧng.
?
39. ViӃt hàm tính tәng các phҫn tӱ cӵc đҥi trong mҧng các sӕ nguyên (ph̯n t͵
?
c͹c đ̩i là ph̯n t͵ lͣn hơn các ph̯n t͵ xung quanh nó).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 48


?
? Mҧng mӝt chiӅu
?

è dͭ : 152635186
40. ViӃt hàm tính tәng các phҫn tӱ cӵc tiӇu trong mҧng các sӕ nguyên ( ph̯n
?
t͵ c͹c ti͋u là ph̯n t͵ nh͗ hơn các ph̯n t͵ xung quanh nó ).
?
Ví dө : 6429537158
4˜. ViӃt hàm tính tәng các phҫn tӱ là bӝi cӫa 3 và 5 trong mҧng các sӕ
?
nguyên.
?
42. ViӃt hàm tính tәng các phҫn tӱ là sӕ hoàn thiӋn trong mҧng các sӕ nguyên.
?
43. ViӃt hàm tính giá trӏ trung bình cӫa các sӕ hoàn thiӋn trong mҧng các sӕ
?
nguyên.
?
?
. S̷p ͇p
?
Kĩ thuұt cơ bҧn
Vi͇t hàm s̷p ͇p m̫ng tho thͱ t͹ tăng ß̯n.
voiß oanVi (int &a, int &¦)
{
int tam = a;
a = ¦;
¦ = tam;
}
?
voiß SapTang (int a[], int n)
{
? for (int i = 0; i  n-1 ; i++)
?
? for (int j = i+1; j  n; j++)
? if (a[i] > a [j])
?
? oanVi (a[i], a[j]);
}
Bài tұp
?
44. ViӃt hàm sҳp xӃp mҧng theo thӭ tӵ giҧm dҫn.
?
45. ViӃt hàm sҳp xӃp mҧng theo thӭ tӵ tăng dҫn cӫa các phҫn tӱ là sӕ nguyên
tӕ.
46. ViӃt hàm sҳp xӃp các phҫn tӱ lҿ tăng dҫn.
?
47. ViӃt hàm sҳp xӃp các phҫn tӱ chҹn giҧm dҫn.
?
48. ViӃt hàm sҳp xӃp các phҫn tӱ chҹn nҵm bên trái theo thӭ tӵ tăng dҫn còn
các phҫn tӱ lҿ bên phҧi theo thӭ tӵ giҧm dҫn.
49. ViӃt hàm sҳp xӃp các phҫn tӱ âm giҧm dҫn tӯ trái sang phҧi, phҫn tӱ
?
dương tăng dҫn tӯ phҧi sang trái.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 49


?
? Mҧng mӝt chiӅu
?

f. Xoá
?
Kĩ thuұt cơ bҧn
?
Duy͏t m̫ng tͳ trái sang ph̫i . œṷt phát tͳ v͓ tr c̯n xoá ti͇n hành dͥi l̯n lưͫt
các ph̯n t͵ v͉ ph a trưͣc cho đ͇n khi k͇t thúc m̫ng, sau đó gi̫m k ch thưͣc
m̫ng.
ḙ̀n đ͉ đ̿t ra là tìm v͓ tr c̯n xóa theo đi͉u ki͏n bài toán r͛i th͹c hi͏n xóa.
Vi͇t hàm oá ph̯n t͵ đ̯u tin cͯa m̫ng.
voiß XoaDau (int a[], int &n)
{
for (int i = 0; i  n-1 ; i++)
a[i] = a[i+1];
n--;
}
?
Vi͇t hàm oá ph̯n t͵ t̩i v͓ trí (vitri) cho trưͣc trong m̫ng.
?
voiß XoaTaiViTri (int a[], int &n, int vitri)
{
for (int i = vitri; i  n-1 ; i++)
a[i] = a[i+1];
?
? n--;
}
?
Bài tұp
?
50. ViӃt hàm xoá phҫn tӱ tҥi vӏ trí lҿ trong mҧng.
?
5˜. ViӃt hàm xoá phҫn tӱ có giá trӏ lӟn nhҩt trong mҧng.
?
52. Nhұp vào giá trӏ X. ViӃt hàm xoá tҩt cҧ các phҫn tӱ có giá trӏ nhӓ hơn X.
?
53. Nhұp vào giá trӏ X. ViӃt hàm xoá phҫn tӱ có giá trӏ gҫn X nhҩt.
?
?
g. Chèn
?
Kĩ thuұt cơ bҧn
?
Duy͏t m̫ng tͳ ph̫i sang trái. œṷt phát tͳ cu͙i m̫ng ti͇n hành đ̱y l̯n lưͫt
các ph̯n t͵ v͉ ph a sau cho đ͇n v͓ tr c̯n chèn, chèn ph̯n t͵ c̯n chèn vào v͓
tr chèn và tăng k ch thưͣc m̫ng.
Rrưͣc khi chèn ta ph̫i xác đ͓nh v͓ tr c̯n chèn theo đi͉u ki͏n bài toán.
Thm ph̯n t͵ có giá tr͓ X vào cu͙i m̫ng.
voiß ThmCuoi (int a[], int &n, int X)
{
a[n]=X;
n++;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 50


?
? Mҧng mӝt chiӅu
?

}
Chèn ph̯n t͵ có giá tr͓ X vào m̫ng t̩i v͓ trí cho trưͣc
voiß ChnX (int a[], int &n, int X, int vitri)
{
? for (int i = n; i >vitri ; i--)
?
? a[i] = a[i-1] ;
? a[vitri] = X;
?
? n++;
}
?
Bài tұp
?
54. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào vӏ trí đҫu tiên cӫa mҧng.
?
55. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào phía sau phҫn tӱ có giá trӏ lӟn nhҩt
trong mҧng.
56. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào trưӟc phҫn tӱ có giá trӏ là sӕ
?
nguyên tӕ đҫu tiên trong mҧng.
?
57. ViӃt hàm chèn phҫn tӱ có giá trӏ X vào phía sau tҩt cҧ các phҫn tӱ có giá
trӏ chҹn trong mҧng.
?
h. Tách  ghép m̫ng
?
Kĩ thuұt tách cơ bҧn
?
Cho mҧng a kích thưӟc n n chҹn). Tách mҧng a thành 2 mҧng b và c sao
cho: b có ½ phҫn tӱ đҫu cӫa mҧng a, ½ phҫn tӱ còn lҥi đưa vào mҧng c.
voiß TachMang(int a[], int n, int ¦[], int &m, int c[], int &l)
{
int k=n2;
?
m=l=0;
for(int i=0; ik; i++)
{
¦[m++]=a[i];
c[l++]=a[k+i]
}
}

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 51


?
? Mҧng mӝt chiӅu
?

Kĩ thuұt ghép cơ bҧn


?
Cho 2 mҧng sӕ nguyên a và b kích thưӟc lҫn lưӧt là n và m. ViӃt chương
trình nӕi mҧng b vào cuӕi mҧng a.
voiß NoiMang(int a[], int &n, int ¦[], int m)
{
for(int i=0; im; i++)
a[n+i]=¦[i];
n=n+m;
}
Cho 2 mҧng sӕ nguyên a và b kích thưӟc lҫn lưӧt là n và m. ViӃt chương
trình nӕi xen kҿ (đan n) lҫn lưӧt các phҫn tӱ mҧng a và b vào mҧng c.
Cách th͹c hi͏n: aưa l̯n lưͫt tͳng ph̯n t͵ cͯa m̫ng a và m̫ng b vào
m̫ng c, tăng ch͑ s͙ tương ͱng. N͇u m͡t trong hai m̫ng h͇t trưͣc thì chép
ṱt c̫ các ph̯n t͵ còn l̩i cͯa m̫ng chưa h͇t vào m̫ng c.
a̿t i là ch͑ s͙ cͯa m̫ng a; j: ch͑ s͙ cͯa m̫ng b và k là ch͑ s͙ cͯa m̫ng c.
?
voiß NoiMang(int a[], int &n, int ¦[], int m, int c[], int &k)
{
int i=0, j=0; k=0;
whil(in&&jm)
{
c[k++]=a[i++];
c[k++]=¦[j++];
}
? whil(in)
?
? c[k++]=a[i++];
? whil(jm)
?
? c[k++]=¦[j++];
}
?
Bài tұp
?
58. ViӃt chương trình tách ˜ mҧng các sӕ nguyên thành 2 mҧng a và b, sao
cho mҧng a chӭa toàn sӕ lҿ và mҧng b chӭa toàn sӕ chҹn.
Ví dө: M̫ng ban đ̯u: 1 3 8 2 7 5 9 0 10
?
M̫ng a: 1 3 75 9
?
M̫ng b: 8 2 10
?
59. Cho 2 mҧng sӕ nguyên a và b kích thưӟc lҫn lưӧt là n và m. ViӃt chương
trình nӕi 2 mҧng trên thành mҧng c theo nguyên tҳc chҹn ӣ đҫu mҧng và lҿ
ӣ cuӕi mҧng.
Ví dө: M̫ng a: 3 2 7 5 9

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 52


?
? Mҧng mӝt chiӅu
?

M̫ng b: 1 8 10 4 12 6
?
M̫ng c: 6 12 4 10 2 8 3 1 7 5 9
?
?
II.3. Bài tұp luyӋn tұp và nâng cao
?
60. ViӃt chương trình nhұp vào mҧng A gӗm n phҫn tӱ, trong quá trình nhұp
kiӇm tra các phҫn tӱ nhұp vào không đưӧc trùng, nӃu trùng thông báo và
yêu cҫu nhұp lҥi.
6˜. ViӃt hàm tính tәng cӫa tӯng dãy con giҧm có trong mҧng.
62. (*) Cho mҧng các sӕ nguyên a gӗm n phҫn tӱ  n ã30000 ) và sӕ dương k
 k ãn ). Hãy chӍ ra sӕ hҥng lӟn thӭ k cӫa mҧng.
?

Ví dө: M̫ng a: 6 3 1 10 11 18
k=2
K͇t qu̫: 10
?
63. (*) Cho 2 dãy A, B các sӕ nguyên (k ch thưͣc dãy A nh͗ hơn dãy B). Hãy
kiӇm tra xem A có phҧi là con cӫa B hay không?
64. ViӃt hàm liӋt kê các bӝ 4 sӕ a, b, c, d trong mҧng các sӕ nguyên (có t nh̭t
?
4 ph̯n t͵ và đôi m͡t khác nhau) sao cho a + b = c + d.
?
65. (*) ViӃt chương trình tính trung bình cӝng cӫa các tәng các dãy tăng dҫn
có trong mҧng các sӕ nguyên.
Ví dө: 1 2 3 4 2 3 4 5 6 4 5 6 => RB = 15.
?
66. ViӃt chương trình tính tәng tҩt cҧ các phҫn tӱ xung quanh trên mҧng các
sӕ nguyên. Ohҫn tӱ xung quanh là hai phҫn tӱ bên cҥnh cӝng lai bҵng
chính nó Ví dө: ˜ 3 2 m ˜,2 là hai phҫn tӱ xung quanh cӫa 3).
è dͭ : 1 3 2 5 3 9 6 m t͝ng 17
?
67. (**) ViӃt chương trình nhұp vào hai sӕ lӟn a, b nguyên  a, b có tӯ 20 chӳ
?
sӕ trӣ lên). Tính tәng, hiӋu, tích, thương cӫa hai sӕ trên.
?
68. ViӃt hàm tính tәng các phҫn tӱ là sӕ Amstrong sӕ Amstrong là sӕ có đһc
điӇm như sau: sӕ có k ký sӕ, tәng cӫa các luӻ thӯa bұc k cӫa các ký sӕ
bҵng chính sӕ đó.
è dͭ: 153 là s͙ có các ký s͙ 13+53+33= 153 là m͡t s͙ Amstrong).
?
69. ViӃt hàm tìm và xóa tҩt cҧ các phҫn tӱ trùng vӟi x trong mҧng mӝt chiӅu
các sӕ nguyên, nӃu không tӗn tҥi phҫn tӱ x trong mҧng thì trҧ vӅ -˜.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 53


?
? Mҧng mӝt chiӅu
70. ViӃt hàm xoá tҩt cҧ nhӳng phҫn tӱ trùng nhau trong dãy chӍ giӳ lҥi mӝt
phҫn tӱ trong đó.
è dͭ: 1 6 2 3 2 4 2 6 5 m 162345
?
7˜. (**) ViӃt hàm xoá nhӳng phҫn tӱ sao cho mҧng kӃt quҧ có thӭ tӵ tăng dҫn
và sӕ lҫn xoá là ít nhҩt.
72. Cho dãy a gӗm n sӕ nguyên có thӭ tӵ tăng dҫn. Nhұp vào mӝt phҫn tӱ
nguyên X, viӃt hàm chèn X vào dãy sao cho dãy vүn có thӭ tӵ tăng dҫn
không s̷p x͇p).
73. ViӃt chương trình tìm sӕ lҿ nhӓ nhҩt lӟn hơn mӑi sӕ chҹn có trong mҧng.
?
74. ViӃt hàm tìm giá trӏ chҹn nhӓ nhҩt nhӓ hơn mӑi giá trӏ lҿ trong mҧng các
sӕ nguyên.
75. ViӃt hàm tìm phҫn tӱ xuҩt hiӋn nhiӅu nhҩt trong mҧng các sӕ nguyên.
?
76. ViӃt chương trình đӃm và liӋt kê các mҧng con tăng dҫn trong mҧng mӝt
chiӅu các sӕ nguyên.
è dͭ: 6 5 3 2 3 4 2 7 các dãy con tăng d̯n là 2 3 4 và 2 7
?
77. ViӃt chương trình tìm mҧng con tăng dҫn có tәng lӟn nhҩt trong mҧng mӝt
chiӅu.
78. (*) ViӃt chương trình nhұp vào mӝt dãy sӕ a gӗm n sӕ nguyên n <= ˜00).
?
Tìm và in ra dãy con tăng dài nhҩt
?
è dͭ : Nh̵p dãy a : 1 2 3 6 4 7 8 3 4 5 6 7 8 9 4 5
Dãy con tăng dài nh̭t : 3 4 5 6 7 8 9
79. (**) ViӃt chương trình tách ˜ mҧng các sӕ nguyên thành 2 mҧng a và b,
?
sao cho kӃt quҧ thu đưӧc là:
@ Mҧng a chӭa toàn sӕ lҿ tăng dҫn.
@ Mҧng b chӭa toàn sӕ chҹn giҧm dҫn.
(Không dùng s̷p x͇p)
Hưӟng dүn: Tìm vӏ trí chèn thích hӧp khi trích phҫn tӱ tӯ mҧng ban đҫu.
Ví dө: M̫ng ban đ̯u: 9 3 8 2 7 5 1 0 10
M̫ng a: 1 3 5 7 9
M̫ng b: 10 8 2
80. (**) èiӃt chương trình in ra tam giác Oascal dùng mҧng mӝt chiӅu).
?
8˜. ViӃt chương trình nhұp vào dãy sӕ a gӗm n sӕ thӵc  n <= ˜00 ), nhұp vào
dãy sӕ b gӗm m sӕ thӵc  m <= ˜00 ).
@ Hãy sҳp xӃp hai dãy theo thӭ tӵ tăng dҫn.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 54


?
? Mҧng mӝt chiӅu
@ (*) Trӝn 2 dãy trên thành dãy c sao cho dãy c vүn có thӭ tӵ tăng.
@ Xuҩt dãy a, b, c ra màn hình.
82. (*) Cho mҧng C có n phҫn tӱ  n < 200 ), các phҫn tӱ là các chӳ sӕ trong
hӋ đӃm cơ sӕ ˜6 Hexa) điӅu kiӋn mӛi phҫn tӱ <= n ). Hãy tách mҧng C
ra các mҧng con theo điӅu kiӋn sau: các mҧng con đưӧc giӟi hҥn bӣi hai
lҫn xuҩt hiӋn thӭ hai cӫa con sӕ trong dãy.
è dͭ: 123A4518B23 m có các dãy con là123A451, 23A4518B2,
?
23A4518B23
?
83. (**) Cho hai sӕ nguyên dương A, B. Hãy xác đӏnh hai sӕ C, D tҥo thành tӯ
hai sӕ A, B sao cho C là sӕ lӟn nhҩt, D là sӕ nhӓ nhҩt. Khi gҥch đi mӝt sӕ
chӳ sӕ trong C D), thì các sӕ còn lҥi giӳ nguyên tҥo thành A, các chӳ sӕ
bӓ đi giӳ nguyên tҥo thành B.
è dͭ: A = 52568, B = 462384 -> C = 54625682384, D = 45256236884.
?
84. ViӃt chương trình nhұp vào dãy sӕ a gӗm n sӕ nguyên  n <= ˜00 ).
@ Hãy đҧo ngưӧc dãy đó.
è dͭ: Nh̵p a: 3 4 5 2 0 4 1
Dãy sau khi đ̫o: 1 4 0 2 5 4 3
@ (*) Hãy kiӇm tra xem dãy đã cho có thӭ tӵ chưa dãy đưӧc gӑi là thӭ
tӵ khi là dãy tăng hoһc dãy giҧm ).
?
85. Cho mҧng A có n phҫn tӱ hãy cho biӃt mҧng này có đӕi xӭng hay không.
?
86. (**) Hãy viӃt chương trình phát sinh ngүu nhiên mҧng các sӕ nguyên gӗm
?
˜0.000 phҫn tӱ, mӛi phҫn tӱ có giá trӏ tӯ 0 đӃn 32.000 và xây dӵng hàm
thӕng kê sӕ lҫn xuҩt hiӋn các phҫn tӱ trong mҧng, sau đó cho biӃt phҫn tӱ
nào xuҩt hiӋn nhiӅu lҫn nhҩt.
è dͭ: M̫ng: 5 6 11 4 4 5 4
5 xuat hien 2 lan
6 xuat hien 1 lan
11 xuat hien 1 lan
4 xuat hien 3 lan
?
4 uat hin nhiu lan nhat
87. Cho mҧng A có n phҫn tӱ. Nhұp vào sӕ nguyên k  k 70 ), dӏch phҧi xoay
?

vòng mҧng A k lҫn.


?
Ví dө: M̫ng A: 572319
Nh̵p k = 2
D͓ch ph̫i xoay vòng m̫ng A: 195723

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 55


?
? Mҧng mӝt chiӅu
?

III. KӂT LUҰN


?

! Dӳ liӋu kiӇu mҧng dùng cho viӋc biӇu diӉn nhӳng thông tin có cùng kiӇu dӳ
?
liӋu liên tiӃp nhau.
! Khi cài đһt bài tұp mҧng mӝt chiӅu nên Èây dӵng thành nhӳng hàm chuҭn
?
đӇ dùng lҥi cho các bài tұp khác.
! Các thao tác trên mҧng đӅu theo quy tҳc nhҩt đӏnh, chúng ta có thӇ ӭng dөng

mҧng trong viӋc biӇu diӉn sӕ lӟn, dùng bҧng tra, khӱ đӋ qui, «

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 56


?
? Chuӛi ký tӵ
?
?
CHƯƠN÷ 5 CHUӚI KÝ TӴ
?
?
?
Chu͟i ký t͹ là trưͥng hͫp đ̿c bi͏t cͯa m̫ng m͡t chi͉u. Chương này mô t̫ m͡t s͙ hàm
thư vi͏n thao tác trên chu͟i và các kͿ thu̵t cài đ̿t x͵ lý trên chu͟i.
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Chuӛi ký tӵ là mӝt dãy các phҫn tӱ, mӛi phҫn tӱ có kiӇu ký tӵ.
?
|ưu ý: Chu͟i ký t͹ đưͫc k͇t thúc b̹ng ký t͹ µ\0¶. Do đó khi khai báo đ͡ dài cͯa
chu͟i luôn luôn khai ¦áo ßư 1 ph̯n t͵ đ͋ chͱa ký t͹ µ\0¶.
è dө: char S[5]=´CNTT´ khai ¦áo chu͟i có 5 ph̯n t͵ ki͋u char và gán ß 
ký t͹ CNTT và chu͟i.
C N T T \0
?
Ohҫn tӱ S[0] Ohҫn tӱ S[˜] Ohҫn tӱ S[2] Ohҫn tӱ S[3] Ohҫn tӱ S[4]
?
Chu͟i r͟ng là chu͟i chưa có ký t͹ nào trong m̫ng ký hi͏u ³´
?
?
I.2. Khai báo chuӛi
?
ĐӇ khai báo mӝt chuӛi, ta có 2 cách khai báo sau :
! Cách 1: Con trӓ hҵng
?
char Ä Tên chuӛi > [ Ä Ñӕ ký tӵ tӕi đa cӫa chuӛi > ] y
è dө: char chuoi[25];
Ý nghĩa khai báo 1 mҧng kiӇu ký tӵ tên là chuoi có 25 phҫn tӱ như vұy tӕi đa
?
ta có thӇ nhұp 24 ký tӵ vì phҫn tӱ thӭ 25 đã chӭa ký tӵ kӃt thúc chuӛi µ\0¶ )
! Cách 2: Con trӓ
?
?
? char *Ä Tên chuӛi >y
?
è dө : char *chuoi;
?
?
I.3. Các thao tác trên chuӛi
?
?
a. Nh̵p chu͟i
?
Cú pháp : char *getschar *s);
?
Nhұn các ký tӵ nhұp tӯ phím cho đӃn khi nhҩn phím Enter và đưa vào s.
?
è dө:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 57


?
? Chuӛi ký tӵ
?

voiß main()
{
char chuoi[80];
printf("Nhap vao chuoi:");
gts(chuoi);
printf("Chuoi vua nhap la: %s\n", chuoi);
}
?
?
¦. Xṷt chu͟i ?
Cú pháp : int putsconst char *s);
?
Xuҩt chuӛi s ra màn hình.
?
è dө:
?
voiß main()
{
char chuoi[] = "Vi ßu uat chuoi\n";
puts(string);
}
?
?
c. Các hàm thư vi͏n (string.h)
? ? ? ?
ÑTT TÊN HÀM CHӬC NĂN÷ è DӨ
? ? ?
? ? ? char fs = "Borland
? ? ? International";
˜ int strlenchar s[]); Trҧ vӅ đӝ dài cӫa chuӛi s. printf("Do dai s: %d\n",
strlen(s));
KӃt quҧ: Do ßai s: 21
? ? ? char dest[10];
? ? ?
? char fsrc = "abcdefghi";
strcpychar dest[], Sao chép nӝi dung chuӛi src
2 strcpy(dest, src);
char src[]); vào chuӛi dest.
printf("%s\n", dest);
KӃt quҧ: a¦cßfghi
? ? ?
char dest[4];
? ? Chép n ký tӵ tӯ chuӛi src sang
? char fsrc = "abcdefghi";
strncpychar dest[], chuӛi dest. NӃu chiӅu dài src <
3 strncpy(dest, src, 3);
char src[], int n); n thì hàm sӁ điӅn khoҧng trҳng
printf("%s\n", dest);
cho đӫ n ký tӵ vào dest.
KӃt quҧ: a¦c
? ? ?
char fs1 = ³Khoa ´;
? ? ?
? ? char fs2 = "CNRR";
strcatchar
4 Nӕi chuӛi s2 vài chuӛi s˜. strcat(s1, s2);
s˜[],char s2[]);
printf("%s\n", s1);
KӃt quҧ: hoa CNTT
? ? ? char fs1 = ³Khoa ´;
? ? ?
? char fs2 = "CNRR";
strncatchar Nӕi n ký tӵ đҫu tiên cӫa chuӛi
5 strncat(s1, s2, 2);
s˜[],char s2[],int n) s2 vào chuӛi s˜.
printf("%s\n", s1);
KӃt quҧ: hoa CN
? ?
So sánh 2 chuӛi s˜ và s2 theo char fs1 = ³abcd´;
Int strcmpchar
6 nguyên tҳc thӭ tӵ tӯ điӇn. char fs2 = "abCD";
s˜[],char s2[])
Ohân biӋt chӳ hoa và thưӡng. if(strcmp(s1, s2)==0)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 58


?
? Chuӛi ký tӵ
?

? ? Trҧ vӅ: printf("÷iong nhau");


@ 0 : nӃu s˜ bҵng s2. else
@ >0: nӃu s˜ lӟn hơn s2. printf(³Khac nhau´);
@ <0: nӃu s˜ nhӓ hơn s2. KӃt quҧ: hac nhau
? ? ?
char fs1 = ³abcd´; char
? ? ?
? ? ? fs2 = "abef";
? int strncmpchar Tương tӵ như strcmp), nhưng if(strncmp(s1, s2, 2)==0)
7 s˜[],char s2[], int chӍ so sánh n ký tӵ đҫu tiên printf("÷iong nhau");
n) cӫa hai chuӛi. else
printf(³Khac nhau´);
KӃt quҧ: Giong nhau
? ? ? char fs1 = ³abcd´;
? ? ?
char fs2 = "abCD";
? ? ? if(stricmp(s1, s2)==0)
?
int stricmpchar Tương tӵ như strcmp), nhưng
6 printf("÷iong nhau");
s˜[],char s2[]) không phân biӋt hoa thưӡng.
else
printf(³Khac nhau´);
KӃt quҧ: Giong nhau
? ? ?
char fs1 = ³aBcd´; char
? ? ?
? ? ? fs2 = "Abef";
? int strnicmpchar Tương tӵ như stricmp), if(strnicmp(s1, s2, 2)==0)
7 s˜[],char s2[], int nhưng chӍ so sánh n ký tӵ đҫu printf("÷iong nhau");
n); tiên cӫa hai chuӛi. else
printf(³Khac nhau´);
KӃt quҧ: Giong nhau
? ? ? char s[15];
? ? ?
? ? ? char fptr, c = 'm';
? ? ? strcpy(s, "èi du tim ky tu");
? ? Tìm lҫn xuҩt hiӋn đҫu tiên cӫa ptr = strchr(s, c);
?
char *strchrchar ký tư c trong chuӛi s. Trҧ vӅ: if (ptr)
8
s[], char c); @ NULL: nӃu không có. printf("Ky tu %c tai: %d", c,
@ Đӏa chӍ c: nӃu tìm thҩy. ptr-s);
else
printf("Khong tim thay");
t quҧ:  tu m tai: 8
?
?
? ?
Tìm sӵ xuҩt hiӋn đҫu tiên cӫa char fs1 = "Borland
? ? chuӛi s2 trong chuӛi s˜. Trҧ International"; char fs2 =
?
char *strstrchar vӅ: "nation", fptr;
9
s˜[], char s2[]); @ NULL: nӃu không có. ptr = strstr(s1, s2);
@ Ngưӧc lҥi: Đӏa chӍ bҳt đҫu printf("Chuoi con: %s\n", ptr);
chuӛi s2 trong s˜. KӃt quҧ: Chuoi con: national
? ? char input[16] = "abc,d";
? ?
@ NӃu s2 có xuҩt hiӋn trong
? ? s˜: Tách chuӛi s˜ thành hai char fp;
? ?
? chuӛi: Chuӛi đҫu là nhӳng // |ay chuoi dau
?
? ? ký tӵ cho đӃn khi gһp chuӛi p = strtok(input, ",");
? ? s2 đҫu tiên, chuӛi sau là if (p) printf("Ñ11: %s\n", p);
?
˜0
char *strtokchar nhӳng ký tӵ còn lҥi cӫa s˜ /f|ay chuoi con lai, tham so dau
s˜[], char s2[]); sau khi đã bӓ đi chuӛi s2 la NU||f/
xuҩt hiӋn trong s˜. p = strtok(NU||, ",");
if (p) printf("Ñ12: %s\n", p);
KӃt quҧ:
S11: a¦c
S12: ß

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 59


?
? Chuӛi ký tӵ
?

? ? @ NӃu s2 không xuҩt hiӋn ? ?


trong s˜ thì kӃt quҧ chuӛi
tách vүn là s˜.
?  Lưu ý: Cách truy xuҩt các ký tӵ tương tӵ như mҧng mӝt chiӅu.
?
ß. Ví ß
?
Nhұp vào mӝt chuӛi ký tӵ, Èuҩt ra màn hình chuӛi bӏ đҧo ngưӧc thӭ tӵ
?
các ký tӵ.
?
è dͭ: Nh̵p vào: Tran minh thai. œṷt ra màn hình: iaht hnim narT
?
#inclußstßio.h>
#inclußstring.h>
#inclußconio.h>
?
voiß DaoChuoi(char *s1, char *s2)
{
int l=strln(s1);
for(int i=0; il; i++)
s2[i]=s1[l-i-1];
?
s2[i]='\0';
}
?
voiß main()
{
char *s1, *s2;
clrscr();
printf("\nNhap vao chuoi k tu: ");
gts(s1);
DaoChuoi(s1, s2);
printf("\nt qua sau khi ßao nguoc chuoi: %s", s2);
}
?
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
˜. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
char input[20]=´Truong cao ßang CNTT´, *p, *tmp;
?
strcp(tmp, input);
?
ßo
?
{
?
p = strtok(tmp, " ");
?
printf("%s\n",p);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 60


?
? Chuӛi ký tӵ
?

p = strtok(N
LL, "");
?
strcp(tmp, p);
?
}whil(p!=N
LL);
?
printf(³Chuoi tmp: %s \n Chuoi input: %s´, tmp, input);
?
2. Cho biӃt kӃt quҧ cӫa đӑan chương trình sau:
?
char s1[20]=´Truong cao ßang CNTT´, s1[10]=´Tp. CM´, *input, * s3;
?
strcp(input, s1); strcp(s3,´aiou´); strcat(input, s2);
?
int n=strln(input), k=0;
printf(³Chuoi: %s´,input);
for(int i=0; in; i++)
{
?
if(strchr(s3, input[i]))
?
k++;
?
}
?
printf(³\nt qua: %ß´, k);
?
3. ViӃt chương trình nhұp vào mӝt chuӛi ký tӵ, đӃm sӕ ký tӵ có trong chuӛi.
?
4. ViӃt chương trình đӃm có bao nhiêu khoҧng trҳng trong chuӛi.
?
5. ViӃt chương trình nhұp vào mӝt chuӛi, hãy loҥi bӓ nhӳng khoҧng trҳng thӯa
trong chuӛi.
6. ViӃt chương trình nhұp vào hai chuӛi s˜ và s2, nӕi chuӛi s2 vào s˜. Xuҩt
chuӛi s˜ ra màn hình.
7. Đәi tҩt cҧ các ký tӵ có trong chuӛi thành chӳ thưӡng không dùng hàm
strlwr).
8. Đәi tҩt cҧ các ký tӵ trong chuӛi sang chӳ in hoa không dùng hàm struppr).
?
9. ViӃt chương trình đәi nhӳng ký tӵ đҫu tiên cӫa mӛi tӯ thành chӳ in hoa.
?
˜0. ViӃt chương trình đәi chӳ xen kҿ ˜ chӳ hoa và ˜ chӳ thưӡng.
?
è dͭ: nh̵p ABCDEfgh đ͝i thành AbCdEf÷h
?
˜˜. ViӃt chương trình đҧo ngưӧc các ký tӵ trong chuӛi .
?
è dͭ: nh̵p ABCDE, xṷt ra màn hình là:EDCBA
?
˜2. ViӃt chương trình tìm kiӃm ˜ ký tӵ xem có trong chuӛi hay không, nӃu có
xuҩt ra vӏ trí cӫa tӯ đó.
˜3. ViӃt ˜ chương trình đӃm mӝt ký tӵ xuҩt hiӋn bao nhiêu lҫn trong chuӛi.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 61


?
? Chuӛi ký tӵ
˜4. ViӃt chương trình tìm kiӃm tên trong chuӛi hӑ tên. NӃu có thì xuҩt ra là tên
này đã nhұp đúng, ngưӧc lҥi thông báo là đã nhұp sai.
˜5. ViӃt chương đҧo vӏ trí cӫa tӯ đҫu và tӯ cuӕi.
?
è dͭ: nh̵p ³bo an co´ xuat ra ³co an bo´
?
˜6. ViӃt hàm cҳt chuӛi hӑ tên thành chuӛi hӑ lót và chuӛi tên.
?
è dͭ: chu͟i h͕ tên là:´Nguy͍n èăn A´ c̷t ra 2 chu͟i là chu͟i h͕
?
lót:´Nguy͍n èăn´,chu͟i tên là:´A´
?
˜7. Nhұp mӝt chuӛi bҩt kǤ, sau đó hӓi ngưӡi dùng cҫn tách bҳt đҫu tӯ đâu trong
chuӛi trӣ vӅ sau.
è dͭ: Nh̵p chu͟i Ñ1:´trưͥng Cao a̻ng Công Ngh͏ Rhông tin´. Ngưͥi
nh̵p mu͙n tách b̷t đ̯u tͳ chͷ ³Công´ thì sͅ xṷt ra chu͟i ³Công Ngh͏
Rhông Rin´ ra màn hình.
˜8. ViӃt hàm kiӇm tra xem chuӛi có đӕi xӭng hay không?.
?
˜9. ViӃt hàm tra xem trong chuӛi có ký tӵ sӕ hay không nӃu có tách ra thành
mӝt mҧng sӕ riêng.
20. Nhұp mӝt chuӛi bҩt kì, yêu cҫu nhұp ˜ ký tӵ muӕn xóa. Thӵc hiӋn xóa tҩt cҧ
?
nhӳng ký tӵ đó trong chuӛi.
?
2˜. ViӃt chương trình tìm kiӃm xem ký tӵ nào xuҩt nhiӋn nhiӅu nhҩt trong
chuӛi.
22. ViӃt ˜ chương trình xoá mӝt tӯ nào đó trong chuӛi.
?
è dͭ: Chu͟i ban đ̯u: ³CAO DAN÷ CNRR´
?
Nh̵p: ³CNRR´, và k͇t qu̫ xṷt ra:´CAO DAN÷´
?
?
II.2. Bài tұp luyӋn tұp và nâng cao
?
23. Đәi các tӯ ӣ đҫu câu sang chӳ hoa và nhӳng tӯ không phҧi đҫu câu sang
chӳ thưӡng.
è dͭ: n÷uYen vAN a đ͝i thành: Nguy͍n èăn A
?
24. (*) ViӃt chương trình đҧo ngưӧc thӭ tӵ các tӯ có trong chuӛi
?
è dͭ: Nh̵p Rruong CD CNRR RpHCM
?
œṷt ra màn hình là: RpHCM CNRR CD Rruong
?
25. Nhұp ˜ chuӛi bҩt kì, liӋt kê xem mӛi ký tӵ xuҩt hiӋn mҩy lҫn.
?
26. ViӃt hàm kiӇm tra xem trong 2 chuӛi có bao nhiêu ký tӵ giӕng nhau.
?
27. ViӃt chương trìn mình chҥy tӯ trái qua phҧi màn hình.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 62


?
? Chuӛi ký tӵ
28. ViӃt ˜ chương trình chèn ˜ tӯ ӣ bҩt cӭ vӏ trí nào mà ngưӡi dùng yêu cҫu.
?
29. (*) ViӃt chương trình nhұp vào mӝt chuӛi đӃm xem chuӛi có bao nhiêu tӯ.
?
Các tӯ cách nhau bҵng khoҧng trҳng, dҩu chҩm câu: dҩu chҩm .), dҩu phҭy
?
,), dҩu chҩm phҭy ;), dҩu hӓi ?) và dҩu chҩm than !).
?
30. (**) ViӃt chương trình hiӇn thӏ mӝt chuӛi ký tӵ. Chương trình cho phép di
chuyӇn dҩu nháy sang trái, sang phҧi, lên dòng hay xuӕng dòng bҵng phím
mũi tên, chèn hay xoá ký tӵ tҥi vӏ trí dҩu nháy.
?
III. KӂT LUҰN
?

! Cũng giӕng như kiӇu mҧng mӝt chiӅu, thao tác truy xuҩt các phҫn tӱ trên

chuӛi hoàn toàn tương tӵ. Bên cҥnh đó, kiӇu dӳ liӋu này còn đưӧc cài đһt sҹn
mӝt sӕ hàm thư viӋn rҩt hӳu ích nên trong quá trình thao tác trên chuӛi nên
khi cài đһt ta cӕ gҳng tұn dөng tӕi đa nhӳng hàm liên quan.
! Không nên sӱ dөng hàm scanf() đӇ nhұp chuӛi trong trưӡng hӧp chuӛi dӳ
?
liӋu nhұp vào có chӭa khoҧng trҳng.
! NӃu nhұp chuӛi pha sau hàm scanf() nên chèn hàm fflush(stdin) hoһc hàm

flushall() giӳa scanf và gets() đӇ xóa vùng đӋm, tránh trưӡng hӧp chương
trình bӓ qua hàm gets() do trong vùng đӋm còn lưu ký tӵ xuӕng dòng cӫa
phím ENTER.
! Khi thao tác trên chuӛi lưu ý phҧi đҧm bҧo chuӛi đưӧc kӃt thúc bҵng ký tӵ
?
kӃt thúc µ\0¶.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 63


?
? Mҧng hai chiӅu
?
?
CHƯƠN÷ 6 MҦN÷ HAI CHIӄU
?
?
?
aây là ki͋u dͷ li͏u dùng đ͋ bi͋u di͍n dͷ li͏u ki͋u b̫ng, ki͋u dͷ li͏u này r̭t th ch hͫp
cho các bài toán liên quan đ͇n đ͛ th͓, bi͋u di͍n ̫nh, «
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Mҧng hai chiӅu thӵc chҩt là mҧng mӝt chiӅu trong đó mӛi phҫn tӱ cӫa mҧng là
mӝt mҧng mӝt chiӅu, và đưӧc truy xuҩt bӣi hai chӍ sӕ dòng và cӝt.
Tӯ khái niӋm trên ta có thӇ đưa ra mӝt khái niӋm vӅ mҧng nhiӅu chiӅu như sau:
?
m̫ng có tͳ hai chi͉u trͧ ln g͕i là m̫ng nhi͉u chi͉u.
?
?
I.2. Khai báo mҧng
?
Tӯ khái niӋm trên ta có cú pháp khai báo mҧng hai chiӅu như sau:
@ Cách ˜: Con trӓ hҵng
?

Ä KiӇu dӳ liӋu > Ä Tên mҧng > [ Ä Ñӕ dòng tӕi đa > ][ Ä Ñӕ cӝt tӕi đa> ]y
?
Ví dө:
?
int A[10][10];  hai ¦áo m̫ng 2 chi͉u ki͋u int g͛m 10 ß ng, 10 c͡t
float ¦[10][10];  hai ¦áo m̫ng 2 chi͉u ki͋u float g͛m 10 ß ng, 10 c͡t
@ Cách 2 : Con trӓ
?
?
? Ä KiӇu dӳ liӋu > **ÄTên mҧng>y
?
Ví dө :
?
int **A ;  hai ¦áo m̫ng đ͡ng 2 chi͉u ki͋u int
float **B ;  hai ¦áo m̫ng đ͡ng 2 chi͉u ki͋u float
Tương tӵ như mҧng mӝt chiӅu, đӇ sӱ dөng ta phҧi cҩp phát vùng nhӟ cho nó
bҵng malloc hoһc calloc và huӹ sau khi dùng bҵng free
Ví dө : Khai báo mҧng các sӕ nguyên A có kích thưӟc 5x6
?
int **A;
A = ( int **) malloc (5) ;
for ( int i = 0 ; i  5 ; i ++ )
A[i]=(int *) malloc (6) ;
?
I.3. Truy Èuҩt phҫn tӱ cӫa mҧng
?
ĐӇ truy xuҩt các thành phҫn cӫa mҧng hai chiӅu ta phҧi dӵa vào chӍ sӕ dòng và
chӍ sӕ cӝt.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 64


?
? Mҧng hai chiӅu
?
Ví dө: ?
?
int A[3][4] = { {2,3,9,4} , {5,6,7,6} , {2,9,4,7} };
?
Vӟi các khai báo như trên ta có :
A[0][0] = 2; A[0][1] = 3;
A[1][1] = 6; A[1][3] = 6;
?
Vӟi ví dө trên ta có hình dҥng cӫa mӝt ma trұn như sau
?
0 1 2 3
?
0 2 3 9 4
?
1 5 6 7 6
?
2 2 9 4 7
?
? ?
?
 |ưu ý: Khi nh̵p li͏u cho m̫ng hai chi͉u, n͇u là m̫ng các s͙ nguyên thì ta
?
nh̵p li͏u theo cách thông thưͥng. Nhưng n͇u là m̫ng các s͙ th͹c thì ta ph̫i
thông qua bi͇n trung gian.
Ví dө :
?
float a[10][10];  Mang so thuc a
float tmp;  Bin trung gian tmp
scanf (³%f´, &tmp);  Nhap liu cho ¦in trung gian
a[2][2] = tmp;  Gan ßu liu vao phan tu a[2][2]
?
I.4. Ma trұn vuông và các khái niӋm liên quan
?
?
a. hái ni͏m
?
Là ma trұn có sӕ dòng và sӕ cӝt bҵng nhau.
?
¦. Tính ch̭t cͯa ma tr̵n vuông

@ Đưӡng chéo loҥi 1


?
?
?
?
?
?
?
?
?
 Đưӡng chéo loҥi ˜ bao gӗm đưӡng chéo chính và nhӳng đưӡng
chéo song song vӟi đưӡng chéo chính. Trong đó đưӡng chéo chính
là đưӡng chéo có :
?
ch͑ s͙ ß ng = ch͑ s͙ c͡t

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 65


?
? Mҧng hai chiӅu
?

 Truy xuҩt các phҫn tӱ trên đưӡng chéo loҥi ˜ : đӇ truy xuҩt các
phҫn tӱ trên các đưӡng chéo loҥi ˜ ta có thӇ dӵa vào chӍ sӕ dòng và
chӍ sӕ cӝt như sau :
?
c͡t ± ß ng = h̹ng s͙
?
?
?
è dͭ : Cho ma tr̵n vuông A(n x n). ÷͕i (io, jo) là to̩ đ͡ đi͋m xṷt
phát, ta có th͋ duy͏t đͳơng chéo xṷt ph̭t tͳ (io, jo) như sau :
for ( i = io, j = jo ; i  n ; i ++, j ++ )
printf (³%4ß´,A[i][j]);
?
?
@ Đưӡng chéo loҥi 2:
?
?
?
?
?
?
?
?
?
 Đưӡng chéo loҥi 2 bao gӗm đưӡng chéo phө và nhӳng đưӡng song
song vӟi nó. Trong đó đưӡng chéo phө là đưӡng chéo có:
ch͑ s͙ c͡t + ch͑ s͙ ß ng = s͙ ß ng ( ho̿c s͙ c͡t )
 Truy xuҩt các phҫn tӱ trên đưӡng chéo loҥi 2 : đӇ truy xuҩt các
phҫn tӱ trên các đưӡng chéo loҥi ˜ ta có thӇ dӵa vào chӍ sӕ dòng và
chӍ sӕ cӝt như sau :
?
c͡t + ß ng = h̹ng s͙
?
?
?
è dͭ: Cho ma tr̵n vuông A(n x n). ÷͕i (io, jo) là to̩ đ͡ đi͋m xṷt
phát, ta có th͋ duy͏t đưͥng chéo xṷt ph̭t tͳ (io, jo) như sau :
for ( i = io , j = jo ; i  n && j > = 0 ; i ++ , j --)
printf (³%4ß´,A[i]][j]);
?
?
II. BÀI TҰO
?
ĐӇ đơn giҧn trong viӋc khai báo ma trұn, ta đӏnh nghĩa kiӇu ma trұn các phҫn tӱ
?
vӟi kiӇu dӳ liӋu bҩt kǤ như sau:
?
#define MAœ 100
?
typedef ÄkiӇu dӳ liӋu> MATRAN[MAœ][MAœ]y
è dө: Khai báo ma trұn các sӕ nguyên a.
#ßfin MAX 100

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 66


?
? Mҧng hai chiӅu
?

tpßf int MATRAN[MAX][MAX];


MATRAN a;

II.1. Mӝt sӕ kĩ thuұt cơ bҧn


@ Phương pháp nh̵p ṷt ma tr̵n
?

voiß Nhap (MATRAN a, int &ß, int &c )


{
printf (³\nNhap so ßong: ´);
scanf (³ %ß´, &ß );
printf (³\nNhap so cot: ´);
scanf (³%ß´, &c );
for ( int i = 0; i  ß; i ++ )
for (int j = 0; j  c; j ++)
{
printf (³ a[%ß][%ß] = ´, i, j );
scanf (³%ß´, &a[i][j]);
}
}
?
voiß Xuat (MATRAN a, int ß, int c)
{
printf (³\nNoi ßung ma tran:\n´);
for (int i = 0; i  ß; i++)
{
for (int j = 0; j  c; j++)
printf (³ \t %ß ´, a[i][j] );
printf (³\n´);
}
}
@  thu̵t đ̿t cͥ hi͏u
Vi͇t hàm ki͋m tra m trong ma tr̵n các s͙ ngun có t͛n t̩i các s͙
?
ngun l̓ lͣn hơn 100 không?
?
int imTraL (MATRAN a, int ß, int c)
{
int flag = 0; tra v 1 nu co nguoc lai tra v 0
?
for (int i = 0; i  ß; i ++ )
for (int j = 0; j  c; j++)
if ( a[i][j] % 2 != 0 && a[i][j] > 100 )
{
? flag = 1;
?
? ¦rak;
}
rturn flag;
}

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 67


?
? Mҧng hai chiӅu
@  thu̵t đ̿t lính canh
Vi͇t hàm tìm ph̯n t͵ nh͗ nh̭t trong ma tr̵n.
?
int Min (MATRAN a, int ß, int c )
{
int min = a[0][0];
for ( int i = 0 ; i  ß ; i ++ )
for (int j = 0 ; j  c ; j ++)
if ( a[i][j]  min )
min = a[i][j];
rturn min;
}
?
@ Phương pháp tính t͝ng
Vi͇t hàm tính t͝ng các ph̯n t͵ trong ma tr̵n.
?
long Tong (MATRAN a, int ß, int c)
{
long tong = 0;
?
for ( int i = 0; i  ß; i ++ )
for ( int j = 0; j  c; j ++)
tong + = a[i][j];
rturn tong;
}
?
@ Phương pháp s̷p ͇p
Vi͇t hàm s̷p ͇p ma tr̵n tăng ß̯n tͳ trn u͙ng ßưͣi và tͳ trái sang ph̫i
không ßùng m̫ng ph .
voiß SapTang(MATRAN a, int ß, int c)
{
for (int i = 0; i = ß*c-2; i ++)
for (int j = 0; j = ß*c-1; j ++)
if (a[ic][i%c]  a[jc][j%c])
{
int tmp = a[ic][i%c] ;
a[ic][i%c] = a[jc][j%c] ;
a[jc][j%c] = tmp ;
}
}
?
@ Phương pháp đ͇m
Vi͇t hàm đ͇m các ph̯n t͵ ch̽n trong ma tr̵n.
?
int DmChan (MATRAN a, int ß, int c)
{
int ßm = 0;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 68


?
? Mҧng hai chiӅu
?
for ( int i = 0 ; i  ß ; i ++)
for ( int j = 0 ; j  c ; j ++)
if ( a[i][j] % 2 = = 0 )
ßm ++;
rturn ßm;
}
?
?
II.2. Bài tұp cơ bҧn
?
?
a. Bài t̵p nh̵p ṷt
?
˜. ViӃt hàm nhұp ma trұn các sӕ nguyên dương (nh̵p sai báo l͟i và không cho
nh̵p).
2. ViӃt hàm nhұp/ xuҩt ma trұn các sӕ thӵc.
?
3. ViӃt hàm in ra nhӳng phҫn tӱ có ký sӕ tұn cùng là 5.
?
4. ViӃt chương trình in ra các phҫn tӱ nҵm trên 2 đưӡng chéo.
?
5. ViӃt hàm in ra các phҫn tӱ nҵm phía trên đưӡng chéo phө cӫa ma trұn
vuông các sӕ nguyên.
6. ViӃt hàm in ra các phҫn tӱ nҵm phía dưӟi đưӡng chéo phө cӫa ma trұn
vuông các sӕ nguyên.
7. ViӃt hàm in ra các phҫn tӱ nҵm phía trên đưӡng chéo chính cӫa ma trұn
vuông các sӕ nguyên.
8. ViӃt hàm in ra các phҫn tӱ nҵm phía dưӟi đưӡng chéo chính cӫa ma trұn
vuông các sӕ nguyên.
9. ViӃt chương trình khӣi tҥo giá trӏ các phҫn tӱ là ngүu nhiên cho ma trұn các
sӕ nguyên kích thưӟc m n .
?
˜0. ViӃt hàm tҥo ma trұn a các sӕ nguyên gӗm 9 dòng ˜4 cӝt. Trong đó phҫn tӱ
?
a[i][j] = i * j
?
˜˜. ViӃt hàm in tam giác Oascal vӟi chiӅu cao h.
?
Ví dө : h = 5
?
˜
˜ ˜ ? ?
˜ 2 ˜
˜ 3 3 ˜ ?
˜ 4 6 4 ˜
?

¦. Bài t̵p tính t͝ng


?
˜2. ViӃt hàm tính tәng các phҫn tӱ trên cùng mӝt dòng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 69


?
? Mҧng hai chiӅu
?

˜3. ViӃt hàm tính tәng các phҫn tӱ trên cùng mӝt cӝt.
?
˜4. ViӃt hàm tính tәng các phҫn tӱ chҹn có trong ma trұn.
?
˜5. ViӃt hàm tính tәng các phҫn tӱ nҵm trên đưӡng chéo chính cӫa ma trұn
vuông.
˜6. ViӃt hàm tính tәng các phҫn tӱ là sӕ nguyên tӕ có trong ma trұn.
?
˜7. ViӃt hàm tính tәng các sӕ hoàn thiӋn trong ma trұn các sӕ nguyên.
?
˜8. ViӃt hàm tính tәng các giá trӏ lӟn nhҩt trên mӛi dòng.
?
˜9. ViӃt hàm tính giá trӏ trung bình cӫa các phҫn tӱ nhӓ nhҩt trên mӛi cӝt.
?
20. ViӃt hàm tính tәng các giá trӏ nhӓ nhҩt nҵm trên tӯng đưӡng chéo loҥi 2.
?
2˜. ViӃt hàm tìm đưӡng chéo có tәng lӟn nhҩt trong các đưӡng chéo loҥi ˜.
?
?
c. Bài t̵p tìm ki͇m
?
22. ViӃt hàm tìm vӏ trí phҫn tӱ lӟn nhҩt trong ma trұn các sӕ nguyên.
?
23. ViӃt hàm tìm vӏ trí phҫn tӱ nhӓ nhҩt trong ma trұn các sӕ nguyên.
?
24. ViӃt hàm tìm vӏ trí phҫn tӱ chҹn cuӕi cùng trong ma trұn các sӕ nguyên.
?
25. ViӃt hàm tìm phҫn tӱ âm lҿ lӟn nhҩt trong ma trұn.
?
26. ViӃt hàm tìm phҫn tӱ chҹn dương và nhӓ nhҩt trong ma trұn.
?
27. ViӃt hàm tìm sӕ hoàn thiӋn đҫu tiên trong ma trұn các sӕ nguyên.
?
28. ViӃt hàm tìm sӕ hoàn thiӋn lӟn nhҩt trong ma trұn các sӕ nguyên.
?
29. ViӃt hàm tìm vӏ trí phҫn tӱ nguyên tӕ cuӕi cùng trong ma trұn các sӕ
?
nguyên.
?
30. ViӃt hàm tìm phҫn tӱ lӟn nhҩt nҵm trên đưӡng chéo chính cӫa ma trұn
vuông.
3˜. ViӃt hàm in các sӕ nguyên tӕ nҵm trên đưӡng chéo phө cӫa ma trұn vuông.
?
32. ViӃt hàm tìm trong 2 ma trұn các sӕ nguyên, nhӳng phҫn tӱ giӕng nhau.
?
33. ViӃt hàm tìm phҫn tӱ nhӓ nhҩt trên mӛi đưӡng chéo loҥi 2 cӫa ma trұn.
?
34. ViӃt hàm tìm và liӋt kê nhӳng phҫn tӱ cӵc đҥi trong ma trұn mӝt phҫn tӱ
đưӧc coi là cӵc đҥi khi nó lӟn hơn các phҫn tӱ xung quanh nó).
35. ViӃt hàm tìm dòng có tәng lӟn nhҩt trong ma trұn các sӕ thӵc.
?
36. ViӃt hàm tìm cӝt có tәng nhӓ nhҩt trong ma trұn các sӕ nguyên.
?
?
ß. Bài t̵p đ͇m
?
37. ViӃt hàm đӃm các giá trӏ âm, dương trong ma trұn các sӕ thӵc.
?
38. ViӃt hàm đӃm các giá trӏ chҹn, lҿ trong ma trұn các sӕ nguyên.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 70
?
? Mҧng hai chiӅu
?

39. ViӃt hàm đӃm sӕ lҫn xuҩt hiӋn cӫa phҫn tӱ x trong ma trұn các sӕ thӵc.
?
40. ViӃt hàm đӃm các giá trӏ nhӓ hơn x trong ma trұn các sӕ thӵc.
?
4˜. ViӃt hàm đӃm các phҫn tӱ nguyên tӕ trong ma trұn các sӕ nguyên.
?
42. ViӃt hàm đӃn các phҫn tӱ nguyên tӕ trên đưӡng chéo chính cӫa ma trұn
vuông các sӕ nguyên.
43. ViӃt hàm đӃm các giá trӏ chҹn trên đưӡng chéo chính cӫa ma trұn vuông các
sӕ nguyên.
44. ViӃt hàm đӃm các giá trӏ là bӝi cӫa 3 và 5 trên đưӡng chéo chính cӫa ma
trұn các sӕ nguyên.
45. ViӃt hàm đӃm các giá trӏ nguyên tӕ trên 2 đưӡng chéo chính, phө) cӫa ma
trұn vuông các sӕ nguyên.
46. ViӃt hàm đӃm các giá trӏ cӵc đҥi trong ma trұn các sӕ nguyên.
?
47. ViӃt hàm đӃm các giá trӏ cӵc tiӇu trong ma trұn các sӕ nguyên.
?
48. ViӃt hàm đӃm các cӵc trӏ trong ma trұn các sӕ nguyên mӝt phҫn tӱ đưӧc
coi là cӵc trӏ khi nó là giá trӏ cӵc đҥi hay cӵc tiӇu).
49. ViӃt hàm đӃm các giá trӏ là sӕ hoàn thiӋn trong ma trұn các sӕ nguyên.
?
?
. Bài t̵p s̷p ͇p
?
50. ViӃt hàm sҳp xӃp ma trұn theo thӭ tӵ tăng dҫn tӯ trên xuӕng dưӟi và tӯ trái
qua phҧi theo phương pháp dùng mҧng phө.
Hưͣng d̳n: a͝ ma tr̵n sang m̫ng m͡t chi͉u, s̷p x͇p trên m̫ng m͡t chi͉u
theo thͱ t͹ tăng d̯n, sau đó chuy͋n ngưͫc m̫ng m͡t chi͉u thành ma tr̵n
k͇t qu̫.
5˜. ViӃt hàm sҳp xӃp ma trұn theo thӭ tӵ giҧm dҫn tӯ trên xuӕng dưӟi và tӯ trái
sang phҧi.
52. ViӃt hàm sҳp xӃp các dòng trên ma trұn theo thӭ tӵ tăng dҫn.
?
53. ViӃt hàm sҳp xӃp các cӝt trên ma trұn theo thӭ tӵ giàm dҫn.
?
54. ViӃt hàm sҳp xӃp ma trұn theo đưӡng ziczҳc ngang.
?
è dө :
?
?
?
?
?
?
?
?
?
55. ViӃt hàm sҳp xӃp ma trұn theo đưӡng ziczҳc chéo
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 71
?
? Mҧng hai chiӅu
?

è du :
?

?
56. ViӃt hàm sҳp xӃp ma trұn theo đưӡng xoҳn ӕc tӯ ngoài vào trong theo chiӅu
kim đӗng hӗ.
è dө :
?

?
57. Cho ma trұn vuông, viӃt hàm sҳp xӃp tăng dҫn các phҫn tӱ nҵm trên các
?
đưӡng chéo song song vӟi đưӡng chéo chính.
?
58. ViӃt chương trình nhұp mӝt ma trұn vuông các sӕ nguyên, và thӵc hiӋn
nhӳng công viӋc sau :
@ Sҳp xӃp các phҫn tӱ nҵm trên các đưӡng chéo loҥi ˜ tăng dҫn
@ Sҳp xӃp các phҫn tӱ nҵm trên các đưӡng chéo loҥi 2 giҧm dҫn.
@ Sҳp xӃp vӟi điӅu kiӋn: các phҫn tӱ trên đưӡng chéo chính tăng, các phҫn
tӱ trên các đưӡng chéo song song vӟi đưӡng chéo chính giҧm.
?
?
f. Bài t̵p Thm ± Xoá ± Tha th͇
?
59. ViӃt hàm xoá mӝt dòng i trên ma trұn.
?
60. ViӃt hàm xoá mӝt cӝt j trên ma trұn.
?
6˜. ViӃt hàm xoá dòng có tәng lӟn nhҩt trên ma trұn.
?
62. ViӃt hàm hoán vӏ dòng có tәng lӟn nhҩt vӟi dòng có tәng nhӓ nhҩt.
?
63. ViӃt hàm tìm và thay thӃ các phҫn tӱ chҹn trong ma trұn bҵng ưӟc sӕ nhӓ
?
nhҩt cӫa nó.
?
64. ViӃt hàm thay thӃ nhӳng phҫn tӱ có giá trӏ x thành phҫn tӱ có giá trӏ y trong
ma trұn x , y nhұp tӯ bàn phím).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 72


?
? Mҧng hai chiӅu
?

II.3. Bài tұp luyӋn tұp và nâng cao


?
65. ViӃt chương trình tính tәng, tích cӫa hai ma trұn các sӕ nguyên.
?
66. ViӃt hàm kiӇm tra xem ma trұn vuông các sӕ nguyên có đӕi xӭng qua đưӡng
chéo chính hay không.
67. ViӃt hàm kiӇm tra xem trong ma trұn vuông cҩp n có hàng nào trùng nhau
hay không, nӃu có thì chӍ rõ nhӳng hàng nào. Trùng giá trӏ và vӏ trí).
68. ViӃt chương trình nhұp vào ma trұn vuông kích thưӟc n x n  2 ãn ã˜00 ).
?
Hãy viӃt hàm thӵc hiӋn nhӳng công viӋc sau :
@ In ra các phҫn tӱ trên 4 đưӡng biên cӫa ma trұn.
@ Tính tәng các phҫn tӱ trên biên.
69. (*) ViӃt chương trình xoay ma trұn các sӕ thӵc 900 ngưӧc chiӅu kim đӗng
hӗ.
Ví dө:
?
?
?
?
?
?
?
?
70. ViӃt chương trình dӏch phҧi xoay vòng mӝt cӝt trong ma trұn các sӕ thӵc.
?
7˜. ViӃt chương trình dӏch xuӕng xoay vòng mӝt dòng trong ma trұn các sӕ
?
thӵc.
72. (*) Cho ma trұn A  m n ) các sӕ nguyên hãy phát sinh ma trұn B sao cho B
?

là ma trұn lұt ngưӧc cӫa ma trұn A.


?
Ví dө :
?
?
?
?
?
?
?
?
73. (**) Cho ma trұn A  m n ) hãy phát sinh ma trұn B  m n ) sao cho phҫn
?

tӱ B i, j) là trung bình cӝng cӫa các phҫn tӱ trong hình vuông 3x3 tâm tҥi
?
i,j) cӫa A.
Ví dө :

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 73


?
? Mҧng hai chiӅu
74. (**) Cho ma trұn các sӕ nguyên dương A  m n ) . Hãy xây dӵng ma trұn B 
m n ). Sao cho phҫn tӱ B  i, j ) là sӕ lӟn nhҩt trong ô vuông 3 x 3 tâm tҥi
i, j) cӫa A.
Ví dө :
?
?
?
?
?
?
?
?
75. (**) Cho ma trұn A  m n ). Hãy xây dӵng ma trұn B  m n ) vӟi phҫn tӱ
?

Bi,j) đưӧc xác đӏnh theo qui tҳc sau: tҥi vӏ trí i, j) trên mҧng A kҿ hai tia
vuông góc vӟi nhau, tҥo thành vӟi trөc hoành mӝt góc 450 tӯ trên xuӕng
dưӟi; Bi, j) là tәng cӫa tҩt cҧ các sӕ cӫa vùng mһt phҷng tҥo bӣi hai tia này
và các cҥnh cӫa bҧng.
Ví dө :
?
?
?
?
?
?
76. (**) Cho ma trұn vuông A  n n ). Hãy xây dӵng mҧng B  n n ) bҵng cách:
?

phҫn tӱ B i, j) là sӕ lӟn nhҩt trong tam giác vuông vӁ tӯ A i, j) tӟi đưӡng
chéo chính.
Ví dө :
?
?
?
?
?
?
77. (*) ViӃt chương trình hiӇn thӏ đӗng hӗ điӋn tӱ gӗm giӡ phút), vӟi giӡ lҩy tӯ
?
hӋ thӕng và đӗng hӗ đưӧc cұp nhұt theo phút.
?
Hưͣng d̳n: R̩o 1 ma tr̵n giá tr͓ g͛m 0 ho̿c 1, v͓ tr nào c̯n hi͋n th͓ thì
gán giá tr͓ là 1, ngưͫc l̩i có giá tr͓ là 0. Ñau m͟i phút c̵p nh̵t l̩i ma tr̵n
và hi͋n th͓ lên màn hình.
è dͭ: 01 giͥ 25 phút

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 74


?
? Mҧng hai chiӅu
?

78. Nhұp vào mҧng hai chiӅu gӗm n dòng và m cӝt các sӕ nguyên. Hãy tìm
phҫn tӱ lӟn nhҩt trên mӛi dòng và đӗng thӡi nhӓ nhҩt trên mӛi cӝt, hoһc lӟn
nhҩt trên mӛi cӝt và đӗng thӡi nhӓ nhҩt trên mӛi dòng. Có bao nhiêu phҫn
tӱ như thӃ?
Ví dө:
?

?
79. ViӃt chương trình tҥo ngүu nhiên mӝt ma trұn các sӕ nguyên 0 -> 50), tìm
nhӳng phҫn tӱ cӵc đҥi là phҫn tӱ lӟn hơn các phҫn tӱ xung quanh).
Ví dө :
?

80. (**) Cho ma trұn các sӕ nguyên A m n n 73, m 73) . Hãy tìm ma trұn con
3x3) có tәng lӟn nhҩt.
Ví dө :
?
?
?
?
?
?
?
?
8˜. Nhұp ma trұn vuông cҩp n n n < ˜0). In ra các phҫn tӱ cӫa ma trұn này
theo hưӟng cӫa đӯơng chéo chính.
Ví dө : n = 4
?
?
?
?
?
?
?
?
?
?
?
?
?
82. (**) Hãy điӅn các sӕ tӯ ˜ đӃn n2 vào ma trұn cҩp n n > 2), chӍ xét trưӡng
hӧp n là sӕ lҿ vӟi tính chҩt O là tәng các sӕ bҵng nhau.
ưͣng ß̳n : Ma phương cͯa m͡t b̫ng vuông c̭p n, trong m͟i ô nh̵n m͡t
giá tr͓ sao cho, m͟i hàng, m͟i c͡t và m͟i đưͥng chéo đ͉u tho̫ mãn m͡t t nh
ch̭t O nào đó cho trưͣc.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 75


?
? Mҧng hai chiӅu
?

Ví dө : Vӟi n = 5
?
?
?
?
?
?
?
?
?
83. (*) ViӃt hàm in ma trұn các sӕ nguyên dương theo qui luұt đưӧc mô tҧ như
?
sau : các phҫn tӱ phía trên đưӡng chéo phө là giá trӏ bình phương cӫa các
giá trӏ˜ ‹ n 2 , các giá trӏ tӯ đưӡng chéo phө trӣ xuӕng là các sӕ nguyên
tӕ. Ma trұn đưӧc sҳp xӃp như ví dө bên dưӟi.
?

Ví dө : n = 5
?

84. Cho ma trұn vuông a cҩp n  n lҿ, 3 ãn ã˜5 ), mӛi phҫn tӱ đӅu có giá trӏ
?
nguyên dương. Hãy xây dӵng hàm kiӇm tra xem ma trұn a có phҧi là ma
phương hay không?
85. (**) ViӃt chương trình giҧi bài toán 8 hұu. Hãy đһt 8 con hұu trên bàn cӡ
?
8x8 sao cho chúng không ăn nhau 2 hұu ăn nhau khi cùng hàng, cùng cӝt
và cùng nҵm trên đưӡng chéo).
Hưӟng dүn:
?
Dùng ma tr̵n 8x8 đ͋ lưu bàn cͥ. M͟i ô có 3 tr̩ng thái :
@ Có h̵u 1
@ tr͙ng 0
@  không dưͫc đi -1
86. (**) ViӃt chương trình giҧi bài toán mã đi tuҫn. Hãy đi con mã 64 lưӧt đi
trên bàn cӡ 8x8 sao cho mӛi ô chӍ đi qua mӝt lҫn xuҩt phát tӯ mӝt ô bҩt kǤ)
Hưӟng dүn :
aͱng t̩i m͡t ô trên bàn cͥ con mã có th͋ đi đưͫc 1 trong 8 hưͣng sau .

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 76


?
? Mҧng hai chiӅu
?

? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ?

? ? Ñ ?  ? ? ?

?  ? ? ?  ? ?
? ? ?  ? ? ? ?

?  ? ? ?  ? ?

? ?  ?  ? ? ?

? ? ? ? ? ? ? ?

Khai báo 8 hưͣng đi cͯa mã như sau:


?
typedef struct DIEM
?
{
?
int x, y;
?
};
?
DIEM huongdi[8]={{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};
Rrong đó m͟i thành ph̯n cͯa huongdi là đ͡ l͏ch cͯa dòng và c͡t so vͣi v͓
tr cͯa con mã.
è dͭ: huongdi[0] (tͱc đi đ͇n v͓ tr Ñ như hình vͅ) có đ͡ l͏ch 2 dòng và 1
?
c͡t. (÷iá tr͓ âm bi͋u th͓ đ͡ l͏ch v͉ bên trái c͡t hay hưͣng lên cͯa dòng).
Ch͕n v͓ tr đi k͇ ti͇p sao cho v͓ tr đó ph̫i g̯n vͣi biên hay góc nh̭t (tͱc s͙
đưͥng đi có th͋ đi là t nh̭t).
87. ViӃt chương trình giҧi bài toán Taci. Cho ma trұn vuông 3x3 gӗm các sӕ
nguyên tӯ 0 -> 8 trong đó 0 là ô trӕng. Bài toán đһt ra là hãy đưa ma trұn ӣ
mӝt trҥng thái đҫu vӅ trҥng thái đích, mӛi lҫn chӍ dӏch chuyӇn đưӧc ˜ ô.

?
Ví dө : Trҥng thái đҫu Trҥng thái đích
˜ 3 0 ? ˜ 2 3
8 2 5 => 8 0 4
7 4 6 ? 7 6 5
?

III. KӂT LUҰN


?

! KiӇu dӳ liӋu mҧng hai chiӅu đưӧc ӭng dөng rӝng rãi trong các bài toán vӅ tìm
?
đưӡng đi trong đӗ thӏ, xӱ lý ҧnh, xӱ lý nhӳng dӳ liӋu dҥng bҧng, «
! Lưu ý khi nhұp mҧng hai chiӅu các sӕ thӵc phҧi thông qua ˜ biӃn trung gian.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 77


?
? KiӇu dӳ liӋu có cҩu trúc
?
?
CHƯƠN÷ 7 KIӆU DӲ LIӊU CÓ CҨU TRÚC
?
?
?
Cung c̭p cơ ch͇ cho phép khai báo các ki͋u dͷ li͏u mͣi đ͋ gi̫i quy͇t theo yêu c̯u cͯa
bài toán d͹a vào nhͷng ki͋u dͷ li͏u cơ b̫n đưͫc cài đ̿t s̽n trong ngôn ngͷ l̵p trình.
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Cҩu trúc struct) thӵc chҩt là mӝt kiӇu dӳ liӋu do ngưӡi dùng đӏnh nghĩa bҵng
cách gom nhóm các kiӇu dӳ liӋu cơ bҧn có sҹn trong C thành mӝt kiӇu dӳ liӋu
phӭc hӧp nhiӅu thành phҫn.
?
I .2. Đӏnh nghĩa kiӇu dӳ liӋu
?
Cú pháp
?
struct < tên cҩu trúc >
{
Các kiӇu dӳ liӋu thành phҫn ;
};
?
Ngoài ra ta có thӇ dùng tӯ khoá typedef đӇ đӏnh nghĩa mӝt tên mӟi cho kiӇu dӳ
?
liӋu đã có.
?
Cú pháp
?
typedef struct < tên cҩu trúc > < tên mӟi >;
?
?
è dͭ1: Ki͋u dͷ li͏u DARE g͛m các thành ph̯n:
@ Rhͱ (thu): chu͟i có t͙i đa 4 ký t͹.
@ Ngày (ngay): s͙ nguyên 1 byte.
@ Rháng (thang): s͙ nguyên 1 byte.
@ Năm (nam): s͙ nguyên 2 bytes.
Ra đ͓nh nghĩa DARE như sau:
?
struct DATE
{
char thu[5]; unsignß
char nga; unsignß
char thang; int nam;
};
tpßf struct DATE ß;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 78


?
? KiӇu dӳ liӋu có cҩu trúc
?

KiӇu dӳ liӋu có cҩu trúc có thӇ lӗng vào nhau.


?
è dͭ 2: a͓nh nghĩa ki͋u dͷ li͏u cͯa h͕c sinh HOCÑINH g͛m:
@ Mã s͙ h͕c sinh (MÑHÑ): chu͟i có t͙i đa 5 ký t͹.
@ H͕ tên (hoten): chu͟i có t͙i đa 30 ký t͹.
@ Ngày tháng năm sinh (ngaysinh): ki͋u DARE.
@ a͓a ch͑ (diachi): chu͟i có t͙i đa 50 ký t͹.
@ ÷iͣi t nh (phai): chu͟i có t͙i đa 3 ký t͹.
@ ai͋m trung bình (diemtb): s͙ th͹c.
Ra đ͓nh nghĩa ki͋u HOCÑINH như sau:
?
struct DATE
{
char thu[5]; unsignß
char nga; unsignß
char thang; int nam;
};
?
tpßf struct CSIN
{
char MSS[6];
char hotn[31];
struct DATE ngasinh;
char ßiachi[51];
unsignß char phai[4];
float ßimt¦;
};
?
?
 Khi đ͓nh nghĩa ki͋u dͷ li͏u struct l͛ng nhau, ta c̯n lưu ý: Ki͋u dͷ li͏u đưͫc
?
s͵ dͭng ph̫i khai báo ph a trên.
?
?
?
I.3. Khai báo
?
Khi ta đӏnh nghĩa kiӇu dӳ liӋu tӭc là ta có mӝt kiӇu dӳ liӋu mӟi, muӕn sӱ dөng ta
phҧi khai báo biӃn. Cú pháp khai báo kiӇu dӳ liӋu cũng giӕng như cách khai báo
cӫa các kiӇu dӳ liӋu chuҭn.
struct Ä tên cҩu trúc > Ä tên biӃn > y
?
è dͭ : ?
?
struct DARE x ; // Khai bao bien x co kieu du lieu DARE

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 79


?
? KiӇu dӳ liӋu có cҩu trúc
Tuy nhiên nӃu ta đӏnh nghĩa struct có dùng tӯ khoá typedef thì ta có thӇ khai báo
trӵc tiӃp mà không cҫn tӯ khoá ³structo.
è dͭ :
DATE  ;  hai ¦ao ¦in  co kiu DATE
?
*BiӃn con trӓ kiӇu cҩu trúc: Ngoài cách khai báo như trên ta có thӇ khai báo
theo kiӇu con trӓ như sau
struct Ä tên cҩu trúc > *Ä tên biӃn > y
?
ĐӇ sӱ dөng ta cũng phҧi cҩp phát vùng nhӟ giӕng như kiӇu dӳ liӋu chuҭn.
?
è dͭ :
DATE *;  hai ¦ao con tro  kiu cau truc DATE
?
 = ( DATE * ) malloc ( sizof ( DATE )) ;
?
?
I.4. Truy Èuҩt
?
ĐӇ truy xuҩt mӝt thành phҫn dӳ liӋu nào đó bên trong cҩu trúc ta có 2 trưӡng hӧp
truy xuҩt như sau :
@ BiӃn x là mӝt biӃn cҩu trúc thông thưӡng, ta dùng toán tӱ dҩu chҩm ³.o
Cú pháp :
?
?
? Ä Tên cҩu trúc >.Ä BiӃn thành phҫn >y
? ?
è dͭ : ?
?
DATE  ;  khai ¦ao ¦in  kiu DATE
?
.nga = 5 ;  gan nga ¦ang 5
?

@ BiӃn x là mӝt biӃn con trӓ, ta dùng toán tӱ mũi tên ³->³ Gӗm dҩu trӯ µ±µ và
dҩu lӟn hơn µ>¶).
?
Cú pháp :
?
?
? Ä Tên cҩu trúc > -> Ä BiӃn thành phҫn >y
? ?
è dͭ : ?
?
DATE * ;  khai ¦ao ¦in  kiu con tro DATE
?
 -> nga = 5 ;  gan nga ¦ang 5
?

 a͙i vͣi ki͋u dͷ li͏u có struct l͛ng nhau ph̫i truy c̵p đ͇n thành ph̯n cu͙i
?
cùng có ki͋u dͷ li͏u cơ b̫n.
?
è dͭ: ÷i̫ s͵, có ki͋u HOCÑINH như trên
?
CSIN hs;  khai ¦ao ¦in hs kiu CSIN
?
Mu͙n in h͕c sinh A sinh vào tháng m̭ ta ph̫i tru c̵p như sau:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 80


?
? KiӇu dӳ liӋu có cҩu trúc
?

printf(³Thang sinh cua hoc sinh A la: %ß´,(hs.ngasinh).thang);


?
?
I.5. è dө minh hoҥ
?
ViӃt chương trình nhұp vào toҥ đӝ hai điӇm trong mһt phҷng và tính tәng hai toҥ
đӝ này.
#incluß conio.h>
#incluß stßio.h>
?
tpßf struct DIEM khai ¦ao mot kiu ßu liu DIEM gom toa ßo  va 
{
int ;
int ;
};
?
voiß Nhap (DIEM &ß)
{
printf (³\nNhap vao tao ßo ßim\n´);
printf (³Tung ßo : ³);
scanf (³%ß´, & ß. );
printf (³oanh ßo : ´);
scanf (³%ß´, & ß.);
}
?
voiß Xuat (DIEM ß)
{
printf (³\nToa ßo ßim : (%ß , %ß)´,ß.,ß.);
}
?
DIEM Tong (DIEM ß1,DIEM ß2)
{
DIEM tmp;
tmp. = ß1. + ß2. ;
tmp. = ß1. + ß2. ;
rturn Tmp;
}
?
voiß main ()
{
DIEM A , B, AB; khai ¦ao 3 ßim A, B, AB;
clrscr ();
Nhap ( A );
Xuat ( A );
Nhap ( B );
Xuat ( B );
printf (³\n Tong cua hai ßim vua nhap la : ´);
AB = Tong ( A, B);
Xuat ( AB );

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 81


?
? KiӇu dӳ liӋu có cҩu trúc
?

gtch ();
}
?
I.6. Mҧng cҩu trúc
@ Cách khai báo tương tӵ như mҧng mӝt chiӅu hay ma trұn KiӇu dӳ liӋu bây
giӡ là kiӇu dӳ liӋu có cҩu trúc).
@ Cách truy cұp phҫn tӱ trong mҧng cũng như truy cұp trên mҧng mӝt chiӅu
hay ma trұn. Nhưng do tӯng phҫn tӱ có kiӇu cҩu trúc nên phҧi chӍ đӏnh rõ
?

cҫn lҩy thành phҫn nào, tӭc là phҧi truy cұp đӃn thành phҫn cuӕi cùng có
kiӇu là dӳ liӋu cơ bҧn xem lҥi bҧng các kiӇu dӳ liӋu cơ bҧn) .
?
I.7. Nguyên tҳc viӃt chương trình có mҧng cҩu trúc
?
Do kiӇu dӳ liӋu có cҩu trúc thưӡng chӭa rҩt nhiӅu thành phҫn nên khi viӃt
chương trình loҥi này ta cҫn lưu ý:
@ Xây dӵng hàm xӱ lý cho mӝt kiӇu cҩu trúc.
@ Muӕn xӱ lý cho mҧng cҩu trúc, ta gӑi lҥi hàm xӱ lý cho mӝt kiӇu cҩu trúc đã
đưӧc xây dӵng bҵng cách dùng vòng lһp.
Ví ß 1: Cho m͡t lͣp h͕c g͛m n h͕c sinh (nã50). Rhông tin cͯa m͡t h͕c sinh
đưͫc mô t̫ ͧ v dͭ 2, mͭc I.2. Hãy vi͇t chương trình nh̵p và xṷt danh sách h͕c
sinh sau đó đ͇m xem có bao nhiêu h͕c sinh đưͫc lên lͣp (ai͉u ki͏n đưͫc lên lͣp
là đi͋m trung bình 75.0).
Cách làm:
?
- Rrưͣc h͇t ta ph̫i xây d͹ng hàm nh̵p và xṷt cho 1 h͕c sinh.
?
- œây d͹ng hàm nh̵p và xṷt ngày tháng năm (Ki͋u dͷ li͏u DARE).
?
- Ñau đó mͣi xây d͹ng hàm nh̵p và xṷt cho danh sách h͕c sinh.
?
#ßfin MAX 50
struct DATE
{
char thu[5]; unsignß
char nga; unsignß
char thang; int nam;
};
tpßf struct CSIN
{
char MSS[6];
char hotn[31];
struct DATE ngasinh;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 82


?
? KiӇu dӳ liӋu có cҩu trúc
?

char ßiachi[51];
unsignß char phai[4];
float ßimt¦;
};
?
voiß NhapNamSinh(DATE &ß);
voiß XuatNamSinh(DATE ß);
voiß Nhap1S (CSIN &hs);
voiß Xuat1S (CSIN hs);
voiß NhapDSS(CSIN lh[], int &n);
voiß XuatDSS(CSIN lh[], int n);
int DmSLnLop(CSIN lh[], int n);
?
voiß main()
{
CSIN lh[MAX]; hai ¦áo m̫ng lh g͛m có t͙i đa 50 h͕c sinh
int n, sohsßau;
NhapDSS(lh, n);
XuatDSS(lh, n);
sohsßau = DmSLnLop(lh, n);
printf(³\nSo luong hoc sinh ßuoc ln lop la: %ß´, sohsßau);
gtch();
}
?
voiß NhapNamSinh(DATE &ß)
{
printf(³\nNhap vao nga: ´);
scanf(³%u´, &ß.nga);
printf(³\nNhap vao thang: ´);
scanf(³%u´, &ß.thang);
printf(³\nNhap vao nam: ´);
scanf(³%ß´, &ß.nam);
}
?
voiß XuatNamSinh(DATE ß)
{
printf(³%02u  %02u  %4ß´, ß.nga, ß.thang, ß.nam);
}
?
voiß Nhap1S(CSIN &hs)
{
float ß;
?
lushall(); Xoa vung ßm
printf(³\nNhap ma so hoc sinh: ´);
gts(hs.MSS);
printf(³\nNhap ho tn hoc sinh: ´);
gts(hs.hotn);
printf(³\nNhap nga thang nam sinh: ´);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 83


?
? KiӇu dӳ liӋu có cҩu trúc
?

flushall(); Xoa vung ßm


NhapNamSinh(hs.ngasinh);
printf(³\nNhap vao ßia chi: ´);
flushall(); Xoa vung ßm
gts(hs.ßiachi);
printf(³\nPhai: ´);
gts(hs.phai);
printf(³\nNhap vao ßim trung ¦inh: ´);
flushall(); Xoá vùng đ͏m
scanf(³%f´, &ß);Nh̵p vào ¦i͇n t̩m ß sau đó gán vào hs.ßimt¦
hs.ßimt¦=ß;
}
?
voiß NhapDSS(CSIN lh[], int &n)
{
printf(³\nNhap vao so luong hoc sinh: ´);
scanf(³%ß´, &n);
for(int i=0; in; i++)
{
printf(³\nNhap vao thong tin cua hoc sinh thu %ß:\n´, i+1);
Nhap1S(lh[i]); Goi ham nhap thong tin 1 hoc sinh
}
}
?
voiß Xuat1S(CSIN hs)
{
printf(³\nMa so hoc sinh: %s´, hs.MSS);
printf(³\no tn hoc sinh: %s´, hs.hotn);
printf(³\nNga thang nam sinh: ´);
XuatNamSinh(hs.ngasinh);
printf(³\nDia chi: %s´, hs.ßiachi);
printf(³\nPhai: %s´, hs.phai);
printf(³\nDim trung ¦inh: %2.2f´, hs.ßimt¦);
}
?
voiß XuatDSS(CSIN lh[], int n)
{
for(int i=0; in; i++)
{
printf(³\n\nThong tin hoc sinh thu %ß:´, i+1);
Xuat1S(lh[i]); Goi ham uat thong tin 1 hoc sinh
}
}
?
int DmSLnLop(CSIN lh[], int n)
{
int ß=0;
for(int i=0; in; i++)
if(lh[i].ßimt¦>=5.0)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 84


?
? KiӇu dӳ liӋu có cҩu trúc
? ?

? ß++;
rturn ß;
}
?
?
͇t qu̫ ví ß khi ch̩ chương trình:
Nhap vao thong tin cua hoc sinh thu 1:
Nhap ma so hoc sinh: 02313
Nhap ho ten hoc sinh: Nguyen èan A
Nhap ngay thang nam sinh:
Nhap vao ngay: 12
Nhap vao thang: 03
Nhap vao nam: 1980
Nhap vao dia chi: 60 Ohan Dang |uu Q.Ohu Nhuan
Ohai: Nam
Nhap vao diem trung binh: 6.5
?
Nhap vao thong tin cua hoc sinh thu 2:
Nhap ma so hoc sinh: 03852
Nhap ho ten hoc sinh: |y Rhi B
Nhap ngay thang nam sinh:
Nhap vao ngay: 05
Nhap vao thang: 12
Nhap vao nam: 1981
Nhap vao dia chi: 24 |y Ru Rrong Q.1
Ohai: Nu
Nhap vao diem trung binh: 3.5
?
Rhong tin hoc sinh thu 1:
Ma so hoc sinh: 02313
Ho ten hoc sinh: Nguyen èan A
Ngay thang nam sinh: 12 / 03 / 1980
Dia chi: 60 Ohan Dang |uu Q.Ohu Nhuan
Ohai: Nam
Diem trung binh: 6.50
?
Rhong tin hoc sinh thu 2:
Ma so hoc sinh: 03852
Ho ten hoc sinh: |y Rhi B
Ngay thang nam sinh: 05 / 12 / 1981
Dia chi: 24 |y Ru Rrong Q.1
Ohai: Nu
Diem trung binh: 3.50
Ño luong hoc sinh duoc len lop la: 1
?
?
Ví ß 2: Cho m͡t m̫ng các phân s͙ (PANS) g͛m n ph̯n t͵ (nã50). Hãy vi͇t
chương trình nh̵p và xṷt danh sách các phân s͙ sau đó tìm phân s͙ có giá tr͓
?
lͣn nh̭t, t͝ng và t ch các phân s͙ và ngh͓ch đ̫o giá tr͓ các phân s͙ trong m̫ng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 85


?
? KiӇu dӳ liӋu có cҩu trúc
?

Cách làm:
?
- Rrưͣc h͇t ta ph̫i xây d͹ng hàm nh̵p và xṷt cho 1 phân s͙.
?
- œây d͹ng hàm t nh t͝ng, hi͏u, t ch, thương, rút g͕n, so sánh và ngh͓ch đ̫o
cho 2 phân s͙.
- Ñau đó mͣi xây d͹ng hàm nh̵p, xṷt, t nh t͝ng, t ch cho m̫ng các phân s͙.
?
#ßfin MAX 100
tpßf struct PANS
{
int tu, mau;
};
?
voiß NhapPS(PANS &ps);
voiß XuatPS(PANS ps);
voiß NhapMangPS(PANS ßsps[], int &n);
voiß XuatMangPS(PANS ßsps[], int n);
PANS TimMa(PANS ßsps[], int n);
int imTra(PANS ps);
Tra v 1: Nu hop l
int
SCLN(int a, int ¦);
PANS RutGon(PANS ps);
PANS NghichDao(PANS ps);
PANS Nhan(PANS ps1, PANS ps2);
PANS Chia(PANS ps1, PANS ps2);
PANS Tru(PANS ps1, PANS ps2);
PANS Cong(PANS ps1, PANS ps2);
int SoSanh(PANS ps1, PANS ps2);
Tra v 0: ps1=ps2
Tra v 1: ps1>ps2
Tra v -1: ps1ps2
PANS TongCacPS(PANS ßsps[], int n);
PANS TichCacPS(PANS ßsps[], int n);
voiß NghichDaoCacPS(PANS ßsps[], int n);
?
voiß main()
{
int n;
PANS a[MAX], ma, s, p;
clrscr();
?
NhapMangPS(a, n);
printf("\nMang cac phan so vua nhap: ");
XuatMangPS(a, n);
ma=TimMa(a, n);
printf("\nPhan so co gia tri lon nhat: ");
XuatPS(ma);
?
s=TongCacPS(a, n);
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 86
?
? KiӇu dӳ liӋu có cҩu trúc
?

printf("\nTong gia tri cac phan so co trong mang: ");


XuatPS(s);
?
p=TichCacPS(a, n);
printf("\nTich gia tri cac phan so co trong mang: ");
XuatPS(p);
?
NghichDaoCacPS(a, n);
printf("\nMang phan so sau khi nghich ßao cac phan tu: ");
XuatMangPS(a, n);
?
gtch();
}
?
?
voiß NhapPS(PANS &ps)
{
ßo{
printf("\nNhap tu so: ");
scanf("%ß", &ps.tu);
printf("\nNhap mau so: ");
scanf("%ß", &ps.mau);
if(!imTra(ps))
printf("\nMau so khong ßuoc ¦ang 0, nhap lai phan so\n");
ls
¦rak;
} whil(1);
ps=RutGon(ps);
}
?
voiß XuatPS(PANS ps)
{
printf("%ß", ps.tu);
if(ps.tu&&ps.mau!=1)
printf("%ß", ps.mau);
}
?
voiß NhapMangPS(PANS ßsps[], int &n)
{
printf("\nNhap so luong phan so: ");
scanf("%ß", &n);
for(int i=0; in; i++)
{
printf("\nNhap vao phan so thu %ß: ", i+1);
NhapPS(ßsps[i]);
}
}
?
voiß XuatMangPS(PANS ßsps[], int n)
{
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 87
?
? KiӇu dӳ liӋu có cҩu trúc
?

for(int i=0; in; i++)


{
XuatPS(ßsps[i]);
printf("\t");
}
}
?
int imTra(PANS ps)
{
if(ps.mau==0)
rturn 0;
rturn 1;
}
?
int
SCLN(int a, int ¦)
{
a=a¦s(a);
¦=a¦s(¦);
whil(a!=¦)
{
if(a>¦)
a=a-¦;
ls
¦=¦-a;
}
rturn a;
}
?
PANS RutGon(PANS ps)
{
int us;
if(ps.tu==0)
rturn ps;
?
us=
SCLN(ps.tu, ps.mau);
ps.tu=ps.tuus;
ps.mau=ps.mauus;
rturn ps;
}
?
PANS NghichDao(PANS ps)
{
PANS kq;
kq.tu=ps.mau;
kq.mau=ps.tu;
rturn kq;
}
?
PANS Nhan(PANS ps1, PANS ps2)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 88


?
? KiӇu dӳ liӋu có cҩu trúc
?

{
PANS kq;
kq.tu=ps1.tu*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
rturn kq;
}
?
PANS Chia(PANS ps1, PANS ps2)
{
PANS kq;
kq=Nhan(ps1, NghichDao(ps2));
rturn kq;
}
?
PANS Tru(PANS ps1, PANS ps2)
{
PANS kq;
kq.tu=ps1.tu*ps2.mau-ps1.mau*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
rturn kq;
}
?
PANS Cong(PANS ps1, PANS ps2)
{
PANS kq;
kq.tu=ps1.tu*ps2.mau+ps1.mau*ps2.tu;
kq.mau=ps1.mau*ps2.mau;
kq=RutGon(kq);
rturn kq;
}
?
int SoSanh(PANS ps1, PANS ps2)
{
ps1=RutGon(ps1); ps2=RutGon(ps2);
if(ps1.tu==ps2.tu&&ps1.mau==ps2.mau)
rturn 0;
if(ps1.tu*ps2.mau>ps2.tu*ps1.mau)
rturn 1;
rturn -1;
}
?
PANS TimMa(PANS ßsps[], int n)
{
PANS ma;
ma=ßsps[0];
for(int i=1; in; i++)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 89


?
? KiӇu dӳ liӋu có cҩu trúc
?

if(SoSanh(ßsps[i], ma)==1)
ma=ßsps[i];
rturn ma;
}
?
PANS TongCacPS(PANS ßsps[], int n)
{
PANS s=ßsps[0];
for(int i=1; in; i++)
{
s=Cong(s, ßsps[i]);
}
rturn s;
}
?
PANS TichCacPS(PANS ßsps[], int n)
{
PANS p=ßsps[0];
for(int i=1; in; i++)
{
p=Nhan(p, ßsps[i]);
}
rturn p;
}
?
voiß NghichDaoCacPS(PANS ßsps[], int n)
{
for(int i=0; in; i++)
{
ßsps[i]=NghichDao(ßsps[i]);
}
}
?
?
͇t qu̫ ví ß khi ch̩ chương trình:
Nhap so luong phan so: 5
?
Nhap vao phan so thu 1:
Nhap tu so: 1
Nhap mau so: 3
?
Nhap vao phan so thu 2:
Nhap tu so: 7
Nhap mau so: 4
?
Nhap vao phan so thu 3:
Nhap tu so: 9
Nhap mau so: 7
?
Nhap vao phan so thu 4:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 90


?
? KiӇu dӳ liӋu có cҩu trúc
?

Nhap tu so: 5
Nhap mau so: 6
?
Nhap vao phan so thu 5:
Nhap tu so: 4
Nhap mau so: 7
?
Mang cac phan so vua nhap: 1/3 7/4 9/7 5/6 4/7
Ohan so co gia tri lon nhat: 7 /4
Rong gia tri cac phan so co trong mang: 401/84
Rich gia tri cac phan so co trong mang: 5/14
Mang phan so sau khi nghich dao cac phan tu: 3 4/7 7/9 6/5 7/4
?
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
˜. ViӃt chương trình sӱ dөng con trӓ cҩu trúc đӇ hiӇn thӏ giӡ, phút, giây ra màn
hình, và tính khoҧng cách giӳa 2 mӕc thӡi gian.
2. ViӃt chương trình sӱ dөng con trӓ cҩu trúc thӇ hiӋn ngày, tháng, năm ra màn
hình, và tính khoҧng cách giӳa 2 ngày.
3. ViӃt chương trình khai báo kiӇu dӳ liӋu thӇ hiӋn mӝt sӕ phӭc. Sӱ dөng kiӇu
này đӇ viӃt hàm tính tәng, hiӋu, tích cӫa hai sӕ phӭc.
4. ViӃt chương trình khai báo kiӇu dӳ liӋu đӇ biӇu diӉn mӝt phân sӕ. Hãy viӃt
hàm thӵc hiӋn nhӳng công viӋc sau:
@ Tính tәng, hiӋu, tích, thương hai phân sӕ.
@ Rút gӑn phân sӕ.
@ Qui đӗng hai phân sӕ.
@ So sánh hai phân sӕ.
5. ViӃt chương trình khai báo kiӇu dӳ liӋu đӇ biӇu diӉn mӝt hӛn sӕ. Hãy viӃt
hàm thӵc hiӋn nhӳng công viӋc sau :
@ Đәi hӛn sӕ sang phân sӕ
@ Tính tәng, tích hai hӛn sӕ
6. ViӃt chương trình khai báo kiӇu dӳ liӋu đӇ biӇu diӉn mӝt điӇm trong hӋ tӑa
?
đӝ 0xy . Hãy viӃt hàm thӵc hiӋn các công viӋc sau:
@ Tìm nhӳng điӇm đӕi xӭng cӫa nó qua tung đӝ, hoành đӝ, toҥ đӝ tâm.
@ Hãy tính tәng, hiӋu, tích cӫa hai điӇm trong mһt phҷng toҥ đӝ 0xy.
@ Tính khoҧng cách giӳa hai điӇm.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 91


?
? KiӇu dӳ liӋu có cҩu trúc
7. Cho mӝt hình trө có các thông tin sau: BanKinh bán kính hình trө kiӇu sӕ
thӵc), ChieuCao chiӅu cao hình trө kiӇu sӕ thӵc). Hãy thӵc hiӋn các công
viӋc sau.
@ Nhұp dӳ liӋu cho hình trө trên.
@ Tính diӋn tích xung quanh, diӋn tích toàn phҫn, thӇ tích hình trө.
?
?
II.2. Bài Tұp LuyӋn Tұp
?
8. ViӃt chương trình tҥo mӝt mҧng các sӕ phӭc. Hãy viӃt hàm tính tәng, tích
các sӕ phӭc có trong mҧng.
9. ViӃt chương trình tҥo mӝt mҧng các phân sӕ. Hãy viӃt hàm thӵc hiӋn các
công viӋc sau :
@ Tính tәng tҩt cҧ các phân sӕ kӃt quҧ dưӟi dҥng phân sӕ tӕi giҧn)
@ Tìm phân sӕ lӟn nhҩt, phân sӕ nhӓ nhҩt.
@ Sҳp xӃp mҧng tăng dҫn.
˜0. ViӃt chương trình khai báo kiӇu dӳ liӋu STACK cơ chӃ LIFO). ViӃt hàm
làm nhӳng công viӋc sau :
@ KiӇm tra STACK rӛng
@ KiӇm tra STACK đҫy
@ Thêm phҫn tӱ vào STACK
@ Lҩy phҫn tӱ ra khӓi STACK
˜˜. Tә chӭc dӳ liӋu đӇ quҧn lí sinh viên bҵng cҩu trúc mүu tin trong mӝt mҧng
?
N phҫn tӱ, mӛi phҫn tӱ có cҩu trúc như sau:
?
- Mã sinh viên.
?
- Rên.
?
- Năm sinh.
?
- ai͋m toán, lý, hoá, đi͋m trung bình.
?
ViӃt chương trình thӵc hiӋn nhӳng công viӋc sau:
@ Nhұp danh sách các sinh viên cho mӝt lӟp hӑc.
@ Xuҩt danh sách sinh viên ra màn hình.
@ Tìm sinh viên có điӇm trung bình cao nhҩt.
@ Sҳp xӃp danh sách lӟp theo thӭ tӵ tăng dҫn cӫa điӇm trung bình.
@ Sҳp xӃp danh sách lӟp theo thӭ tӵ giҧm dҫn cӫa điӇm toán.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 92


?
? KiӇu dӳ liӋu có cҩu trúc
@ Tìm kiӃm và in ra các sinh viên có điӇm trung bình lӟn hơn 5 và không
có môn nào dưӟi 3.
@ Tìm sinh viên có tuәi lӟn nhҩt.
@ Nhұp vào tên cӫa mӝt sinh viên. Tìm và in ra các thông tin liên quan
đӃn sinh viên đó nӃu có).
?
˜2. Tә chӭc dӳ liӋu quҧn lí danh mөc các bӝ phim VIDEO, các thông tin liên
quan đӃn bӝ phim này như sau:
- Rên phim (t͹a phim).
?
- Rh͋ lo̩i (3 lo̩i : hình s͹, tình c̫m, hài).
?
- Rên đ̩o di͍n.
?
- Rên đi͍n viên nam ch nh.
?
- Rên di͍n viên nͷ ch nh.
?
- Năm s̫n xṷt.
?
- Hãng s̫n xṷt
?
ViӃt chương trình thӵc hiӋn nhӳng công viӋc sau :
@ Nhұp vào bӝ phim mӟi cùng vӟi các thông tin liên quan đӃn bӝ phim
này.
@ Nhұp mӝt thӇ loҥi: In ra danh sách các bӝ phim thuӝc thӇ loҥi này.
@ Nhұp mӝt tên nam diӉn viên. In ra các bӝ phim có diӉn viên này đóng.
@ Nhұp tên đҥo diӉn. In ra danh sách các bӝ phim do đҥo diӉn này dàn
dӵng.
?
˜3. Mӝt thư viӋn cҫn quҧn lý thông tin vӅ các đҫu sách. Mӛi đҫu sách bao gӗm
các thông tin sau : MaSSach mã sӕ sách), TenSach tên sách), TacGia tác
giҧ), SL sӕ lưӧng các cuӕn sách cӫa đҫu sách). ViӃt chương trình thӵc hiӋn
các chӭc năng sau:
@ Nhұp vào mӝt danh sách các đҫu sách tӕi đa là ˜00 đҫu sách)
@ Nhұp vào tên cӫa quyӇn sách. In ra thông tin đҫy đӫ vӅ các sách có tên
đó, nӃu không có thì tên cӫa quyӇn sách đó thì báo là :Không Tìm Thҩy.
@ Tính tәng sӕ sách có trong thư viӋn.
˜4. ViӃt chương trình tҥo mӝt mҧng danh sách các máy tính cӫa mӝt cӱa hàng,
thông tin cӫa mӝt máy tính bao gӗm :
- |o̩i máy
?
- Nơi s̫n xṷt

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 93


?
? KiӇu dӳ liӋu có cҩu trúc
?

- Rhͥi gian b̫o hành


@ ViӃt hàm nhұp mӝt dãy các loҥi máy tính có thông tin như trên.
@ Hãy viӃt hàm thӕng kê xem có bao nhiêu máy có thӡi gian bҧo hành là ˜
năm.
@ In ra danh sách các máy tính có xuҩt xӭ tӯ Mӻ.
˜5. ĐӇ lҳp ráp mӝt máy vi tính hoàn chӍnh cҫn phҧi có tӕi thiӇu ˜0 linh kiӋn loҥi
A và có thӇ lҳp bә sung thêm vào khoҧng tӕi đa 8 linh kiӋn loҥi B. Tҥi mӝt
cӱa hàng vi tính cҫn quҧn lý bán hàng các loҥi linh kiӋn tҥi cӱa hàng. Thông
tin vӅ mӝt loҥi linh kiӋn gӗm có: Tên linh kiӋn, quy cách , loҥi, đơn giá loҥi
˜  chҩt lưӧng tӕt ± sӕ nguyên), đơn giá loҥi 2  chҩt lưӧng thưӡng ± sӕ
?
nguyên ). ViӃt chương trình thӵc hiӋn nhӳng công viӋc sau :
@ Nhұp vào thông tin vӅ các linh kiӋn có ӣ cӱa hàng.
@ Xuҩt danh sách các linh kiӋn đã nhұp theo thӭ tӵ tăng dҫn cӫa loҥi linh
kiӋn và tên linh kiӋn.
@ Cho biӃt đã có đӫ ˜0 linh kiӋn loҥi A cҫn thiӃt lҳp ráp máy hay chưa?
˜6. Mӝt cӱa hàng cҫn quҧn lý các mһt hàng, thông tin mӝt mһt hàng bao gӗm:
?
- Mã hàng.
?
- Rên m̿t hàng.
?
- Ñ͙ lưͫng.
?
- aơn giá.
?
- Ñ͙ lưͫng t͛n.
?
- Rhͥi gian b̫o hành (t nh theo đơn v͓ tháng).
@ Hãy nhұp vào mӝt danh sách các mһt hàng.
@ Tìm mһt hàng có sӕ lưӧng tӗn nhiӅu nhҩt.
@ Tìm mһt hàng có sӕ lưӧng tӗn ít nhҩt.
@ Tìm mһt hàng có giá tiӅn cao nhҩt.
@ In ra nhӳng mһt hàng có thӡi gian bҧo hành lӟn hơn ˜2 tháng.
@ Sҳp xӃp các mһt hàng theo thӭ tӵ tăng dҫn cӫa sӕ lưӧng tӗn.
˜7. ViӃt chương trình quҧn lý hӗ sơ nhân viên trong mӝt công ty, chương trình
thӵc hiӋn nhӳng công viӋc sau :
- H͕ và tên.
?
- Ohái.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 94


?
? KiӇu dӳ liӋu có cҩu trúc
?

- Ngày sinh.
?
- a͓a ch͑.
?
- |ương cơ b̫n.
?
- B̫o hi͋m xã h͡i.
?
- Rhưͧng.
?
- Oh̩t.
?
- |ương th͹c lĩnh = lương cơ b̫n + thưͧng ± BH xã h͡i ± ph̩t.
@ Nhұp vào hӗ sơ cӫa các nhân viên trong công ty.
@ Xuҩt danh sách các nhân viên theo lương thӵc lĩnh giҧm dҫn bҵng 2 cách
sau :
?
- C̭p phát vùng nhͣ tĩnh.
?
- C̭p phát vùng nhͣ đ͡ng.
?
˜8. (*) ViӃt chương trình quҧn lý lӟp hӑc cӫa mӝt trưӡng. Các thông tin cӫa
mӝt lӟp hӑc như sau :
- Rên lͣp.
?
- Ñĩ s͙.
?
- Danh sách các sinh viên trong lͣp.
@ Nhұp vào danh sach các lӟp vӟi thông tin yêu cҫu như trên.
@ In danh sách các lӟp có trên 5 sinh viên có điӇm trung bình loҥi giӓi.
@ Tìm lӟp có nhiӅu sinh viên nhҩt.
@ Tìm lӟp có ít sinh viên nhҩt.
@ Tìm sinh viên có điӇm trung bình cao nhҩt.
@ Tìm lӟp có sӕ lưӧng sinh viên đҥt điӇm trung bình loҥi giӓi nhiӅu nhҩt.
˜9. ViӃt chương trình quҧn lý vé tàu, thông tin mӝt vé tàu như sau :
?
- Ngày giͥ khͧi hành, ngày giͥ đ͇n.
?
- ÷a đi, ga đ͇n.
?
- |o̩i tàu, lo̩i ch͟ ng͛i ( ng͛i, n̹m, cͱng, m͉m).
?
- Ñ͙ toa, s͙ gh͇.
@ ViӃt hàm nhұp vào danh sách các vé tàu.
@ In danh sách các vé tàu có ga đӃn là HuӃ.
@ In danh sách các vé tàu có ga đӃn là Hà Nӝi và đi ngày 8/6/2005.
@ ĐӃm xem có bao nhiêu khách đi tàu loҥi chӛ ngӗi là n̹m cͱng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 95


?
? KiӇu dӳ liӋu có cҩu trúc
20. ViӃt chương trình tính tiӅn điӋn hàng tháng cӫa các hӝ gia đình, thông tin
các khách hàng như sau :
- KǤ thu, tͳ ngày««đ͇n ngày.
?
- Rên khách hàng, mã khách hàng.
?
- a͓a ch͑.
?
- ai͏n năng tiêu thͭ (Kwh).
@ Nhұp vào danh sách các khách hàng.
@ Xuҩt danh sách hoá đơn theo thӭ tӵ tăng dҫn cӫa điӋn năng tiêu thө.
@ Tính tiӅn điӋn cӫa các khách hàng theo quy đӏnh sau.
- 100 kw đ̯u tiên là 550 đ / kw
?
- 50 kw ti͇p theo là 900 đ / kw
?
- 50 kw ti͇p theo là 1210 đ / kw
?
- Rhu͇ 10 % trên t͝ng s͙ ti͉n ph̫i tr̫
@ Tính tәng sӕ tiӅn thu đưӧc cӫa các khách hàng.
?
?
III. KӂT LUҰN
?

! KiӇu dӳ liӋu có cҩu trúc cho phép ta đӏnh nghĩa nhӳng kiӇu dӳ liӋu bҩt kǤ trên
cơ sӣ là nhӳng kiӇu dӳ liӋu cơ bҧn có sҹn trong ngôn ngӳ lұp trình.
! Khi xây dӵng xong kiӇu dӳ liӋu mӟi ta phҧi đӏnh nghĩa nhӳng thao tác cho
?
kiӇu dӳ liӋu đó.
! Nhӳng kiӇu dӳ liӋu tӵ đӏnh nghĩa này thông thưӡng có rҩt nhiӅu thành phҫn,

mӛi thành phҫn cũng có thӇ là mӝt kiӇu dӳ liӋu tӵ đӏnh nghĩa, vҩn đӅ là ta
chӑn kiӇu dӳ liӋu cơ bҧn nào đӇ xây dӵng nên chúng sao cho phù hӧp vӅ mһt
kiӇu dӳ liӋu và phù hӧp vӅ kch thưӟc lưu trӳ vӯa đӫ).
! Các sӱ dӵng nhӳng kiӇu dӳ liӋu tӵ đӏnh nghĩa cũng giӕng như các kiӇu dӳ
?
liӋu cơ bҧn. Muӕn sӱ dөng phҧi khai báo biӃn, khi truy cұp các thành phҫn
phҧi truy cұp theo quy ưӟc.
! NӃu thành phҫn cҩu trúc có kiӇu dӳ liӋu là sӕ thӵc thì khi sӱ dөng hàm
?
scanf() phҧi thông qua biӃn trung gian rӗi gán lҥi cho thành phҫn cҩu trúc đó.
! Đӕi vӟi mҧng các kiӇu dӳ liӋu có cҩu trúc ta nên Èӱ lý cho tӯng thành phҫn
cҩu trúc rӗi mӟi xӱ lý cho mҧng cҩu trúc bҵng cách dùng vòng lһp.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 96


?
? Tұp tin
?
?
CHƯƠN÷ 8 TҰO TIN
?
?
?
?
Rrong chương này, chúng ta sͅ tìm hi͋u c̭u trúc t̵p tin, cài đ̿t các thao tác, m͡t s͙
?
hàm thư vi͏n và ͱng dͭng trong vi͏c t͝ chͱc dͷ li͏u trên t̵p tin.
?
?
I. TÓM TҲT LÝ THUYӂT
?
I.1. Khái niӋm
?
Trong các chương trình trưӟc thì các dӳ liӋu đưa vào chương trình chӍ đưӧc tӗn
tҥi trong RAM, khi thoát chương trình thì tҩt cҧ dӳ liӋu đӅu bӏ mҩt. ĐӇ khҳc phөc
tình trҥng này Borland C cung cҩp cho ta các hàm đӇ lưu trӳ và truy xuҩt tұp tin,
đó là kiӇu FILE . Và ӣ đây ta chӍ đӅ cұp đӃn 2 loҥi tұp tin :
@ Tұp tin văn bҧn: là tұp tin dùng đӇ ghi các ký tӵ lên đĩa theo các dòng.
@ Tұp tin nhӏ phân: là tұp tin dùng đӇ ghi các cҩu trúc dҥng nhӏ phân đưӧc mã
hoá).
?
?
I.2. Thao tác vӟi tұp tin
?
Quá trình thao tác trên tұp tin thông qua 4 bưӟc:
?
Bưͣc 1: Khai báo con tr͗ tr͗ đ͇n t̵p tin.
Bưͣc 2: Mͧ t̵p tin.
Bưͣc 3: Các x͵ lý trên t̵p tin.
?
Bưͣc 4: aóng t̵p tin.
?
?
a. hai ¦áo
?
FILE *Ä tên biӃn >y
?
è dͭ : FI|E ff; // Khai bao bien con tro file f
?
?
¦. Mͧ t̵p tin
?
fopen (Ä đưӡng dүn tên tұp tin> , Ä kiӇu truy nhұp >)y
?
?
è dͭ :FI|E ff; // Khai bao bien con tro f
f = fopen ( ³C:\\èD1.txt´ , ³rt´ ) ;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 97


?
? Tұp tin
?

Các kiӇu truy nhұp tұp tin thông dөng:


?
t là kiӇu truy nhұp tұp tin đӕi vӟi dҥng tұp tin văn bҧn text).
?
b là kiӇu truy nhұp tұp tin đӕi vӟi dҥng tұp tin nhӏ phân binary).
?
r mӣ ra đӇ đӑc  ready only).
w mӣ ra đӇ ghi create / write).
a mӣ ra đӇ them vào append).
r+ mӣ ra đӇ đӑc và ghi modify).
?
?
c. Các hàm đ͕c ghi n͡i ßung t̵p tin

@ Tұp tin văn bҧn


?
?
? ? ? ?

ÑTT TÊN HÀM Ý N÷HĨA ÑӰ DӨN÷ è DӨ


ĐӐC TҰO TIN
?
fscanf<FILE *>, <đӏnh Dӳ liӋu tӯ mӝt tұp tin theo fscanf(f, ³%d´,
˜
dҥng>, <các tham biӃn>); đӏnh dҥng. &x);
? ?
Đӑc mӝt chuӛi ký tӵ tӯ mӝt ?
? fgets<vùng nhӟ>, <kích
tұp tin vӟi kích thưӟc tӕi đa char s[80];
2 thưӟc tӕi đa>, <FILE *>);
cho phép, hoһc gһp ký tӵ fgets(s, 80, f);
xuӕng dòng.
? ?
Đӑc mӝt ký tӵ tӯ tұp tin char c=getc(f);
3 getc< FILE * >);
đang mӣ.
÷HI TҰO TIN
? fprintf<FILE *>, <đӏnh ?
?
Ghi dӳ liӋu theo mӝt đӏnh
˜ dҥng>[, <các tham biӃn>]); fprintf(f,³%d´,x);
dҥng nào đó vào tұp tin.
? fputs<chuӛi ký tӵ>, <FILE ? ?
Ghi mӝt chuӛi ký tӵ vào tұp fputs(³÷iao trinh
2 *>);
tin đang mӣ. BR´, f);
?
?
@ Tұp tin nhӏ phân
?
? ? ? ?

ÑTT TÊN HÀM Ý N÷HĨA ÑӰ DӨN÷ è DӨ


ĐӐC TҰO TIN
? ? @ ptr: vùng nhӟ đӇ lưu dӳ ?
? ? ?
? ? liӋu đӑc.
? int a[30], b, n;
? @ size: kích thưӟc mӛi ô
? fread(a,
fread<&ptr>, <size>, <len>, nhӟ tính bҵng byte).
˜ sizeof(int), n , f);
<FILE *>); @ len: đӝ dài dӳ liӋu cҫn Fread(&b,
đӑc. sizeof(int), 1 , f);
FILE: đӑc tӯ tұp tin nhӏ
phân nào.
÷HI TҰO TIN
?
fwrite<&prt>, <size>, <len>, Tham sӕ tương tӵ như hàm fwrite(a,
˜
<FILE *> ); fread. sizeof(int), n , f);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 98


?
? Tұp tin
?

ß. Đóng t̵p tin


?
Sau khi không còn làm viӋc vӟi tұp tin, đӇ đҧm bҧo an toàn cho dӳ liӋu thì
nhҩt thiӃt ta phҧi đóng tұp tin lҥi.
fclose ( Ä biӃn con trӓ tұp tin > ) y
?
hoһc fcloseall () y
?
è dͭ :fclose (f) ;
?
. Các thao tác khác trn t̵p tin
?
* œoá tұp tin :
?
?
? remove  < đưӡng dүn tұp tin> );
?
* Đәi tên tұp tin :
?
rename  < tên tұp tin cũ >, < tên tұp tin mӟi > );
?
* Di chuyӇn con trӓ tұp tin :
fseek  < FILE * >, < đӝ dӡi >, < mӕc > );
Các mӕc :
? ÑEEK_ÑET dӡi dӃn đҫu tұp tin giá trӏ 0).
?
? ÑEEK_END dӡi đӃn cuӟi tұp tin giá trӏ 2).
? ÑEEK_CUR dӡi vӏ trí hiӋn hành giá trӏ ˜).
? ?
è dͭ :?
feek ( f , +5 , ÑEEK_CUR ); // dͥi v͓ tr hi͏n hành v͉ cu͙i 5 bytes
feek ( f, -4 , ÑEEK_CUR ); // dͥi v͓ tr hi͏n hành v͉ trưͣc 4 bytes
?
* Cho biӃt vӏ tr con trӓ file:
?
ftell  < FILE * > );
?
è dͭ :?
?
int size = ftell ( f );
/fsize: kho̫ng cách tͳ đ̯u t̵p tin đ͇n v͓ tr hi͏n hành (t nh b̹ng
byte)f/
?
?
f. Ví ß minh ho̩
?
voiß imTra (FILE *f , char ßuongßan [ ] )
{
f = opn ( ßuongßan , ³rt´);
if ( f == N
LL )
{
printf (³hong mo ßuoc tap tin %s´, ßuongßan);
prror (³\nL ßo´);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 99


?
? Tұp tin
?

gtch ();
rturn ;
}
printf (³Tap tin %s ßa ßuoc mo´, ßuongßan);
fclos (f);
}
?
I.3. Các v dө minh hoҥ
?
?
a. T̵p tin văn ¦̫n
?
è dͭ 1: èi͇t chương trình t̩o t̵p tin văn b̫n ÑO.OUR g͛m n s͙ nguyên,
các s͙ cͯa dãy đưͫc t̩o ng̳u nhiên có giá tr͓ tuy͏t đ͙i không vưͫt quá M
( n, M đ͕c tͳ t̵p tin ÑO.INO). K͇t qu̫ chương trình là 1 t̵p tin văn b̫n
có dòng thͱ nh̭t ghi s͙ n; n dòng ti͇p theo ghi các s͙ t̩o đưͫc, m͟i s͙
trên m͡t dòng.
?
Ñ  Ñ 

 
 


?
?
# incluß  conio.h >
# incluß  stßio.h >
?
# ßfin in ³S.INP´
# ßfin out ³S.

int n, M ;
?
voiß Nhap ()
{
FILE *fi;
fi = fopn ( in , ³rt´ );
fscanf ( fi, ³ %ß %ß ´, &n, &M );
fclos ( fi );
}
?
voiß Xuat ()
{
FILE *fo;
fo = fopn ( out , ³ wt ´ );
fprintf ( fo , ³ %ß\n´, n );
ranßomiz ( );
for ( ; n > 0 ; n -- )
fprintf ( fo , ³%ß\n´ , ranßom ( ( 2 * M + 1 ) - M ) );
fclos ( fo );

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 100


?
? Tұp tin
?

}
voiß main ()
{
clrscr ( );
Nhap ( );
Xuat ( );
}
?
è dͭ 2: èi͇t chương trình phát sinh ng̳u nhiên ma tr̵n a k ch thưͣc 5x6,
lưu ma tr̵n này vào file tst.inp. a͕c l̩i file tst.inp đưa dͷ li͏u vào ma
tr̵n b và xṷt ra màn hình xem k͇t qu̫ lưu đúng không? C̭u trúc cͯa file
tst.inp như sau:
- Dòng đ̯u lưu 2 s͙ nguyên: m, n th͋ hi͏n s͙ dòng và s͙ c͡t cͯa ma
tr̵n.
- m dòng ti͇p theo, m͟i dòng g͛m n ph̯n t͵ là giá tr͓ các ph̯n t͵
?
trên m͡t dòng cͯa ma tr̵n.
?
#inclußstßio.h>
#inclußconio.h>
#inclußstßli¦.h>
?
#ßfin MAX 100
#ßfin ßl "tst.inp"
?
voiß LuuFil(int a[MAX][MAX], int m, int n)
{
FILE *f;
f=fopn(ßl, "wt");
if(f==N
LL)
{
printf("\nhong tao ßuoc fil.");
gtch();
it(0);
}
fprintf(f, "%ß %ß\n", m, n);
for(int i=0; im; i++)
{
for(int j=0; jn; j++)
fprintf(f, "%ß\t", a[i][j]);
fprintf(f, "\n");
}
fclos(f);
}
?
voiß DocFil(int a[MAX][MAX], int &m, int &n)
{

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 101


?
? Tұp tin
?

FILE *f;
f=fopn(ßl, "rt");
if(f==N
LL)
{
printf("\nhong ßoc ßuoc fil.");
gtch();
it(0);
}
fscanf(f, "%ß%ß", &m, &n);
for(int i=0; im; i++)
{
for(int j=0; jn; j++)
fscanf(f, "%ß", &a[i][j]);
}
fclos(f);
}
?
voiß main()
{
int a[MAX][MAX], m=5, n=6, i, j;
int ¦[MAX][MAX], , ;
?
ranßomiz();
for(i=0; im; i++)
for(j=0; jn; j++)
a[i][j]=ranßom(1000);
LuuFil(a, m, n);
DocFil(¦, , );
for(i=0; i; i++)
{
for(j=0; j; j++)
printf("%ß\t", ¦[i][j]);
printf("\n");
? } ? ? ? ?
}
K͇t qu̫ v dͭ sau khi ch̩y chương trình, file test.inp có d̩ng sau:
56 ? ? ? ? ?
480 661 395 736 998 987
31 414 211 801 774 416
166 191 454 830 508 72
121 382 35 365 567 726
159 309 1 275 870 378
?
¦. T̵p tin nh͓ phân
?
ViӃt hàm đӑc/ ghi mӝt danh sách sinh viên cӫa mӝt lӟp vào tұp tin
?
SV.DAT
?
SINVIEN ßs[100];
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 102
?
? Tұp tin
?

int siso;
?
voiß nhap ( )
{
FILE *fi;
fi = fopn ( ³SV.DAT´ , ³ r¦´ );
fsk ( fi , 0 , SEEEND );
siso = ( ftll ( fi ) + 1 )  sizof ( SINVIEN );
fsk ( fi , 0 , SEESET );
fraß ( ßs , sizof ( SINVIEN ) , siso , fi );
fclos ( fi );
}
?
voiß uat ( )
{
FILE *fo;
fo = fopn ( ³SV.DAT´, ³ w¦´ );
fwrit ( ßs , sizof ( SINVIEN ) , siso , fo );
fclos ( fo );
}
?
II. BÀI TҰO
?
II.1. Bài tұp cơ bҧn
?
˜. ViӃt chương trình tҥo tұp tin văn bҧn chӭa ˜ dãy sӕ nguyên bҩt kǤ.
?
2. ViӃt chương trình tҥo tұp tin nhӏ phân chӭa ˜0000 sӕ nguyên bҩt kǤ ghi
vào file SONGUYEN.INO. Mӛi dòng ˜0 sӕ, sau đó viӃt chương trình đӑc
file SONGUYEN.INO, sҳp xӃp theo thӭ tӵ tăng dҫn và lưu kӃt quҧ vào file
SONGUYEN.OUT.
3. ViӃt chương trình tҥo mӝt file chӭa ˜0000 sӕ nguyên ngүu nhiên đôi mӝt
khác nhau trong phҥm vi tӯ ˜ đӃn 32767 và đһt tên là
³SONGUYEN.INOo.
4. ViӃt chương trình tҥo mӝt file chӭa các sӕ nguyên có tên
SONGUYEN.INO. Sau đó đӑc file SONGUYEN.INO và ghi các sӕ chҹn
vào file SOCHAN.OUT và nhӳng sӕ lҿ vào file SOLE.OUT.
5. ViӃt chương trình ghi vào tұp tin SOCHAN.DAT các sӕ nguyên chҹn tӯ 0
?
đӃn ˜00.
?
6. ViӃt chương trình đӑc tұp tin SOCHAN.DAT và xuҩt ra màn hình, mӛi
dòng 30 sӕ.
7. ViӃt chương trình giҧ lұp lӋnh COOY CON đӇ tҥo tұp tin văn bҧn. Khi kӃt
thúc tұp tin nhҩn phím F6 đӇ lưu.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 103
?
? Tұp tin
8. ViӃt chương trình giҧ lұp lӋnh TYOE đӇ in nӝi dung cӫa tұp tin văn bҧn ra
màn hình.
9. ViӃt chương trình kiӇm tra mӝt tұp tin nào đó có trong mӝt thư mөc đưӧc
chӍ đӏnh hay không?
˜0. ViӃt chương trình giҧ lұp lӋnh DEL đӇ xoá tұp tin. Yêu cҫu nhұp đưӡng
dүn và tên tұp tin, kiӇm tra sӵ tӗn tҥi cӫa tұp tin, nӃu có thì xoá tұp tin
đưӧc chӍ đӏnh.
˜˜. ViӃt chương trình giҧ lұp lӋnh RENAME đӇ đәi tên mӝt tұp tin.
?
˜2. ViӃt chương trình tҥo file văn bҧn có tên là ³MATRIX.INOo có cҩu trúc
như sau:
@ Dòng đҫu ghi hai sӕ m, n.
@ Trong m dòng tiӃp theo mӛi dòng ghi n sӕ và các sӕ các nhau mӝt
khoҧng cách.
?
Hãy kiӇm tra xem trong file đó có bao nhiêu sӕ nguyên tӕ.
?
KӃt quҧ cҫn ghi vào file ³MATRIX.OUTo có nӝi dung là mӝt sӕ nguyên
?
đó là sӕ lưӧng các sӕ nguyên tӕ trong file ³MATRIX.INOo.
?
˜3. Cho sӕ nguyên n, hãy in tam giác OASCAL gӗm n dòng
?
Dӳ lӋu vào: tұp tin văn bҧn OAS.INO gӗm ˜ dòng chӭa giá trӏ n.
?
KӃt quҧ: đưa ra tұp tin văn bҧn OAS.OUT thӇ hiӋn mӝt tam giác OASCAL
?
n dòng.
?
˜4. Cho mҧng các sӕ nguyên , hãy sҳp xӃp mҧng theo thӭ tӵ tăng dҫn.
?
Dӳ liӋu vào : tұp tin văn bҧn ARRAY.INO gӗm 2 dòng
?
- Dòng 1 chͱa s͙ nguyên n ( n < = 100 ).
?
- Dòng 2 chͱa n s͙ nguyên.
?
KӃt quҧ : Đưa ra tұp tin văn bҧn ARRAY.OUT gӗm hai dòng
?
- Dòng 1 chͱa n ph̯n t͵ cͯa m̫ng các s͙ nguyên.
?
- Dòng 2 chͱa n s͙ nguyên đưͫc x͇p tăng d̯n.
?
˜5. Cho mҧng các sӕ nguyên, tìm phҫn tӱ lӟn nhҩt cӫa mҧng.
?
Dӳ liӋu vào: tұp tin văn bҧn ARRAY.INO gӗm hai dòng:
?
- Dòng 1 chͱa s͙ nguyên n ( n < = 100 ).
?
- Dòng 2 chͱa n s͙ nguyên.
?
KӃt quҧ: Đưa ra tұp tin văn bҧn ARRAY.OUT gӗm ˜ dòng ghi 2 giá trӏ x,
y trong đó x là giá trӏ lӟn nhҩt, y là vӏ trí cӫa x trong mҧng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 104


?
? Tұp tin
?

II.2. Bài tұp luyӋn tұp và nâng cao


?
˜6. Cho mҧng các sӕ nguyên, tính tәng các phҫn tӱ cӫa mҧng.
?
Dӳ liӋu vào : tұp tin văn bҧn ARRAY.INO gӗm hai dòng
?
- Dòng 1 chͱa s͙ nguyên n ( n < = 10 )
?
- Dòng 2 chͱa n s͙ nguyên
?
KӃt quҧ : Đưa ra tұp tin văn bҧn ARRAY.OUT gӗm mӝt dòng ghi tәng
các phҫn tӱ trong mҧng.
˜7. Cho mҧng các sӕ nguyên, hãy liӋt kê các phҫn tӱ là sӕ nguyên tӕ
?
Dӳ liӋu vào : tұp tin văn bҧn NT.INO gӗm hai dòng
?
- Dòng 1 chͱa s͙ nguyên n ( n < = 100)
?
- Dòng 2 chͱa n s͙ nguyên
?
KӃt quҧ : đưa ra tұp tin văn bҧn NT.OUT gӗm hai dòng:
?
- Dòng 1 chͱa s͙ lưͫng các ph̯n t͵ nguyên t͙ trong m̫ng.
?
- Dòng 2 li͏t kê các s͙ nguyên t͙ đó.
˜8. (*) Tҥo file văn bҧn có tên là ³INOUT.TXTo có cҩu trúc như sau:
?
- Dòng đ̯u tiên ghi N (N là s͙ nguyên dương nh̵p tͳ bàn ph m).
?
- Rrong các dòng ti͇p theo ghi N s͙ nguyên ng̳u nhiên trong ph̩m vi
tͳ 0 đ͇n 100, m͟i dòng 10 s͙ (các s͙ cách nhau t nh̭t m͡t kho̫ng
tr̷ng).
Hãy đӑc dӳ liӋu cӫa file ³INOUT.TXTo và lưu vào mҧng mӝt chiӅu A.
Thӵc hiӋn các công viӋc sau :
@ Tìm giá trӏ lӟn nhҩt cӫa mҧng A.
@ ĐӃm sӕ lưӧng sӕ chҹn, sӕ lưӧng sӕ lҿ cӫa mҧng A.
@ Hãy sҳp xӃp các phҫn tӱ theo thӭ tӵ tăng dҫn.
Hãy ghi các kӃt quҧ vào file văn bҧn có tên OUTOUT.TXT theo mүu sau:
?
?
INOUT.TXT ? OUTOUT.TXT
˜8 Cau a: 99
87 39 78 ˜9 89 4 40 98 29 Cau b: 9 9
65 Cau c:
20 43 ˜ 99 38 34 58 4 ˜ 4 4 ˜9 20 29 34 38 39 40
43 58 65 78 87 89 98 99
?
?
?
˜9. (*) ViӃt chương trình nhұp và lưu hӗ sơ cӫa sinh viên vào mӝt file có tên
là ³DSSV.TXTo. Sau đó đӑc file ³DSSV.TXTo và cҩt vào mҧng, hãy sҳp
xӃp các hӗ sơ sinh viên theo thӭ tӵ giҧm dҫn theo điӇm trung bình môn
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 105
?
? Tұp tin
hӑc rӗi in ra màn hình hӗ sơ các sinh viên theo thӭ tӵ đó ra màn hình có
thông tin như sau :
@ Mã s͙ sinh viên.
@ H͕ và tên sinh viên.
@ ai͋m trung bình ki͋m tra.
@ ai͋m thi h͇t môn.
@ ai͋m trung bình môn h͕c (t nh b̹ng (đi͋m RBKR+đi͋m thi)/2).
20. (*) Tҥo mӝt file text có tên là ³INOUT.TXTo có cҩu trúc như sau :
?
- Dòng đ̯u tiên ghi hai s͙ M và N (M,N là hai s͙ nguyên dương nh̵p
tͳ bàn ph m).
- Rrong M dòng ti͇p theo m͟i dòng ghi N s͙ nguyên ng̳u nhiên trong
ph̩m vi tͳ 0 đ͇n 100 (các s͙ này cách nhau t nh̭t m͡t kho̫ng
tr̷ng).
Hãy đӑc dӳ liӋu tӯ file trên và lưu vào mҧng hai chiӅu. Rӗi thӵc hiӋn các
công viӋc sau:
@ Tìm giá trӏ lӟn nhҩt cӫa ma trұn.
@ ĐӃm sӕ lưӧng sӕ chҹn , lӁ, nguyên tӕ có trong ma trұn.
@ Hãy tính tәng các phҫn tӱ trên mӛi dòng cӫa ma trұn.
Hãy ghi kӃt quҧ này vào filetext có tên là ³OUTOUT.TXTo
?
INOUT.TXT OUTOUT.TXT
6 6 Cau a: 49
4˜ ˜7 33 23 ˜2 ˜ Cau b: ˜7 ˜9
44 24 23 49 5 24 Cau c: ˜27 ˜69 ˜47 2˜4 ˜32
33 20 ˜7 25 33 ˜9 ˜46
0 48 45 48 4˜ 32
˜0 24 36 ˜9 ˜9 24
30 4 23 26 27 36
?
?
2˜. (**) Xét dãy sӕ a˜, a2, «, aN. Mӝt đoҥn con cӫa dãy là dãy các phҫn tӱ
liên tiӃp nhau đưӧc xác đӏnh bӣi chӍ sӕ cӫa sӕ bҳt đҫu L) và chӍ sӕ cӫa sӕ
cuӕi cùng R).Tәng các sӕ trên đoҥn đưӧc gӑi là tәng đoҥn.
Yêu cҫu : Cho dãy  aN ), hãy tìm đoҥn con có tәng đoҥn lӟn nhҩt T)
Dӳ liêu đưӧc cho trong tұp tin văn bҧn SUMMAX.INO
- Dòng thͱ nh̭t chͱ s͙ nguyên N ( 0 < N <= 30000 )

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 106


?
? Tұp tin
?

- N dòng ti͇p theo, m͟i dòng chͱa m͡t s͙ là các s͙ cͯa dãy đã cho
theo đúng thͱ t͹. ÷iá tr͓ tuy͏t đ͙i cͯa m͡i s͙ không vưͫt quá 30000
KӃt quҧ tìm đưӧc ghi vào tұp tin văn bҧn SUMMAX.OUT gӗm ˜ dòng ghi
?
3 sӕ T, L, R.
?
è dө :
Ñ  Ñ 

   





?
?
?
22. (*) Cho dãy  aN ), hãy tìm đoҥn con tăng dҫn có tәng lӟn nhҩt
?
Dӳ liӋu : đưӧc cho trong tұp tin AMAX.INO
?
- Dòng 1 chͱa s͙ nguyên N ( 0 < N <= 30000 ).
?
- N dòng ti͇p theo, m͟i dòng chͱa m͡t s͙ là các s͙ cͯa dãy đãy cho
theo đúng thͱ tͭ. ÷iá tr͓ tuy͏t đ͙i cͯa m͟i s͙ không vưͫc quá 30000.
KӃt quҧ tìm đưӧc ghi vàp tin văn bҧn AMAX.OUT gӗm hai dòng:
?
- Dòng 1 ghi t͝ng cͯa dãy con.
?
- Dòng 2 ghi m̫ng con tăng d̯n có t͝ng lͣn nh̭t.
?
23. ViӃt chương trình nhұp lý lӏch mӝt nhân viên vào danh sách các nhân viên.
?
Khi không nhұp nӳa bҩm phím Esc và ghi vào tұp tin NHANVIEN.DAT
?
sau đó :
@ Đӑc tӯ tұp tin NHANVIEN.DAT vӯa tҥo và in danh sách các nhân
viên lên màn hình.
@ Tìm và in lý lӏch mӝt nhân viên bҵng các nhұp và hӑ tên hoһc mã sӕ
nhân viên.
?
24. (**) ĐӇ lҳp ráp mӝt máy vi tính hoàn chӍnh cҫn phҧi có tӕi thiӇu ˜0 linh
kiӋn loҥi A và có thӇ lҳp bә sung thêm vào khoҧng tӕi đa 8 linh kiӋn loҥi
B. Tҥi mӝt cӱa hàng vi tính cҫn quҧn lý bán hàng các loҥi linh kiӋn tҥi cӱa
hàng. Thông tin vӅ mӝt loҥi linh kiӋn gӗm có: Tên linh kiӋn, quy cách ,
loҥi, đơn giá loҥi ˜  chҩt lưӧng tӕt ± sӕ nguyên), đơn giá loҥi 2  chҩt
lưӧng thưӡng ± sӕ nguyên ). ViӃt chương trình thӵc hiӋn nhӳng công viӋc
sau :

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 107


?
? Tұp tin
@ Nhұp vào thông tin cӫa các loҥi linh kiӋn có ӣ cӱa hàng. Xuҩt danh
sách các linh kiӋn đã nhұp theo thӭ tӵ tăng dҫn cӫa loҥi linh kiӋn và
?

tên linh kiӋn. Cho biӃt đã có đӫ ˜0 linh kiӋn loҥi A cҫn thiӃt đӇ lҳp
ráp máy tính hay chưa?
@ Vӟi giҧ đӏnh là cӱa hàng đã có đӫ ˜0 linh kiӋn loҥi A đӇ lҳp ráp máy.
Nhұp vào mӝt sӕ tiӅn đӇ lҳp ráp mӝt máy tính. Có thӇ lҳp đưӧc mӝt
máy tính hoàn chӍnh vӟi các linh kiӋn toàn bӝ theo đơn giá loҥi ˜ hay
đơn giá loҥi 2 hay không? NӃu sӕ tiӅn trong khoҧng giӳa thì hãy tìm
mӝt phương án gӗm nhӳng linh kiӋn theo đơn giá ˜ và linh kiӋn theo
đơn giá 2 đӇ lҳp?
@ Tҩt cҧ dӳ liӋu phҧi lưu ӣ tұp tin.
?
?
III. KӂT LUҰN
?

! Mөc đích cӫa kiӇu dӳ liӋu tұp tin cho phép chúng ta lưu lҥi nhӳng thông tin cҫn

thiӃt tương đӕi lӟn: nhӳng dӳ liӋu đҫu vào, nhӳng kӃt quҧ cӫa chương trình hoһc
nhӳng dӳ liӋu dùng đӇ test chương trình, «
! Khi thao tác trên tұp tin phҧi thông qua 4 bưӟc: hai ¦áo con tr͗ tr͗ đ͇n t̵p tin,
?
Mͧ t̵p tin, X͵ lý trn t̵p tin và cu͙i cùng là Đóng t̵p tin.
! Lưu ý khi mӣ tұp tin đӇ ghi thì phҧi cҭn thұn vӟi thao tác tҥo mӟi hay chӍnh sӱa

nӝi dung tұp tin, di chuyӇn con trӓ hӧp lý đӇ tránh mҩt thông tin.
! Sӱ dөng hàm thao tác trên tұp tin phҧi dùng đúng loҥi hàm cho tұp tin kiӇu nhӏ
?
phân hay kiӇu văn bҧn.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 108


?
? ĐӋ qui
?
?
CHƯƠN÷ 9 Đӊ QUI
?
?
?

÷iͣi thi͏u phương pháp l̵p trình theo kͿ thu̵t đ͏ quy, phân lo̩i, cách ho̩t đ͡ng và
cách cài đ̿t các hàm đ͏ quy.
?
?
I. TÓM TҲT LÝ THUYӂT
?
?
I.1. Khái niӋm
?
Mӝt hàm đưӧc gӑi có tính đӋ qui nӃu trong thân cӫa hàm đó có lӋnh gӑi lҥi chính
nó mӝt cách tưӡng minh hay tiӅm ҭn.
?
I.2. Ohân loҥi đӋ qui
@ ĐӋ qui tuyӃn tính.
@ ĐӋ qui nhӏ phân.
@ ĐӋ qui phi tuyӃn.
@ ĐӋ qui hӛ tương.
?
?
a. Đ͏ qui tu͇n tính
?
Trong thân hàm có duy nhҩt mӝt lӡi gӑi hàm gӑi lҥi chính nó mӝt cách
tưӡng minh.
<KiӇu dӳ liӋu hàm> TenHam <danh sách tham sӕ>)
{
if điӅu kiӋn dӯng)
{
...
//Trҧ vӅ giá trӏ hay kӃt thúc công viӋc
}
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
. . . TenHam <danh sách tham sӕ>);
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
}
?
Ví dө ˜: Tính Ñ n) ˜ 2 3 L n
?
Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:
?
- ai͉u ki͏n dͳng: Ñ(0) = 0.
?
- Qui t̷c (công thͱc) t nh: Ñ(n) = Ñ(n-1) + n.
Ra cài đ̿t hàm đ͏ qui như sau:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 109


?
? ĐӋ qui
?

long TongS (int n)


{
if(n==0)
rturn 0;
rturn ( TongS(n-1) + n );
}
?
Ví dө 2: Tính On) = n!
?
Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:
?
- ai͉u ki͏n dͳng: O( 0) = 0! = 1.
?
- Qui t̷c (công thͱc) t nh: O(n) = O(n-1) f n.
Ra cài đ̿t hàm đ͏ qui như sau:
long GiaiThua (int n)
{
if(n==0)
rturn 1;
rturn ( GiaiThua(n-1) * n );
}
?
¦. Đ͏ qui nh͓ phân
?
Trong thân cӫa hàm có hai lӡi gӑi hàm gӑi lҥi chính nó mӝt cách tưӡng
minh.
<KiӇu dӳ liӋu hàm> TenHam <danh sách tham sӕ>)
{
if điӅu kiӋn dӯng)
{
...
//Trҧ vӅ giá trӏ hay kӃt thúc công viӋc
}
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
. . .TenHam <danh sách tham sӕ>); //Giҧi quyӃt vҩn đӅ nhӓ hơn
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
. . . TenHam <danh sách tham sӕ>); //Giҧi quyӃt vҩn đӅ còn lҥi
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
}
?
Ví dө ˜: Tính sӕ hҥng thӭ n cӫa dãy Fibonaci đưӧc đӏnh nghĩa như sau:
?
f˜ = f0 =˜ ;
?

fn = fn-˜ + fn-2 ; n>˜)


?

Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:


?
- ai͉u ki͏n dͳng: f(0) = f(1) = 1.
Ra cài đ̿t hàm đ͏ qui như sau:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 110


?
? ĐӋ qui
?

long Fi¦onaci (int n)


{
if(n==0 || n==1)
rturn 1;
rturn Fi¦onaci(n-1) + Fi¦onaci(n-2);
}
?
Ví dө 2: Cho dãy sӕ nguyên a gӗm n phҫn tӱ có thӭ tӵ tăng dҫn. Tìm phҫn
tӱ có giá trӏ x có xuҩt hiӋn trong mҧng không?
Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:
?
- ai͉u ki͏n dͳng: Rìm th̭y x ho̿c xét h͇t các ph̯n t͵.
?
- ÷i̫i thu̵t:
?
Do dãy s͙ đã có thͱ t͹ tăng nên ta có th͋ áp dͭng cách tìm ki͇m
theo phương pháp nh͓ phân. Ý tưͧng cͯa phương pháp này là t̩i
m͟i bưͣc ta ti͇n hành so sánh x vͣi ph̯n t͵ n̹m ͧ v͓ tr giͷa cͯa
dãy đ͋ thu h́p ph̩m vi tìm.
÷͕i: l: biên trái cͯa dãy (ban đ̯u l=0).
r: biên ph̫i cͯa dãy (ban đ̯u r = n-1).
m: v͓ tr ͧ giͷa (m = (l+r)/2).
?

l ? ? m ? ? R
˜ ? ? ˜ ? ? ˜
a[0] a[1] « a[(l+r)/2] « a[n-2] a[n-1]
Rhu h́p d͹a vào giá tr͓ cͯa ph̯n t͵ ͧ giͷa, có hai trưͥng hͫp:
?
i. N͇u x lͣn hơn ph̯n t͵ ͧ giͷa thì x ch͑ có th͋ xṷt hi͏n ͧ bên
ph̫i v͓ tr này. (tͳ m+1 đ͇n r).
ii. Ngưͫc l̩i n͇u x nh͗ hơn ph̯n t͵ ͧ giͷa thì x ch͑ có th͋ xṷt
hi͏n ͧ bên trái v͓ tr này. (tͳ l đ͇n m-1).
Quá trình này th͹c hi͏n cho đ͇n khi g̿p ph̯n t͵ có giá tr͓ x, ho̿c
?
đã xét h͇t các ph̯n t͵.
Ra cài đ̿t hàm đ͏ qui như sau:
int TimNhiPhan(int a[], int l, int r, int )
{
int m = (l+r)2;
if(l>r)
rturn -1; hông có ph̯n t͵ 
if(a[m]>) rturn TimNhiPhan(a, l, m-1, );
if(a[m]) rturn TimNhiPhan(a, m+1, r, );
rturn m;Tr̫ v͉ v͓ trí tìm th̭

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 111


?
? ĐӋ qui
?

}
?
Ví dө 3: Bài toán tháp Hà Nӝi:
?
Bưͣc 1: Di chuy͋n n -1 đĩa nh͗ hơn tͳ c͕c A sang c͕c B.
Bưͣc 2: Di chuy͋n đĩa còn l̩i tͳ c͕c A sang c͕c C.
Bưͣc 3: Di chuy͋n n -1 đĩa nh͗ hơn tͳ c͕c B sang c͕c C.
Ra cài đ̿t hàm đ͏ qui như sau:
voiß ThapaNoi (int n, char A, char B, char C)
{
if (n = = 1)
printf(³Di chun ßia trn cung tu %ß ßn %ß\n´, A, C);
ls ??
{ ?
? ThapaNoi(n-1, A, C, B);
?
? ThapaNoi(1, A, B, C);
? ThapaNoi(n-1, B, A, C);
}
}
?
?
c. Đ͏ qui phi tu͇n
?
Trong thân cӫa hàm có lӡi gӑi hàm gӑi lҥi chính nó đưӧc đһt bên trong
vòng lһp.
<KiӇu dӳ liӋu hàm> TenHam <danh sách tham sӕ>)
{
for int i = ˜; i<=n; i++)
{
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
if điӅu kiӋn dӯng)
{
? ...
?
? //Trҧ vӅ giá trӏ hay kӃt thúc công viӋc
} ?
?
else ?
{ ?
? //Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
?
? TenHam <danh sách tham sӕ>);
}
}
}
?
Ví dө: Tính sӕ hҥng thӭ n cӫa dãy {Xn} đưӧc đӏnh nghĩa như sau:
X0 =˜ ;
Xn = n2X0 + n-˜)2X˜ + « + ˜2Xn-˜ ; n•˜)
?

Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:


Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 112
?
? ĐӋ qui
?

- ai͉u ki͏n dͳng:œ(0) = 1.


?
Ra cài đ̿t hàm đ͏ qui như sau:
?
long TinhXn (int n)
{
if(n==0)
rturn 1;
long s = 0;
for (int i=1; i=n; i++)
s = s + i * i * TinhXn(n-i);
rturn s;
}
?
ß. Đ͏ qui h͟ tương
Trong thân cӫa hàm này có lӡi gӑi hàm đӃn hàm kia và trong thân cӫa
hàm kia có lӡi gӑi hàm tӟi hàm này.
?
?
?


ë
?
? ë ?
? ?
ë
 ?

?
<KiӇu dӳ liӋu hàm> TenHam2 <danh sách tham sӕ>);
<KiӇu dӳ liӋu hàm> TenHam1 <danh sách tham sӕ>)
{
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
«TenHam2 <danh sách tham sӕ>);
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
}
?
<KiӇu dӳ liӋu hàm> TenHam2 <danh sách tham sӕ>)
{
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
«TenHam1 <danh sách tham sӕ>);
//Thӵc hiӋn mӝt sӕ công viӋc nӃu có)
}
?
Ví dө: Tính sӕ hҥng thӭ n cӫa hai dãy {Xn}, {Yn} đưӧc đӏnh nghĩa như
?

sau:
?
X0 =Y0 =˜ ;
?

Xn = Xn-˜ + Yn-˜; n>0)


Yn = n2Xn-˜ + Yn-˜; n>0)
Rrưͣc khi cài đ̿t hàm đ͏ qui ta xác đ͓nh:
?
- ai͉u ki͏n dͳng:œ(0) = Y(0) = 1.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 113


?
? ĐӋ qui
?

Ra cài đ̿t hàm đ͏ qui như sau:


?
long TinhYn(int n);
long TinhXn (int n)
{
if(n==0)
rturn 1;
rturn TinhXn(n-1) + TinhYn(n-1);
}
?
long TinhYn (int n)
{
if(n==0)
rturn 1;
rturn n*n*TinhXn(n-1) + TinhYn(n-1);
}
?
I.3. Tìm hiӇu cách hoҥt đӝng cӫa hàm đӋ qui
?
Ohөc vө cho công viӋc kiӇm chӭng kӃt quҧ thӵc thi cӫa chương trình bҵng tay.
?
è dө 1: Lҩy lҥi ví dө tính O(n) = n! bҵng phương pháp đӋ qui như đã mô tҧ cài
?
đһt ӣ trên vӟi n = 5
?
?
?
?
?
?
?
LӋnh gӑi khӣi đҫu trong hàm main), truyӅn đӃn hàm GiaiThua). Ӣ đó, giá trӏ
cӫa tham sӕ n là 5, do đó nói gӑi GiaiThua4), truyӅn 4 đӃn hàm GiaiThua). Ӣ
đó giá trӏ cӫa tham sӕ n là 4, do đó nó gӑi GiaiThua3), truyӅn 3 đӃn hàm
GiaiThua). TiӃn trình này tiӃp tөc đӋ quy) đӃn khi gӑi GiaiThua˜) đưӧc thӵc
hiӋn tӯ bên trong lӋnh gӑi GiaiThua2). Ӣ đó, giá trӏ cӫa tham sӕ n là ˜, do đó nó
trҧ vӅ giá trӏ ˜, mà không thөc hiӋn thêm bҩt kì lӋnh gӑi nào. Sau đó lҫn ngưӧc vӅ
lӋnh gӑi GiaiThua2) trҧ 2*˜=2 trӣ vӅ lӋnh gӑi GiaiThua3). Sau đó lӋnh gӑi
GiaiThua3) trҧ 3*2=6 trӣ vӅ lӋnh gӑi GiaiThua4). Sau đó lӋnh gӑi GiaiThua4)
trҧ 4*6=24 trӣ vӅ lӋnh gӑi GiaiThua5). Sau cùng, lӋnh gӑi GiaiThua5) trҧ vӅ giá
trӏ ˜20 cho hàm main).
è dө 2: Lҩy lҥi ví dө tính sӕ hҥng thӭ n cӫa dãy Fibonaci như đã mô tҧ cài đһt ӣ
?
trên vӟi n = 5, quá trình thӵc hiӋn tương tӵ như trong ví dө trưӟc, ta có sơ đӗ sau:

? Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 114


? ĐӋ qui
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
I.4. è dө
?
ViӃt chương trình nhұp vào mҧng mӝt chiӅu sӕ nguyên a, xuҩt ra màn hình và
tính tәng các phҫn tӱ có giá trӏ chҹn bҵng phương pháp đӋ qui.
#ßfin MAX 100
voiß Nhap(int a[], int n)
{
if(n==0)
rturn;
Nhap(a, n-1);
printf("\nNhap phan tu thu %ß: ", n);
scanf("%ß", &a[n-1]);
}
?
voiß Xuat(int a[], int n)
{
if(n==0)
rturn; Xuat(a, n-1);
printf("%ß\t", a[n-1]);
}
?
long TongChan(int a[], int n)
{
if(n==0)
rturn 0;
int s = TongChan(a, n-1);
if(a[n-1]%2==0)
s+=a[n-1];
rturn s;
}

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 115


?
? ĐӋ qui
?

voiß main()
{
int a[MAX], n;
long s;
?
printf("\nNhap so phan tu cua mang: ");
scanf("%ß", &n);
Nhap(a, n);
Xuat(a, n);
s=TongChan(a, n);
printf("\nTong cac so chan trong mang la: %lß", s);
gtch();
}
?
II. BÀI TҰO
?
èiӃt hàm đӋ qui thӵc hiӋn các yêu cҫu sau:
?
?
II.1. Bài tұp cơ bҧn
?
˜. Cài đһt lҥi nhӳng bài tұp ӣ chương mҧng mӝt chiӅu.
?
2. Tìm chӳ sӕ có giá trӏ lӟn nhҩt cӫa sӕ nguyên dương n.
?
3. Hãy xây dӵng mӝt dãy gӗm N sӕ có giá trӏ tӯ ˜ đӃn K cho trưӟc, sau cho
không có hai dãy con liên tiӃp đӭng kӅ nhau.
Ví dө: N = 6
?
K=3
?
K͇t qu̫: 121312
?
4. Tìm ưӟc sӕ chung lӟn nhҩt cӫa hai sӕ nguyên dương a và b.
?
5. Tìm chӳ sӕ đҫu tiên cӫa sӕ nguyên dương n.
?
6. Tìm dãy nhӏ phân dài nhҩt sao cho trên dãy này không có hai bӝ k bҩt kǤ
?
trùng nhau. Bӝ k là dãy con có k sӕ liên tiӃp nhau trên dãy tìm đưӧc.
Ví dө: k = 3
KӃt quҧ: 000 ˜0˜ ˜˜0 0
n 70
7. Tính On) ˜.3.5K 2n ˜) , vӟi
n 70
8. Tính Ñ n) ˜ 3 5 L 2 n ˜) , vӟi
9. Tính Ñ n) ˜ 2 3 4 L ˜) n ˜ n , vӟi n  0
n 0
˜0. Tính Ñ n) ˜ ˜.2 ˜.2.3 L ˜.2.3K n , vӟi
˜˜. Tính Ñ n) ˜2 2 2 32 L n 2 , vӟi n  0

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 116


?
? ĐӋ qui
?
˜ ˜ ˜
˜2. Tính Ñ n) ˜   L  , vӟi n  0 ?
2 3 n ?
? ? ? ?
˜ ˜ ˜
˜3. Tính Ñ n) ˜   L  , vӟi n  0
˜ 2 ˜ 2 3 ˜ 2 3 L n
˜4. Tính O x, y) x y .
?
˜5. Tính Ñ n) ˜ ˜ 2) ˜ 2 3) L ˜ 2 3 L n) , vӟi n  0
?
?
II.2. Bài tұp luyӋn tұp và nâng cao
?
˜6. Cho sӕ nguyên dương n. In ra biӇu diӉn nhӏ phân cӫa n.
?
˜7. (*) Cài đһt và minh hoҥ bài toán tháp Hà Nӝi.
?
˜8. (**) Cài đһt bài toán mã đi tuҫn.
?
˜9. (**) Cài đһt bài toán tám hұu.
?
?
20. (*) Tính Ñ n)  n  n ˜)  n 2) ...  ˜, vӟi n  0
?
?
2˜. (*) Tính Ñ n)  ˜  2  3 ...  n , vӟi n  0
?
? ?
Ñ n)  ˜
22. (*) Tính có n dҩu phân sӕ.
˜
˜
˜
˜
˜
˜
˜
O
˜
˜
˜ ˜
?
?
III. KӂT LUҰN
?

! ĐӋ qui cung cҩp cho ta cơ chӃ giҧi quyӃt các bài toán phӭc tҥp mӝt cách đơn

giҧn hơn.
! Xây dӵng hàm đӋ qui thông qua viӋc Èác đӏnh điӅu kiӋn dӯng và bưӟc thӵc
?
hiӋn tiӃp theo.
! ChӍ nên cài đһt bҵng phương pháp đӋ qui khi không còn cách giҧi quyӃt bҵng
cách lһp thông thưӡng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 117


?
? ViӃt chương trình theo phương pháp Oroject
?
?
CHƯƠN÷ 10 LҰO TRÌNH THEO OHƯƠN÷ OHÁO OROJECT
?
?
I. MӨC TIÊU
?
Chia mӝt chương trình lӟn thành các tұp tin nhӓ hơn, mӛi tұp tin chӭa các khai báo
nguyên mүu hàm, cài đһt các hàm và dӳ liӋu thӵc hiӋn mӝt sӕ chӭc năng nhҩt đӏnh.
ViӋc phân chia này giúp quá trình lұp trình:
! DӉ kiӇm soát các lӋnh và kiӇm lӛi.
! Tránh đưӧc giӟi hҥn kích thưӟc tұp tin quá lӟn cӫa ngôn ngӳ lұp trình.
?
?
II. OHƯƠN÷ OHÁO
?
?
II.1. Tҥo mӝt project mӟi
?
Bưӟc 1: Tҥo thư mөc sӁ chӭa toàn bӝ chương trình sӁ đưӧc cài đһt.
?
Bưӟc 2: Khӣi đӝng Borland C++ 3.˜.
?
Bưӟc 3: Thay đәi đưӡng dүn đӃn thư mөc vӯa tҥo.
?
Vào menu File\Change Dir ... sau đó chӑn đưӡng dүn thư mөc và chӑn OK.
?
Bưӟc 4: Tҥo Oroject.
?
Vào menu Oroject\Open Oroject sau đó đһt tên cho project tương ӭng, chӑn OK.
|ưu ý: œem đưͥng d̳n cͯa file Oroject có n̹m đúng thư mͭc vͳa t̩o ͧ bưͣc 1
hay không. N͇u c̯n có th͋ ch͑nh s͵a l̩i đưͥng d̳n).
Bưӟc 5: Thêm file vào Oroject.
?
Chӑn menu Window\Oroject sau đó nhҩn phím Insert hoһc vào menu Oroject\Add
Item ... đһt tên file và chӑn OK, muӕn loҥi file khӓi project thì chӑn
Oroject\Delete Item Hoһc khi đang trong cӱa sә project vӯa tҥo nhҩn phím insert
đӇ thêm file, muӕn xoá chӑn file rӗi nhҩn delete).
|ưu ý: Ch͑ Insert các file chͱa cài đ̿t lͣp và hàm main (f.cpp), không insrt fil
?
haßr ßo ngưͥi ßùng đ͓nh ngh a *.h).
?
?
II.2. Mӣ project có sҹn
?
Bưӟc 1: Đóng project trưӟc nӃu có).
Vào menu Oroject\Close Oroject.
Bưӟc 2: Mӣ project.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 118


?
? ViӃt chương trình theo phương pháp Oroject
?

Vào menu Oroject\Open Oroject chӑn đưӡng dүn đӃn file project cҫn thӵc hiӋn,
chӑn OK.
Bưӟc 3: HiӋu chӍnh đưӡng dүn thư viӋn cӫa BC++ 3.˜.
?
ViӋc tҥo project ӣ các máy vӟi thông sӕ cài đһt BC++3.˜ khác nhau sӁ dүn đӃn
đưӡng dүn thư viӋn hàm cӫa các máy cũng khác nhau, do vұy khi biên dӏch sӁ gһp
lӛi vӅ thư viӋn hàm trong BC++3.˜.
Vào menu Options\Directories... sau đó hiӋu chӍnh lҥi đưӡng dүn đӃn thư mөc
chӭa thư viӋn hàm trong các ô Include và Library cho đúng vӟi đưӡng dүn cài
BC++3.˜ aưͥng d̳n đ͇n thư mͭc INC|UDE và thư mͭc BIN cͯa BC++3.1 trên
máy đang s͵ dͭng).
?
?
II.3. Mӝt sӕ lưu ý
?
Nên chia tӯng file theo tӯng nhóm hàm. Mӛi mӝt project phҧi có tӕi thiӇu 3 file
?
như sau:
j File header (*.h): Tҥo thư viӋn tӵ đӏnh nghĩa. Chӭa các khai báo nguyên mүu
hàm, kiӉu dӳ liӋu, «
j File cài đһt hàm (*.cpp): Chӭa các cài đһt hàm theo nhóm. NӃu có sӱ dөng
?
thư viӋn tӵ đӏnh nghĩa thì phҧi include file chӭa thư viӋn đó vào.
j File chӭa hàm main() (m*.cpp): Chӭa hàm chính hàm main()).
 Khi cài đ̿t hay ch͑nh s͵a m͡t hàm nào đó trưͣc h͇t ph̫i xem xét hàm đó thu͡c
?
nhóm hàm nào và sau đó mͧ file cͯa nhóm tương ͱng đ͋ hi͏u ch͑nh.
?
?
II.4. è dө minh hoҥ
?
ViӃt chương trình nhұp thông tin cӫa hӑc sinh gӗm: hӑ tên hӑc sinh, điӇm văn và
toán, xuҩt thông tin và tính điӇm trung bình cho hӑc sinh đó.
Ra chia chͱc năng chương trình theo các nhóm chͱc năng đ͋ d͍ qu̫n lý, g͛m các
file sau:
! File hocsinh.h: Chͱa các khai báo bi͇n và nguyên m̳u hàm.
! File mhocsinh.cpp: Chͱa hàm main().
! File uat.cpp: Chͱa các thao tác xṷt thông tin h͕c sinh, «
! File nhap.cpp: Chͱa các thao tác nh̵p thông tin h͕c sinh, «
! File tinhtoan.cpp: Chͱa các thao tác t nh đi͋m trung bình, «

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 119


?
? ViӃt chương trình theo phương pháp Oroject
?

Bưͣc 1: R̩o thư mͭc CSIN sͅ chͱa toàn b͡ các file cͯa chương trình sͅ
đưͫc cài đ̿t (è dͭ t̩o ͧ ͝ đĩa D:).
Bưͣc 2: Khͧi đ͡ng Borland C++ 3.1.
?
Bưͣc 3: Rhay đ͝i đưͥng d̳n đ͇n thư mͭc CSIN vͳa t̩o.
! Chӑn thư mөc HOCÑINH
?

?
Bưӟc 4: Tҥo Oroject: Đһt tên file project là hocsinh
?

! Cài đһt file hocsinh.h trong thư mөc HOCÑINH.


?
# ifnßf CSIN
# ßfin CSIN
?
tpßf struct CSIN
{
char hotn[30];
int toan, van;
};
?
voiß NhapS(CSIN &hs);
float TinhDTB(CSIN hs);
voiß XuatS(CSIN hs);
?
# nßif

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 120


?
? ViӃt chương trình theo phương pháp Oroject
Bưӟc 5: Thêm file vào Oroject.
?

! Nhҩn F3, đһt tên file mӟi là nhap.cpp và viӃt hàm nhұp. Tương tӵ cho nhӳng
file: Èuat.cpp, tinhtoan.cpp và file mhocsinh.cpp.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 121


?
? ViӃt chương trình theo phương pháp Oroject
! Nӝi dung file nhap.cpp.
?
#incluß conio.h>
#incluß stßio.h>
?
 S͵ ß ng ki͋u ß li͏u CSIN và khai ¦áo ngun m̳u hàm
#incluß "hocsinh.h"
?
voiß NhapS(CSIN &hs)
{
printf("\nNhap vao ho tn hoc sinh: ");
gts(hs.hotn);
printf("\nNhap vao ßim toan: ");
scanf("%ß", &hs.toan);
printf("\nNhap vao ßim van: ");
scanf("%ß", &hs.van);
}
! Nӝi dung file Èuat.cpp.
?
#incluß conio.h>
#incluß stßio.h>
?
 S͵ ß ng ki͋u ß li͏u CSIN và khai ¦áo ngun m̳u hàm
#incluß "hocsinh.h"
?
voiß XuatS(CSIN hs)
{
printf("\no tn hoc sinh: %s", hs.hotn);
printf("\nDim toan: %ß \nDim van: %ß", hs.toan, hs.van);
printf("\nDim trung ¦inh: %.2f", TinhDTB(hs));
}
! Nӝi dung file tinhtoan.cpp.
?
 S͵ ß ng ki͋u ß li͏u CSIN và khai ¦áo ngun m̳u hàm
#incluß "hocsinh.h"
?
float TinhDTB(CSIN hs)
{
rturn (hs.toan + hs.van)2.0;
}
! Nӝi dung file mhocsinh.cpp.
?
#incluß conio.h>
#incluß stßio.h>
?
 S͵ ß ng ki͋u ß li͏u CSIN và khai ¦áo ngun m̳u hàm
#incluß "hocsinh.h"

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 122


?
? ViӃt chương trình theo phương pháp Oroject
?

voiß main()
{
clrscr();
CSIN hs;
?
?
NhapS(hs);
printf(³\nt qua:\n´);
XuatS(hs);
?
gtch();
}
?
?
! Nhҩn F9 đӇ biên dӏch và kiӇm lӛi.
! Nhҩn Ctrl + F9 đӇ thӵc thi chương trình.
?
Ví ß k͇t qu̫ ch̩ chương trình
?
Nhap vao ho tn hoc sinh: Ngun Van A
Nhap vao ßim toan: 6
Nhap vao ßim van: 5
?
t qua:
?
o tn hoc sinh: Ngun Van A
Dim toan: 6
Dim van: 5
Dim trung ¦inh: 5.50
?
?
III. BÀI TҰO
?
Cài đһt các bài tұp ӣ chương mҧng cҩu trúc bҵng phương pháp tҥo project.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 123


?
? Mӝt sӕ đӅ thi mүu
?
?
OHӨ LӨC 1 Đӄ THI MҮU
?
?
?
Đӄ Ñ 01
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
?
Câu 1: ViӃt chương trình tính tәng: Ñ n) ˜!2!L n!
?
Câu 2: ViӃt chương trình thӵc hiӋn các yêu cҫu sau:
?
a. Nhұp mҧng mӝt chiӅu các sӕ nguyên.
?
b. ĐӃm sӕ lưӧng giá trӏ chҹn âm trong mҧng.

c. Tìm sӕ lҿ cuӕi cùng trong mҧng.

Câu 3: Cho ma trұn các sӕ thӵc. ViӃt hàm tìm giá trӏ trong ma trұn xa giá trӏ x nhҩt.

float Èanhatfloat a[][˜00], int m, int n, float x);

Câu 4: Hãy khai báo kiӇu dӳ liӋu biӇu diӉn khái niӋm điӇm trong mһt phҷng Oxy
?
DIEM).
?
a. ViӃt hàm nhұp tӑa đӝ điӇm.

void nhapDIEM &O);

b. ViӃt hàm xuҩt tӑa đӝ điӇm.

void ÈuatDIEM O);

c. ViӃt hàm tính khoҧng các giӳa 2 điӇm.

float khoangcachDIEM O, DIEM Q);


?
Đӄ Ñ 02
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
?
Câu 1: ViӃt chương trình tính tәng: Ñ  x, n)  x  x 2 L  x n
?
Câu 2: ViӃt chương trình thӵc hiӋn các yêu cҫu sau:
?
a. Nhұp mҧng mӝt chiӅu các sӕ nguyên.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 124
?
? Mӝt sӕ đӅ thi mүu
b. ĐӃm sӕ lưӧng giá trӏ lҿ dương trong mҧng.

c. Tìm sӕ chҹn cuӕi cùng trong mҧng.

Câu 3: Cho ma trұn các sӕ thӵc. ViӃt hàm tìm giá trӏ trong ma trұn gҫn giá trӏ x nhҩt.

float gannhatfloat a[][˜00], int m, int n, float x);

Câu 4: Hãy khai báo kiӇu dӳ liӋu biӇu diӉn khái niӋm phân sӕ OHANÑO)
?
a. ViӃt hàm nhұp phân sӕ.

void nhapOHANSO &x);

b. ViӃt hàm xuҩt phân sӕ.

void ÈuatOHANSO x);

c. ViӃt hàm tính tәng hai phân sӕ.


?
OHANSO tongOHANSO x, OHANSO y);
?
?
Đӄ Ñ 03
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
? ?
Câu 1: ? ?
? ?
˜ 3 5 2n ˜
Sn =   ...  Vӟi n nguyên dương n>0)
2 4 6 2n 2
?
˜. VӁ lưu đӗ thuұt toán Flowchart) tính tәng trên.
?
2. ViӃt hàm tính tәng trên bҵng phương pháp đӋ quy.
?
Câu 2:
?
Cho mҧng mӝt chiӅu các sӕ thӵc A kích thưӟc n 0<n”˜00). Hãy xây dӵng hàm
thӵc hiӋn các yêu cҫu sau:
˜. Nhұp giá trӏ các phҫn tӱ vào mҧng.
?
2. Tìm và trҧ vӅ vӏ trí cӫa phҫn tӱ có giá trӏ âm đҫu tiên trong mҧng. NӃu không
có giá trӏ âm thì trҧ vӅ -˜.
3. Tìm và trҧ vӅ giá trӏ phҫn tӱ âm lӟn nhҩt trong mҧng a. NӃu mҧng không có
?
phҫn tӱ chӭa giá trӏ âm thì trҧ vӅ 0.
?
Câu 3:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 125


?
? Mӝt sӕ đӅ thi mүu
Cho ma trұn vuông các sӕ nguyên A kích thưӟc nxn 3<n<˜0). Hãy xây dӵng các
hàm cho phép thӵc hiӋn các yêu cҫu sau:
˜. Nhұp giá trӏ các phҫn tӱ vào ma trұn.
?
2. ĐӃm và trҧ vӅ sӕ lưӧng các phҫn tӱ là sӕ nguyên tӕ trong ma trұn.
?
3. Tính trung bình cӝng các phҫn tӱ trên đưӡng chéo chính.
?
Câu 4:
?
Hãy khai báo kiӇu dӳ liӋu đӇ biӇu diӉn thông tin cӫa mӝt nhân viên
?
NHANèIEN).
?
BiӃt mӝt nhân viên gӗm:
?
Ë Mã nhân viên MaNè): Chuӛi tӕi đa 5 ký tӵ.
?
Ë Tên nhân viên TenNè): Chuӛi tӕi đa 30 ký tӵ.
?
Ë Chӭc vө Chucèu): Chuӛi tӕi đa 20 ký tӵ
?
g͛m các chͱc vͭ: ³Rruong phong´, ³Nhan vien´, ³÷iam doc´, ³Oho giam
doc´, «).
Ë Sӕ năm làm viӋc ÑoNam): Sӕ nguyên ˜ byte.
?
Ë HӋ sӕ lương HeÑo): KiӇu sӕ thӵc.
?
Cho danh sách gӗm n (n>0) nhân viên. èiӃt các hàm sau:
?
˜. LiӋt kê các nhân viên có sӕ năm làm viӋc tӯ 3 năm trӣ lên.
?
2. ĐӃm sӕ nhân viên có chӭc vө là XTruong phong .
?

Sҳp xӃp danh sách nhân viên tăng dҫn theo hӋ sӕ lương nhân viên.
?
?
?
?
Đӄ Ñ 04
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
?
!!!!
?
?
Câu 1:
?
n ˜
Sn = ˜ 2 3 4 L ˜) n Vӟi n nguyên dương n>0)
?
˜. VӁ lưu đӗ thuұt toán Flowchart) tính tәng trên.
?
2. ViӃt hàm tính tәng trên bҵng phương pháp đӋ quy.
?
Câu 2:
?
Cho mҧng mӝt chiӅu các sӕ nguyên A kích thưӟc n 0< n”˜00). Hãy xây dӵng
hàm thӵc hiӋn các yêu cҫu sau:
˜. Nhұp giá trӏ các phҫn tӱ vào mҧng.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 126


?
? Mӝt sӕ đӅ thi mүu
2. Tìm và trҧ vӅ vӏ trí cӫa phҫn tӱ có giá trӏ là sӕ nguyên tӕ đҫu tiên trong
mҧng. NӃu không có giá trӏ là sӕ nguyên tӕ thì trҧ vӅ -˜.
3. Tìm và trҧ vӅ giá trӏ phҫn tӱ là sӕ nguyên tӕ lӟn nhҩt trong mҧng a. NӃu
?
mҧng không có phҫn tӱ là sӕ nguyên tӕ thì trҧ vӅ 0.
?
Câu 3:
?
Cho ma trұn vuông các sӕ thӵc A kích thưӟc nxn 3<n<˜0). Hãy xây dӵng các
hàm cho phép thӵc hiӋn các yêu cҫu sau:
˜. Nhұp giá trӏ các phҫn tӱ vào ma trұn.
?
2. LiӋt kê nhӳng phҫn tӱ tҥi nhӳng dòng lҿ trong ma trұn.
?
3. Tính và trҧ vӅ giá trӏ trung bình cӝng cӫa nhӳng phҫn tӱ âm trong ma trұn.
?
Câu 4:
?
Hãy khai báo kiӇu dӳ liӋu đӇ biӇu diӉn thông tin cӫa mӝt mһt hàng
?
MATHAN÷).
?
BiӃt mӝt mһt hàng gӗm:
?
Ë Mã hàng MaHang): Chuӛi tӕi đa 5 ký tӵ.
?
Ë Tên hàng TenHang): Chuӛi tӕi đa 30 ký tӵ.
?
Ë Sӕ lưӧng ÑoLuong): Sӕ nguyên 2 byte.
?
Ë Đơn vӏ tính DonèiTinh): Chuӛi tӕi đa 5 ký tӵ.
?
Ë Đơn giá Don÷ia): KiӇu sӕ thӵc.
?
Cho danh sách gӗm n (n>0) mһt hàng. èiӃt các hàm sau:
?
˜. LiӋt kê các mһt hàng có sӕ lưӧng lӟn hơn 100.
?
2. Tìm và trҧ vӅ mһt hàng có thành tiӅn lӟn nhҩt
?
(thành ti͉n=s͙ lưͫngfđơn giá).
?
Sҳp xӃp danh sách các mһt hàng theo thӭ tӵ giҧm dҫn cuҧ đơn giá.
?
?
Đӄ Ñ 05
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
Bài 1: Nhұp sӕ nguyên n 0<nã20). ViӃt chương trình xuҩt n phҫn tӱ đҫu tiên cӫa hai
mҧng A và B, cho biӃt các giá trӏ đưӧc xác đӏnh như sau:

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 127


?
? Mӝt sӕ đӅ thi mүu
!
!A˜ ˜, B˜ ˜
! 2 2
!Ai  Ai ˜ Bi ˜
! B
!Bi 2Ai  i ˜
! 2
?
Bài 2: ViӃt chương trình nhұp vào ma trұn vuông cҩp n vӟi n nhұp tӯ bàn phím. Hãy
kiӇm tra ma trұn này có phҧi là ma trұn tam giác dưӟi hoһc tam giác trên theo đưӡng
chéo phө không?
Ví dө:
?

?
Ma trұn tam giác trên Ma trұn tam giác dưӟi
?
Bài 3: Mӛi hӗ sơ nhân viên gӗm:
@ hӑ tên
@ năm sinh
@ lương cơ bҧn
ViӃt chương trình thӵc hiӋn các công viӋc sau:
?
a. Nhұp n hӗ sơ vӟi n nhұp tӯ bàn phím.
?
b. In ra hӑ tên và lương cơ bҧn cӫa nhân viên có lương cơ bҧn thҩp nhҩt và nhân
viên có lương cơ bҧn cao nhҩt.
c. Ghi xuӕng file văn bҧn vӟi tên file là hoso.txt) danh sách gӗm hӑ tên, lương
cơ bҧn, phө cҩp và thӵc lãnh cӫa các nhân viên mӛi nhân viên mӝt dòng) biӃt
rҵng:
Ohө cҩp = 30% lương cơ bҧn
?
Thӵc lãnh = lương cơ bҧn + phө cҩp
?
?
Đӄ Ñ 06
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
?
Bài 1: Nhұp vào mӝt dãy sӕ thӵc kӃt thúc bӣi 0 hoһc đã đӫ 20 phҫn tӱ
?
a. Sҳp xӃp dãy theo thӭ tӵ tăng dҫn.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 128


?
? Mӝt sӕ đӅ thi mүu
b. Cho biӃt dãy có hӝi tө không? Dãy đưӧc hӝi tө khi có nӱa phҫn tӱ trӣ lên nhӓ
?
hơn trung bình cӝng cӫa dãy).
?
Bài 2: Nhұp vào ma trұn cҩp mxn vӟi m và n nhұp tӯ bàn phím. Hãy kiӇm tra xem ma
trұn có cân bҵng theo cӝt hay không? Ma trұn cân bҵng theo cӝt khi tәng các giá trӏ cӫa
các cӝt bên trái bҵng tәng các giá trӏ cӫa các cӝt bên phҧi, nӃu sӕ cӝt lҿ thì không tính
cӝt giӳa).
Ví dө:
?
8 4 5 8 9
3 5 7 4 6
4 9 7 5 ˜
Tәng bên trái = 33 Tәng bên phҧi = 33
?
KӃt luұn: Ma trұn cân bҵng theo cӝt.
?
Bài 3: Mӝt Album ca nhҥc MO3 gӗm tӕi đa ˜50 ca khúc. Thông tin mӛi ca khúc gӗm:
@ Tên ca khúc
@ Tên nhҥc sӻ
@ Tên ca sӻ
@ Thӡi gian tính bҵng giây)
ViӃt chương trình thӵc hiӋn các công viӋc sau:
?
a. Nhұp n ca khúc vӟi n nhұp tӯ bàn phím.
?
b. Xuҩt tәng thӡi gian cӫa các ca khúc hiӇn thӏ theo dҥng hh:mm:ss) và cho biӃt tên
ca khúc nào có thӡi gian dài nhҩt.
Ghi xuӕng file văn bҧn vӟi tên file là mp3.txt) danh sách gӗm tên ca khúc, tên nhҥc sӻ,
tên ca sӻ và thӡi gian hiӇn thӏ theo dҥng hh:mm:ss), mӛi ca khúc chiӃm mӝt dòng.
?
?
Đӄ Ñ 07
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
!!!!
?
Câu 1. Tính sӕ hҥng thӭ n cӫa hӋ thӭc truy hӗi như sau
f0)=˜, f˜)=2
fn)=3fn-˜)+2fn-2) n>=2)
?
bҵng hai cách
?
a) Dùng đӋ qui
?
b) Khӱ đӋ qui, dùng vòng lһp

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 129


?
? Mӝt sӕ đӅ thi mүu
Câu 2. Xây dӵng mӝt cҩu trúc có các thành phҫn sau
?
- Mã sӕ hӑc sinh
?
- Hӑ và tên hӑc sinh
?
- ĐiӇm Toán
?
- ĐiӇm Văn
?
- ĐiӇm trung bình=ĐiӇm Toán+ĐiӇm Văn)/2
?
ViӃt chương trình nhұp dӳ liӋu cӫa n hӑc sinh và lưu vào mӝt tұp tin có tên là
HOSOHS.DOC hay mҧng ˜ chiӅu có cҩu trúc). Sau đó đӑc dӳ liӋu tӯ tұp tin
HOSOHS.DOC hay mҧng ˜ chiӅu có cҩu trúc), sҳp xӃp theo thӭ tӵ ĐiӇm trung bình
giҧm dҫn và xuҩt dӳ liӋu cӫa tӯng hӑc sinh ra màn hình
Câu 3. Cho n là mӝt sӕ nguyên dương, tính giá trӏ biӇu thӭc sau bҵng cách viӃt chương
?
trình sӱ dөng vòng lһp và tӕi ưu vòng lһp.
? ?
˜ ˜ ˜ ˜
˜    L  n ˜,2,3,K )
2! 3! 4! n!
?
?
Đӄ Ñ 08
Rhͥi gian: 120 phút
(Không tham kh̫o tài li͏u)
?
!!!!
?
OHҪN I: Chӑn câu trҧ lӡi đúng nhҩt (5 điӇm)
?
Đánh dҩu chéo vào câu trҧ lӡi đúng nhҩt trong các câu trҧ lӡi cho mӛi câu hӓi.
?
Câu 1. Đoҥn chương trình sau sӁ cho giá trӏ cӫa t:
?
for (t=i=0; (i10) && (t100); i++, t += 2*i);
?
a. 90 b. ˜00 c. ˜˜0 d. ˜20
?
Câu 2. Cho dãy gӗm ˜2 phҫn tӱ a0, a˜, a2, «, a˜˜ như sau:
?

-9 -9 -5 -2 0 3 7 7 ˜0 ˜5
?
Dùng thuұt toán tìm nhӏ phân đӇ tìm vӏ trí phҫn tӱ x = -9, vӏ trí tìm đưӧc sӁ là:
?
a. -˜ b. 0 c. ˜ d. 2
?
Câu 3. Chương trình sau:
?
#inclußconio.h>
#inclußstßio.h>
int a=1, ¦=2, c=3;
int A(int &a, int ¦)
{
a += c + 2;
¦ -= a;

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 130


?
? Mӝt sӕ đӅ thi mүu
?

rturn a;
}
voiß main()
{
?
? printf(" %ß %ß", A(¦, c), a+c);
}
?
SӁ in ra:
?
a. 7 5 b. 7 4 c. 7 3 d. 7 2
?
4. Chương trình sau:
?
#incluß conio.h>
#incluß stßio.h>
int A(int a, int &¦)
{
a += ¦ + 2;
¦ -= a;
rturn a;
}
voiß main()
{
? int  = 5;
?
? printf(" %ß %ß", A(A(3, ), ), );
}
?
SӁ in ra:
?
a. 5 5 b. 5 7 c. 7 7 d. 7 5
?
5. Đoҥn chương trình dưӟi đây khi thӵc thi sӁ:
?
char ¦uf1[100], ¦uf2[100], *strptr1, *strptr2;
strcp(¦uf1, "a¦cßfghijklmnopqrstuvwz");
strcp(¦uf2, "llo");
strptr1 = ¦uf1 + 6;
strcp(strptr1, ¦uf2);
strptr2 = (strptr1 + 4);
strncp(strptr2, ¦uf2, 4);
printf("%s\n", ¦uf1);
?
SӁ in ra màn hình:
?
a. abcdefHellHellopqrstuvwxyz b. ghijklmnHellotuvwxyz
?
c. abcdefghijklmnopqrstuvwxyz d. abcdefHellolmnopqrstuvwxyz
?
OHҪN II: Lұp trình (5 điӇm)
?
Câu 1. Hãy viӃt hàm kiӇm tra mӝt sӕ nguyên không n có phҧi là sӕ nguyên tӕ
hay không, hàm thӵc hiӋn sӁ trҧ vӅ: ˜ nӃu n là sӕ nguyên tӕ, 0 nӃu n không là sӕ
nguyên tӕ
int LaSNT(unsignß int n);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 131


?
? Mӝt sӕ đӅ thi mүu
Câu 2. Hãy viӃt hàm tìm tәng các sӕ nguyên tӕ nҵm trong mҧng mӝt chiӅu a có n
phҫn tӱ unsigned int a[˜00], int n).
Câu 3. ViӃt hàm xác đӏnh vӏ trí cӫa sӕ nguyên tӕ lӟn nhҩt trên mҧng a có n phҫn
tӱ unsigned int a[˜00], int n)
(Lưu ý: Có th͋ làm các câu 2 và 3 mà không c̯n làm câu 1).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 132


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?
?
OHӨ LӨC 2 HƯӞN÷ DҮN èIӂT CHƯƠN÷ TRÌNH
TRÊN MÔI TRƯӠN÷ BORLAND C++ 3.1 (BC31)
?
?
?
?
I. CÀI ĐҺT BC3.1
?

! Vào thư mөc BC3.˜ trên đĩa CD chҥy file install.exe.


?

! Nhҩn Enter.
?
?
?
?
?
?
?
?
Tên ә đĩa chӭa BC31
?
?
?
?
?
?
?
?
?
?
?
! Gõ vào ә chӭa thư mөc nguӗn chӭa BC3.˜ Ví dө trên:Giҧ sӱ ә đĩa chӭa
thư mөc BC3.˜ trên đĩa CD là D:) \ Nhҩn Enter.
?

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 133


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
! Enter tiӃp có thӇ gõ lҥi đưӡng dүn chӭa BC3.˜ nӃu bưӟc trên gõ sai).
?

! Chӑn đưӡng dүn và tên thư mөc cҫn cài đһt BC3.˜ lên đĩa cӭng.
?
Ví dө: Cҫn cài BC3.˜ lên ә đĩa C: tên thư mөc là BC3˜.
- ĐӇ thay đәi thư mөc và ә đĩa cài đһt \ di chuyӇn vӋt sáng dùng phím
mũi tên ) đӃn dòng Directories « như hình trên \ sau đó nhҩn Enter.
?

?
- Nhҩn tiӃp Enter.
?

- Gõ tên ә đĩa và tên thư mөc cҫn cài đһt trong textbox \ Enter.
?
- Sau đó nhҩn ESC.
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 134
?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

- TiӃp tөc nhҩn phím ESC.


?

?
- TiӃp theo kiӇm tra xem thư mөc cài Windows có đúng đưӡng dүn như
dòng Windows Dir hay không dòng thӭ 2). NӃu không đúng thì thay đәi
thư mөc cho đúng, di chuyӇn vӋt sáng đӃn đó, thao tác tương tӵ như thay
đәi thư mөc BC3.˜.
- Thưӡng thì không cҫn thay đәi vì các máy có cài Windows mһc đӏnh là
?
C:\Windows.
?
- Di chuyӇn vӋt sáng đӃn dòng Ñtart Installation nhҩn Enter bҳt đҫu quá
trình cài đһt.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 135


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

Luu ý: ͦ ¦ưͣc nà ch͑ tha đ͝i thư m c cài đ̿t BC3.1, thư m c Winßows
?
(n͇u có) c n nh ng m c khác không tha đ͝i.
! Quá trình cài đһt đang thӵc hiӋn.
?

! NӃu trong quá trình cài đһt gұp thông báo sau:
?

\ Nhҩn phm C đӇ tiӃp tөc.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 136


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

Quá trình cài đһt hoàn tҩt, nhҩn phím EÑC cho đӃn khi mҩt màn hình cài đһt.
! Tҥo mӝt thư mөc đӇ lưu bài tұp, chҷng hҥn D:\BaiTap đӇ làm thư mөc làm

viӋc cӫa C, trong quá trình làm bài hay biên dӏch chҥy chương trình thì tҩt cҧ các
file đó đӅu nҵm trong thư mөc BaiTap cho dӉ quҧn lý.
! Tҥo Shortcut Borland C++3.˜ File bc.exe trong thư mөc BIN cӫa thư mөc
BC3˜ vӯa cài đһt)\ Chӑn Oroperties \ Chӑn Tab Orogram gõ vào mөc Cmd
line và Working giӕng như hình sau nӃu cài đһt BC3.˜ trên ә đĩa C:\BC3.˜. Nhҩn
OK.
?
- Cmd line đưӡng dүn đӃn file chҥy BC): C:\BC3.˜\BIN\BC.EXE.
?
- Working thư mөc mӟi vӯa tҥo đӇ lưu bài làm ): D:\Bai tap
?
Lưu ý: Đúng đưӡng dүn thư mөc.
?

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 137


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

II. CÁC BƯӞC èIӂT CHƯƠN÷ TRÌNH


?
?
a. Chu̱n ¦͓ vi͇t chương trình
@ Khӣi đӝng BC3.˜

@ Vào menu Options\Environment\Editor chӍnh lҥi Tab size là 4.

?
?
¦. Các phím chͱc năng chính
@ F3: Mӣ file chương trình có sҹn.
@ F2: Lưu file
@ Lưu ý: Chӑn đưӡng dүn và đһt tên file cho đúng. Tên có tӕi đa 8 ký tӵ,
phҫn đuôi không cҫn nhұp vào mһc đӏnh là *.cpp).
@ F5: Ohóng to hoһc trӣ vӅ kích thưӟc bình thưӡng cӫa cӱa sә soҥn thҧo.
@ F6: ChuyӇn qua lҥi các cӱa sә soҥn thҧo nӃu mӣ nhiӅu cӱa sә).
@ F9: Biên dӏch chương trình. Mөc đích là kiӇm tra lӛi chương trình.
@ Ctr+F9: Thӵc thi chương trình Run) khi chương trình không có lӛi.
@ Alt+F5: Xem lҥi màn hình kӃt quҧ chương trình đã chҥy trưӟc đó.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 138


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

c. Vi͇t chương trình


?
Cҩu trúc cơ bҧn cӫa chương trình gӗm phҫn.
i. Ohҫn khai báo thư viӋn hàm.
ii. Ohҫn khai báo biӃn toàn cөc, khai báo kiӇu dӳ liӋu, khai báo hàm hay
khai báo hҵng nӃu có).
iii. Các hàm con nӃu có).
iv. Hàm main).
\ Lưu ý trình bày chương trình.
?
?
ß. Bin ß͓ch và s͵a l͟i
@ Sau khi soҥn thҧo xong chương trình nhҩn F2 đһt tên chương trình, đӇ đҧm
bҧo chương trình có thӇ thӵc thi đưӧc, ta phҧi nhҩn F9 đӇ biên dӏch.
@ NӃu không có lӛi, ta có thӇ nhҩn Ctr+F9 đӇ thӵc thi chương trình.

@ NӃu máy bӏ loop nhҩn Ctrl+Break+Enter đӇ trӣ vӅ màn hình soҥn thҧo.
@ Ngưӧc lҥi, ta cҫn phҧi sӱa lӛi cho đӃn khi hӃt lӛi.

@ Các bưӟc thӵc hiӋn khi có lӛi:


i. Khi hiӇn thӏ màn hình báo lӛi, ta phҧi nhҩn phím Enter đӇ xuҩt hiӋn cӱa
sә mô tҧ lӛi không nhҩn phm EÑC).

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 139


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

ii. Sӱ dөng phím mũi tên lên xuӕng đӇ duyӋt lên xuӕng và xem mô tҧ lӛi.
?
Khi di chuyӇn đӇ ý quan sát vӋt sáng bên trên khung cӱa sә soҥn thҧo
chương trình. Thông thưӡng vӋt sáng sӁ cho biӃt vӏ trí lӛi có thӇ ngay
chính tҥi dòng có lӛi hoһc trên hoһc dưӟi mӝt dòng). Có nhiӅu cách sӱa
lӛi, nhưng đӇ đơn giҧn chúng ta nên sӱa lӛi tӯ trên xuӕng.
?
. M͡t s͙ l͟i thưͥng g̿p
?
? ? ? ? ?

ÑTT LӚI MÔ TҦ KHҲC OHӨC è DӨ


LӚI CÚ OHÁO
? ? ? ?
Ñai:
? ? ? Bә sung thêm
? int a
? ? dҩu ; vào sau
Statement scanf³%do,&a)
˜ ThiӃu dҩu; khi kӃt thúc ˜ lӋnh khai báo biӃn
missing; Ñӱa thành:
hay kӃt thúc mӝt
int a;
lӋnh.
scanf³%do,&a);
? ? ? ? Ñai :
? ? ? ?
? ? ? ? void main)
? ? ? ? {
? ? ? ?
? ? ?
int a;
?
? ? ? ? scanf³%do,&a);
? ? ? ?
?
ifa>0)
? ? ?
? printf³Duongo);
? Compound
ThiӃu dҩu } khi kӃt thúc khӕi
Bә sung thêm
}
2 statement dҩu } vào tương
lӋnh hay làm. Ñӱa thành:
missing } ӭng
void main)
{
int a;
scanf³%do,&a);
ifa>0)
printf³Duongo);
}
?
Unexpected ThiӃu dҩu { khi bҳt đҫu khӕi KiӇm tra xem có Ñai :
3
} lӋnh, hàm hay dư dҩu } dư dҩu } hoһc void main)

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 140


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

? ? ? thiӃu dҩu { và {
sӱa tương ӭng. int a;
scanf³%do,&a);
ifa>0)
printf³Duongo);
}
}
Ñӱa thành:
void main)
{
int a;
scanf³%do,&a);
ifa>0)
printf³Duongo);
}
? ? ? ? Ñai :
? ? ?
? ? ? if a%2);
? ? ? printf³a leo);
? ? ?
? ? ?
else
? ? ? ifa>˜0)
? ? ? printf³a chano);
? ? ?
? ? ? printf³, > ˜0o);
? ? ? else
? ?
Chҩm phҭy sau phát biӇu if printf³a < ˜0o);
? Misplaced
hoһc khӕi lӋnh thӵc hiӋn trong Ñӱa thành: if
4 else
phát biӇu if chưa đһt trong cһp a%2) printf³a
dҩu ngoһc {} leo); else
ifa>˜0)
{
printf³a chan o);
printf³, > ˜0o);
}
else
printf³a < ˜0o);

? ? ? KiӇn tra cho Ñai :


? ? ?
? ? ? đúng cú pháp: forint i=0, i<n; i++)
? ? ? for<BiӇu thӭc {
? ?
? ? ? khӣi>; <biӇu printf³a[%d]: o,i);
? ? ThiӃu thành phҫn trong cú pháp thӭc điӅu kiӋn scanf³%do,&a[i]);
? For cӫa vòng lұp for hoһc quên dӯng>; <biӇu }
5 statement dùng dҩu chҩm phҭy ;) đӇ ngăn thӭc tăng giҧm>) Ñӱa thành:
missing ; cách các thành phҫn , « Ohҧi Trong biӇu thӭc forint i=0y i<ny i++)
có đӫ 2 dҩu chҩm phҭy) gán hay nhiӅu {
thành phҫn thì printf³a[%d]: o,i);
mӛiphҫn cách scanf³%do,&a[i]);
nhau bӣi dҩu }
phҭy ,)
? ? ThiӃu dҩu phҭy phân cách giӳa Thêm dҩu phҭy Ñai :
? ?
? phҫn đӏnh dҥng và danh sách giӳa phҫn đӏnh forint i=0; i<n; i++)
Function call
6 biӃn trong hàm printf và scanf. dҥng và danh {
missing )
sách biӃn. printf³a[%d]: oi);
scanf³%do,&a[i]);

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 141


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

? ? ? ? }
Ñӱa thành:
forint i=0; i<n; i++)
{
printf³a[%d]: o,i);
scanf³%do,&a[i]);
}
LӚI KHAI BÁO
?
? ? ?
Ñai :
? ? ? ?
? ? ? ? #define MAX ˜00
? ? ? ? void main)
? ? ? ?
? ? ? {
? ? ?
? int MAX;
? Declaration ?
Khai báo tên biӃn trùng vӟi tên }
˜ terminated Đәi tên biӃn.
hҵng đã đӏnh nghĩa trưӟc. Ñӱa thành:
incorrectly
#define MAX ˜00
void main)
{
int x;
}
? ? ? ?
? ? Ñai :
? ?
? ? int i;
? ? ?
KiӇm tra và bӓ forint i=0; i<n; i++)
?
? Multiple
Khai báo biӃn trùng tên, khai bӟt khai báo lҥi scanf³%do,&a[i][j]);
2 declaration
báo nhiӅu lҫn. biӃn hoһc đәi tên Ñӱa thành:
for 'i'
biӃn khác. int x;
fori=0; i<n; i++)
scanf³%do,&a[i][j])
? ? ? ? Ñai :
? ? ? ?
printf³Nhap vao n:o);
? ? ? ?
? ? ? scanf³%do, &n);
Undefined
3 Sӱ dөng biӃn chưa khai báo. Khai báo biӃn. Ñӱa thành:
symbol 'a'
int n;
printf³Nhap vao n:o);
scanf³%do, &n);
? ? ? ?
Ñai :
? ? Bә sung dҩu ;
Declaration int n
4 ThiӃu dҩu ; sau khai báo biӃn. sau khi kӃt thúc
syntax error Ñӱa thành:
khai báo biӃn.
Int n;
THƯ èIӊN HÀM HOҺC ÑAI TÊN HÀM
? ? ? ?
? Function ? ?
? 'printf' ? ?
? should have ? ?
? ? ?
? a prototype
? ThiӃu sai báo thư viӋn hàm nӃu Bә sung
Function
? sӱ dөng hàm thư viӋn, ngưӧc lҥi #include
'scanf'
˜ phҧi kiӇm tra xem có khai báo <stdio.h>
should have
nguyên mүu hàm, hoһc gӑi sai #include
a prototype
tên hàm. <conio.h>
Function
'XXX'
should have
a prototype

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 142


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

CÁC CҦNH BÁO


? ? ? ?
Ñai :
? ? ? ?
? ? ifn%2=0)
? ? Dùng ký hiӋu printf³n chan);
? Oossibly
Dùng ký hiӋu trong phép toán
˜ incorrect trong phép so Ñӱa thành:
quan hӋ.
assignment sánh ifn%2==0)
printf³n chano);

? ?
Code has no Dùng ký hiӋu phép tóan quan hӋ Dùng ký hiӋu
2
effect cho phép gán. phép toan sӕ hӑc.
?
f. D¦ug
?
Mһc dù chương trình không còn lӛi nhưng khi chҥy chương trình vүn ra kӃt
quҧ sai, nhӳng lӛi đó có thӇ là:
@ Dùng chҩm phҭy sau: if, else, for, while, « mà chưa thӵc hiӋn lӋnh.
@ Đӏnh dҥng nhұp xuҩt sai hay khai báo sai kiӇu dӳ liӋu.
@ Chia cho 0.
@ Không có điӅu kiӋn dӯng điӅu kiӋn dӯng sai).
@ Ohân tích thuұt toán thiӃu chưa vét hӃt các trưӡng hӧp) hoһc sai.
Các thao tác debug:
@ Nhҩn F7 hoһc F8 đӇ chҥy tӯng bưӟc nӃu không có lӛi khi biên dӏch)

@ F7: Đi tӯng lӋnh cӫa hàm con nӃu có gӑi hàm.


@ F8: không vào chi tiӃt tӯng lӋnh khi gӑi đӃn hàm con chӍ đưa ra kӃt quҧ cӫa
hàm con).
\ Quan sát vӋt sáng đӇ biӃt chương trình đang thӵc hiӋn đӃn vӏ trí lӋnh nào.
@ Nhҩn Ctrl+F7 hoһc nhҩn phím Insert nӃu đã có cӱa sә Watch): Nhұp vào
biӃn cҫn theo dõi giá trӏ các biӃn khi thӵc hiӋn xong lӋnh hay hàm nào đó.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 143


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?

?
@ Có thӇ xóa biӃn trên cӱa sә Watch bҵng cách chӑn biӃn trên cӱa sә Watch
và nhҩn phím Delete.
@ NӃu không thҩy cӱa sә hiӇn thӏ giá trӏ biӃn Watch) nhҩn Alt+W+W hoһc
vào menu Window chӑn Watch.
?

@ NӃu muӕn bӓ qua mӝt đoҥn nào đó tӭc không cҫn kiӇm tra đӑan đó) thì
nhҩn F4 đӇ chương trình thӵc thi tӟi vӏ trí dòng cӫa dҩu nháy rӗi dӯng lҥi đó
dҩu nháy phҧi tҥi vӏ trí nhӳng dòng phía sau cӫa vӋt sáng, nhҩn F6 đӇ
?
chuyӇn qua lҥi các cӱa sә).
@ Muӕn thay đәi giá trӏ cӫa biӃn ta dùng phím Ctrl+F4 đӇ hiӇn thӏ cӱa sә.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 144


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
@ Nhұp vào tên biӃn ӣ ô Expression, chӑn nút Evaluate hoһ nhҩn Enter), ô
Result sӁ hiӇn thӏ kӃt quҧ tҥi thӡi điӇm đó, sau đó nhұp giá trӏ mӟi cho biӃn
tҥi ô New Value \ Enter dùng phím tab đӇ di chuyӇn vӏ trí chӑn).
?

@ Ngoài ra có thӇ đánh dҩu đӇ chương trình thӵc thi đӃn vӏ trí đánh dҩu khi
chưa chҥy tӯng bưӟc) dùng phím F8 đӇ đánh dҩu ngay vӏ trí dҩu nháy. Vӏ trí
đánh dҩu sӁ có vӋt sáng màu đӓ.
?

@ Có thӇ đánh dҩu nhiӅu vӏ trí khác nhau. Nhҩn Ctrl+F9 đӇ chương trình thӵc
thi đӃn vӏ trí đánh dҩu theo thӭ tӵ tӯ trên xuӕng dưӟi, đӗng thӡi cũng có thӇ
dùng phím F7 hoһc F8 giӕng như trên đӇ chҥy tӯng bưӟc.
@ Ngoài ra, có thӇ dùng phím ALT+F5 đӇ xem kӃt quҧ xuҩt trong quá trình
debug đӇ kiӇm tra nhұp xuҩt).
@ Trong quá trình chҥy tӯng bưӟc có thӇ kӃt thúc bҵng cách nhҩn Ctrl+F2.
?
?
g. Các thao tác lin quan đ͇n c͵a s͝ Watch
@ Di chuyӇn cӱa sә Watch: Chӑn cӱa sә Watch, nhҩn Ctrl+F5. Sau đó dùng
phím mũi tên đӇ di chuyӇn cӱa sә tӟi vӏ trí mӟi. Nhҩn phím Enter.
@ Thay đәi kích thӭơc cӱa sә Watch khi đang chӑn bҵng Ctrl+F5 trên cӱa sә
Watch) nhҩn Shift + phím mũi tên rӗi nhҩn phím Enter.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 145


?
? Hưӟng dүn viӃt chương trình trên môi trưӡng Borland C++ 3.˜
?
?
?
TÀI LIӊU THAM KHҦO
?
?
?
˜. OHҤM èĂN ҨT: ³Kӻ thuұt lұp trình C: cơ sӣ và nâng caoo. Nhà Xuҩt Bҧn
?
Khoa Hӑc Kӻ Thuұt ± ˜996.
?
2. LÊ HOÀI BҲC ± LÊ HOÀN÷ THÁI ± N÷UYӈN TҨN TRҪN MINH
KHAN÷ ± N÷UYӈN OHƯƠN÷ THҦO: ³Giáo trình ngôn ngӳ Co. Nhà Xuҩt
Bҧn Đҥi Hӑc Quӕc Gia Tp. Hӗ Chí Minh ± 2003.
3. N÷UYӈN TҨN TRҪN MINH KHAN÷: ³Bài tұp Kӻ thuұt lұp trình ± Tұp ˜o.
?
Nhà Xuҩt Bҧn Đҥi Hӑc Quӕc Gia Tp. Hӗ Chí Minh ± 2004.
?
4. N÷UYӈN ĐÌNH TÊ ± HOÀN÷ ĐӬC HҦI: ³Giáo trình lý thuyӃt & Bài tұp
ngôn ngӳ Co. Nhà Xuҩt Bҧn Mũi Cà Mau.
5. HUǣNH TҨN DŨN÷ ± HOÀN÷ ĐӬC HҦI: ³Bài tұp ngôn ngӳ C tӯ A đӃn Zo.
?
Nhà Xuҩt Bҧn Lao Đӝng ± Xã Hӝi.
?
6. N÷UYӈN THANH ÑƠN: ³Tұp bài giҧng Kӻ thuұt lұp trìnho ± 2004.
?
7. TRҪN MINH THÁI: ³Tұp bài giҧng Kӻ thuұt lұp trìnho ± 2005.
?
8. ÑANFORD LEEÑTMA LARRY NYHOFF: ³Oascal Orogramming and
?
Solvingo. Macmillan Oublishing Company ± ˜990.
?
9. JOHN R. HUBBARD: X455 Bài tұp cҩu trúc dӳ liӋu cài đһt bҵng C++ . Bҧn
dӏch cӫa Minh Trung, Gia ViӋt ± Nhà Xuҩt Bҧn Thӕng Kê.

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 146


?
? Mөc lөc
?
?
MӨC LӨC
?
?
?
LӠI MӢ ĐҪU ........................................................................................................ .1
?
LӎCH TRÌNH THӴC HÀNH............................................................................... .2
?
CHƯƠN÷ 1 LƯU ĐӖ THUҰT TOÁN (FLOWCHART) .............................3
?
I. TÓM TҲT LÝ THUYӂT .................................................................................... 3
?
I.1. hái ni͏m..................................................................................................... 3
?
I.2. Phương pháp ßu͏t ..................................................................................... 3
?
I.3. Các ký hi͏u .................................................................................................. 3
?
I.4. Các c̭u trúc đi͉u khi͋n cơ ¦̫n .................................................................. 4
a. C̭u trúc tu̯n t͹ .......................................................................................... 4
b. C̭u trúc l͹a ch͕n........................................................................................ 5
c. C̭u trúc l̿p................................................................................................. 6
d. Các v dͭ...................................... ................................................................ 8
II. BÀI TҰO ............................................................................................................. 11
?
II.1. Bài t̵p cơ ¦̫n .................................................................................................. 11
?
II.2. Bài t̵p lu͏n t̵p và nâng cao ......................................................................... 12
?
III. KӂT LUҰN...................................................................................................... 12
?
CHƯƠN÷ 2 CҨU TRÚC ĐIӄU KHIӆN ...................................................... .13
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 13
?
I.1. Các ký hi͏u ................................................................................................ 13
?
I.2. Các ki͋u ß li͏u cơ ¦̫n trong C .............................................................. .13
?
I.3. B̫ng ký hi͏u các phép toán ...................................................................... 14
?
I.4. Các hàm cơ ¦̫n ......................................................................................... 15
?
I.5. C̭u trúc rͅ nhánh ..................................................................................... 15
a. C̭u trúc if.................................................................................................. 15
b. C̭u trúc if « else ...................................................................................... 16
I.6. C̭u trúc l͹a ch͕n switch ......................................................................... .16
?
I.7. C̭u trúc l̿p ............................................................................................... 18
a. for .............................................................................................................. 18
b. while .......................................................................................................... 19

Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang i


?
? Mөc lөc
?

c. do « while................................................................................................. 20
?
I.8. ¦rak và continu ..................................................................................... .20
a. break .......................................................................................................... 20
b. continue ..................................................................................................... 21
II. BÀI TҰO ............................................................................................................. 21
?
II.1. Phương pháp ch̩ ta tͳng ¦ưͣc đ͋ tìm k͇t qu̫ chương trình .............21
?
II.2. Bài t̵p cơ ¦̫n ........................................................................................... 23
a. C̭u trúc if / if..else và switch .................................................................... 23
b. C̭u trúc l̿p............................................................................................... 25
II.3. Bài t̵p lu͏n t̵p và nâng cao................................................................. .29
?
III. KӂT LUҰN...................................................................................................... 30
?
CHƯƠN÷ 3 HÀM CON ................................................................................. .31
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 31
?
I.1. hái ni͏m................................................................................................... 31
?
I.2. Ví ß ........................................................................................................... 31
?
I.3. C̭u trúc m͡t chương trình C .................................................................. .33
a. Kh͙i khai báo ............................................................................................ 33
b. Hàm ch nh (main()) ................................................................................... 33
c. Các hàm con .............................................................................................. 33
d. Nguyên m̳u hàm ...................................... ................................................. 33
I.4. Cách â ß͹ng m͡t hàm con ................................................................... .34
a. Ki͋u dͷ li͏u cͯa hàm................................................................................. 34
b. Rham s͙ ..................................................................................................... 34
c. Rên hàm ..................................................................................................... 35
d. è dͭ .......................................................................................................... 35
II. BÀI TҰO ............................................................................................................. 37
?
II.1. Bài t̵p cơ ¦̫n ........................................................................................... 37
?
II.2. Bài t̵p lu͏n t̵p và nâng cao................................................................. .39
?
III. KӂT LUҰN...................................................................................................... 39
?
CHƯƠN÷ 4 MҦN÷ MӜT CHIӄU ............................................................... .41
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 41
?
I.1. hái ni͏m................................................................................................... 41
?
I.2. hai ¦áo m̫ng.......................................................................................... .41
?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang ii
? Mөc lөc
?

I.3. Tru ṷt ph̯n t͵ cͯa m̫ng ................................................................... .42


?
II. BÀI TҰO ............................................................................................................. 43
?
II.1. M͡t s͙ k thu̵t cơ ¦̫n.............................................................................. .43
a. Kĩ thu̵t đ̿t cͥ hi͏u ................................................................................... 43
b. Kĩ thu̵t đ̿t l nh canh ................................................................................ 44
II.2. Bài t̵p cơ ¦̫n ............................................................................................ 45
a. Nh̵p xṷt m̫ng m͡t chi͉u ........................................................................ 45
b. Rìm ki͇m trên m̫ng m͡t chi͉u .................................................................. 46
c. a͇m ± R̯n sṷt.......................................................................................... 47
d. R nh t͝ng ± Rrung bình có đi͉u ki͏n ......................................................... 48
e. Ñ̷p x͇p ...................................................................................................... 49
f. œoá............................................................................................................. 50
g. Chèn........................................................................................................... 50
h. Rách / ghép m̫ng ...................................................................................... 51
II.3. Bài t̵p lu͏n t̵p và nâng cao.................................................................. .53
?
III. KӂT LUҰN...................................................................................................... 56
?
CHƯƠN÷ 5 CHUӚI KÝ TӴ ........................................................................ .57
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 57
?
I.1. hái ni͏m................................................................................................... 57
?
I.2. hai ¦áo chu͟i........................................................................................... 57
?
I.3. Các thao tác trn chu͟i ............................................................................ .57
a. Nh̵p chu͟i ................................................................................................ 57
b. œṷt chu͟i................................................. ................................................. 58
c. Các hàm thư vi͏n (string.h)....................................................................... 58
d. è dͭ .......................................................................................................... 60
II. BÀI TҰO ............................................................................................................. 60
?
II.1. Bài t̵p cơ ¦̫n ............................................................................................ 60
?
II.2. Bài t̵p lu͏n t̵p và nâng cao.................................................................. .62
?
III. KӂT LUҰN.......................................................................................................... 63
?
CHƯƠN÷ 6 MҦN÷ HAI CHIӄU ................................................................ .64
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 64
?
I.1. hái ni͏m................................................................................................... 64
?
I.2. hai ¦áo m̫ng.......................................................................................... .64

?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 3
? Mөc lөc
?

I.3. Tru ṷt ph̯n t͵ cͯa m̫ng ................................................................... .64


?
I.4. Ma tr̵n vuông và các khái ni͏m lin quan............................................. .65
a. Khái ni͏m .................................................................................................. 65
b. R nh ch̭t cͯa ma tr̵n vuông..................................................................... 65
II. BÀI TҰO ............................................................................................................. 66
?
II.1. M͡t s͙ k thu̵t cơ ¦̫n.............................................................................. .67
?
II.2. Bài t̵p cơ ¦̫n ........................................................................................... 69
a. Bài t̵p nh̵p xṷt ...................................................................................... 69
b. Bài t̵p t nh t͝ng ........................................................................................ 69
c. Bài t̵p tìm ki͇m......................................................................................... 70
d. Bài t̵p đ͇m................................................................................................ 70
e. Bài t̵p s̷p x͇p .......................................................................................... 71
f. Bài t̵p Rhêm ± œoá ± Rhay th͇ ................................................................. 72
II.3. Bài t̵p lu͏n t̵p và nâng cao................................................................. .73
?
III. KӂT LUҰN...................................................................................................... 77
?
CHƯƠN÷ 7 KIӆU DӲ LIӊU CÓ CҨU TRÚC ............................................78
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 78
?
I.1. hái ni͏m................................................................................................... 78
?
I .2. Đ͓nh ngh a ki͋u ß li͏u ............................................................................ 78
?
I.3. hai ¦áo ..................................................................................................... 79
?
I.4. Tru ṷt......................................... ........................................................... 80
?
I.5. Ví ß minh ho̩ .......................................................................................... 81
?
I.6. M̫ng c̭u trúc........................................................................................... .82
?
I.7. Ngun t̷c vi͇t chương trình có m̫ng c̭u trúc .................................... .82
?
II. BÀI TҰO ............................................................................................................. 91
?
II.1. Bài t̵p cơ ¦̫n ............................................................................................ 91
?
II.2. Bài T̵p Lu͏n T̵p .................................................................................... 92
?
III. KӂT LUҰN...................................................................................................... 96
?
CHƯƠN÷ 8 TҰO TIN .................................................................................... .97
?
I. TÓM TҲT LÝ THUYӂT .................................................................................. 97
?
I.1. hái ni͏m................................................................................................... 97
?
I.2. Thao tác vͣi t̵p tin .................................................................................. .97
?
a. Khai báo .................................................................................................... 97

?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 4
? Mөc lөc
?

b. Mͧ t̵p tin .................................................................................................. 97


c. Các hàm đ͕c ghi n͡i dung t̵p tin ............................................................ 98
d. aóng t̵p tin............................................................................................... 99
e. Các thao tác khác trên t̵p tin ................................................................... 99
f. è dͭ minh ho̩ .......................................................................................... 99
I.3. Các ví ß minh ho̩ ............................................................................... .100
a. R̵p tin văn b̫n........................................................................................ 100
b. R̵p tin nh͓ phân ...................................................................................... 102
II. BÀI TҰO ........................................................................................................... 103
?
II.1. Bài t̵p cơ ¦̫n .......................................................................................... 103
?
II.2. Bài t̵p lu͏n t̵p và nâng cao................................................................ .105
?
III. KӂT LUҰN.................................................................................................... 108
?
CHƯƠN÷ 9 Đӊ QUI .................................................................................... .109
?
I. TÓM TҲT LÝ THUYӂT ................................................................................ 109
?
I.1. hái ni͏m................................................................................................. 109
?
I.2. Phân lo̩i đ͏ qui....................................................................................... 109
a. a͏ qui tuy͇n t nh ..................................................................................... 109
b. a͏ qui nh͓ phân ....................................................................................... 110
c. a͏ qui phi tuy͇n ...................................................................................... 112
d. a͏ qui h͟ tương................................... .................................................... 113
I.3. Tìm hi͋u cách ho̩t đ͡ng cͯa hàm đ͏ qui .............................................. 114
?
I.4. Ví ß ......................................................................................................... 115
?
II. BÀI TҰO ........................................................................................................... 116
?
II.1. Bài t̵p cơ ¦̫n ................................................................................................ 116
?
II.2. Bài t̵p lu͏n t̵p và nâng cao ....................................................................... 117
?
III. KӂT LUҰN.................................................................................................... 117
?
CHƯƠN÷ 10 LҰO TRÌNH THEO OHƯƠN÷ OHÁO OROJECT .............118
?
I. MӨC TIÊU ....................................................................................................... 118
?
II. OHƯƠN÷ OHÁO........................................................................................... 118
?
II.1. T̩o m͡t projct mͣi................................................................................ .118
?
II.2. Mͧ projct có s̽n .................................................................................... 118
?
II.3. M͡t s͙ lưu ý ............................................................................................. 119
?
II.4. Ví ß minh ho̩ .............................................................................................. 119

?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 5
? Mөc lөc
?

III. BÀI TҰO ........................................................................................................ 123


?
OHӨ LӨC 1 Đӄ THI MҮU .......................................................................... .124
?
OHӨ LӨC 2 HƯӞN÷ DҮN èIӂT CHƯƠN÷ TRÌNH TRÊN MÔI
TRƯӠN÷ BORLAND C++ 3.1 (BC31) .......................................................... .133
I. CÀI ĐҺT BC3.1 ............................................................................................... 133
?
II. CÁC BƯӞC èIӂT CHƯƠN÷ TRÌNH ......................................................... 138
a. Chu̱n b͓ vi͇t chương trình ..................................................................... 138
b. Các ph m chͱc năng ch nh ...................................................................... 138
c. èi͇t chương trình..................................................................................... 139
d. Biên d͓ch và s͵a l͟i ................................................................................. 139
e. M͡t s͙ l͟i thưͥng g̿p ............................................................................. 140
f. Debug ...................................................................................................... 143
g. Các thao tác liên quan đ͇n c͵a s͝ Watch ............................................... 145
TÀI LIӊU THAM KHҦO ................................................................................ .146
?
MӨC LӨC ............................................................................................................... i

?
Giáo trình Bài Tұp Kӻ Thuұt Lұp Trình Trang 6

You might also like