Bài giảng Kỹ thuật lập trình - Hà Đại Dương

pdf 197 trang ngocly 90
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Hà Đại Dương", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_ha_dai_duong.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình - Hà Đại Dương

  1. HC VI N K THU T QUÂN S KHOA CÔNG NGH THÔNG TIN Bài gi ng K THU T L P TRÌNH Biên so n Hà i D ng Nguy n M u Uyên Hà N i - 11/2010
  2. MC L C HC VI N K THU T QUÂN S 1 KHOA CÔNG NGH THÔNG TIN 1 MC L C 2 Bài 1 - T NG QUAN 6 I. Gi i thi u 7 I. Gi i thi u 7 1. M c ích, Yêu c u 7 2. N i dung môn h c 8 3. Tài li u h c t p và tham kh o 10 4. Hình th c ánh giá k t qu môn h c 10 II. Bài toán và vi c gi i bài toán trên máy tính 10 1. Ph ư ng pháp t ng quát gi i m t bài toán trên máy tính 10 2. Xác nh bài toán 11 3. C u trúc d li u và Gi i thu t 12 4. Ch ư ng trình 18 III. Công c l p trình 18 1. Ngôn ng l p trình 18 2. Công c l p trình 19 3. Công c l p trình Dev-C++ 20 IV. Tóm t t n i dung bài h c 21 V. Bài t p 22 Bài 2 - NGÔN NG L P TRÌNH C/C++ 23 I. Gi i thi u 23 II. Mt s khái ni m c b n 24 1. B ký t 24 2. T khóa 24 3. Ki u d li u 25 4. Tên, Bi n, h ng 26 5. Bi u thc 29 III. C u trúc mt ch ng trình n gi n 34 1. C u trúc chung 34 2. Khai báo s d ng th ư vi n 35 3. Khai báo h ng, bi n, ki u 35 4. M t s l nh n 35 5. Chú thích 36 6. Ch ư ng trình chính 36 IV. Nh p/Xu t d li u 36 1. Nh p d li u t bàn phím – Hàm scanf() 36 2. Xu t d li u ra màn hình - Hàm printf() 38 3. Ví d 40 V. Tóm t t n i dung bài h c 41 VI. Bài t p 42 Bài 3 - Bài th c hành: MÔI TR ƯNG L P TRÌNH VÀ CÁC L NH VÀO/RA 43 I. Làm quen môi tr ng Dev-C++ 43 1. Kh i ng Dev-C++ 43 2. Giao di n chính 43 II. Th c hi n các ví d sau 43 1. Tính di n tích m t tam giác 43 2. Tính t ng, hi u, tích, th ư ng c a 2 s 45 III. Bài t p t làm 46 Bài 4 - IU KHI N CH N VÀ L P 49 I. iu khi n ch n 49 1. Kh i l nh 49 2
  3. 2. C u trúc IF 51 3. C u trúc SWITCH 54 II. iu khi n l p 58 1. C u trúc FOR 58 2. C u trúc WHILE 60 3. C u trúc DO WHILE 62 4. L nh break và continue 65 III. Tóm t t n i dung bài h c 65 IV. Bài t p 65 Bài 5 - Bài th c hành: IU KHI N CH N VÀ L P 66 I. Th c hi n các ví d sau 66 1. Gi i ph ư ng trình b c 2 66 2. Tìm USCNLN c a hai s 67 II. Bài t p t làm 69 Bài 6 - M NG, CON TR VÀ XÂU KÝ T 71 I. M ng 71 1. M ng trong C 71 2. M ng m t chi u 71 3. Mng nhi u chi u 75 II. Con tr 78 1. Khai báo và s d ng bi n con tr 78 2. Con tr và m ng 82 3. Con tr và tham s hình th c c a hàm 86 III. Xâu ký t 87 1. Khai báo 87 2. Các thao tác trên chu i ký t 88 IV. Tóm t t n i dung bài h c 92 V. Bài t p 93 Bài 7 - Bài th c hành: M NG, CON TR VÀ XÂU KÝ T 94 I. Th c hi n các ví d sau 94 1. Tìm ph n t l n nh t c a m ng 94 2. L y Tên t h tên ng ưi Vi t 95 II. Bài t p t làm 96 1. M ng 96 2. Con tr 98 3. Xâu ký t 98 Bài 8 - HÀM VÀ C U TRÚC CH ƯƠ NG TRÌNH 100 I. T ch c ch ng trình 100 1. Ví d 100 2. C u trúc ch ư ng trình 101 3. Hàm xây d ng s n 104 II. Hàm do ng i dùng nh ngh a 104 1. Khai báo và nh ngh a Hàm 105 2. L i g i Hàm 107 3. Hàm v i i m c nh 108 4. Khai báo hàm trùng tên 109 5. Truy n tham s 110 6. Hàm và m ng 116 III. Con tr hàm 123 1. Khai báo 123 2. S d ng con tr hàm 124 3. Mng con tr hàm 124 IV. qui 125 1. Khái ni m 125 2. L p các bài toán gi i ưc b ng qui 127 3. Các ví d 128 V. Tóm t t n i dung bài h c 129 VI. Bài t p 130 3
  4. Bài 9 - Bài th c hành: HÀM VÀ C U TRÚC CH ƯƠ NG TRÌNH 131 I. Th c hi n các ví d sau 131 1. Xác nh v trí tư ng i c a 1 im v i tam giác ABC 131 2. Vi t hàm m s t c a m t xâu ký t 132 II. Bài t p t làm 133 Bài 10 - C U TRÚC D LI U DO NG ƯI DÙNG T NH NGH A 135 I. C u trúc d li u do ng i dùng t nh ngh a 135 1 Khái ni m 135 2. Khai báo bi n c u trúc 137 3. Các thao tác trên bi n ki u c u trúc 138 4. Con tr c u trúc 140 5. C u trúc v i thành ph n ki u bit 144 6. Câu l nh typedef 145 7. Hàm sizeof() 145 II. Ng n x p 145 1. Khái ni m 146 2. Cài t ng n x p s d ng m ng 146 3. Cài t ng n x p s d ng con tr liên k t 147 4. M t s ng d ng c a ng n x p 149 III. Hàng i 151 1. Khái ni m 151 2. Cài t hàng i s d ng m ng 151 3. Cài hàng i s d ng con tr 153 4. M t s ng d ng c a hàng i 154 IV. Ki u h p 154 1. Khai báo 154 2. Truy c p 155 V. Ki u li t kê 155 VI. Tóm t t n i dung bài h c 156 VII. Bài t p 156 Bài 11 - Bài th c hành: C U TRÚC D LI U DO NG ƯI DÙNG T NH NGH A 157 I. Th c hi n các ví d sau 157 1. Bi u di n và th c hi n các phép toán phân s 157 2. Chuy n bi u th c trung t v d ng h u t 159 II. Bài t p t làm 162 Bài 12 - LÀM VI C V I FILE 164 I. M t s khái niêm 164 II. Các thao tác trên t p tin 165 1. Khai báo bi n t p tin 165 2. M t p tin 165 3. óng t p tin 166 4. Ki m tra n cu i t p tin hay ch ưa? 166 5 Di chuy n con tr t p tin v u t p tin - Hàm rewind() 166 III. Truy c p t p tin v n b n 167 1. Ghi d li u lên t p tin v n b n 167 2. c d li u t t p tin v n b n 168 IV. Truy c p t p tin nh phân 169 1. Ghi d li u lên t p tin nh phân - Hàm fwrite() 170 2. c d li u t t p tin nh phân - Hàm fread() 171 3. Di chuy n con tr t p tin - Hàm fseek() Error! Bookmark not defined. 4. Ví d 171 V. Tóm t t n i dung bài h c 174 VI. Bài t p 174 Bài 13 - H A 175 I. Kh i ng ho 175 II. Các hàm ho 178 1. M u và màu 178 2. V và tô màu 180 4
  5. 3. V ưng g p khúc và a giác 181 4. V im, mi n 184 5. Hình ch nh t 184 6. C a s (Viewport) 186 III. X lý v n b n trên màn hình ho 187 1. Hi n th v n b n trên màn hình ho 187 2. S d ng các Fonts ch 188 3. B r ng và chi u cao c a kí t 189 IV. Tóm t t n i dung bài h c 189 V. Bài t p 192 Bài 14 - Bài th c hành: LÀM VI C V I FILE VÀ H A 193 I. Th c hi n các ví d sau 193 1. Ví d 1 193 2. Ví d 2 - 194 II. Bài t p t làm 194 Bài 15 - ÔN T P 196 Bài 1 - T ng quan 196 Bài 2. Ngôn ng l p trình C/C++ 196 Bài 3 - Bài th c hành: Môi tr ng l p trình và các l nh vào/ra 196 Bài 4 - iu khi n Ch n và L p 196 Bài 5 - Bài th c hành: Các c u trúc iu khi n 196 Bài 6 - M ng, Con tr và xâu ký t 196 Bài 7 - Bài th c hành: M ng, Con tr và Xâu ký t 196 Bài 8 - C u trúc d li u do ng i dùng t nh ngh a 196 Bài 9 - Bài th c hành: C u trúc d li u do ng i dùng t nh ngh a 196 Bài 10 - Hàm 196 Bài 11 - Bài th c hành: Hàm 197 Bài 12 - Làm vi c v i File 197 Bài 13 - H a 197 Bài 14 - Bài th c hành: Làm vi c v i File và Thu t toán nâng cao 197 5
  6. Gi i thi u giáo viên Giáo viên: Nguy n M u Uyên Email: [email protected] B môn: HTTT – Khoa CNTT (T ng 5 – A2) a ch tài li u môn h c: 6
  7. Bài 1 - T NG QUAN Ni dung bài h c I. Gi i thi u 1. M c ích, Yêu c u 2. N i dung môn h c 3. Tài li u h c t p và tham kh o 4. Hình th c ánh giá k t qu môn h c II. Bài toán và vi c gi i bài toán trên máy tính 1. Xác nh bài toán 2. C u trúc d liu và Gi i thu t 3. Ch ư ng trình III. Công c l p trình 1. Ngôn ng l p trình 2. Công c l p trình 3. Công c l p trình Dev-C++ IV. Bài t p I. Gi i thi u 1. Mc ích, Yêu c u Mc ích c a môn h c là cung c p cho sinh viên nh ng ki n th c c b n v k thu t l p trình nói chung và k n ng s d ng công c l p trình C/C++ trong vi c gi i quy t bài toán b ng ch ng trình ph n m m trên máy tính. Kt thúc môn h c sinh viên c trang b nh ng ki n th c v : - Cách th c gi i quy t m t bài toán trên máy tính; - Công c , ki m th c v vi c thu t toán hóa bài toán; - Ngôn ng l p trình C/C++; - Mt s c u trúc d li u và gi i thu t in hình. Yêu c u i v i sinh viên - Có hi u bi t c b n v cu trúc máy tính; - Có hi u bi t c b n v h iu hành; - Bi t s d ng các ph n m m h th ng trong vi c qu n lý tài nguyên, sao chép/copy d li u; - Bi t s d ng các ph n m n ng d ng nh công c so n th o v n b n, truy c p internet, web. - Nghe gi ng và làm bài t p. 7
  8. 2. Ni dung môn h c Cu trúc ch ng trình: 32 ti t lý thuy t, 24 ti t th c hành, 4 ti t ôn t p, t ng 60 ti t. Chi ti t n i dung ch ng trình c cho nh b ng sau: STT Bài/N i dung S ti t Tng quan I. Gi i thi u II. Bài toán và vi c gi i bài toán trên máy tính 1 4 III. Công c l p trình IV. Tóm t t n i dung bài h c V. Bài t p Ngôn ng l p trình C/C++ I. Gi i thi u II. M t s khái ni m c b n 2 III. C u trúc ch ng trình n gi n trong C 4 IV. Nh p/Xu t d li u V. Tóm t t n i dung bài h c VI. Bài t p Bài th c hành: Môi tr ưng l p trình và các l nh vào/ra 3 I. Làm quen v i môi tr ng l p trình Dev-C++ 4 II. Th c hi n các ví d III. Bài t p t làm iu khi n Ch n và L p I. iu khi n ch n 4 II. iu khi n l p 4 III. Tóm t t n i dung bài h c IV. Bài t p Bài th c hành: Các c u trúc iu khi n 5 I. Th c hi n các ví d 4 II. Bài t p t làm Mng, Con tr và Xâu ký t I. M ng II. Con tr 6 III. Xâu ký t 4 IV. Tóm t t n i dung bài h c V. Bài t p 8
  9. Bài th c hành: M ng, Con tr và Xâu ký t 7 I. Th c hi n các ví d 4 II. Bài t p t làm Cu trúc d li u do ng ưi dùng t nh ngh a I. C u trúc d li u do ng i dùng t nh ngh a II. Ki u ng n x p 8 III. Ki u hàng i 4 IV. Tóm t t n i dung bài h c V. Bài t p Bài th c hành: C u trúc d li u do ng ưi dùng t nh ngh a 9 I. Th c hi n các ví d 4 II. Bài t p t làm Hàm I. Khái ni m II. Hàm t t o 10 III. Truy n tham s cho hàm 4 IV. K thu t qui V. Tóm t t n i dung bài h c VI. Bài t p Bài th c hành: Hàm 11 I. Th c hi n các ví d 4 II. Bài t p t làm Làm vi c v i File I. Mt s khái ni m II. Các thao tác trên t p tin 12 III. Truy c p t p tin v n b n 4 IV. Truy c p t p tin nh phân V. Tóm t t n i dung bài h c VI. Bài t p h a I. Kh i ng ch h a II. Các hàm h a 13 III. X lý v n b n 4 IV. Tóm t t n i dung bài h c V. Bài t p Bài th c hành: Làm vi c v i File và h a 14 I. Th c hi n các ví d 4 II. Bài t p t làm 15 Ôn t p 4 9
  10. 3. Tài li u h c t p và tham kh o 1. Hà i D ng, Nguy n M u Uyên, Tp Bài gi ng K thu t lp trình, HVKTQS 2010; 2. Tr n c Huyên, Ph ng pháp gi i các bài toán trong tin h c, Nhà xu t b n giáo dc 1997; 3. ào Thanh T nh, Hà i D ng, Tin h c i c ng, H c vi n KTQS, 2003; 4. Xuân Lôi, Cu trúc d li u và gi i thu t, NXB Giáo d c, 1997; 5. Robert Sedgewick, Algorithns in C++, Addison-Wesley 1992; 6. Niklaus Wirth B n d ch c a Nguy n Qu c C ng, Cu trúc d li u + Gii thu t = Ch ư ng trình , , NXB KHKT, 2001; 7. Giáo trình Tin H c i C ng A, Nguy n V n Linh, Khoa Công Ngh Thông Tin, i h c C n Th , 1991. 8. Giáo trình lý thuy t và bài t p ngôn ng C; Nguy n ình Tê, Hoàng c H i, Nhà xu t b n Giáo d c, 1999. 9. C - Tham kh o toàn di n, Nguy n C n, Nhà xu t b n ng Nai, 1996. 10. Giúp t h c L p Trình v i ngôn ng C, Võ V n Vi n, Nhà xu t b n ng Nai, 2002. 11. The C Programming Language, Brain W. Kernighan & Dennis Ritchie, Prentice Hall Publisher, 1988. 4. Hình th c ánh giá k t qu môn h c Thang im 10, các thành ph n im c xác nh trên các n i dung sau: STT Ni dung % 1 Chuyên c n 10% 2 Th ng xuyên: Ki m tra tr c ti p trong gi th c hành i v i t t 20% c các sinh viên 3 Thi k t thúc môn: Thi v n áp 70% Tng cng 100% II. Bài toán và vi c gi i bài toán trên máy tính 1. Ph ươ ng pháp t ng quát gi i m t bài toán trên máy tính gi i m t bài toán trên máy tính c n th c hi n các b c sau: 1. Xác nh bài toán; 2. Xác nh c u trúc d li u mô t bài toán; 10
  11. 3. Xây d ng thu t toán; 4. So n th o v n b n ch ng trình, ki m tra và hoàn thi n ch ng trình. 2. Xác nh bài toán Khái quát v bài toán Trong quá trình t n t i và phát tri n, m i cá nhân luôn ph i gi i quy t nhi u bài toán t ra trong cu c s ng. Có th nói cu c s ng là m t chu i các bài toán mà ta ph i i u gi i quy t. Theo nhi u nhà nghiên c u thì m i bài toán u có th di n t theo m t s chung nh sau: A => B (*) trong ó: - A là gi thi t, iu ki n ban u, thông tin ã cho, ã bi t; - B là k t lu n, là m c tiêu c n t ho c cái ph i tìm, ph i làm ra khi k t thúc bài toán; - => là suy lu n, gi i pháp c n xác nh ho c chu i các thao tác c n th c hi n có c k t qu B t cái ã có A. Xác nh bài toán Theo s trên thì vi c xác nh bài toán có ngh a là xác nh A, B và n u có th thì xác nh luôn c các b c th c hi n “ i” c t A n B. Bài toán trên máy tính T ng t nh (*), và - A g i là u vào (INPUT); - B g i là u ra (OUTPUT); - => là CH Ư NG TRÌNH MÁY TÍNH cho k t qu B v i u vào A. Khó kh n Vi c xác nh m t bài toán trên máy tính th ng g p khó kh n sau: - Thông tin v A, B th ng không rõ ràng và không y ; - Thông báo v iu ki n t ra cho cách gi i (=>) th ng không c nêu ra m t cách minh b ch; Ví d 1 : Hãy vi t ch ng trình cho phép gi i ph ng trình b c 2. A =???, B=??? Ví d 2 : Gi s ng i A có m t s ti n X em g i ti t ki n, lãi xu t tháng là L% h i r ng sau T tháng thì A có bao nhiêu ti n bi t r ng c 3 tháng thì ti n lãi c c ng vào g c. Ví d 3 : Bài toán 8 h u - Hãy tìm cách t 8 con h u trên m t bàn c vua sao cho không có quân h u nào có th n quân h u khác. Ví d 4 : Cho dãy s a1, a2, , an hãy s p x p dãy trên theo th t gi m d n. Ví d 5 : Hãy xây d ng h th ng qu n lý h s và k t qu h c t p c a sinh viên. 11
  12. A =???, B=??? Nh n xét quan tr ng - Vi c xác nh bài toán là r t r t quan tr ng, nó nh h ng t i cách th c và ch t lng c a vi c gi i quy t bài toán; - Mt bài toán cho dù c di n t chi ti t, rõ ràng v n nên gi nh là ph n l n thông tin v A, B là ti m n trong u ng i gi i. Thông tin v A ho c B th ng ch là bi u t ng g i nh n các thông tin ti m n. - Bc u tiên xác nh m t bài toán là ph i phát bi u l i bài toán m t cách chính xác theo ngôn ng c a riêng mình vì ó chính là cách ti p c n bài toán, hi u bài toán. - Bc ti p là tìm hi u thông tin Input A, Output B và các m i liên h gi a chúng; - Nên xét m t vài tr ng h p c th thông qua ó hi u c c bài toán , th y rõ c các thao tác ph i làm. Th c t cho th y có nh ng bài toán trong tin h c ch có th mô t c thông qua các ví d (nh : ). 3. Cu trúc d li u và Gi i thu t Cu trúc d li u - Trong khoa h c máy tính, cu trúc d li u là m t cách t ch c lu tr và truy c p d li u trong máy tính sao cho nó có th c s d ng m t cách hi u qu (và ph thu c c vào công c l p trình). - Ví d (trong C): M ng (Array), Con tr (Pointer), Xâu ký t (String), File, Stack, Queue - Thông th ng, m t c u trúc d li u c ch n c n th n s cho phép th c hin thu t toán hi u qu h n. - Vi c ch n c u trúc d li u th ng b t u t ch n m t cu trúc d li u tr u t ng. Mt c u trúc d li u c thi t k t t cho phép th c hi n nhi u phép toán, s d ng càng ít tài nguyên, th i gian x lý và không gian b nh càng t t. - Các c u trúc d li u c tri n khai b ng cách s d ng các ki u d li u, các tham chi u và các phép toán trên ó c cung c p b i m t ngôn ng l p trình. Gi i thu t - Thu t toán , còn g i là gi i thu t, là m t tp h p h u h n ca các ch th hay ph ng cách c nh ngh a rõ ràng cho vi c hoàn t t m t s s vi c t m t tr ng thái ban u cho tr c; khi các ch th này c áp d ng tri t thì s d n n k t qu sau cùng nh ã d oán. - Thu t toán là m t b các qui t c hay qui trình c th nh m gi i quy t m t v n trong m t s b c h u h n, ho c nh m cung c p m t k t qu t m t t p h p c a các d ki n a vào. 12
  13. Ví d 1 : Gi s có hai bình A và B ng hai lo i ch t l ng khác nhau, A ch a dung d ch Da, B ch a dung d ch Db. Gi i thu t i dung d ch Da vào bình B và Db vào A là: Yêu c u ph i có thêm m t bình th ba g i là bình C. Bc 1: dung d ch Db vào bình C; Bc 2: dung d ch Da vào bình B; Bc 3: dung d ch Db vào bình A Ví d 2 : M t trong nh ng gi i thu t tìm c chung l n nh t c a hai s a và b là: Bc 1: Nh p vào hai s a và b. Bc 2: So sánh 2 s a,b ch n s nh nh t gán cho UCLN. Bc 3: N u hai s a và b chia h t cho UCLN thì Thc hi n b c 5. Bc 4: Gi m UCLN m t n v và quay l i b c 3 Bc 5: In UCLN - K t thúc. Mt thu t toán có các tính ch t sau: - Tính chính xác : m b o k t qu tính toán hay các thao tác mà máy tính th c hi n c là chính xác. - Tính rõ ràng : Thu t toán ph i c th hi n b ng các câu l nh minh b ch; các câu lnh c s p x p theo th t nh t nh. - Tính khách quan : M t thu t toán dù c vi t b i nhi u ng i trên nhi u máy tính vn ph i cho k t qu nh nhau. - Tính ph d ng : Thu t toán không ch áp d ng cho m t bài toán nh t nh mà có th áp d ng cho m t l p các bài toán có u vào t ng t nhau. - Tính k t thúc : Thu t toán ph i g m m t s h u h n các b c tính toán. Trình t th c hi n các b ưc c a thu t toán Gi i thu t c thi t k theo ba c u trúc suy lu n c b n sau ây: 1. Tu n t (Sequential): Các công vi c c th c hi n m t cách tu n t , công vi c này n i ti p công vi c kia. 2. Cu trúc l a ch n (Selection) : La ch n m t công vi c th c hi n c n c vào m t iu ki n nào ó. Có m t s d ng nh sau:  Cu trúc 1: N u ( úng) thì th c hi n  Cu trúc 2: N u ( úng) thì th c hi n , ng c li ( iu ki n sai) thì th c hi n  Cu trúc 3: Tr ng h p th c hi n 3. Cu trúc l p (Repeating): Th c hi n l p l i m t công vi c không ho c nhi u ln c n c vào m t iu ki n nào ó. Có hai d ng nh sau:  Lp xác nh: là lo i l p mà khi vi t ch ng trình, ng i l p trình ã 13
  14. xác nh c công vi c s l p bao nhiêu l n.  Lp không xác nh: là lo i l p mà khi vi t ch ng trình ng i l p trình ch a xác nh c công vi c s l p bao nhiêu l n. S l n l p s c xác nh khi ch ng trình th c thi. Bi u di n thu t gi i Ngôn ng t nhiên: Ngôn ng t nhiên là ngôn ng c a chúng ta ang s d ng, chúng ta có th s d ng ngôn ng t nhiên mô t gi i thu t gi ng nh các ví d trên. Ví d : Ta có gi i thu t gi i ph ng trình b c nh t d ng ax + b = 0 nh sau: Bc 1: Nh n giá tr c a các tham s a, b Bc 2: Xét giá tr c a a xem có b ng 0 hay không? Nu a=0 thì làm b c 3, n u a khác không thì làm b c 4. Bc 3: (a b ng 0) N u b b ng 0 thì ta k t lu n ph ng trình vô s nghi m, nu b khác 0 thì ta k t lu n ph ng trình vô nghi m. Bc 4: ( a khác 0) Ta k t lu n ph ng trình có nghi m x=-b/a Lưu thu t toán: Ngôn ng s (l u ) là m t ngôn ng c bi t dùng mô t gi i thu t b ng các s hình kh i. Mi kh i qui nh m t hành ng nh mô t hình trên. Ví d : So sánh 2 s . 14
  15. Gi mã: (ti ng Anh: Pseudocode , xu t phát t ch pseudo và code) là m t b n mô t gi i thu t ng n g n và không chính th c, trong ó s d ng nh ng quy c có c u trúc c a mt s ngôn ng l p trình (th ng là Pascal) nh ng th ng b i nh ng chi ti t không cn thi t giúp hi u rõ gi i thu t h n. Ví d : Thu t gi i ph ng trình b c 2 Vào: a,b,c Ra: K ết lu ận v ề nghi ệm BEGIN Delta: = b*b – 4*a*c; If Delta=0 Then Ph ươ ng trình có nghi ệm kép x=-b/(2*a); else begin if Delta<0 then Ph ươ ng trình Vô nghi ệm Else Begin Ph ươ ng trình có 2 nghi ệm x1=(-b+sqrt(Delte))/(2*a) x2=(-b+sqrt(Delte))/(2*a) end end END. Mt s ví d khác v thu t toán và bi u di n thu t toán Ví d 1 : C n vi t ch ư ng trình cho máy tính sao cho khi th c hi n ch ư ng trình ó, máy tính yêu c u ng ưi s d ng ch ư ng trình nh p vào các s h ng c a t ng (n); nh p vào dãy các s h ng a ca t ng. Sau ó, máy tính s th c hi n vi c tính t ng các s a này và i i in k t qu c a t ng tính ưc. 15
  16. Yêu c u: Tính t ng n s S=a + a +a + +a . 1 2 3 n Chi ti t gi i thu t ưc mô t b ng ngôn ng t nhiên nh ư sau: - B ưc 1: Nh p s các s h ng n. - B ưc 2: Cho S=0 (l ưu tr s 0 trong S) - B ưc 3: Cho i=1 (l ưu tr s 1 trong i) - B ưc 4: Ki m tra n u i<=n thì th c hi n b ưc 5, ng ưc l i th c hi n b ưc 8. - B ưc 5: Nh p a i - B ưc 6: Cho S=S+a (l ưu tr giá tr S + a trong S) i i - B ưc 7: T ng i lên 1 n v và quay l i b ưc 4. - B ưc 8: In S và k t thúc ch ư ng trình. Ví d 2 : Vi t ch ư ng trình cho phép nh p vào 2 giá tr a, b mang ý ngh a là các h s a, b c a ph ư ng trình b c nh t. D a vào các giá tr a, b ó cho bi t nghi m c a ph ư ng trình b c nh t ax + b = 0. Mô t gi i thu t b ng ngôn ng t nhiên: - B ưc 1: Nh p 2 s a và b - B ưc 2: N u a = 0 thì th c hi n b ưc 3, ng ưc l i th c hi n b ưc 4 - B ưc 3: N u b=0 thì thông báo ph ư ng trình vô s nghi m và k t thúc ch ư ng trình, ng ưc l i thông báo ph ư ng trình vô nghi m và k t thúc ch ư ng trình. - B ưc 4: Thông báo nghi m c a ph ư ng trình là –b/a và k t thúc. Ví d 3 : Vi t ch ư ng trình cho phép nh p vào 1 s n, sau ó l n l ưt nh p vào n giá tr a , a , ,a . Hãy tìm và in ra giá tr l n nh t trong n s a , a , , a . 1 2 n 1 2 n Mô t gi i thu t b ng ngôn ng t nhiên: - B ưc 1: Nh p s n - B ưc 2: Nh p s th nh t a 1 - B ưc 3: Gán max=a 1 - B ưc 4: Gán i=2 - B ưc 5: N u i<=n thì th c hi n b ưc 6, ng ưc l i th c hi n b ưc 9 - B ưc 6: Nh p a i - B ưc 7: N u max < a thì gán max=a . i i - B ưc 8: T ng i lên m t n v và quay l i b ưc 5 - B ưc 9: In max - k t thúc Ví d 4 : Vi t ch ư ng trình cho phép nh p vào 1 s n, sau ó l n l ưt nh p vào n giá tr a , a , ,a . S p theo th t t ng d n m t dãy n s a , a , a nói trên. Có r t nhi u gi i 1 2 n 1 2 n thu t gi i quy t bài toán này. Ph n trình bày d ưi ây là m t ph ư ng pháp. Gi s ta ã nh p vào máy dãy n s a , a , , a . Vi c s p x p dãy s này tr i qua (n- 1 2 n 1) l n: - Ln 1: So sánh ph n t u tiên v i t t c các ph n t ng sau ph n t u tiên. Nu có ph n t nào nh h n ph n t u tiên thì i ch ph n t u tiên v i ph n t nh h n ó. Sau l n 1, ta ưc ph n t u tiên là ph n t nh nh t. - Ln 2: So sánh ph n t th 2 v i t t c các ph n t ng sau ph n t th 2. N u có ph n t nào nh h n ph n t th 2 thì i ch ph n t th 2 v i ph n t nh hn ó. Sau l n 2, ta ưc ph n t u tiên và ph n t th 2 là úng v trí c a nó 16
  17. khi s p x p. - - Ln (n-1): So sánh ph n t th (n-1) v i ph n t ng sau ph n t (n-1) là ph n t th n. Nu ph n t th n nh h n ph n t th (n-1) thì i ch 2 ph n t này. Sau l n th (n-1), ta ưc danh sách g m n ph n t ưc s p th t . Mô t gi i thu t b ng ngôn ng t nhiên: - B ưc 1: Gán i=1 - B ưc 2: Gán j=i+1 - B ưc 3: N u i a thì hoán i a và a cho nhau (n u không thì thôi). i j i j - B ưc 6: T ng j lên m t n v và quay l i b ưc 4 - B ưc 7: T ng i lên m t n v và quay l i b ưc 3 - B ưc 8: In dãy s a , a , , a - K t thúc. 1 2 n Gii thu t + C u trúc d li u = Ch ng trình Algorithms + Data Structures = Programs Niklaus Emil Wirth In 1975 he wrote the book "Algorithms + Data Structures = Programs", which gained wide recognition and is still useful today. Biography Wirth was born in Winterthur, Switzerland, in 1934. In 1959 he earned a degree in Electronics Engineering from the Swiss Federal Institute of Technology Zürich (ETH Zürich). In 1960 he earned an M.Sc. from Université Laval, Canada. Then in 1963 he was awarded a Ph.D.in EECS from the University of California, Berkeley, supervised by the computer designer pioneer Harry Huskey. From 1963 to 1967 he served as assistant professor of Computer Science at Stanford University and again at the University of Zurich. Then in 1968 he became Professor of Informatics at ETH Zürich, taking two one-year sabbaticals at Xerox PARC in California (1976–1977 and 1984–1985). Wirth retired in 1999. Programming languages Wirth was the chief designer of the programming languages Euler, Algol W, Pascal, Modula, Modula-2, Oberon, Oberon-2, and Oberon-07 . He was also a major part of the design and implementation team for the Lilith and Oberon operating systems, and for the Lola digital hardware design and simulation system. He received the ACM Turing Award for the development of these languages and in 1994 he was inducted as a Fellow of the ACM. He designed the simple programming language PL/0 to illustrate compiler design. It has formed the basis for many university compiler design classes. 17
  18. 4. Ch ươ ng trình nh ngh a - Ch ng trình máy tính: là m t t p h p nh ng câu l nh c vi t b ng m t ngôn ng l p trình theo m t tr t t xác nh nh m t ng th c hi n m t s nhi m v ho c ch c n ng ho c gi i quy t m t bài toán nào ó. - Là m t bi u hi n c th ca mt gi i thu t trên m t ngôn ng l p trình nào ó cùng v i nh ng mô t v c u trúc d li u mô t u vào, u ra c a bài toán c n gi i quy t. Ví d 1: Ch ng trình gi i ph ng trình b c 2 b ng Pascal Ví d 2: Ch ng trình gi i ph ng trình b c 2 b ng C To ra ch ươ ng trình máy tính b ng cách nào??? III. Công c l p trình 1. Ngôn ng l p trình Khái ni m - Ngôn ng l p trình là m t ngôn ng dùng vi t ch ng trình cho máy tính. Ta có th chia ngôn ng l p trình thành các lo i sau: ngôn ng máy, h p ng và ngôn ng c p cao. - Ngôn ng máy (machine language): Là các ch th d i d ng nh phân, can thi p tr c ti p vào trong các m ch in t . Ch ng trình c vi t b ng ngôn ng máy thì có th c th c hi n ngay không c n qua b c trung gian nào. Tuy nhiên ch ng trình vi t b ng ngôn ng máy d sai sót, c ng k nh và khó c, khó hi u vì toàn nh ng con s 0 và 1. - Hp ng (assembly language): Bao g m tên các câu l nh và quy t c vi t các câu lnh ó. Tên các câu l nh bao g m hai ph n: ph n mã l nh (vi t t a ti ng Anh) ch phép toán c n th c hi n và a ch ch a toán h ng c a phép toán ó. Ví d : INPUT a ; Nh p giá tr cho a t bàn phím LOAD a ; c giá tr a vào thanh ghi t ng A PRINT a; Hi n th giá tr c a a ra màn hình. INPUT b ADD b; C ng giá tr c a thanh ghi t ng A v i giá tr b Trong các l nh trên thì INPUT, LOAD, PRINT, ADD là các mã l nh còn a, b là a ch . máy th c hi n c m t ch ng trình vi t b ng h p ng thì ch ng trình ó ph i c d ch sang ngôn ng máy. Công c th c hi n vi c d ch ó c g i là Assembler. - Ngôn ng c p cao (High level language): Ra i và phát tri n nh m ph n ánh cách th c ng i l p trình ngh và làm. Rt g n v i ngôn ng con ng i (Anh ng ) nh ng chính xác nh ngôn ng toán h c. Cùng v i s phát tri n c a các th h máy tính, ngôn ng l p trình c p cao c ng c phát tri n r t a d ng và phong phú, vi c l p trình cho máy tính vì th mà c ng có nhi u khuynh h ng khác nhau: l p trình c u trúc, l p trình h ng i t ng, l p trình logic, l p trình hàm Mt ch ng trình vit b ng ngôn ng c p cao c g i là ch ng trình ngu n (source programs). máy tính "hi u" và th c hi n c các l nh trong ch ng 18
  19. trình ngu n thì ph i có m t ch ng trình d ch d ch chu ng trình ngu n (vi t bng ngôn ng c p cao) thành d ng ch ng trình có kh n ng th c thi. Ch ươ ng trình d ch - Nh trên ã trình bày, mu n chuy n t ch ng trình ngu n sang ch ng trình ích ph i có ch ng trình d ch. Thông th ng m i m t ngôn ng c p cao u có m t ch ng trình d ch riêng nh ng chung quy l i thì có hai cách d ch: thông d ch và biên d ch. - Thông d ch (interpreter): Là cách d ch t ng l nh m t, d ch t i âu th c hi n t i ó. Ch ng h n ngôn ng LISP s d ng trình thông d ch. - Biên d ch (compiler): D ch toàn b ch ng trình ngu n thành ch ng trình ích ri sau ó m i th c hi n. Các ngôn ng s d ng trình biên d ch nh Pascal, C - Gi a thông d ch và biên d ch có khác nhau ch : Do thông d ch là v a d ch v a th c thi ch ng trình còn biên d ch là d ch xong toàn b ch ng trình r i m i th c thi nên ch ng trình vi t b ng ngôn ng biên d ch th c hi n nhanh h n ch ng trình vi t b ng ngôn ng thông d ch. - Mt s ngôn ng s d ng k t h p gi a thông d ch và biên d ch ch ng h n nh Java. Ch ng trình ngu n c a Java c biên d ch t o thành m t ch ng trình i tng (m t d ng mã trung gian) và khi th c hi n thì t ng l nh trong ch ng trình i t ng c thông d ch thành mã máy. 2. Công c l p trình - Tr c nh ng n m 1990 ng i ta cho r ng ngôn ng l p trình quy t nh k t qu lp trình. Ch ng h n, trong m t tình hung c th nào ó, ch ng trình vi t b ng C++ thì t t h n Pascal, vi t b ng Pascal thì t t h n Fortran Khi các công c l p trình còn thô s và các yêu c u ph n m m ch a cao thì nh n nh này là khá chính xác. - Sau ó ng i ta cho r ng công ngh l p trình mi nh h ng l n nh t n s n ph m cu i cùng, s th ng tr trong th p k 90 c a l p trình h ng i t ng và RAD (vi t t t c a Rapid Application Development ngh a là Công c phát tri n ng dng nhanh, th ng g i là l p trình tr c quan hay Visual Programming) ã cho th y t duy c a ng i l p trình b nh h ng b i n n t ng phát tri n ph n m m. - Không ai phê phán Delphi - phiên b n phát tri n t ngôn ng Pascal là kém h n Java hay Visual C++. Tuy m i có 1/20 th i gian c a th k 21 trôi qua nh ng t u th k n nay Công ngh thông tin ã có nh ng b c phát tri n m nh m trong ó có Công ngh ph n m m. Nhu c u s d ng ph n m m và yêu c u i v i ph n m m t nhiên t ng v t khi n nhi u nhà phát tri n ph n m m ph i xem l i cách làm vi c c a mình. ó chính là c s cho s phát tri n r ng rãi trên toàn th gi i c a ngành Công nghi p ph n m m hi n nay. - Ng i ta không ch quan tâm n công ngh l p trình mà còn quan tâm n quy trình phát tri n ph n m m. - Các công ty b t u chu n hóa và a ra quy trình công ngh ph n m m c a mình - ó vi c l a ch n b công c l p trình có vai trò r t quan tr ng. Các b công c lp trình hi n nay có xu h ng th ng nh t và t ng tác v i nhau ch t ch . Ý t ng 19
  20. này ã t ng xu t hi n trong th p k tr c, tiêu bi u nh CORBA c a Sun hay Delphi - C++ Builder Project Union c a Borland, tuy nhiên khi ó chúng ch a c a chu ng. - Khi Visual Studio.NET c a Microsoft ra i n m 2002, ng i ta nh n th y r ng các công c l p trình nên i v i nhau thành “b ”. n th i im hi n nay gi i pháp v công c l p trình c a các nhà phát tri n luôn c nh c n nh “b công c”. M t ví d v ý ngh c a 2 l p trình viên qua 3 giai on này nh sau: - Hi n nay có r t nhi u ngôn ng l p trình (NNLT) và r t nhi u công c l p trình (CCLT). M t CCLT có th gn li n v i m t NNLT ho c không - ây là iu mà mt s ít ng i không có kinh nghi m không h bi t. Ta có th phân lo i:  Theo NNLT: Dòng C có Visual C++, C++ Builder Dòng Pascal có Borland Pascal, Delphi  Theo ph m vi s d ng: Dòng l p trình h th ng có Microsoft Assembly, Borland C Dòng l p trình tr c quan có Visual Basic, Jbuilder Dòng lp trình m ng có Java, ASP, PHP  Theo phong cách l p trình: Dòng c in có Pascal, Fortran Dòng hng i t ng có C++, SmallTalk, Java - Công c th ng dùng:  Microsoft Visual Studio 2005, Microsoft Visual Studio 2008: C++, C##, VisualBasic, ASPX  Java;  PHP;  Pascal, Turbo C, Dev - C++ - Ch c n ng c a công c l p trình: 1. Bi u di n ch ng trình b ng m t ngôn ng l p trình nào ó 2. Giao di n tích h p (IDE - Itergrated Developments Environment) cho phép so n th o v n b n ch ng trình, ki m l i, th nghi m; 3. Biên d ch thành ch ng trình c l p trên máy tính. 3. Công c l p trình Dev-C++ - Dev-C++ là mt công c l p trình v i giao di n tích h p cho phép làm vi c trên Windows, cho phép l p trình b ng C/C++; - D án phát tri n Dev-C++ c l u tr trên SourceForge . Dev-C++ nguyên c phát tri n b i m t l p trình viên có tên là Colin Laplace và ch ch y trên h iu hành Microsoft Windows . - Bloodshed Dev-C++ là m t Môi tr ng Phát tri n Tích h p (IDE) có h tr y tính n ng cho ngôn ng l p trình C/C++. Nó s d ng trình MinGW c a GCC (B trình d ch GNU) làm trình biên d ch. Dev-C++ c ng có th c dùng k t h p vi Cygwin hay b t k trình d ch n n t ng GCC nào khác. 20
  21. - Ch ng trình cho ng i dùng có c m nh n h i gi ng v i hình th c c a ch ng trình Microsoft Visual Studio v n c s d ng r ng rãi h n. Dev-C++ có m t c im ph ó là nó s dung DevPaks, là m t ph n g m các gói m r ng so v i môi tr ng tiêu chu n, bao g m các th vi n, m u, và các ti n ích c a thêm vào. DevPaks th ng có, nh ng không nh t nh, ti n ích GUI (giao di n ng i dùng h a), bao g m các công c ph bi n nh GTK+ , wxWidgets , và FLTK . Có nh ng DevPaks có ch a các th vi n v i th m chí nhi u hàm ch c n ng cao hn. - Dev-C++ nói chung là m t ch ng trình ch ch y trên Windows . Tuy nhiên c ng có m t phiên b n cho Linux , nh ng v n trong giai on alpha và ch a c c p nh t trong vòng h n 6 n m qua. Mt s giao di n Giao di n chính IV. Tóm t t n i dung bài h c I. Gi i thi u 1. M c ích, Yêu c u 2. N i dung môn h c 3. Tài li u h c t p và tham kh o 4. Hình th c ánh giá k t qu môn h c 5. T ng quan v máy tính II. Bài toán và vi c gi i bài toán trên máy tính 1. Xác nh bài toán 2. C u trúc d li u và Gi i thu t 3. Ch ng trình 21
  22. III. Công c l p trình 1. Ngôn ng l p trình 2. Công c l p trình 3. Công c l p trình Dev-C++ V. Bài t p 1. Bi u di n thu t toán gi i các bài toán sau b ng s kh i và gi mã: a. Gi i ph ng trình b c 2; b. Gi i h ph ng trình b c nh t; c. Tính s ngày c a m t tháng mt n m nào ó; d. Thu t toán tìm c s chung l n nh t; 2. Cài t, làm quen v i giao di n Dev-C++ 3. Tìm hi u nh ng bài toán th c t , mô t thu t toán gi i quy t v n ó. 22
  23. Bài 2 - NGÔN NG L P TRÌNH C/C++ Ni dung bài h c I. Gi i thi u II. M t s khái ni m c b n 1. B ký t 2. T khóa 3. Ki u d li u 4. Tên, Bi n, h ng 5. Bi u th c III. C u trúc ch ư ng trình n gi n trong C 1. C u trúc chung 2. Khai báo s d ng th ư vi n 3. Khai báo h ng, bi n, ki u 4. M t s l nh n 5. Chú thích 6. Ch ư ng trình chính IV. Nh p/Xu t d li u 1. Nh p d li u t bàn phím – Hàm scanf() 2. Xu t d li u ra màn hình – Hàm printf() 3. ví d V. Bài t p I. Gi i thi u - C là ngôn ng l p trình c p cao, c s d ng r t ph bi n l p trình h th ng cùng v i Assembler và phát tri n các ng d ng. - Vào nh ng n m cu i th p k 60 u th p k 70 c a th k XX, Dennish Ritchie (làm vi c t i phòng thí nghi m Bell) ã phát tri n ngôn ng l p trình C d a trên ngôn ng BCPL (do Martin Richards a ra vào n m 1967) và ngôn ng B (do Ken Thompson phát tri n t ngôn ng BCPL vào n m 1970 khi vi t h iu hành UNIX u tiên trên máy PDP-7) và c cài t l n u tiên trên h iu hành UNIX c a máy DEC PDP-11. - Nm 1978, Dennish Ritchie và B.W Kernighan ã cho xu t b n quy n “Ngôn ng lp trình C” và c ph bi n r ng rãi n nay. - Lúc ban u, C c thi t k nh m l p trình trong môi tr ng c a h iu hành Unix nh m m c ích h tr cho các công vi c l p trình ph c t p. Nh ng v sau, vi nh ng nhu c u phát tri n ngày m t t ng c a công vi c l p trình, C ã v t qua khuôn kh c a phòng thí nghi m Bell và nhanh chóng h i nh p vào th gi i l p trình r i các công ty l p trình s d ng m t cách r ng rãi. Sau ó, các công ty sn xu t ph n m m l n l t a ra các phiên b n h tr cho vi c l p trình b ng ngôn ng C và chu n ANSI C c ng c khai sinh t ó. 23
  24. - Ngôn ng l p trình C là m t ngôn ng l p trình h th ng r t m nh và r t “m m do”, có m t th vi n g m r t nhi u các hàm (function) ã c t o s n. Ngi lp trình có th t n d ng các hàm này gi i quy t các bài toán mà không c n ph i t o m i. H n th n a, ngôn ng C h tr r t nhi u phép toán nên phù h p cho vi c gi i quy t các bài toán k thu t có nhi u công th c ph c t p. Ngoài ra, C cng cho phép ng i l p trình t nh ngh a thêm các ki u d li u tr u t ng khác. Tuy nhiên, iu mà ng i m i v a h c l p trình C th ng g p “r c r i” là “h i khó hi u” do s “m m d o” c a C. Dù v y, C c ph bi n khá r ng rãi và ã tr thành m t công c l p trình khá m nh, c s d ng nh là m t ngôn ng lp trình ch y u trong vi c xây d ng nh ng ph n m m hi n nay - Ngôn ng C có nh ng c im c b n sau:  Tính cô ng (compact): C ch có 32 t khóa chu n và 40 toán t chu n, nh ng h u h t u c bi u di n b ng nh ng chu i ký t ng n g n.  Tính c u trúc (structured): C có m t t p h p nh ng ch th c a l p trình nh c u trúc l a ch n, l p T ó các ch ng trình vi t b ng C c t ch c rõ ràng, d hi u.  Tính t ng thích (compatible): C có b ti n x lý và m t th vi n chu n vô cùng phong phú nên khi chuy n t máy tính này sang máy tính khác các ch ng trình vi t b ng C v n hoàn toàn t ng thích.  Tính linh ng (flexible): C là m t ngôn ng r t uy n chuy n và cú pháp, ch p nh n nhi u cách th hi n, có th thu g n kích th c c a các mã l nh làm ch ng trình ch y nhanh h n.  Biên d ch (compile): C cho phép biên d ch nhi u t p tin ch ng trình riêng r thành các t p tin i t ng (object) và liên k t (link) các i tng ó l i v i nhau thành m t ch ng trình có th th c thi c (executable) th ng nh t. II. Mt s khái ni m c ơ b n 1. B ký t B ch vi t trong ngôn ng C bao g m nh ng ký t , ký hi u sau: (phân bi t ch in hoa và in th ng): - 26 ch cái latinh l n A,B,C Z ; - 26 ch cái latinh nh a,b,c z. ; - 10 ch s th p phân 0,1,2 9. ; - Các ký hi u toán h c: +, -, *, /, =, , (, ) - Các ký hi u c bi t: :. , ; " ' _ @ # $ ! ^ [ ] { } ; - Du cách hay kho ng tr ng. 2. T khóa T khóa là các t dành riêng (reserved words) c a C vi m c ích ã c xác nh tr c. Ví d : - T khóa int dùng khai báo bi n ho c hàm v i ki u d li u s nguyên; - T khóa if dùng xây d ng câu l nh c u trúc ch n; 24
  25. - T khóa for dùng xây d ng câu l nh c u trúc l p. Danh sách các t khóa: Lu ý: không c dùng t khóa vào m c ích khác, ho c t tên m t i t ng nào ó (bi n, h ng, tên hàm ) trùng v i t khóa. Các t khóa c a Turbo C 3.0 bao g m: 3. Ki u d li u Các ki u d li u s c p chu n trong C có th c chia làm 2 d ng : ki u s nguyên, ki u s th c. Ki u s nguyên Ki u s nguyên là ki u d li u dùng l u các giá tr nguyên hay còn g i là ki u m c. Ki u s nguyên trong C c chia thành các ki u d li u con, m i ki u có m t mi n giá tr khác nhau. Ki u s nguyên 1 byte (8 bits) Ki u s nguyên m t byte g m có 2 ki u sau: STT Ki u d li u Mi n giá tr (Domain) T 0 n 255 (t ng ng 256 ký t trong b ng mã 1 unsigned char ASCII) 2 char T -128 n 127 Ki u unsigned char: lu các s nguyên d ng t 0 n 255. => khai báo m t bi n là ki u ký t thì ta khai báo bi n ki u unsigned char. M i s trong mi n giá tr c a ki u unsigned char t ng ng v i m t ký t trong b ng mã ASCII . Ki u char: lu các s nguyên t -128 n 127. Ki u char s d ng bit trái nh t làm bit d u. => N u gán giá tr > 127 cho bi n ki u char thì giá tr c a bi n này có th là s âm (?). Ki u s nguyên 2 bytes (16 bits) Ki u s nguyên 2 bytes g m có 4 ki u sau: STT Ki u d li u Mi n giá tr (Domain) 1 enum T -32,768 n 32,767 2 unsigned int T 0 n 65,535 3 Short int T -32,768 n 32,767 4 int T -32,768 n 32,767 (trong DevC, s ki u s int là 4 byte tr ki u short int là 2 byte). Ki u enum, short int, int : Lu các s nguyên t -32768 n 32767. S d ng bit bên trái nh t làm bit d u. 25
  26. => N u gán giá tr >32767 cho bi n có 1 trong 3 ki u trên thì giá tr c a bi n này có th là s âm. Ki u unsigned int : Ki u unsigned int l u các s nguyên d ng t 0 n 65535. Ki u s nguyên 4 byte (32 bits) Ki u s nguyên 4 bytes hay còn g i là s nguyên dài (long) g m có 2 ki u sau: STT Ki u d li u Mi n giá tr (Domain) 1 unsigned long T 0 n 4,294,967,295 2 long T -2,147,483,648 n 2,147,483,647 Ki u long : Lu các s nguyên t -2147483658 n 2147483647. S d ng bit bên trái nh t làm bit d u. => N u gán giá tr >2147483647 cho bi n có ki u long thì giá tr c a bi n này có th là s âm. Ki u unsigned long : Ki u unsigned long l u các s nguyên d ng t 0 n 4294967295 Ki u s th c Ki u s th c dùng l u các s th c hay các s có d u ch m th p phân g m có 3 ki u sau: STT Ki u d li u Kích th ưc (Size) Mi n giá tr (Domain) 1 float 4 bytes T 3.4 * 10 -38 n 3.4 * 10 38 2 double 8 bytes T 1.7 * 10 -308 n 1.7 * 10 308 3 long double 10 bytes T 3.4 *10 -4932 n 1.1 *104932 Mi ki u s th c trên u có mi n giá tr và chính xác (s s l ) khác nhau. Tùy vào nhu c u s d ng mà ta có th khai báo bi n thu c 1 trong 3 ki u trên. S ch s có ý ngh a c a trong ph c thu c vào ki u nh ng bé h n s m l n nh t có th l u c, ví d nh ki u float ch 23 bit l u s (có kho ng 7-8 ch s có ý ngh a), double s d ng 51 bit l u s . Ngoài ra ta còn có ki u d li u void , ki u này mang ý ngh a là ki u r ng không ch a giá tr gì c . 4. Tên, Bi n, h ng Tên Tên hay còn g i là danh bi u (identifier) c dùng t cho ch ng trình, h ng, ki u, bi n, ch ng trình con Tên có hai lo i là tên chu n và tên do ng i l p trình t. - Tên chu n là tên do C t s n nh tên ki u: int, char, float, ; tên hàm: sin, cos - Tên do ngi l p trình t t dùng trong ch ng trình c a mình. S d ng b ch cái, ch s và d u g ch d i (_) t tên, nh ng ph i tuân th quy t c: - Bt u b ng m t ch cái ho c d u g ch d i; - Không có kho ng tr ng gi a tên; 26
  27. - Không c trùng v i t khóa; - dài t i a c a tên là không gi i h n, tuy nhiên ch có 31 ký t u tiên là có ý ngh a; - Không c m vi c t tên trùng v i tên chu n nh ng khi ó ý ngh a c a tên chu n không còn giá tr n a. Ví d : tên do ng i l p trình t: Chieu_dai, Chieu_Rong, Chu_Vi, Dien_Tich, dienTich, chieuDai, Tên không h p l : Do Dai, 12A2, Bi n Bi n là m t i l ng c ng i l p trình nh ngh a và c t tên thông qua vi c khai báo bi n. Bi n dùng ch a d li u trong quá trình th c hi n ch ng trình và giá tr ca bi n có th b thay i trong quá trình này. Mi bi n ph i thu c v m t ki u d li u xác nh và có mi n giá tr thu c ki u ó. Cú pháp khai báo bi n: Danh sách các tên bi n cách nhau b i d u ph y; Ví d : int a, b, c; /*Ba bi ến a, b,c có ki ểu int*/ long int chu_vi; /*Bi ến chu_vi có ki ểu long*/ float nua_chu_vi; /*Bi ến nua_chu_vi có ki ểu float*/ double dien_tich; /*Bi ến dien_tich có ki ểu double*/ Lu ý: k t thúc 1 l nh ph i có d u ch m ph y (;) cu i l nh. V trí khai báo bi n trong C Trong ngôn ng l p trình C, ta ph i khai báo bi n úng v trí. N u khai báo ( t các bi n) không úng v trí s d n n nh ng sai sót ngoài ý mu n mà ng i l p trình không l ng tr c (hi u ng l ). Chúng ta có 2 cách t v trí c a bi n nh sau: - Khai báo bi n ngoài: Các bi n này c t bên ngoài t t c các hàm và nó có tác dng hay nh h ng n toàn b ch ng trình (còn g i là bi n toàn c c), ví d : int i; /*Bien ben ngoai */ float pi; /*Bien ben ngoai*/ int main() { } - Khai báo bi n trong: Các bi n c t bên trong hàm, ch ng trình chính hay mt kh i l nh. Các bi n này ch có tác d ng hay nh h ng n hàm, ch ng trình hay kh i l nh ch a nó. Khi khai báo bi n, nên t các bi n này u c a kh i lnh , tr c các l nh gán, Ví d 1 : #include #include int bienngoai; /*khai bao bien ngoai*/ int main () { int j,i; /*khai bao bien ben trong chuong trinh chinh*/ i=1; j=2; bienngoai=3; printf("\n Gia tri cua i la %d",i); /*%d là số nguyên, sẽ biết sau */ 27
  28. printf("\n Gia tri cua j la %d",j); printf("\n Gia tri cua bienngoai la %d",bienngoai); getch(); return 0; } Ví d 2 : #include #include int main () { int i, j; /*Bien ben trong*/ i=4; j=5; printf("\n Gia tri cua i la %d",i); printf("\n Gia tri cua j la %d",j); if(j>i) { int hieu=j-i; /*Bien ben trong */ printf("\n Hieu so cua j tru i la %d",hieu); } else { int hieu=i-j ; /*Bien ben trong*/ printf("\n Gia tri cua i tru j la %d",hieu); } getch(); return 0; } Hng Là i l ng không i trong su t quá trình th c thi c a ch ng trình. Cú pháp: const = Giá_tr ; Ví d : const int heso=10; Hng s th c S th c bao g m các giá tr ki u float, double, long double c th hi n theo 2 cách sau: - Cách 1: S d ng cách vi t thông th ng mà chúng ta ã s d ng trong các môn Toán, Lý, iu c n l u ý là s d ng d u th p phân là d u ch m (.); Ví d : 123.34 -223.333 3.00 -56.0 - Cách 2: S d ng cách vi t theo s m hay s khoa h c. M t s th c c tách làm 2 ph n, cách nhau b ng ký t e hay E  Ph n giá tr : là m t s nguyên hay s th c c vi t theo cách 1.  Ph n m : là m t s nguyên Giá tr c a s th c là: Ph n giá tr nhân v i 10 m ph n m . Ví d : 1234.56e-3 = 1.23456 (là s 1234.56 * 10 -3) -123.45E4 = -1234500 ( là -123.45 *10 4) Hng s nguyên 28
  29. S nguyên g m các ki u int (2 bytes) , long (4 bytes) c th hi n theo nh ng cách sau : - Hng s nguyên 2 bytes (int) h th p phân: Là ki u s mà chúng ta s d ng thông th ng, h th p phân s d ng các ký s t 0 n 9 bi u di n m t giá tr nguyên. Ví d : 123, -242 - Hng s nguyên 2 byte (int) h bát phân: Là ki u s nguyên s d ng 8 ký s t 0 n 7 bi u di n m t s nguyên. Cách bi u di n: 0 Ví d : 0345, -020 (s 345, -20 trong h bát phân) - Hng s nguyên 2 byte (int) h th p l c phân: Là ki u s nguyên s d ng 10 ký s t 0 n 9 và 6 ký t A, B, C, D, E ,F bi u di n m t s nguyên. Cách bi u di n: 0x - Hng s nguyên 4 byte (long): S long (s nguyên dài) c bi u di n nh s int trong h th p phân và kèm theo ký t l ho c L. M t s nguyên n m ngoài mi n giá tr c a s int ( 2 bytes) là s long ( 4 bytes). Ví d : 45345L hay 45345l hay 45345 - Các h ng s còn l i: Vi t nh cách vi t thông th ng (không có d u phân cách gi a 3 s ) Hng ký t Hng ký t là m t ký t riêng bi t c vi t trong c p d u nháy n ('). M i m t ký t t ng ng v i m t giá tr trong b ng mã ASCII. H ng ký t c ng c xem nh tr s nguyên. Ví d : 'a', 'A', '0', '9' Chúng ta có th th c hi n các phép toán s h c trên 2 ký t (th c ch t là th c hi n phép toán trên giá tr ASCII c a chúng) Hng chu i ký t Hng chu i ký t là m t chu i hay m t xâu ký t c t trong c p d u nháy kép ("). Ví d: "Ngon ngu lap trinh C", "Khoa CNTT-HVKTQS". Lu ý: - Mt chu i không có n i dung "" c g i là chu i r ng; - Khi l u tr trong b nh , m t chu i c k t thúc b ng ký t NULL (‘\0’: mã Ascii là 0); - bi u di n ký t c bi t bên trong chu i ta ph i thêm d u \ phía tr c. Ví d : "I’m a student" ph i vi t "I\’m a student"; "Day la ky tu "dac biet"" ph i vi t "Day la ky tu \"dac biet\"". 5. Bi u th c Bi u th c là m t s k t h p gi a các toán t (operator) và các toán h ng (operand) theo úng m t tr t t nh t nh. M i toán h ng có th là m t h ng, m t bi n ho c m t bi u th c khác. Trong tr ng h p, bi u th c có nhi u toán t , ta dùng c p d u ngo c n () ch nh toán t nào c th c hi n tr c. 29
  30. Ví d : Bi u th c nghi m c a ph ng trình b c hai: (-b + sqrt(Delta))/(2*a) Trong ó 2 là h ng; a, b, Delta là bi n. Các toán t s h c Trong ngôn ng C, các toán t +, -, *, / làm vi c t ng t nh khi chúng làm vi c trong các ngôn ng khác. Ta có th áp d ng chúng cho a s ki u d li u có s n c cho phép bi C. Khi ta áp d ng phép / cho m t s nguyên hay m t ký t , b t k ph n d nào c ng b c t b . Ch ng h n, 5/2 b ng 2 trong phép chia nguyên. Toán t Ý ngh a + Cng - Tr * Nhân / Chia % Chia l y ph n d Gi m 1 n v ++ Tng 1 n v Tng và gi m (++ & ) Toán t ++ thêm 1 vào toán h ng c a nó và tr b t 1. Nói cách khác: x = x + 1 gi ng nh ++x x = x – 1 gi ng nh x C 2 toán t t ng và gi m u có th ti n t ( t tr c) hay h u t ( t sau) toán h ng. Ví d: x = x + 1 có th vi t x++ (hay ++x) Tuy nhiên gi a ti n t và h u t có s khác bi t khi s d ng trong 1 bi u th c. Khi 1 toán t t ng hay gi m ng tr c toán h ng c a nó, C th c hi n vi c t ng hay gi m tr c khi ly giá tr dùng trong bi u th c. N u toán t i sau toán h ng, C l y giá tr toán h ng tr c khi t ng hay gi m nó. Tóm l i: x = 10 y = ++x //y = 11 Tuy nhiên: x = 10 y = x++ //y = 10 Th t u tiên c a các toán t s h c: ++ sau ó là * / % r i m i n + - Các toán t quan h và các toán t Logic Ý t ng chính c a toán t quan h và toán t Logic là úng ho c sai. Trong C m i giá tr khác 0 c g i là úng, còn sai là 0. Các bi u th c s d ng các toán t quan h và Logic tr v 0 n u sai và tr v 1 n u úng. 30
  31. Toán t Ý ngh a Các toán t quan h > Ln h n >= Ln h n ho c b ng 1+ 12 s c xem là 10 > (1 + 12) và k t qu là sai (0). Ta có th k t h p vài toán t l i v i nhau thành bi u th c nh sau: 10>5&&!(10 > = < <= == != && Th p nh t: || Các toán t Bitwise Các toán t Bitwise ý nói n ki m tra, gán hay s thay i các Bit th t s trong 1 Byte ca Word, mà trong C chu n là các ki u d li u và bi n char, int. Ta không th s d ng các toán t Bitwise v i d li u thu c các ki u float, double, long double, void hay các ki u ph c t p khác. 31
  32. Toán t Ý ngh a & AND | OR ^ XOR ~ NOT >> Dch ph i 9 ? 100 : 200 Thì Y c gán giá tr 100, n u X nh h n 9 thì Y s nh n giá tr là 200. on mã này t ng ng c u trúc if nh sau: X = 10 if (X < 9) Y = 100 else Y = 200 Toán t con tr & và * Mt con tr là a ch trong b nh c a m t bi n. M t bi n con tr là m t bi n c khai báo riêng ch a m t con tr n m t i t ng c a ki u ã ch ra nó. Ta s tìm hi u k hn v con tr trong ch ng v con tr . ây, chúng ta s c p ng n g n n hai toán t c s d ng thao tác v i các con tr . Toán t th nh t là &, là m t toán t quy c tr v a ch b nh c a h s c a nó. Ví d : m = &count t vào bi n m a ch b nh c a bi n count. 32
  33. Ch ng h n, bi n count v trí b nh 2000, gi s count có giá tr là 100. Sau câu l nh trên m s nh n giá tr 2000. Toán t th hai là *, là m t b sung cho &; ây là m t toán t quy c tr v giá tr c a bi n c c p phát t i a ch theo sau ó. Ví d : q = *m S t giá tr c a count vào q. Bây gi q s có giá tr là 100 vì 100 c l u tr t i a ch 2000. Toán t d u ph y , Toán t d u , c s d ng k t h p các bi u th c l i v i nhau. Bên trái c a toán t du , luôn c xem là ki u void. iu ó có ngh a là bi u th c bên ph i tr thành giá tr ca t ng các bi u th c c phân cách b i d u ph y. Ví d : x = (y=3,y+1); Tr c h t gán 3 cho y r i gán 4 cho x. C p d u ngo c n là c n thi t vì toán t d u , có u tiên th p h n toán t gán. Du ngo c ơn và d u ngo c vuông Trong C, c p d u ngo c n là toán t t ng u tiên c a các bi u th c bên trong nó. Các c p d u ngo c vuông th c hi n thao tác truy xu t ph n t trong m ng. Cách vi t t t trong C Có nhi u phép gán khác nhau, ôi khi ta có th s d ng vi t t t trong C n a. Ch ng h n: x = x + 10 c vi t thành x +=10 Toán t += báo cho ch ng trình d ch bi t t ng giá tr c a x lên 10. Cách vi t này làm vi c trên t t c các toán t nh phân (phép toán hai ngôi) c a C. T ng quát: (Bi n) = (Bi n) (Toán t ) (Bi u th c) có th c vi t: (Bi n) (Toán t )= (Bi u th c) Tng k t v ưu tiên Cao nh t () [] ! ~ ++ (Ki u) * & * / % + - > >= & ^ | && 33
  34. || ?: = += -= *= /= Th p nh t , III. Cu trúc mt ch ơ ng trình ơ n gi n 1. Cu trúc chung Ch ng trình sau c vi t b ng C, cho phép ng i s d ng nh p vào 2 s r i in ra k t qu là t ng 2 s ó. Xét ch ng trình sau: /* 1. Khai bao su dung thu vien*/ #include #include #include /* 2. Khai bao Kieu du lieu*/ // se de cap o bai sau /* 3. Khai bao hang */ #define heso 10 /* 4. Khai bao bien */ int a, b; /* 5. Chuong trinh chinh */ int main() { /* Chuong trinh cho phep nhap vao hai so a và b, Tinh va in ra tong hai so do */ float ketqua; // Khai bao bien a va b system("cls"); // Xoa man hinh printf("Nhap vao A va B:"); // Hien thi thong bao huong dan nhap lieu scanf("%d %d",&a,&b); // Nhap cac gia tri cho a va b tu ban phim ketqua =float((a+b))/heso; printf("%d/%d = %0.1f\n",a+b,heso,ketqua);// In ket qua printf("Nhan phim bat ky de ket thuc!"); getch(); // Doi nhan phim bat ky de tiep tuc return 0; } Kt qu th c hi n ch ng trình c nh hình sau: 34
  35. . V c b n C không qui nh 1 cách ch t ch c u trúc c a m t ch ng trình; C ch qui nh m t ch ng trình ph i có hàm main , và ng th i ó là ch ng trình chính c a ch ng trình. Thông th ng m t ch ng trình C g m các ph n: - Khai báo th vi n; - Khai báo bi n; h ng; - Ch ng trình chính; 2. Khai báo s d ng th ư vi n Ph n khai báo s d ng th vi n: Cú pháp : #include -> Ho c #include “tên th vi n” -> Ví d : #include #include #include Xem Help bi t danh sách các include file 3. Khai báo h ng, bi n, ki u Khai báo ( nh ngh a) H ng Cú phú: #define Tên_H ng Giá_tri Ví d : #define heso 10 Khai báo ( nh ngh a) Bi n Cú phú: Ki u_D _li u Danh_sách_Tên_Bi n; Ví d : int a, b; 4. Mt s l nh ơn - Lnh gán 35
  36. - Lnh d ng ch ng trình 5. Chú thích Tt c các dòng b t u b ng hai d u s (//) c coi là chút thích mà chúng không có b t kì m t nh h ng nào n ho t ng c a ch ng trình. Chúng có th c các l p trình viên dùng gi i thích hay bình ph m bên trong mã ngu n c a ch ng trình. Trong tr ng h p này, dòng chú thích là m t gi i thích ng n g n nh ng gì mà ch ng trình chúng ta làm. Trong ngôn ng l p trình C, n i dung chú thích ph i c vi t trong c p d u /* và */. 6. Ch ươ ng trình chính int main () Dòng này t ng ng v i ph n b t u khai báo hàm main. Hàm main là im mà t t c các ch ng trình C++ b t u th c hi n. Nó không ph thu c vào v trí c a hàm này ( u, cu i hay gi a c a mã ngu n) mà n i dung c a nó luôn c th c hi n u tiên khi ch ng trình b t u. Thêm vào ó, do nguyên nhân nói trên, m i ch ng trình C++ u ph i t n t i m t hàm main. int main() { . return 0. } Theo sau main là m t c p ngo c n b i vì nó là m t hàm. Trong C++, t t c các hàm mà sau ó là m t c p ngo c n () thì có ngh a là nó có th có ho c không có tham s (không b t bu c). N i dung c a hàm main ti p ngay sau ph n khai báo chính th c c bao trong các ngo c nh n ( { } ) nh trong ví d . return 0; Lnh return k t thúc hàm main và tr v mã i sau nó, trong tr ng h p này là 0. ây là mt k t thúc bình th ng c a m t ch ng trình không có m t l i nào trong quá trình th c hi n. Nh b n s th y trong các ví d ti p theo, ây là m t cách ph bi n nh t k t thúc mt ch ng trình C++. IV. Nh p/Xu t d li u 1. Nh p d li u t bàn phím – Hàm scanf() Là hàm cho phép c d li u t bàn phím và gán cho các bi n trong ch ng trình khi ch ng trình th c thi. Trong ngôn ng C, ó là hàm scanf n m trong th vi n stdio.h. Cú pháp : scanf(“Chu i nh d ng”, a ch c a các bi n); Gi i thích: - Chu i nh d ng: dùng qui nh ki u d li u, cách bi u di n, r ng, s ch s th p phân M t s nh d ng khi nh p ki u s nguyên, s th c, ký t . 36
  37. nh d ng Ý ngh a %[s ch s ]d Nh p s nguyên có t i a %[s ch s ] f Nh p s th c có t i a tính c d u ch m %c Nh p m t ký t Ví d : %d Nh p s nguyên %4d Nh p s nguyên t i a 4 ký s , n u nh p nhi u h n 4 ký s thì ch nh n c 4 ký s u tiên %f Nh p s th c %6f Nh p s th c t i a 6 ký s (tính luôn d u ch m), n u nh p nhi u h n 6 ký s thì ch nh n c 6 ký s u tiên (ho c 5 ký s v i d u ch m) - a ch c a các bi n: là a ch (&) c a các bi n mà chúng ta c n nh p giá tr cho nó. c vi t nh sau: & . Ví d : scanf(“%d”,&bien1);/*Doc gia tri cho bien1 co kieu nguyen*/ scanf(“%f”,&bien2); /*Doc gia tri cho bien2 co kieu th ưc*/ scanf(“%d%f”,&bien1,&bien2); /*Doc gia tri cho bien1 co kieu nguyen, bien2 co kieu thuc*/ scanf(“%d%f%c”,&bien1,&bien2,&bien3); /*bien3 co kieu char*/ Lưu ý: - Chu i nh d ng ph i t trong c p d u nháy kép (“”). - Các bi n ( a ch bi n) ph i cách nhau b i d u ph y (,). - Có bao nhiêu bi n thì ph i có b y nhiêu nh d ng ; - Th t c a các nh d ng ph i phù h p v i th t c a các bi n ; - nh p giá tr ki u char c chính xác, nên dùng hàm fflush(stdin) lo i b các ký t còn n m trong vùng m bàn phím tr c hàm scanf() ; - nh p vào m t chu i ký t (không ch a kho ng tr ng hay k t thúc b ng kho ng tr ng), chúng ta ph i khai báo ki u m ng ký t hay con tr ký t , s d ng nh dng %s và tên bi n thay cho a ch bi n. ; - c vào m t chu i ký t có ch a kho ng tr ng (k t thúc b ng phím Enter) thì ph i dùng hàm gets(). Mt s ví d khác : int biennguyen; float bienthuc; char bienchar; char chuoi1[20], *chuoi2; 37
  38. 1. Lnh: scanf(“%3d”,&biennguyen); Nu ta nh p 1234455 thì giá tr c a biennguyen là 3 ký s u tiên (123). Các ký s còn l i s còn n m l i trong vùng m. 2. Lệnh: scanf(“%5f”,&bienthuc); Nu ta nh p 123.446 thì giá tr c a bienthuc là 123.4, các ký s còn l i s còn n m trong vùng m. 3. Lệnh: scanf(“%2d%5f”,&biennguyen, &bienthuc); Nu ta nh p liên ti p 2 s cách nhau b i kho ng tr ng: 1223 3.142325 thì : a. 2 ký s u tiên (12) s c c vào cho biennguyen ; b. 2 ký s ti p theo tr c kho ng tr ng (23) s c c vào cho bienthuc. 4. Lệnh:scanf(“%2d%5f%c”,&biennguyen,&bienthuc,&bienchar); Nu ta nh p liên ti p 2 s cách nhau b i kho ng tr ng: 12345 3.142325 thì : a. 2 ký s u tiên (12) s c c vào cho biennguyen ; b. 3 ký s ti p theo tr c kho ng tr ng (345) s c c vào cho bienthuc ; c. Kho ng tr ng s c c cho bienchar. Nu ta ch nh p 1 s g m nhi u ký s nh sau: 123456789: d. 2 ký s u tiên (12) s c c vào cho biennguyen ; e. 5 ký s ti p theo (34567) s c c vào cho bienthuc ; f. bienchar s có giá tr là ký s ti p theo ‘8’. 5. Lnh: scanf(“%s”,chuoi1); ho ặc scanf(“%s”,chuoi2); Nu ta nh p chu i nh sau: Nguyen Van Huynh  thì giá tr c a bi n chuoi1 hay chuoi2 ch là Nguyen . 6. Lnh: scanf(“%s%s”,chuoi1, chuoi2); Nu ta nh p chu i nh sau: Duong Van Hieu  thì giá tr c a bi n chuoi1 là Duong và giá tr c a bi n chuoi2 là Van. Vì sao nh v y? C s c t u n khi g p kho ng tr ng và gán giá tr cho bi n u tiên, ph n còn l i sau kho ng tr ng là giá tr c a các bi n ti p theo. gets(chuoi1); Nu nh p chu i : Nguyen Van Lai  thì giá tr c a bi n chuoi1 là Nguyen Van Lai 2. Xu t d li u ra màn hình - Hàm printf() Hàm printf (n m trong th vi n stdio.h ) dùng xu t giá tr c a các bi u th c lên màn hình. Cú pháp : printf(“Chu i nh d ng ”, Các bi u th c); Gi i thích: - Chu i nh d ng: dùng qui nh ki u d li u, cách bi u di n, r ng, s ch s th p phân Mt s nh d ng khi i v i s nguyên, s th c, ký t . nh d ng Ý ngh a %d Xu t s nguyên %[.s ch s th p phân] f Xu t s th c có theo quy t c làm 38
  39. tròn s . %o Xu t s nguyên h bát phân %x Xu t s nguyên h th p l c phân %c Xu t m t ký t %s Xu t chu i ký t %e ho c %E ho c %g ho c Xu t s nguyên d ng khoa h c (nhân 10 m x) %G Ví d %d In ra s nguyên %4d In s nguyên t i a 4 ký s , n u s c n in nhi u h n 4 ký s thì in h t %f In s th c %6f In s th c t i a 6 ký s (tính luôn d u ch m), n u s cn in nhi u h n 6 ký s thì in h t %.3f In s th c có 3 s l , n u s c n in có nhi u h n 3 s l thì làm tròn. - Các bi u th c: là các bi u th c mà chúng ta c n xu t giá tr c a nó lên màn hình, m i bi u th c phân cách nhau b i d u ph y ( ,). Ví d 1: #include #include int main() { int bien_nguyen=1234, i=65; float bien_thuc=123.456703; printf("Gia tri nguyen cua bien nguyen =%d\n",bien_nguyen); printf("Gia tri thuc cua bien thuc =%f\n",bien_thuc); printf("Truoc khi lam tron=%f \n Sau khi lam tron=%.2f",bien_thuc, bien_thuc); getch(); return 0; } Kt qu in ra màn hình nh sau: 39
  40. Lu ý: i v i các ký t iu khi n, ta không th s d ng cách vi t thông th ng hi n th chúng. Ký t iu khi n là các ký t dùng iu khi n các thao tác xu t, nh p d li u; m t s ký t iu khi n c mô t trong b ng sau: Ký t iu Giá tr th p Ký t ưc Ý ngh a khi n lc phân hi n th \a 0x07 BEL Phát ra ti ng chuông \b 0x08 BS Di chuy n con tr sang trái 1 ký t và xóa ký t bên trái (backspace) \f 0x0C FF Sang trang \n 0x0A LF Xu ng dòng \r 0x0D CR Tr v u dòng \t 0x09 HT Tab theo c t (gi ng gõ phím Tab) \\ 0x5C \ Du \ \’ 0x2C ‘ Du nháy n (‘) \” 0x22 “ Du nháy kép (“) \? 0x3F ? u ch m h i (?) \ddd ddd Ký t có mã ACSII trong h bát phân là s ddd \xHHH oxHHH Ký t có mã ACSII trong h th p l c phân là HHH Ví d 2 : #include #include int main () { printf("\n Tieng Beep \a"); printf("\n Doi con tro sang trai 1 ky tu\b"); printf("\n Dau Tab \tva dau backslash \\"); printf("\n Dau nhay don \' va dau nhay kep \""); printf("\n Dau cham hoi \?"); printf("\n Ky tu co ma bat phan 101 la \101"); printf("\n Ky tu co ma thap luc phan 41 la \x041"); printf("\n Dong hien tai, xin go enter"); getch(); printf("\rVe dau dong"); getch(); return 0; } 3. Ví d Ví d 1 : Vi t ch ng trình cho phép nh p vào 2 s a và b, trình k t qu và ph ng pháp công 2 s ó theo hình th c sau (v i a=876 và b=7655): 876 + 40
  41. 7655 = 8531 #include #include #include // Chuong trinh chinh int main() { int a,b,tong; system("cls"); printf("Nhap vao a va b:"); scanf("%d %d",&a,&b); printf("Ket qua theo phuong phap cong\n\n"); tong=a+b; printf("%20d\n",a); printf("%10s\n","+"); printf("%20d\n",b); printf("%20s\n"," "); printf("%20d\n\n",tong); printf("Nhan phim bat ky de ket thuc!"); getch(); return 0; } Kt qu th c hi n V. Tóm t t n i dung bài h c I. Gi i thi u II. M t s khái ni m c b n 1. B ký t 2. T khóa 3. Ki u d li u 4. Tên, Bi n, h ng 5. Bi u th c III. C u trúc ch ng trình n gi n trong C 1. C u trúc chung 2. Khai báo s d ng th vi n 3. Khai báo h ng, bi n, ki u 41
  42. 4. M t s l nh n 5. Chú thích 6. Ch ng trình chính IV. Nh p/Xu t d li u 1. Nh p d li u t bàn phím – Hàm scanf() 2. Xu t d li u ra màn hình – Hàm printf() 3. ví d VI. Bài t p Xem Bài 3 - Bài t p th c hành Môi tr ưng l p trình Dev-C++ và các l nh vào/ra c ơ bn. 42
  43. Bài 3 - Bài thc hành: MÔI TR NG L P TRÌNH VÀ CÁC LNH VÀO/RA I. Làm quen môi tr ng Dev-C++ 1. Kh i ng Dev-C++ Kích úp vào bi u t ng trên màn hình. 2. Giao di n chính II. Th c hi n các ví d sau 1. Tính di n tích m t tam giác Yêu c u: Cho c nh áy a mt hình tam giác và ng cao t ng ng là h, hãy tính di n tích hình tam giác ó. So n th o v n b n ch ươ ng trình nh ư sau : /* Vi du 1 - Tinh dien tich tam giac khi biet chieu cao va canh day */ #include #include #include // Chuong trinh chinh 43
  44. int main() { int a,h; // a - chieu dai day, h - chieu cao float s; // Dien tich tam gia system("cls"); // Xoa man hinh printf("Nhap vao a va h:"); scanf("%d %d",&a,&h); s=a*h; printf("Dien tich bang ", s); printf("Nhan phim bat ky de ket thuc!"); getch(); // Dung doi nhan phim bat ky return 0; } Th nghi m 1 : 1. Nh n F9 , giao di n xu t hi n nh sau: 2. Nh p vào các giá tr : 4 5 Enter, khi ó k t qu nh n c nh sau: 3. Nh n xét v k t qu nh n c Th nghi m 2: 1. Thay dòng printf("Dien tich bang ", s); Bng dòng printf("Dien tich bang %f", s); 2. Nh n xét v k t qu nh n c so v i th nghi m 1. Th nghi m 3: 1. Thay dòng printf("Dien tich bang %f", s); B ng dòng printf("Dien tich bang %10.2f", s); 44
  45. 2. Nh n xét v k t qu nh n c so v i th nghi m 2. 2. Tính t ng, hi u, tích, th ươ ng c a 2 s Yêu c u: Vi t ch ng trình cho phép nh p vào 2 s , tính và in ra màn hình t ng, hi u, tích và th ng c a 2 s ó. SSooSoạnSo ạn thảo văn bản chươngch ương trìnhtr ình như sau /* Chuong trinh tinh TONG, HIEU, TICH, THUONG 2 so*/ #include #include #include /* Chuong trinh chinh */ int main() { /* 1. Khai bao bien va chuan bi*/ int a,b; float tong, hieu,tich, thuong; system("cls"); /* 2. Huong dan nhap va Nhap du lieu vao*/ printf("Nhap vao A va B:"); scanf("%d %d",&a,&b); /* 3. Tinh toan TONG, HIEU, TICH, THUONG*/ tong=a+b; hieu=a-b; tich=a*b; thuong=a/b; /* 4. Trinh bay ket qua r*/ printf("Tong %d + %d = %10.2f\n", a,b,tong); printf("Hieu %d - %d = %10.2f\n", a,b,hieu); printf("Tich %d * %d = %10.2f\n", a,b,tich); printf("Thuong %d / %d = %10.2f\n", a,b,thuong); printf("Nhan phim bat ky de ket thuc!"); /* 5. Doi nhan phim bat ky de ket thuc*/ getch(); return 0; } Th nghi m 1: 1. Nh n F9, giao di n xu t hi n nh hình sau: 2. Nh p vào các giá tr : 4 5 Enter, khi ó k t qu nh n c nh hình sau. 45
  46. 3. Nh n xét v k t qu nh n c. Th nghi m 2: Cho A=6, B=4 nh n xét v k t qu nh n c; Th nghi m 3: Cho A=6, B=0 nh n xét v k t qu nh n c; III. Bài t p t làm T th c hi n các bài t p sau 2. Vi t ch ng trình in lên màn hình m t thi p m i d sinh nh t có d ng: THIEP MOI Than moi ban : Nguyen Van Manh Toi du le sinh nhat cua minh Vao luc 19h ngay 12/10/2008 Tai 100 Hoang Quoc Viet – Ha noi Rat mong uoc don tiep ! Ho Thu Huong 3. Vi t ch ng trình nh p vào bán kính r c a m t hình tròn. Tính chu vi và di n tích c a hình tròn theo công th c : Chu vi CV = 2*Pi*r Di n tích S = Pi*r*r In các k t qu lên màn hình 4. Vi t ch ng trình nh p vào dài 3 c nh a, b, c c a m t tam giác. Tính chu vi và di n tích c a tam giác theo công th c: Chu vi CV = a+b+c 46
  47. Di n tích S = sqrt(p*(p-a)*(p-b)*(p-c)) Trong ó: p=CV/2 In các k t qu lên màn hình 5. Vi t ch ng trình tính log x v i a, x là các s th c nh p vào t bàn phím, và x>0, a a>0, a <> 1.( dùng log x=lnx/lna) . a 6. Vi t ch ng trình nh p vào t a c a hai im (x1, y1) và (x2, y2) a) Tính h s góc c a ng th ng i qua hai im ó theo công th c: H s góc = (y2 - y1) /(x2 - x1) b) Tính kho ng cách gi a hai im theo công th c: − 2 + − 2 Kho ng cách = (y2 y1 ) (x2 x1 ) 7. Vi t ch ng trình nh p vào m t ký t : a) In ra mã Ascii c a ký t ó. b) In ra ký t k ti p c a nó. 8. Vi t ch ng trình nh p vào các giá tr in tr R1, R2, R3 c a m t m ch in : 1 = 1 + 1 + 1 Tính t ng tr theo công th c: R R1 R2 R3 9. Vi t ch ng trình nh p vào im ba môn Toán, Lý, Hóa c a m t h c sinh. In ra im trung bình c a h c sinh ó v i hai s l th p phân. 10. Vi t ch ng trình nh p vào ngày, tháng, n m. In ra ngày tháng n m theo d ng dd/mm/yy. (dd: ngày, mm: tháng, yy: n m. Ví d : 20/11/99). 11. Vi t ch ng trình o ng c m t s nguyên d ng có úng 3 ch s . 12. Cho hai sô x= 100; y = 200; Hãy in ra màn hình các k t qu c a các bi u th c: x&y; x&x; !x&y; x^y^y; 13. Bi u di n các h ng s nguyên 2 byte sau ây d i d ng s nh phân, bát phân, th p lc phân : a)12 b) 255 c) 31000 d) 32767 e) -32768 14. Bi u di n các h ng ký t sau ây d i d ng s nh phân, bát phân. a) ‘A’ b) ’a’ c) ‘Z’ d) ’z’ 47
  48. 15. Cho h s k và s x ( c bi u di n h c s k), s k1 c nh p vào t bàn phím. Hãy i s x t h c s k sang h c s k1, bi t k, k1 có th nh n các s : 2, 8, 10, 16. 48
  49. Bài 4 - IU KHI N CH N VÀ L P Ni dung bài h c I. iu khi n ch n 1. Kh i l nh 2. C u trúc IF 3. C u trúc SWITCH 4. Ví d II. iu khi n l p 1. C u trúc FOR 2. C u trúc WHILE 3. C u trúc DO WHILE 4. L nh break và continue III. Bài t p I. iu khi n ch n 1. Kh i l nh Mt dãy các khai báo cùng v i các câu l nh n m trong c p d u ngo c móc { và } c gi là m t kh i l nh. Ví d 1 : { char ten[30]; printf(“\n Nhap vao ten cua ban:”); scanf(“%s”, ten); printf(“\n Chao Ban %s”,ten); } Ví d 2 : #include #include int main () { char ten[50]; printf("Xin cho biet ten cua ban !"); scanf("%s",ten); getch(); return 0; } Mt kh i l nh có th ch a bên trong nó nhi u kh i l nh khác g i là kh i l nh l ng nhau. S l ng nhau c a các kh i l nh là không h n ch . Minh h a: { l nh; { l nh; 49
  50. { l nh; } l nh; } l nh; } Lưu ý v ph m vi tác ng c a bi n trong kh i l nh l ng nhau: Trong các kh i l nh khác nhau hay các kh i l nh l ng nhau có th khai báo các bi n cùng tên. Ví d 3 : { l nh; { int a,b; /*bi n a, b trong kh i l nh th nh t*/ l nh; } l nh; { int a,b; /*bi n a,b trong kh i l nh th hai*/ l nh; } } Ví d 4 : { int a, b; /*bi n a,b trong kh i l nh “bên ngoài”*/ l nh; { int a,b; /*bi n a,b bên trong kh i l nh con*/ } } - N u m t bi n c khai báo bên ngoài kh i l nh và không trùng tên v i bi n bên trong kh i l nh thì nó c ng c s d ng bên trong khi l nh. - M t kh i l nh con có th s d ng các bi n bên ngoài, các l nh bên ngoài không th s d ng các bi n bên trong kh i l nh con. 50
  51. 2. C u trúc IF Cú pháp if ( ) úng { Sai BT iu ki n } [else Công vi c 1 Công vi c 2 { } ] Lu cú pháp: Gi i thích: - Công vi c 1, công vi c 2 c th hi n là 1 câu l nh hay 1 kh i l nh. - u tiên Bi u th c iu ki n c ki m tra tr c. - Nu iu ki n úng thì th c hi n công vi c 1. - Nu iu ki n sai thì th c hi n công vi c 2. - Vi c có th c hi n công vi c 2 hay không là m t l a ch n, có th có ho c không. Ví d 1: Yêu c u ng i th c hi n ch ng trình nh p vào m t s th c a. In ra màn hình kt qu ngh ch o c a a khi a 0, khi a =0 in ra thông báo “Khong the tim duoc nghich dao cua a” #include #include int main () { float a; printf("Nhap a = "); scanf("%f",&a); if (a !=0 ) printf("Nghich dao cua %f la %f",a,1/a); else printf(“Khong the tim duoc nghich dao cua a”); getch(); return 0; } Gi i thích: - Nu chúng ta nh p vào a 0 thì câu l nh printf("Nghich dao cua %f la %f",a,1/a) c th c hi n, ng c l i câu l nh printf(“Khong the tim duoc nghich dao cua a”) c th c hi n. - Lnh getch() luôn luôn c th c hi n. - Ch y t ng b c d ng Debug, view các bi n a, b và bi u th c a>b Ví d 2 : Yêu c u ng i ch y ch ng trình nh p vào giá tr c a 2 s a và b, n u a l n h n b thì in ra thông báo “Gia tr c a a l n h n giá tr c a b, giá tr c a 2 s ”, ng c l i thì in 51
  52. ra màn hình câu thông báo “Giá tr c a a nh h n ho c b ng giá tr c a b, giá tr c a 2 s”. #include #include int main () { int a, b; printf("Nhap vao gia tri cua 2 so a va b !"); scanf("%d%d",&a,&b); if (a>b) { printf("\n a lon hon b”); printf("\n a=%d b=%d ",a,b); } else { printf("\n a nho hon hoac bang b"); printf("\n a=%d b=%d",a,b); } printf("\n Thuc hien xong lenh if"); getch(); return 0; } Ví d 3 : Yêu c u ng i th c hi n ch ng trình nh p vào m t s nguyên d ng là tháng trong n m và in ra s ngày c a tháng ó. - Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12; - Tháng có 30 ngày: 4, 6, 9, 10 ; - Tháng có 28 ho c 29 ngày : 2 #include #include int main () { int thg; printf("Nhap vao thang trong nam !"); scanf("%d",&thg); if (thg==1||thg==3||thg==5||thg==7||thg==8||thg==10||thg==12) { printf("\n Thang %d co 31 ngay ",thg); } else { if (thg==4||thg==6||thg==9||thg==11) printf("\n Thang %d co 30 ngay",thg); else if (thg==2) printf("\n Thang %d co 28 hoac 29 ngay",thg); else printf("Khong co thang %d",thg); printf("\n Thuc hien xong lenh if"); } getch(); return 0; } 52
  53. Lưu ý: - Ta có th s d ng các câu l nh if else l ng nhau. Trong tr ng h p if else l ng nhau thì else s k t h p v i if g n nh t ch a có else; - Trong tr ng h p câu l nh if “bên trong” không có else thì ph i vi t nó trong c p du {} (coi nh là kh i l nh) tránh s k t h p else if sai; Ví d : if ( so1>0) if (so2 > so3) a=so2; else /*else c ủa if (so2>so3) */ a=so3; Ho c: if (so1>0) { if (so2>so3) /*l ệnh if này không có else*/ a=so2; } else /*else c ủa if (so1>0)*/ a=so3; - Nu sau bi u th c logic c a if ta có d u ch n ph y, ví d : if (a==0); { printf("Nghich dao cua %f la %f",a,1/a); } Thì v cú pháp trình biên d ch s không báo sai, nh ng xét v ý ngh a là sai. 53
  54. 3. C u trúc SWITCH Cu trúc l a ch n cho phép l a ch n m t trong nhi u tr ng h p. Trong C, ó là câu lnh switch. Cú pháp: switch ( ) { case giá_tr _1: { Công vi c 1; break; } case giá_tr _n: { Công vi c N; break; } [default : { Công vi c N+1; break; } ] } Lu : Tính giá tr Sai =Giá tr 1 Sai úng =Giá tr 2 úng =Giá tr N Sai úng Công vi c 1 Công vi c 2 Công vi c n Công vi c n+1 54
  55. Gi i thích: - Tính giá tr c a Biu th c; - Nu giá tr c a bi u th c b ng Giá tr 1 thì th c hi n Công vi c 1 r i thoát; - Nu giá tr c a bi u th c khác Giá tr 1 thì so sánh v i Giá tr 2 , n u b ng thì thc hi n Công vi c 2 r i thoát; - Ti p t c so sánh v i Giá tr N n u n-1 giá tr tr c ó không b ng giá tr c a Bi u th c. - Nu t t c các phép so sánh trên u sai thì có th ch n th c hi n (hay không) Công vi c N+1 (Công vi c mc nh). Lưu ý: - Bi u th c trong switch() ph i có k t qu là giá tr ki u s nguyên (int, char, long, ); - Các giá tr sau case c ng ph i là ki u s nguyên; - Không b t bu c ph i có default; Ví d 1 : Nh p vào m t s nguyên, chia s nguyên này cho 2 l y ph n d . Ki m tra n u ph n d b ng 0 thì in ra thông báo “s ch n”, n u s d b ng 1 thì in thông báo “s l ”. #include #include int main () { int songuyen, phandu; printf("\n Nhap vao so nguyen "); scanf("%d",&songuyen); phandu=(songuyen % 2); switch(phandu) { case 0: printf("%d la so chan ",songuyen); break; case 1: printf("%d la so le ",songuyen); break; } getch(); return 0; } Ví d 2 : Nh p vào 2 s nguyên và 1 phép toán. N u phép toán là ‘+’, ‘-‘, ‘*’ thì in ra k t qua là t ng, hi u, tích c a 2 s ; Nu phép toán là ‘/’ thì ki m tra xem s th 2 có khác không hay không? Nu khác không thì in ra th ng c a chúng, ng c l i thì in ra thông báo “khong chia cho 0”. #include #include int main () { int so1, so2; float thuong; char pheptoan; printf("\n Nhap vao 2 so nguyen "); scanf("%d%d",&so1,&so2); 55
  56. fflush(stdin); //Xoa ky tu enter trong vung dem truoc khi nhap phep toan printf("\n Nhap vao phep toan "); scanf("%c",&pheptoan); switch(pheptoan) { case '+': printf("\n %d + %d =%d",so1, so2, so1+so2); break; case '-': printf("\n %d - %d =%d",so1, so2, so1-so2); break; case '*': printf("\n %d * %d =%d",so1, so2, so1*so2); break; case '/': if (so2!=0){ thuong=float(so1)/float(so2); printf("\n %d / %d =%f", so1, so2, thuong); } else printf("Khong chia duoc cho 0"); break; default : printf("\n Chua ho tro phep toan %c", pheptoan); break; } getch(); return 0; } Trong ví d trên, t i sao ph i xóa ký t trong vùng m tr c khi nh p phép toán? Ví d 3 : Yêu c u ng i th c hi n ch ng trình nh p vào m t s nguyên d ng là tháng trong n m và in ra s ngày c a tháng ó. - Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12 ; - Tháng có 30 ngày: 4, 6, 9, 10; - Tháng có 28 ho c 29 ngày : 2 - Nu nh p vào s 12 thì in ra câu thông báo “không có tháng này “. #include #include int main () { int thang; printf("\n Nhap vao thangs trong nam "); scanf("%d",&thang); switch(thang) { case 1: case 3: case 5: case 7: case 8: case 10: 56
  57. case 12: printf("\n Thang %d co 31 ngay ",thang); break; case 4: case 6: case 9: case 11: printf("\n Thang %d co 30 ngay ",thang); break; case 2: printf ("\ Thang 2 co 28 hoac 29 ngay"); break; default : printf("\n Khong co thang %d", thang); break; } getch(); return 0; } 57
  58. II. iu khi n l p 1. C u trúc FOR Lnh for cho phép l p l i công vi c cho n khi iu ki n sai. Cú pháp : for (Bi u th c 1; bi u th c 2; bi u th c 3) { } Lu : Tính giá tr BT 1 F Bi u th c 2 T Th c hi n CV Tính giá tr BT 3 Gi i thích: : c th hi n là 1 câu l nh hay 1 kh i l nh. Th t th c hi n ca câu l nh for nh sau: B1 : Tính giá tr c a bi u th c 1. B2 : Tính giá tr c a bi u th c 2. - N u giá tr c a bi u th c 2 là sai (=0): thoát kh i câu l nh for. - N u giá tr c a bi u th c 2 là úng (!=0): c th c hi n. B3 : Tính giá tr c a bi u th c 3 và quay l i B2. Lưu ý: - Khi bi u th c 2 v ng m t thì nó c coi là luôn luôn úng; - Bi u th c 1: thông th ng là m t phép gán kh i t o giá tr ban u cho bi n iu ki n; - Bi u th c 2: là m t bi u th c ki m tra iu ki n úng sai d ng vòng l p; - Bi u th c 3: thông th ng là m t phép gán thay i giá tr c a bi n iu ki n, bi n iu ki n này th ng (ph i có) trong Bi u th c 2; 58
  59. - Trong m i biu th c có th có nhi u bi u th c con. Các bi u th c con c phân bi t b i d u ph y. Ví d 1 : Vi t on ch ng trình in dãy s nguyên t 1 n 10. #include #include int main () { int i; printf("\n Day so tu 1 den 10 :"); for (i=1; i #include int main () { unsigned int n,i,tong; printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n); tong=0; for (i=1; i #include int main () { unsigned int dong, cot, n, m; printf("\n Nhap vao so dong va so cot :"); scanf("%d%d",&n,&m); for (dong=0;dong<n;dong++) { printf("\n"); for (cot=1;cot<=m;cot++) printf("%d\t",dong+cot); } getch(); 59
  60. return 0; } 2. Cu trúc WHILE Vòng l p while gi ng nh vòng l p for, dùng l p l i m t công vi c nào ó cho n khi iu ki n sai. Cú pháp : while (Bi u th c iu ki n) { } Lu : F iu ki n T Th c hi n CV Gi i thích: - : c th hi n b ng 1 câu l nh hay 1 kh i l nh; - Ki m tra Bi u th c iu ki n; - Nu iu ki n sai (=0) thì thoát kh i l nh while; - Nu iu ki n úng (!=0) thì th c hi n công vi c r i quay l i ki m tra iu ki n ti p. Lưu ý: - Lnh while g m có bi u th c iu ki n và thân vòng l p (kh i l nh th c hi n công vi c) ; - Vòng l p dng l i khi nào iu ki n sai; - Kh i l nh th c hi n công vi c có th r ng, có th làm thay i iu ki n. Ví d 1 : Vi t on ch ng trình in dãy s nguyên t 1 n 10. #include #include int main () { int i; printf("\n Day so tu 1 den 10 :"); i=1; while (i<=10) { 60
  61. printf("%d ",i); i=i+1; } getch(); return 0; } Ví d 2 : Vi t ch ng trình nh p vào m t s nguyên n. Tính t ng c a các s nguyên t 1 n n. #include #include int main () { unsigned int n,i,tong; printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n); tong=0; i=1; while (i #include int main () { unsigned int dong, cot, n, m; printf("\n Nhap vao so dong va so cot :"); scanf("%d%d",&n,&m); dong=0; while (dong<n) { printf("\n"); cot=1; while (cot<=m) { printf("%d\t",dong+cot); cot++; } dong++; } 61
  62. getch(); return 0; } 3. Cu trúc DO WHILE Vòng l p do while gi ng nh vòng l p for, while, dùng l p l i m t công vi c nào ó khi iu ki n còn úng. Cú pháp : do { } while ( ) Lu : 62
  63. Th c hi n CV T iu ki n F Gi i thích: - : c th hi n b ng 1 câu l nh hay 1 kh i l nh; - Tr c tiên công vi c c th c hi n tr c, sau ó m i ki m tra Bi u th c iu ki n; - Nu iu ki n sai thì thoát kh i l nh do while; - Nu iu ki n còn úng thì th c hi n công vi c r i quay l i ki m tra iu ki n ti p; Lưu ý: - Lnh do while th c hi n công vi c ít nh t 1 l n; - Vòng lp d ng l i khi iu ki n sai; - Kh i l nh th c hi n công vi c có th r ng, có th làm thay i iu ki n. Ví d 1 : Vi t on ch ng trình in dãy s nguyên t 1 n 10. #include #include int main () { int i; printf("\n Day so tu 1 den 10 :"); i=1; do printf("%d ",i++); while (i #include int main () { unsigned int n,i,tong; printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n); 63
  64. tong=0; i=1; do { tong+=i; i++; } while (i =1): 1 2 3 4 5 6 7 2 3 4 5 6 7 8 3 4 5 6 7 8 9 #include #include int main () { unsigned int dong, cot, n, m; printf("\n Nhap vao so dong va so cot :"); scanf("%d%d",&n,&m); dong=0; do { printf("\n"); cot=1; do { printf("%d\t",dong+cot); cot++; } while (cot<=m); dong++; } while (dong<n); getch(); return 0; } So sánh các vòng l p Vòng l p for, while: - Ki m tra iu ki n tr c th c hi n công vi c sau nên on l nh th c hi n công vi c có th không c th c hi n; - Vòng l p k t thúc khi nào iu ki n sai. Vòng l p do while: - Th c hi n công vi c tr c ki m tra iu ki n sau nên on l nh th c hi n công vi c c th c hi n ít nh t 1 l n.; - Vòng l p k t thúc khi nào iu ki n sai. 64
  65. 4. Lnh break và continue Lnh break Cú pháp : break; Ý ngh a: Dùng thoát kh i vòng l p. Khi g p câu l nh này trong vòng l p, ch ng trình s thoát ra kh i vòng l p và ch n câu l nh li n sau nó. N u nhi u vòng l p > break s thoát ra kh i vòng l p g n nh t. Ngoài ra, break còn c dùng trong c u trúc l a ch n switch. Lnh continue Cú pháp: continue; Ý ngh a : Khi g p l nh này trong các vòng l p, ch ng trình s b qua ph n còn l i trong vòng l p và ti p t c th c hi n l n l p ti p theo. Ði v i l nh for, bi u th c 3 s c tính tr và quay l i b c 2. Ði v i l nh while, do while; bi u th c iu ki n s c tính và xét xem có th ti p t c th c hi n n a hay không? (d a vào k t qu c a bi u th c iu ki n). III. Tóm t t n i dung bài h c I. iu khi n ch n 1. Kh i l nh 2. C u trúc IF 3. C u trúc SWITCH 4. Ví d II. iu khi n l p 1. C u trúc FOR 2. C u trúc WHILE 3. C u trúc DO WHILE 4. L nh break và continue III. Bài t p IV. Bài t p Xem Bài 5 - Bài t p th c hành Các c u trúc iu khi n 65
  66. Bài 5 - Bài th c hành: IU KHI N CH N VÀ L P I. Th c hi n các ví d sau 1. Gii ph ươ ng trình b c 2 Yêu c u: Vi t ch ng trình cho phép bi n lu n v nghi m c a ph ng trình b c 2 a*x 2+b*x+c = 0. So n th o v n b n ch ươ ng trình nh ư sau: #include #include #include #include int main() { int a,b,c; float d; float x1,x2; system("cls"); printf("Nhap vao cac he so a,b va c:"); scanf("%d %d %d",&a,&b,&c); d=b*b-4*a*c; if (d<0) { printf("Phuong trinh vo nghiem\n"); } else { if (d==0) { x1=(-b)/(2*a); printf("Phuong trinh co nghiem kep x1=x2=%10.2f\n",x1); } else { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("Phuong trinh co 2 nghiem phan biet x1=%10.2f , x2=%10.2f \n",x1,x2); } } printf("Nhan phim bat ky de ket thuc!"); getch(); return 0; } Th nghi m 1: 1. Nh n F9, khi ó giao di n nh p li u xu t hi n nh hình sau: 66
  67. 2. Nh p các giá tr cho a,b, c t ng ng là 2 4 2 Enter , khi ó k t qu nh n c nh hình sau: 3. Nh n xét v k t qu t c. Th nghi m 2: Nh p các giá tr cho a,b, c t ng ng là -3 1 2 nh n xét v k t qu nh n c. Th nghi m 3: Nh p các giá tr cho a,b, c b t k , nh n xét v k t qu nh n c. 2. Tìm USCNLN c a hai s Yêu c u: Vi t ch ng trình cho phép nh p vào 2 s nguyên và in ra c s chung l n nh t c a 2 s ó. So n th o v n b n ch ươ ng trình nh ư sau: #include #include #include #include int main() { int a,b,t,u,v; system("cls"); printf("Nhap vao cac he so a va b:"); scanf("%d %d",&a,&b); u=a; 67
  68. v=b; while (a>0) { if (a<b) { t=a; a=b; b=t; } a=a-b; } printf("USCLN cua %d va %d = %d\n", u, v, b); printf("Nhan phim bat ky de ket thuc!"); getch(); return 0; } Th nghi m 1: T 1. Nh n F9 ch y ch ng trình, khi ó giao di n ch ng trình xu t hi n nh sau: 2. Nh p các giá tr cho a và b t ng ng là 12 18 Enter, khi ó k t qu nh n c nh sau: 3. Nh n xét v k t qu t c Th nghi m 2: Thay i thu t toán. 68
  69. II. Bài t p t làm 1. Vi t ch ng trình nh p 3 s t bàn phím, tìm s l n nh t trong 3 s ó, in k t qu lên màn hình. 2. Vi t ch ng trình tính chu vi, di n tích c a tam giác v i yêu c u sau khi nh p 3 s a, b, c ph i ki m tra l i xem a, b, c có t o thành m t tam giác không? N u có thì tính chu vi và di n tích. N u không thì in ra câu " Không t o thành tam giác". 3. Vi t ch ng trình gi i ph ng trình b c nh t ax+b=0 v i a, b nh p t bàn phím. 4. Vi t ch ng trình gi i ph ng trình b c hai ax2+bx + c = 0 v i a, b, c nh p t bàn phím. 5. Vi t ch ng trình nh p t bàn phím 2 s a, b và m t ký t ch. N u: ch là “+“ thì th c hi n phép tính a + b và in k t qu lên màn hình. ch là “–“ thì th c hi n phép tính a - b và in k t qu lên màn hình. ch là “*” thì th c hi n phép tính a * b và in k t qu lên màn hình. ch là “/” thì th c hi n phép tính a / b và in k t qu lên màn hình. 6. Vi t ch ng trình nh p vào 2 s là tháng và n m c a m t n m. Xét xem tháng ó có bao nhiêu ngày? Bi t r ng: N u tháng là 4, 6, 9, 11 thì s ngày là 30. N u tháng là 1, 3, 5, 7, 8, 10, 12 thì s ngày là 31. N u tháng là 2 và n m nhu n thì s ngày 29, ng c li thì s ngày là 28. 7. Có hai ph ng th c g i ti n ti t ki m: g i không k h n lãi su t 2.4%/tháng, m i tháng tính lãi m t l n, g i có k h n 3 tháng lãi su t 4%/tháng, 3 tháng tính lãi m t ln.Vi t ch ng trình tính t ng c ng s ti n c v n l n l i sau m t th i gian g i nh p t bàn phím. 8. Mt s nguyên d ng chia h t cho 3 n u t ng các ch s c a nó chia h t cho 3. Vi t ch ng trình nh p vào m t s có 3 ch s , ki m tra s ó có chia h t cho 3 dùng tính ch t trên.( if ) 9. Trò ch i "O n tù tì": trò ch i có 2 ng i ch i m i ng i s dùng tay bi u th m t trong 3 công c sau: Kéo, Bao và Búa. Nguyên t c: Kéo th ng bao. Bao th ng búa. Búa th ng kéo. Vi t ch ng trình mô ph ng trò ch i này cho hai ng i ch i và ng i ch i v i máy. (switch) 10. Vi t ch ng trình tính ti n in g m các kho n sau: Ti n thuê bao in k : 1000 ng / tháng. nh m c s d ng in cho m i h là 50 Kw Ph n nh m c tính giá 450 ng /Kwh N u ph n v t nh m c <= 50 Kw tính giá ph t cho ph n này là 700 ng/Kwh . N u ph n v t nh m c l n 50 Kw và nh h n 100Kw tính giá ph t cho ph n này là 910 ng/Kwh N u ph n v t nh m c l n h n hay b ng 100 Kw tính giá ph t cho ph n này là 1200 ng/Kwh . V i : ch s in k c và ch s in k mi nh p vào t bàn phím. In ra màn hình s ti n tr trong nh m c, v t nh m c và t ng c a chúng. (if) 11. Vi t ch ng trình nh n vào gi , phút, giây d ng (hh:mm:ss ), t bàn phím. C ng thêm mt s giây vào và in ra k t qu d i d ng ( hh:mm:ss ). 12. Vi t ch ng trình nh p vào ngày tháng n m c a m t ngày, ki m tra nó có h p l không. 13. Ki m tra m t ký t nh p vào thu c t p h p nào trong các t p ký t sau: Các ký t ch hoa: 'A' 'Z' Các ký t ch th ng: 'a' 'z' Các ký t ch s : '0' '9' Các ký t khác. 14. H th p l c phân dùng 16 ký s bao g m các ký t 0 9 và A, B, C, D, E ,F. 69
  70. Các ký s A, B, C, D, E, F có giá tr t ng ng trong h th p phân nh sau: A 10 B 11 C 12 D 13 E 14 F 15. Hãy vi t ch ng trình cho nh p vào ký t bi u di n m t ký s ca h th p l c phân và cho bi t giá tr th p phân t ng ng. Tr ng h p ký t nh p vào không thu c các ký s trên, a ra thông báo l i : "H th p l c phân không dùng ký s này" 14. Vi t ch ng trình nh p vào ngày tháng n m c a ngày hôm nay, in ra ngày tháng n m ca ngày mai. 15. Vi t ch ng trình tính các t ng sau: a) S=1 + 2 + + n b) S=1/2 + 2/3 + +n/(n+1) c) S= - 1 +2 - 3 +4 - + (-1)nn 16. Vi t ch ng trình nh p vào m t dãy n s , tìm s l n nh t c a dãy và xác nh v trí ca s l n nh t trong dãy. 17. Vi t ch ng trình m s ch s c a m t s nguyên n. 18. Tìm s nguyên d ng k nh nh t sao cho 2k > n v i n là m t s nguyên d ng nh p t bàn phím. 19. Vi t ch ng trình in ra s o ng c c a m t s nguyên n, v i n nh p t bàn phím. 20. Tính giá tr trung bình c a m t dãy s th c, k t thúc dãy v i -1. 21. Vi t ch ng trình mô ph ng phép chia nguyên DIV 2 s nguyên a và b nh sau: chia nguyên a và b ta tính tr a-b, sau ó l y hi u tìm c l i tr cho b ti p t c cho n khi hi u c a nó nh h n b. S l n th c hi n c các phép tr trên s b ng tr ca phép chia nguyên. 22. Tìm s nguyên d ng N nh nh t sao cho 1+1/2+ +1/N > S, v i S nh p t bàn phím. 23. Vi t ch ng trình tính P=2*4*6* *(2n), n nh p t bàn phím. 24. Vi t ch ng trình tìm UCLN và BCNN c a hai s a và b theo thu t toán sau (Ký hi u UCLN c a a, b là (a,b) còn BCNN là [a,b]) - N u a chia h t cho b thì (a,b) = b - N u a = b*q + r thì (a,b) = (b,r) - [a,b] = a*b/(b,r) . 25. Vi t ch ng trình nh p vào m t s nguyên d ng n, in ra màn hình các s nguyên t p <= n. S nguyên p g i là s nguyên t n u p ch chia h t cho m t và chia h t cho bn thân nó. 26. Vi t ch ng trình tính g n úng c n b c hai c a m t s d ng a theo ph ng pháp Newton : Tr c h t cho x0=(1 + a)/2 sau ó là công th c truy h i: xn+1=( xn + a/xn)/2 xn+1 - xn xn < e thì c n b c hai c a a b ng xn+1N u: Trong ó e là m t h ng s cho tr c làm chính xác. 27. Vi t ch ng trình tính g n úng c n b c n c a m t s d ng a theo ph ng pháp Newton : Tr c h t cho x0= a/n sau ó là công th c truy h i: (n-1) xkn +a nxkn- 1xk+1 = N u |a- xnn| < e thì xn là c n b c n c a a. Trong ó e là m t h ng s cho tr c làm chính xác. N u a < 0 và n ch n thì không t n t i c n. 28. Cho hàm s x 3-3*x+1. Bi t r ng trong [0,1] có s l l n nghi m. S d ng ph ng pháp chia ôi tìm nghi m g n úng c a ph ng trình v i sai s không quá 0.001. 70
  71. Bài 6 - M NG, CON TR VÀ XÂU KÝ T Ni dung bài h c I. M ng 1. M ng trong C 2. M ng m t chi u 3. M ng nhi u chi u II. Con tr 1. Khai báo và s d ng bi n con tr 2. Con tr và m ng 3. Con tr và tham s hình th c c a hàm III. Xâu ký t 1. Khai báo 2. Các thao tác trên chu i ký t IV. Tóm t t n i dung bài h c I. M ng 1. Mng trong C Mng là m t t p h p các ph n t c nh có cùng m t ki u, g i là ki u ph n t . Ki u ph n t có th là: ký t , s , chu i ký t ; Ta có th chia m ng làm 2 lo i: m ng 1 chi u và m ng nhi u chi u. 2. Mng m t chi u Mng 1 chi u là m t dãy các ph n t có cùng tên g i, có 1 ch s ch th t c a ph n t ó trong dãy. M ng m t chi u còn có th hi u nh m t Vector. Khai báo m ng v i s ph n t xác nh (khai báo t ưng minh) Cú pháp: [n] Trong ó: - Tên m ng: ây là m t cái tên t úng theo quy t c t tên c a danh bi u; - n: là m t h ng s nguyên, cho bi t s l ng ph n t t i a trong m ng là bao nhiêu (hay nói khác i kích th c c a m ng là gì); - Ki u: m i ph n t c a m ng có d li u thu c ki u gì; - ây, ta khai báo m t bi n m ng g m có n phn t , ph n t th nh t là tên m ng [0], ph n t cu i cùng là tên m ng [n -1]; Ví d : 71
  72. int a[10]; /* Khai báo bi n m ng tên a, ph n t th nh t là a[0], ph n t cu i cùng là a[9].*/ Ta có th coi m ng a là m t dãy liên ti p các ph n t trong b nh nh sau: V trí 0 1 2 3 4 5 6 7 8 9 Tên ph n t a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] Hình 1: Hình nh m ng a trong b nh Khai báo m ng v i s ph n t không xác nh (khai báo không t ưng minh) Cú pháp: Khi khai báo, không cho bi t rõ s ph n t c a m ng, ki u khai báo này th ng c áp dng trong các tr ng h p: v a khai báo v a gán giá tr , khai báo m ng là tham s hình th c c a hàm. Va khai báo v a gán giá tr Cú pháp: []= {Các giá tr cách nhau b i d u ph y} Nu v a khai báo v a gán giá tr thì m c nhiên C s hi u s ph n t c a m ng là s giá tr mà chúng ta gán cho m ng trong c p d u {}. Chúng ta có th s d ng hàm sizeof() ly s ph n t c a m ng nh sau: S ph n t =sizeof(tên m ng)/ sizeof(ki u) Truy xu t t ng ph n t c a m ng Mi ph n t c a m ng c truy xu t thông qua Tên bi n m ng theo sau là ch s nm trong c p du ngo c vuông [ ]. Ch ng h n a[0] là ph n t u tiên c a m ng a c khai báo trên. Ch s c a ph n t m ng là m t bi u th c mà giá tr là kiu s nguyên. Ví d 1 : int a[10]; Trong khai báo này, vi c truy xu t các ph n t c ch ra trong hình 1. Ch ng h n ph n t th 2 (có v trí 1) là a[1] Ví d 2 : V a khai báo v a gán tr cho 1 m ng 1 chi u các s nguyên. In m ng s nguyên này lên màn hình. #include #include int main() { 72