Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 146 trang
THÔNG TIN TÀI LIỆU
Nội dung
Hồ Sĩ Đàm, Trần Thị Minh Châu, Lê Sỹ Vinh GIÁO TRÌNH LẬP TRÌNH CƠ BẢN VỚI C++ NXB Đại học Quốc gia M cl c Gi i thi u Ch ơng M u 1.1 Ch ơng trình gì? 1.2 L p trình gì? 1.2.1 M c cao c l p v i máy tính 1.2.2 M c th p ph thu c vào máy tính 10 1.3 Ngơn ng l p trình ch ơng trình d ch 10 1.4 Môi tr 1.5 L i tìm l i 13 1.6 L ch s C C++ .14 1.7 Ch ơng trình C++ ng l p trình b c cao 11 u tiên .15 Bài t p 19 Ch ơng 2.1 Bi n, ki u d li u phép toán 20 Ki u d li u 22 2.1.1 Ki u d li u b n 22 2.1.2 Ki u d li u d n xu t 24 2.2 Khai báo s d ng bi n 24 2.2.1 2.2.2 nh danh cách t tên bi n 24 Khai báo bi n .25 2.3 H ng .25 2.4 Các phép toán b n 26 2.4.1 Phép gán 26 2.4.2 Các phép toán s h c 26 2.4.3 Các phép toán quan h 27 2.4.4 Các phép tốn lơ-gic 28 2.4.5 u tiên c a phép toán 28 2.4.6 T ơng thích gi a ki u 29 Bài t p 30 Ch ơng Các c u trúc i u n 31 3.1 Lu ng i u n 31 3.2 Các c u trúc r nhánh .32 3.2.1 L nh if-else 32 3.2.2 L nh switch .38 3.3 Các c u trúc l p 42 3.3.1 Vòng while .42 3.3.2 Vòng do-while 45 3.3.3 Vòng for 48 3.4 Thu t toán c u trúc i u n l ng .50 3.5 Các l nh break continue 53 3.6 Bi u th c i u ki n c u trúc i u n 56 Bài t p 58 Ch ơng Hàm 59 4.1 C u trúc chung c a hàm 60 4.2 Cách s d ng hàm 62 4.3 Các hàm có s n .60 4.4 Bi n toàn c c bi n a ph ơng .63 4.4.1 Ph m vi c a bi n 63 4.4.2 Th i gian s ng c a bi n 65 4.5 Tham s , i s , ch truy n d li u cho hàm 66 4.5.1 Truy n giá tr 66 4.5.2 Truy n tham chi u 67 4.5.3 Tham s m c nh 70 4.6 Hàm trùng tên 72 4.7 Hàm quy 73 Bài t p 76 Ch ơng 5.1 M ng xâu kí t! .77 M ng m t chi u 77 5.1.1 Kh i t o m ng 78 5.1.2 Trách nhi m ki m sốt tính h"p l c a ch# s m ng 78 5.1.3 M ng làm tham s cho hàm 79 5.2 M ng nhi u chi u .81 5.3 Xâu kí t! 82 5.3.1 Kh i t o giá tr cho xâu kí t! 83 5.3.2 Th vi n x lý xâu kí t! .84 5.4 Tìm ki m s$p x p d li u m ng 84 5.4.1 Tìm ki m n tính 84 5.4.2 Tìm ki m nh phân .86 5.4.3 S$p x p ch n 87 Bài t p 89 Ch ơng Con tr% b nh .91 6.1 B nh máy tính .91 6.2 Bi n 6.3 Bi n tr% 92 6.4 M ng tr% 94 a ch# c a bi n 91 6.5 B nh ng .95 6.5.1 C p phát b nh 6.5.2 Gi i phóng b nh ng .96 ng .96 6.6 M ng ng tr% .97 6.7 Truy n tham s tr% 99 Bài t p .102 Ch ơng Các ki u d li u tr&u t "ng 104 7.1 nh ngh'a ki u d li u tr&u t "ng b ng c u trúc struct 104 7.2 nh ngh'a ki u d li u tr&u t "ng b ng c u trúc class .110 7.2.1 Quy n truy nh p .113 7.2.2 Toán t ph m vi 7.2.3 Hàm kh i t o hàm h y .115 nh ngh'a hàm thành viên 114 ng i t "ng 118 7.3 L"i ích c a l p trình h 7.4 Biên d ch riêng r 119 Bài t p .123 Ch ơng Vào d li u 125 8.1 Khái ni m dòng d li u 125 8.2 T p v(n b n t p nh phân 126 8.3 Vào t p .126 8.3.1 M t p 127 8.3.2 óng t p 128 8.3.3 X lý t p v(n b n .129 8.3.4 X lý t p nh phân 132 Bài t p .136 Ph l c A Phong cách l p trình 138 Ph l c B D ch ch ơng trình C++ b ng GNU C++ 142 Tài li u tham kh o 145 Gi i thi u L p trình m t nh ng b c quan tr ng nh t quy trình gi i quy t m t tốn Nhi u ngơn ng l p trình ã "c i nh m giúp gi i quy t toán m t cách hi u qu nh t M i ngơn ng l p trình có nh ng th m nh nh "c i m riêng Các ngơn ng l p trình có th chia thành hai lo i ngơn ng l p trình b c th p (g n g)i v i ngơn ng máy), ngơn ng l p trình b c cao (ng n g)i v i ngôn ng t! nhiên c a ng i) Giáo trình trang b cho sinh viên nh ng ki n th c b n v l p trình Ngơn ng l p trình C++ "c s d ng minh h a cho vi c l p trình Vi c l!a ch n C++ b i m t ngơn ng l p trình h ng i t "ng chuyên nghi p "c s d ng r ng rãi toàn th gi i phát tri n ch ơng trình t& ơn gi n n ph c t p Hơn th n a, s! m m d*o c a C++ cho phép gi i quy t nh ng tốn th!c t m t cách nhanh chóng, cho phép qu n lý t ơng tác tr!c ti p n h th ng, b nh nâng cao hi u qu c a ch ơng trình Giáo trình "c chia thành ch ơng, m i ch ơng trình bày m t v n lý thuy t l p trình Các v n lý thuy t "c mơ t b ng ví d th!c t K t thúc m i ch ơng ph n t p sinh viên gi i quy t n$m rõ v lý thuy t C u trúc c a giáo trình nh sau: • Ch ơng 1: gi i thi u khái ni m b n v l p trình quy trình gi i quy t m t tốn Sinh viên s hi u v ngôn ng l p trình b c cao ngơn ng l p trình b c th p Cu i ch ơng gi i thi u v môi tr ng l p trình c)ng nh ngơn ng l p trình C++ • Ch ơng 2: Chúng gi i thi u khái ni m b n v bi n s , h ng s , ki u d li u b n phép toán b n Sau h c, sinh viên s bi t cách khai báo s d ng bi n s , h ng s , phép toán bi n h ng s • Ch ơng 3: Tr ơng gi i thi u v c u trúc ch ơng trình c)ng nh c u trúc i u n C th c u r nhánh (if-else, switch), c u trúc l p (fordo, while-do, repeat) s "c gi i thi u • Ch ơng 4: Ch ơng trình hàm s "c gi i thi u sinh viên hi u "c chi n l "c l p trình “chia tr ” Chúng tơi s trình bày chi ti t v cách khai báo s d ng hàm, c)ng nh cách truy n tham s , truy n giá tr cho hàm • Ch ơng 5: Ch ơng trình bày c u trúc d li u ki u m ng xâu kí t! Cách khai báo s d ng m ng m t chi u c)ng nh m ng nhi u chi u ví d liên quan "c trình bày chi ti t ch ơng • Ch ơng 6: ây m t ch ơng t ơng i c thù cho C++, trình bày v b nh ki u d li u tr% C u trúc b nh , cách qu n lý xin c p phép b nh ng thông qua vi c s d ng bi n tr% s "c trình bày • Ch ơng 7: Trong ch ơng chúng tơi s trình bày v c u trúc d li u tr&u t "ng (c th struct class C++) Sinh viên s hi u bi t cách t o nh ng c u trúc d li u tr&u t "ng phù h"p v i ki u i t "ng d li u c n bi u di+n Cu i ch ơng, c)ng gi i thi u v l p trình h ng i t "ng, m t th m nh c a ngơn ng l p trình C++ • Ch ơng 8: Chúng tơi gi i thi u v cách vào d li u Sinh viên s gi i thi u chi ti t v cách làm vi c v i t p d li u "c Ch ơng M u Trong ch ơng này, s gi i thi u qua m t s khái ni m b n v : ch ơng trình, l p trình, ngơn ng l p trình 1.1 Ch ơng trình gì? B n ch$c ch$n ã dùng qua nhi u ch ơng trình khác nhau, ví d nh ch ơng trình so n th o v(n b n “Microsoft Word” Ch ơng trình, hay ph n m m, "c hi u ơn gi n m t t p l nh máy tính th!c hi n theo Khi b n a cho máy tính m t ch ơng trình u c u máy tính th!c hi n theo l nh c a ch ơng trình, b n ang ch y ch ơng trình ó 1.2 L p trình gì? L p trình có th hi u ơn gi n trình vi t l nh h ng d n máy tính th!c hi n gi i quy t m t toán c th ó L p trình m t b c quan tr ng quy trình gi i quy t m t tốn nh mơ t Hình 1.1 Hình 1.1: Quy trình gi i quy t m t tốn Quy trình có th "c chia thành hai m c: m c cao c l p v i máy tính (machine independent) m c th p ph thu c vào máy tính (machine specific) 1.2.1 M c cao M c cao nh v n c l p v i máy tính c l p v i máy tính th ng "c chia thành ba b , thi t k thu t tốn l p trình c là: xác Xác nh v n : B c nh ngh'a toán, xác nh d li u u vào, ràng bu c, yêu c u c n gi i quy t k t qu u B c th ng s d ng bút/gi y ngôn ng t! nhiên nh ti ng Anh, ti ng Vi t mô t xác nh v n c n gi i quy t Thi t k thu t toán: M t thu t toán m t b ch# d n nh m gi i quy t m t toán Các ch# d n c n "c di+n t m t cách hồn ch#nh xác cho m i ng i có th hi u ti n hành theo Thu t tốn th ng "c mơ t d i d ng mã gi (pseudocode) B c có th s d ng gi y bút th ng không ph thu c vào ngơn ng l p trình Ví d v thu t tốn “tìm c s chung l n nh t (UCLN) c a hai s x y” vi t b ng ngơn ng t! nhiên: • B c 1: N u x>y thay x b ng ph n d c a phép chia x/y • B c 2: N u không, thay y b ng ph n d c a phép chia y/x • B c 3: N u hai s x y có m t s b ng k t lu n UCLN s cịn l i • B c 4: N u không, quay l i B c ho c b ng mã gi : repeat if x > y then x := x mod y else y := y mod x until x = or y = if x = then UCLN := y else UCLN := x L p trình b c chuy n ,i thu t toán sang m t ngơn ng l p trình, ph, bi n ngơn ng l p trình b c cao, ví d nh ngôn ng C++, Java B c này, l p trình viên s d ng m t ch ơng trình so n th o v(n b n vi t ch ơng trình Trong sau trình l p trình, ng i ta ph i ti n hành ki m th s a l i ch ơng trình Có ba lo i l i th ng g p: l i cú pháp, l i th i gian ch y, l i lô-gic (xem chi ti t M c 1.5) d() tr v t e n u m t thao tác c ho c ghi b th t b i Ví d ta c vi t vào m t t p không "c m ghi ho c thi t b l u tr không ch tr ng ghi l() tr v t e nh ng tr ng h"p d() tr v t e có l i nh d ng, ch.ng h n nh ta ang nh c m t s nguyên nh ng l i g p ph i d li u ch e () tr v t e n u ch m " d() tr v l e n u x y tình hu ng mà m t hàm n u "c g i s tr v t e n cu i t p t l i c tr ng thái mà m t hàm thành viên ó ã ánh d u tr dùng hàm thành viên le c ó, ta Con tr' get put c a dòng i t "ng dịng vào có nh t m t tr% n i b Con tr% n i b c a t e hay t e "c g i tr' get hay tr' c Nó ch# t i v trí mà thao tác c ti p theo s "c th!c hi n t i ó Con tr% n i b c a t e hay t e "c g i tr' put hay tr' ghi Nó ch# t i v trí mà thao tác ghi ti p theo s "c th!c hi n t i ó Cu i cùng, t e có c tr% get tr% put M i nh v v trí hi n t i c a tr% get put, ta có hàm thành viên tell" tell Các hàm tr v m t giá tr thu c ki u _ty e, ki u d li u s nguyên bi u di+n v trí hi n t i (tính t& u t p) c a tr% get c a dòng (n u g i hàm tell") ho c tr% put c a dòng (n u g i hàm tell ) d tr% d d t l i v trí c a tr% get put, ta có hàm ee "( et2 e t n) ee ( et2 d e t n) có công d ng di chuy n et Trong ó, et "c tính t& u t p n u get put t i v trí e t n $$ e" (giá tr m c nh c a d e t n), t& cu i t p n u e t n $$end, t& v trí hi n t i n u direction $$ Hình 8.4 minh h a cách s d ng tr% get put m t t p v(n b n 131 tính kích th cc a n l de n l de n" n nt t e t e e e n () t e le (% l n" e" le ee l n" end le l t et D e td; ae e txt%); n = le.tell"(); " (02 $$end); = le.tell"(); e(); %D e ae % (end - e" n) % yte 'n%; n 0; ?5 yte Hình 8.4: Dùng tr dịng xác nh kích th c t p 8.3.4 X lý t p nh phân c ghi d li u v i t p nh phân, ta khơng th dùng tốn t hàm nh "etl ne d li u có nh d ng khác kí t! tr$ng khơng "c dùng tách gi a ph n t d li u Thay vào ó, ta dùng hai hàm thành viên "c thi t k riêng cho vi c c ghi d li u nh phân m t cách tu n t! w te e d Cách dùng nh sau: t n t_ t e t_ t e w te(memory_block2 size); e d(memory_block2 size); Trong ó memory_block thu c lo i "con tr% t i char" (char*), i di n cho a ch# c a m t m ng byte l u tr ph n t d li u c "c ho c ph n t c n "c ghi dòng Tham s size m t giá tr nguyên xác nh s kí t! c n c ho c ghi vào m ng ó Các ch ơng trình Hình 8.5, Hình 8.6 Hình 8.7 minh h a vi c ghi d li u ki u ng i dùng t! nh ngh'a t& t p nh phân 132 c nde SD`D.ND_H de ne SD`D.ND_H n l de n" n e t e e td; de ne TAb_NAT._M.NNDH 20 t t St dent n e [TAb_NAT._M.NNDH + 1]; l t e; St dent () n e[0] = 4'04; St dent ( n t *2 l t); d ntln() t n e %'t% e = 0; e endl; ; St dent$$St dent ( n t * n2 l t ) nt len"t = t len(n); (len"t TAb_NAT._M.NNDH) len"t = TAb_NAT._M.NNDH; t n y(n e2 n2 len"t ); n e[len"t ] = 4'04; t e end t e t n" e = ; end Hình 8.5: Ki u b n ghi ơn gi n Student 133 n l de n l de n l de t e t e t n" n l de % t dent % n" n nt e e td; t e y le (% ( y le n () _ e d t%2 $$ n y | $$ t); en()) St dent nne(% nne%2 10); St dent W l (%W l %2 =); St dent (% %2 3); el e et y y y le.w le.w le.w y le l t te(( te(( te(( *)(& nne)2 ae (St dent)); *)(&W l )2 ae (St dent)); *)(& )2 ae (St dent)); e(); % $ nn t en le%; n 0; Hình 8.6: Ghi d li u t p nh phân 134 n l de n l de n l de t e t e t n" n l de % t dent % n" n nt e e td; n () t e ( y y le w le (& le (% e d t%2 _ en()) y le.e $$ n y); () ) St dent t dent; y le e d(( *)(& t dent)2 ae ( t dent)); ( y le." d()) t dent ntln(); y el e et le l t e(); % & nn t en le%; n 0; Hình 8.7: c d li u t" t p nh phân 135 Bài t p Nh p vào t& bàn phím m t danh sách sinh viên M i sinh viên g m có thơng tin sau ây: tên tu,i, ngày tháng n(m sinh, nơi sinh, quê quán, l p, h c l!c (t& n 9) Hãy ghi thơng tin v danh sách sinh viên ó t p v(n b n student.txt Sau th!c hi n 1, vi t ch ơng trình nh p danh sách sinh viên t& t p v(n b n student.txt r i hi n th hình: • thông tin v t t c b n tên Vinh t p v(n b n vinh.txt • thông tin t t c b n quê Hà N i t p v(n b n hanoi.txt • T,ng s b n có h c l!c (