1. Trang chủ
  2. » Công Nghệ Thông Tin

Tổng quan về C và C++

71 393 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 71
Dung lượng 0,98 MB

Nội dung

Tài liệu tổng quan về ngôn ngữ lập trình C và C ++ cũng như Ngôn ngữ lập trình và thuật toán, Hằng, biến và mảng, Biểu thức, Vào ra, Các toán tử điều khiển, Hàm và cấu trúc chương trình, Con trỏ, cấp phát động và hàm

M c l cụ ụ Ch ng 1. T ng quan v C v C++ ươ ổ ề à . .1 1.1. Ngôn ng l p trình v thu t toánữ ậ à ậ 1 1.1.1. Ngôn ng l p trìnhữ ậ 1 1.1.2. Thu t toán (Algorithm)ậ 2 1.1.3. S ra i v phát tri n c a ngôn ự đơ à ể ủ ng Cữ 2 1.2. Các ph n t c b n trong ngôn ng ầ ử ơ ả ữ C 2 1.2.1. B ký t (character set)ộ ự 2 1.2.2. Các t khóa (key words, reserved ừ words) 2 1.2.3. Tên v cách t tên (identifier)à đặ . .2 1.2.4. L i gi i thích (comment)ờ ả 2 1.2.5. M t v i ch ng trình C n ộ à ươ đơ gi nả 2 1.3. C u trúc ch ng trình trong Cấ ươ 2 1.3.1. Các th nh ph n c a m t ch ng à ầ ủ ộ ươ trình C 2 1.3.2. So n th o v ch y m t ch ng ạ ả à ạ ộ ươ trình C 3 Ch ng 2. H ng, bi n v m ng ươ ằ ế à ả 5 2.1. Các ki u d li u c s ể ữ ệ ơ ở 5 2.2. H ng ằ 5 2.3. Ki u enumể 6 2.4. Bi n ế 6 2.5. M ng v chu iả à ỗ 7 2.6. nh ngh a ki u b ng typedef Đị ĩ ể ằ 7 2.7. Kh i l nh ố ệ 7 2.8. V i nét v h m v ch ng trình à ề à à ươ 7 2.9. Bi n, m ng t ng ế ả ự độ 7 2.10. Bi n, m ng ngo i ế ả à 8 2.11. Toán t sizeof ử 8 2.12. Bi n t nh, m ng t nh ế ĩ ả ĩ 8 Ch ng 3. Bi u th c ươ ể ứ 9 3.1. Khái ni m bi u th c(expression) ệ ể ứ 9 3.2. Phép toán s h c ố ọ 9 3.3. Các phép thao tác bit 9 3.4. Các phép toán quan h v logic ệ à 9 3.5. Phép chuy n i ki u giá tr ể đổ ể ị 9 3.6. Phép toán t ng gi m ă ả 9 3.7. Câu l nh gán v bi u th c ệ à ể ứ 9 3.8. Bi u th c i u ki nể ứ đ ề ệ 9 3.9. Th t u tiên các phép toánứ ự ư 9 Ch ng 4. V o ra ươ à 10 4.1. H m printf à 10 4.2. H m scanf à 10 4.3. a ra máy in- h m fprintf Đư à 11 4.4. Dòng v o stdin v các h m nh p à à à ậ d li u ữ ệ 11 4.5. Nh p /xu t s li u cho chu i v ậ ấ ố ệ ỗ à ký t ự 12 4.6. M t s h m x lý chu i ộ ố à ử ỗ 12 4.7. S khác bi t gi a m ng v chu i ự ệ ữ ả à ỗ 12 4.8. Các h m v o ra v d ch chuy n v à à à ị ể ị trí trên m n hình à 13 4.9. Các lu ng nh p xu t cin,cout ồ ậ ấ . .13 Ch ng 5. Các toán t đi u khi n ươ ử ề ể 14 5.1. Nh c l i khái ni m câu l nh v ắ ạ ệ ệ à kh i l nh ố ệ 14 5.2. Toán t if ử 14 5.3. else if 14 5.4. Toán t switch ử 14 5.5. Toán t goto v nhãn ử à 14 5.6. Toán t for ử 14 5.6. Toán t while ử 14 5.7. do while 14 5.8. L nh break v l nh continue ệ à ệ 14 Ch ng 6. H m v c u trúc ch ng ươ à à ấ ươ trình 16 6.1. Khai báo v nh ngh a h m à đị ĩ à 16 6.2. Các h m void à 16 6.3. L i g i h m ờ ọ à 17 6.4. S d ng h m assert() ki m tra ử ụ à để ể i u ki n tr c đ ề ệ ướ 17 6.5. Các i s m c nh đố ố ặ đị 17 6.6. Truy n tham s cho h m ề ố à 17 6.7. H m ch ng(Overloaded function) à ồ 19 6.8. Các m u (template) ẫ 19 6.9. H m v i các tham s l m ng à ớ ố à ả . .19 Ch ng 7. Con tr , c p phát đ ng ươ ỏ ấ ộ v h m à à 21 7.1. Con tr v a ch ỏ à đị ỉ 21 7.2. Con tr v m ng m t chi u ỏ à ả ộ ề 22 7.3. Con tr t i h m ỏ ớ à 22 7.4. Kh n ng quy c a h m ả ă đệ ủ à 23 7.5. H m main có i (tham kh o t i à đố ả à li u [2], trang 198)ệ 23 Ch ng 8. C u trúc ươ ấ 24 8.1. Ki u c u trúc ể ấ 24 8.2. Truy nh p n th nh ph n c u ậ đế à ầ ấ trúc 24 8.3. Phép gán c u trúc ấ 24 8.4. C u trúc trong C++ ấ 24 8.5. Th nh ph n ki u fields à ầ ể 25 8.6. Union 25 Ch ng 9. Thao tác trên t p ươ ệ 26 Ch ng 10. Qu n lý m n hình v n ươ ả à ă b n ả 29 10.1. Ch n ki u m n hình v n b n ọ ể à ă ả 29 10.3. S khác bi t gi a các h m nh p ự ệ ữ à ậ xu t d li u ấ ữ ệ 29 10.4. M t s h m thao tác m n hình ộ ố à à khác 29 10.5. Ví d ng d ng: T o th c n ụ ứ ụ ạ ự đơ trên c a s ử ổ 30 Ch ng 11. h a ươ Đồ ọ 32 11.1. Khái ni m v h a ệ ề đồ ọ 32 11.2. phân gi i m n hình h a Độ ả à đồ ọ 32 11.3. V hình trong m n hình h a ẽ à đồ ọ 33 11.4. t m u n n, m u v , m u tô Đặ à ề à ẽ à 33 11.5. V m t s ng v hình c ẽ ộ ố đườ à ơ b n ả 33 11.6. C a s (viewport) ử ổ 34 11.7. X lý v n b n trên m n hình ử ă ả à đồ h a ọ 36 11.8. T o hình nh chuy n ng ạ ả ể độ 38 Ch ng 12. m thanh, âm nh c ươ Â ạ 40 Ch ng 13. Tính đóng gói, th a k ươ ừ ế v đa hìnhà 41 13.1. M u ở đầ 41 Câu h i v b i t p ôn t p chu n b ỏ à à ậ ậ ẩ ị cho thi h t mônế 44 Ph l c. Các ch ng trình m uụ ụ ươ ẫ 50 01. Tìm c s chung l n nh t c a 2 s ướ ố ớ ấ ủ ố nguyên 53 02. Chuy n i m t s th p phân sang ể đổ ộ ố ậ d ng nh phânạ ị 53 03. Chuy n i m t s th p phân sang sể đổ ộ ố ậ ố c s b t kơ ố ấ ỳ 53 04. Chuy n i m t s th p phân sang sể đổ ộ ố ậ ố c s 11ơ ố 53 05. Nh p v s p x p danh sách các s ậ à ắ ế ố th cự 54 06. o l i m t chu i ký t Đả ạ ộ ỗ ự 54 07. M t s ch ong trình quy: tính ộ ố ư đệ giai th a c a m t s nguyên không âm, ừ ủ ộ ố tính s Fibonacci, tìm c s chung l n ố ướ ố ớ nh t c a hai s nguyên không âm, b i ấ ủ ố à toán tháp H n i. à ộ 54 08. S ng Erastothen li t kê các s nguyênà ệ ố t không v t quá m t s t nhiên n choố ượ ộ ố ự tr c.ướ 55 09. Tìm s l n nh t trong dãy các s th cố ớ ấ ố ự 55 10. Tìm xem m t s th c x có xu t hi n ộ ố ự ấ ệ trong dãy s th c hay không ố ự 55 11. Tính giá tr a th c b c n theo ị đ ứ ậ ph ng pháp Horner ươ 56 12. Tìm t h p c a các lo i gi y b c ổ ợ ủ ạ ấ ạ . .56 13. Lo i tr các d u cách th a trong ạ ừ ấ ừ chu i tên (ch l i m t d u cách) ỗ ỉ để ạ ộ ấ 56 14. m s ch trong chu i ký t Đế ố ữ ỗ ự 57 15. Tính s ố π theo công th c: ứ 57 16. Nh p v in danh sách sinh viên (phiênậ à b n 1)ả 58 17. Nh p v in danh sách sinh viên (phiênậ à b n 2)ả 58 18. Nh p, s p x p v in danh sách sinh ậ ắ ế à viên (phiên b n 3)ả 59 19. Nh p, s p x p, tìm ki m v in danh ậ ắ ế ế à sách sinh viên (phiên b n 4)ả 59 20. Nh p, s p x p, tìm ki m v in danh ậ ắ ế ế à sách sinh viên (phiên b n 5)ả 60 21. Nh p, s p x p, tìm ki m v in danh ậ ắ ế ế à sách sinh viên (phiên b n 6)ả 61 22. Danh sách c i t b ng danh sách à đặ ằ liên k t (phiên b n 1)ế ả 62 23. Danh sách c i t b ng danh sách à đặ ằ liên k t (phiên b n 2)ế ả 63 24. Danh sách c i t trên t p (phiên b nà đặ ệ ả 1) 65 25. Danh sách c i t trên t p (phiên b nà đặ ệ ả 2) 66 2 Ch ng 1. T ng quan v C v C++ ươ ổ ề à 1.1. Ngôn ng l p trình v thu t toánữ ậ à ậ 1.1.1. Ngôn ng l p trìnhữ ậ Trong ph n “Nh p môn tin h c” chúng ta ãầ ậ ọ đ tìm hi u Winword v Excel, l các ph n m m ngể à à ầ ề ứ d ng trong công vi c so n th o v n b n v l m cácụ ệ ạ ả ă ả à à b ng tính toán c. c i m c a các ph n m mả đượ Đặ đ ể ủ ầ ề ng d ng l luôn nh rõ ph m vi ng d ng v cungứ ụ à đị ạ ứ ụ à c p c ng nhi u c ng t t các công c ho n th nhấ à ề à ố ụ để à à ch c n ng ó. Tuy nhiên ng i s d ng c ng h uứ ă đ ườ ử ụ ũ ầ nh b bó bu c trong ph m vi quy nh c a ch ngư ị ộ ạ đị ủ ươ trình. Ch ng h n ta khó có th dùng Excel gi iẳ ạ ể để ả m t b i toán g m nhi u b c tính toán nh tínhộ à ồ ề ướ ư nghi m g n úng m t ph ng trình vi phân hay gi iệ ầ đ ộ ươ ả m t h ph ng trình tuy n tính. M c d u các ph nộ ệ ươ ế ặ ầ ầ m m ng d ng ng y c ng nhi u v thu c cácề ứ ụ à à ề à ộ đủ l nh v c nh xây d ng, thi t k , h i h a, âmĩ ự ư ự ế ế ộ ọ nh c nh ng không th bao trùm h t các v n n yạ ư ể ế ấ đề ẩ sinh trong th c t vô cùng phong phú. Rõ r ng khôngự ế à ch nh ng chuyên gia tin h c m ngay c nh ngỉ ữ ọ à ả ữ ng i s d ng, nh t l các cán b k thu t, r t c nườ ử ụ ấ à ộ ỹ ậ ấ ầ n nh ng ph n m m uy n chuy n v m m d ođế ữ ầ ề ể ể à ề ẻ h n, có kh n ng th c hi n c nhi u h n các chơ ả ă ự ệ đượ ề ơ ỉ th c a ng i s d ng giúp h gi i quy t nh ngị ủ ườ ử ụ để ọ ả ế ữ công vi c a d ng b ng máy tính. Ph n m m cóệ đ ạ ằ ầ ề tính ch t nh th c g i l ngôn ng l p trình.ấ ư ế đượ ọ à ữ ậ Chính xác h n ơ ngôn ng l p trình l m t ngônữ ậ à ộ ng nhân t o bao g m m t t p các t v ng ữ ạ ồ ộ ậ ừ ự (m taà s g i l t khóa phân bi t v i ngôn ng thôngẽ ọ à ừ để ệ ớ ữ th ng)ườ v m t t p các quy t c à ộ ậ ắ (g i l Syntax - cúọ à pháp) m ta có th s d ng biên so n các l nhà ể ử ụ để ạ ệ cho máy tính th c hi n. ự ệ Nh ta ã bi t, các ô nh c a máy tính ch có thư đ ế ớ ủ ỉ ể bi u di n các s 0 v 1. Vì v y ngôn ng m máyể ễ ố à ậ ữ à có th hi u tr c ti p l ngôn ng trong ó các l nhể ể ự ế à ữ đ ệ l các dãy s nh phân v do ó c g i l ngônà ố ị à đ đượ ọ à ng máy (machine language) . M i ngôn ng khácữ ọ ữ u ph i thông d ch ho c biên d ch sang ngôn ngđề ả ị ặ ị ữ máy (Interpreter - thông d ch v cho ch y t ng l nh.ị à ạ ừ ệ Compiler - biên d ch th nh 1 ch ng trình ngôn ngị à ươ ữ máy ho n ch nh, do v y ch y nhanh h n thông d ch).à ỉ ậ ạ ơ ị Có nhi u lo i ngôn ng l p trình, v h u h t cácề ạ ữ ậ à ầ ế nh khoa h c v máy tính u cho r ng không cóà ọ ề đề ằ m t ngôn ng c nh t n o có kh n ng ph cộ ữ độ ấ à đủ ả ă ụ v cho các yêu c u c a t t c các l p trình viên.ụ ầ ủ ấ ả ậ Theo truy n th ng, các ngôn ng l p trình cề ố ữ ậ đượ phân l m 2 lo i: các ngôn ng b c th p v ngôn ngà ạ ữ ậ ấ à ữ b c cao.ậ Ngôn ng l p trình b c th p (low-levelữ ậ ậ ấ programming language): Ngôn ng máy, h p ng (asembler: ch ng trìnhữ ợ ữ ươ d ch h p ng , assembly language: ngôn ng h pị ợ ữ ữ ợ ng ). H p ng l ngôn ng m t b c t ngôn ngữ ợ ữ à ữ ộ ậ ừ ữ máy. Nó ch khác v i ngôn ng máy trong vi c sỉ ớ ữ ệ ử d ng các mã bi u th các ch c n ng chính m máyụ ể ị ứ ă à th c hi n.ự ệ L p trình b ng h p ng r t phi n toái: có n v i táậ ằ ợ ữ ấ ề đế à dòng mã c n thi t ch th c hi n phép c ng 2 conầ ế ỉ để ự ệ ộ s . Các ch ng trình h p ng r t khó vi t; chúngố ươ ợ ữ ấ ế không có c u trúc ho c modun hóa rõ r ng. Ch ngấ ặ à ươ trình h p ng c ng không d chuy n t lo i máyợ ữ ũ ễ ể ừ ạ tính n y sang lo i máy tính khác. Các ch ng trìnhà ạ ươ n y c vi t theo các t p l nh c thù c a lo i bà đượ ế ậ ệ đặ ủ ạ ộ vi x lý nh t nh. L p trình b ng h p ng thì mãử ấ đị ậ ằ ợ ữ g n v ch y nhanh. Do ó h u h t các ch ng trìnhọ à ạ đ ầ ế ươ i u h nh h th ng u c vi t b ng h p ng .đ ề à ệ ố đề đượ ế ằ ợ ữ Tuy nhiên do s ph c t p c a công vi c l p trìnhự ứ ạ ủ ệ ậ nên các hãng s n xu t ph n m m chuyên d ng thíchả ấ ầ ề ụ vi t ch ng trình b ng ngôn ng C (do Bellế ươ ằ ữ Laboratories c a hãng AT&T xây d ng) l lo i ngônủ ự à ạ ng k t h p c c u trúc c a ngôn ng b c caoữ ế ợ đượ ấ ủ ữ ậ hi n i v i t c v tính hi u qu c a h p ngệ đạ ớ ố độ à ệ ả ủ ợ ữ b ng cách cho phép nhúng các l nh h p ng v oằ ệ ợ ữ à ch ng trình.ươ Ngôn ng l p trình b c caoữ ậ ậ : Các ngôn ng l p trình b c cao nh Basic, Pascal, C,ữ ậ ậ ư C++ cho phép các l p trình viên có th di n tậ ể ễ đạ ch ng trình b ng các t khóa v các câu l nh g nươ ằ ừ à ệ ầ gi ng v i ngôn ng t nhiên. Các ngôn ng n yố ớ ữ ự ữ à d c g i l “b c cao” vì chúng gi i phóng các l pượ ọ à ậ ả ậ trình viên kh i nh ng quan tâm v t ng l nh sỏ ữ ề ừ ệ ẽ c máy tính ti n h nh nh th n o, b ph nđượ ế à ư ế à ộ ậ thông d ch ho c biên d ch c a ch ng trình s gi iị ặ ị ủ ươ ẽ ả quy t các chi ti t n y khi mã ngu n c bi n iế ế à ồ đượ ế đổ th nh ngôn ng máy. M t câu l nh trong ngôn ngà ữ ộ ệ ữ b c cao t ng ng v i m t s l nh ngôn ng máy,ậ ươ ứ ớ ộ ố ệ ữ cho nên b n có th th o ch ng theo ngôn ng b cạ ể ả ươ ữ ậ cao nhanh h n so v i b c th p. Tuy nhiên b n c ngơ ớ ậ ấ ạ ũ ph i tr giá cho vi c n y. Ch ng trình ngôn ngả ả ệ à ươ ữ máy c d ch ra t mã ngu n c vi t b ng ngônđượ ị ừ ồ đượ ế ằ ng b c cao ch a r t nhi u chi ti t th a, do ó t cữ ậ ứ ấ ề ế ừ đ ố ch y s ch m h n nhi u so v i ch ng trìnhđộ ạ ẽ ậ ơ ề ớ ươ vi t b ng h p ng . Thông th ng m t trình biênế ằ ợ ữ ườ ộ d ch c tr ng th ng sinh ra s l nh mã máy g p 2ị đặ ư ườ ố ệ ấ l n hay nhi u h n s l nh c n thi t n u vi t b ngầ ề ơ ố ệ ầ ế ế ế ằ mã máy. M t cách phân lo i khác c a các ngôn ng l pộ ạ ủ ữ ậ trình: Ngôn ng th t cữ ủ ụ (Procedural Language) v à ngôn ng khai báoữ (Declarative Language) Ngôn ng th t c: L p trình viên ph i xác nh m tữ ủ ụ ậ ả đị ộ th t c m máy tính s tuân theo ho n th nhủ ụ à ẽ để à à m t công vi c nh tr c. Thí d : Basic, C,ộ ệ đị ướ ụ Fortran, Ngôn ng khai báo: Ngôn ng s nh ngh a m t lo tữ ữ ẽ đị ĩ ộ ạ các y u t v các quan h , ng th i cho phép b nế ố à ệ đồ ờ ạ có th ti n h nh x p h ng i v i nh ng k t quể ế à ế à đố ớ ữ ế ả xác nh. Thí d : Prolog, SQL (Structured Queryđị ụ Language) i u then ch t trong vi c l p trình chuyên d ng lĐ ề ố ệ ậ ụ à môdun hóa ngôn ng - ó l s phát tri n sao choữ đ à ự ể nhi m v l p trình có th phân ph i c cho cácệ ụ ậ ể ố đượ th nh viên c a m t nhóm l p trình, v k t qu tà ủ ộ ậ à ế ả đạ c l các b ph n khác nhau s ho t ng phùđượ à ộ ậ ẽ ạ độ h p v i nhau khi nhi m v c a t ng ng i ho nợ ớ ệ ụ ủ ừ ườ à th nh. Ngôn ng l p trình môdun, nh Module-2à ữ ậ ư ho c ngôn ng h ng i t ng nh C++, s choặ ữ ướ đố ượ ư ẽ phép t ng l p trình viên có th t p trung v o vi cừ ậ ể ậ à ệ l p mã, biên d ch v g r i các module ch ng trìnhậ ị à ỡ ố ươ riêng bi t, ng th i có th cho ch y (ki m tra th )ệ đồ ờ ể ạ ể ử riêng t ng module c a mình. Khi t ng module riêngừ ủ ừ ã ch y t t chúng s c liên k t v i nhau mđ ạ ố ẽ đượ ế ớ à không gây tr c tr c n o.ụ ặ à 1.1.2. Thu t toán (Algorithm)ậ Thu t ng Algorithm c d ch ra ti ng Vi t l ậ ữ đượ ị ế ệ à thu t toán, thu t gi i ho c gi i thu t. ây chúng ậ ậ ả ặ ả ậ ở đ tôi dùng t thu t toán l cách g i quen thu c v i ừ ậ à ọ ộ ớ nhi u ng i.ề ườ Thu t toán l m tậ à ộ dãy h u h nữ ạ các b c, m i ướ ỗ b c mô t chính xác các phép toán ho c h nh ướ ả ặ à ng c n th c hi n, độ ầ ự ệ gi i quy t m t v n để ả ế ộ ấ đề. hi u y ý ngh a c a khái ni m thu t toán,Để ể đầ đủ ĩ ủ ệ ậ chúng ta nêu ra 6 c tr ng sau ây c a thu t toán:đặ ư đ ủ ậ 1. Input M i thu t toán th ng có m t s ỗ ậ ườ ộ ố d li u v o.ữ ệ à 2. Ouput M i thu t toán th ng có m t s ỗ ậ ườ ộ ố d li u ra.ữ ệ 3. Tính xác nh đị (Definiteness) M i b c c ỗ ướ đượ mô t chính xác, ch có m t cách hi u duy nh t ả ỉ ộ ể ấ v n gi n có th th c hi n c.à đủ đơ ả để ể ự ệ đượ 4. Tính d ngừ (Finiteness) Thu t toán ph i d ng ậ ả ừ sau m t s h u h n b c th c hi n ộ ố ữ ạ ướ ự ệ 5. Tính hi u quệ ả (Effectiveness) Các phép toán trong các b c ph i n gi n có th th cướ ả đủ đơ ả để ể ự hi n c.ệ đượ 6. Tính t ng quátổ (Generalness) Thu t toán ph i ậ ả có tính t ng quát, có th áp d ng cho m t l p ổ ể ụ ộ ớ i t ng. đố ượ Ví d :ụ Thu t toán Euclid: Tìm c s chung l n nh tậ ướ ố ớ ấ c a hai s t nhiên m,n.ủ ố ự Input: m,n nguyên d ngươ Output: g l c s chung l n nh t c a mà ướ ố ớ ấ ủ v nà Ph ng pháp:ươ 1. r= m mod n 2. N u r=0 thì g:=nế Ng c l i (r>0) m:=n; n:=r v quay l i b cượ ạ à ạ ướ 1. 1.1.3. S ra i v phát tri n c a ngôn ng Cự đơ à ể ủ ữ N m 1970 Ken Thompson sáng t o ra ngôn ng Bă ạ ữ dùng trong môi tr ng h i u h nh UNIX trên máyườ ệ đ ề à i n toán DEC PD-7. B l ký t u c a c m chđ ệ à ự đầ ủ ụ ữ vi t t t BCPL (Basic Combined Programmingế ắ Language) do Martin Richards vi t. N m 1972ế ă Dennis Ritchie c a hãng Bell Laboratories (v Kenủ à Thompson) sáng t o nên ngôn ng C nh m t ngạ ữ ằ ă hi u qu cho ngôn ng B. Lúc u ngôn ng Cệ ả ữ đầ ữ không c m i ng i a dùng. Nh ng sau khiđượ ọ ườ ư ư D.Ritchie cho xu t b n cu n "The C Programmingấ ả ố Language" thì ngôn ng C c chú ý v cữ đượ à đượ s d ng r ng rãi. Ng i ta ã dùng C vi t hử ụ ộ ườ đ để ế ệ i u h nh a nhi m UNIX, O/S 2 v ngôn ngđ ề à đ ệ à ữ Dbase. C ã c c i ti n qua nhi u phiên b n:đ đượ ả ế ề ả trình biên d ch Turbo C t phiên b n 1 n phiênị ừ ả đế b n 5, Microsoft C t phiên b n 1 n phiên b nả ừ ả đế ả 6. Hi n nay, C l i c phát tri n th nh C++ệ ạ đượ ể để à v i 3 trình biên d ch: Borland C++ (dùng trong DOSớ ị v trong Windows), Visual C++ (dùng trong DOS à trong Windows) v Turbo C++ (dùng trong DOS).à Có th nói r ng hi n nay h u h t các ph n m mể ằ ệ ầ ế ầ ề ng d ng u c vi t tr c ti p ho c gián ti pứ ụ đề đượ ế ự ế ặ ế b ng C ho c C++ằ ặ Trong t i li u n y chúng tôi s gi i thi u C v m tà ệ à ẽ ớ ệ à ộ s l nh c a C++. ố ệ ủ 1.2. Các ph n t c b n trong ngôn ng Cầ ử ơ ả ữ 1.2.1. B ký t (character set)ộ ự 1.2.2. Các t khóa (key words, reserved words)ừ Các t khóa thông d ng trong Cừ ụ auto default float long static break do for register struct base double goto return switch char else if short typedef continue extern int sizeof union 1.2.3. Tên v cách t tên (identifier)à đặ i v i C, m i tên c n ph i khai báo tr c khi sĐố ớ ọ ầ ả ướ ử d ng. Tên ta dãy các ký t li n nhau, b t u b ngụ ự ề ắ đầ ằ ký t ho c d u g ch d i, ti p theo l các ký t , cácự ặ ấ ạ ướ ế à ự s ho c d u g ch d i. ố ặ ấ ạ ướ Chú ý: Tên không ch a d u cách. C phân bi t chứ ấ ệ ữ hoa v ch th ng. à ữ ườ 1.2.4. L i gi i thích (comment)ờ ả L i gi i thích t m t vi trí n cu i dòng: //ờ ả ừ ộ đế ố L i gi i thích trên m t ho c nhi u dòng: /* */ờ ả ộ ặ ề 1.2.5. M t v i ch ng trình C n gi nộ à ươ đơ ả Chương trình C đơn giản nhất chạy không báo lỗi: Không làm gì cả void main() { } Hiện câu chào //002CHAO1.cpp Hien cau chao tren man hinh #include <stdio.h> void main() {printf("\nTurbo C xin chao ban"); } Xóa màn hình rồi hiện câu chào #include <stdio.h> #include <conio.h> void main() {clrscr(); printf("Turbo C xin chao ban!"); getch(); } 1.3. C u trúc ch ng trình trong Cấ ươ 1.3.1. Các th nh ph n c a m t ch ng trình C à ầ ủ ộ ươ Ph n quan tr ng nh t không th thi u c a m tầ ọ ấ ể ế ủ ộ ch ng trình C l h m main(). Thông th ng h mươ à à ườ à main() có d ngạ void main() { //các l nh ệ } ho cặ int main() L p trình C v C++ - Ch ng 1. T ng quan v C v C++ ậ à ươ ổ ề à 2 { //các l nh ệ return(0); } Thông th ng m t ch ng trình C y có cácườ ộ ươ đầ đủ ph n sau:ầ • Ch d n ti n x lý (preprocessor directive)ỉ ẫ ề ử - Các bao h m (#include)à - Các v l nh (#define)ĩ ệ • Khai báo to n c cà ụ - Khai báo các nguyên m u cho h m (functionẫ à prototype) - Khai báo các bi n to n c cế à ụ • H m main()à • nh ngh a chi ti t các h m do ng i s d ngĐị ĩ ế à ườ ử ụ v a khai báo trên.ừ Ph n " nh ngh a chi ti t các h m " có th t ầ Đị ĩ ế à ể đặ ở ngay sau ph n khai báo to n c c.ầ à ụ M t s h m c b n v các t p bao h m t ng ng:ộ ố à ơ ả à ệ à ươ ứ T p bao h mệ à Các h m c nh ngh a trong t pà đượ đị ĩ ệ stdio.h printf,scanf,gets conio.h getch,clrscr math.h sqrt,abs,fabs stdlib.h abs,random,randomize,calloc,malloc,atof,atoi ctype.h toupper,islower,isdigit string.h strcmp,strcmpi,strcpy,strcat,strlen,strlwr,strupr iostream.h cin,cout iomanip.h setw,setprecision, (cout<<oct<<a<<hex<<b;) 1.3.2. So n th o v ch y m t ch ng trình C ạ ả à ạ ộ ươ a. So n th o ch ng trìnhạ ả ươ M i câu l nh c a C có th vi t trên m t dòng hayỗ ệ ủ ể ế ộ nhi u dòng nh ng ph i ề ư ả k t thúc b ng d u ;ế ằ ấ Tuy nhiên khi nh p ậ m t chu i ký tộ ỗ ự m mu n à ố chuy nể sang dòng khác ta ph i ả thêm d u \ tr c khiấ ướ xu ng dòngố . b. D ch v ch y ch ng trìnhị à ạ ươ Khi nh n F9 thì u tiên ch ng trình c d chấ đầ ươ đượ ị sang t p có uôi l *.obj, sau ó liên k t các t p vệ đ à đ ế ệ à d ch sang t p có uôi *.exe có th ch y c trongị ệ đ ể ạ đượ môi tr ng DOS.ườ Khi d ch ch ng trình có th xu t hi n 3 lo i l i sauị ươ ể ấ ệ ạ ỗ ây:đ L i c thông báo b i t khóa error (l i cúỗ đượ ở ừ ỗ pháp): L i n y th ng x y ra do khi ta so n th o ch ngỗ à ườ ả ạ ả ươ trình không tuân theo úng nh ng quy t c c a C, thíđ ữ ắ ủ d int thì ta gõ th nh Int; hay ta gõ thi u ngo c n,ụ à ế ặ đơ ngo c kép ch ng h n ặ ẳ ạ Sau ây l m t s thông báo l i th ng g p lo iđ à ộ ố ỗ ườ ặ ạ n y.à Unknown preprocessor directive Ch th ti n x lý không úng. Trong tr ng h p n yỉ ị ề ử đ ườ ợ à b n ph i xem l i các l nh #include xem b n có vi tạ ả ạ ệ ạ ế sai không. Declaration terminated incorrectly Khai báo k t thúc không úng. Ví d b n ánh d u ế đ ụ ạ đ ấ ; sau h m main nh sau:à ư void main(); ch ng h n. Nên l u ý l sau tên h m không cẳ ạ ư à à đượ ánh d u ; nh trên ây. Sau tên h m ph i l d uđ ấ ư đ à ả à ấ { v k t thúc h m l d u à ế à à ấ }. Unexpected } Th a d u ừ ấ }. M i l n ánh d u { thì b n nên ánhỗ ầ đ ấ ạ đ d u } r i sau ó gõ các l nh v o o n gi a, nhấ ồ đ ệ à đ ạ ữ ư v y tránh c tình tr ng th a thi u d u ậ đượ ạ ừ ế ấ { ho c ặ }. Compound statement missing } Thi u d u ế ấ }. Declaration syntax error Khai báo sai. Ví d b n vi tụ ạ ế int a,b printf("Chao"); thì máy báo l i dòng th 2. S d nh v y l vì khiỗ ở ứ ở ĩ ư ậ à c qua dòng th nh t không có d u ; máy cho r ngđọ ứ ấ ấ ằ l nh ch a k t thúc v còn chuy n ti p sang dòng thệ ư ế à ể ế ứ 2. Tuy nhiên sang dòng th 2 thì máy l i th y l nhứ ạ ấ ệ không phù h p nên báo l i dòng n y. Cách vi tợ ỗ ở à ế trên ây t ng ng v i cách vi t: đ ươ đươ ớ ế int a,b printf("Chao"); V máy th y r ng ây l m t l nh không úng. Cònà ấ ằ đ à ộ ệ đ n u ta s l i các l nh trên l ế ử ạ ệ à int a,b ;printf("Chao"); thì máy không còn báo l i n a vì nó chuy n xu ngỗ ữ ể ố dòng th 2 g p d u ứ ặ ấ ; v bi t l l nh à ế à ệ int a,b; c khai báo úng.đượ đ Undefined symbol B n ã s d ng m t bi n n o ó m ch a khai báo.ạ đ ử ụ ộ ế à đ à ư Ví d b n ch a khai báo bi n n nh ng l i s d ngụ ạ ư ế ư ạ ử ụ trong l nh:ệ printf("%d",n); ch ng h n thì máy báo l Undefined symbol 'n'ẳ ạ à Function should have a prototype Ví d trong l nh trên b n vi t sai lụ ệ ạ ế à prinf("%d",n); thì máy báo l Function 'prinf' should have aà prototype. Ngh a c a câu n y l : h m prinf c nĩ ủ à à à ầ ph i có nguyên m u.ả ẫ L i c thông báo b i t khóa Warning (l iỗ đượ ở ừ ỗ c nh báo)ả : L i n y th ng x y ra do khi ta khai báo bi n nh ngỗ à ườ ả ế ư không s d ng t i. ử ụ ớ Ví dụ is assigned a value that is never used Khai báo v ã gán giá tr cho bi n nh ng không sà đ ị ế ư ử d ng.ụ Ví d b n vi t các l nh ụ ạ ế ệ int n; n=10; L p trình C v C++ - Ch ng 1. T ng quan v C v C++ ậ à ươ ổ ề à 3 nh ng trong các ph n ti p theo không s d ng n (ư ầ ế ử ụ để hi n ra m n hình ch ng h n, hay dùng tính giáệ à ẳ ạ để tr c a bi n khác ) thì máy báo l ị ủ ế à 'n' is assigned a value that is never used tuy nhiên ây ch l thông báo (warning). Khi b nđ ỉ à ạ nh n F9 d ch ch ng trình thì máy v n báo lấ để ị ươ ẫ à success Hai lo i l i trên ây c thông báo ngay khi d chạ ỗ đ đượ ị ch ng trình th nh file *.objươ à Lo i l i th 3 có th x y ra trong quá trình liênạ ỗ ứ ể ả k tế : L i n y th ng x y thí d khi có l i g i h mỗ à ườ ả ụ ờ ọ à nh ng h m ch m i có nguyên m u m ch a có khaiư à ỉ ớ ẫ à ư báo chi ti t.ế D ch v ch y ch ng trìnhị à ạ ươ : N u ch ng trình ch a vi t xong ta có th ế ươ ư ế ể nh n F9ấ d chđể ị v s a l i. Khi ch ng trình ã t ng ià ử ỗ ươ đ ươ đố ho n ch nh thì ta có th nh n à ỉ ể ấ Ctrl+F9 d ch vđể ị à ch yạ ch ng trình.ươ L p trình C v C++ - Ch ng 1. T ng quan v C v C++ ậ à ươ ổ ề à 4 Ch ng 2. H ng, bi n v m ng ươ ằ ế à ả 2.1. Các ki u d li u c s ể ữ ệ ơ ở C có m t s ki u d li u c s nh sau:ộ ố ể ữ ệ ơ ở ư Ki uể Mi n xác nhề đị char (signed char) -128 → 127 unsigned char 0 → 255 int ≈ -32 000 → 32 000 long ≈ -2 t ỷ → 2 t ỷ unsigned int ≈ 0 → 65 000 unsigned long ≈ 0 → 4 t ỷ float 3.4e-38 → 3.4e+38 double 1.7e-308 → 1.7e+308 long double 3.4e-4932 → 3.4e+4932 1. Ki u charể M t giá tr ki u char chi m m t byte v c bi uộ ị ể ế ộ à đượ ể di n m t ký t t ng ng trong b ng ASCII. Khácễ ộ ự ươ ứ ả v i Pascal, trong C giá tr c a bi n char có th cớ ị ủ ế ể đượ hi u l s . Thí d n u ta khai báo char ch; thì cóể à ố ụ ế hai cách gán ch=65 hay ch='A' cùng cho m t k tộ ế qu . Khi hi n th ch n u ta dùng khuôn d ng "%d"ả ể ị ế ạ thì c giá tr 65, còn dùng khuôn d ng "%c" thìđượ ị ạ c ký t A. B ng sau ây cho s khác bi t gi ađượ ự ả đ ự ệ ữ char v unsigned char.à Mã ASCII 0 1 . . . 127 Giá tr bi n ki u charị ế ể 0 1 . . . 127 Giá tr bi n ki u unsignedị ế ể char 0 1 . . . 127 N u ta khai báo m t bi n ch có ki u ký t b ngế ộ ế ể ự ằ l nhệ char ch; v sau ó gán ch=200 thì th c ch t ch ch nh nà đ ự ấ ỉ ậ giá tr -56, do ó phép th ch= = 200 s cho k tị đ ử ẽ ế qu sai. Nói chung, có th th y r ng n u ta dùngả ể ấ ằ ế l nh gán ch=n , trong ó 0ệ đ ≤n≤255, sau ó dùng l nhđ ệ printf(“%d”,ch) in giá tr c a ký t ch thì n uđể ị ủ ự ế n u n ế ≤ 127 ta s th y giá tr n trên m n hình, cònẽ ấ ị à n u 128 ế ≤ n ≤ 255 thì ta s th y giá tr -(255-m+1)ẽ ấ ị . Phân lo i ký t : ạ ự Các ký t có th phân l m 3 nhóm: 0-31,32-126, 127-ự ể à 254; trong ó các ký t t 0 n 32 l các ký tđ ự ừ đế à ự i u khi n, không th nhìn th y trên m n hình. đ ề ể ể ấ à Chú ý:Trong ch ng trình m t ký t ph i c baoươ ộ ự ả đượ trong d u nháy n. Thí d char ch='A'; ch='1' sấ đơ ụ ẽ cho ta ch=49, còn ch=1 l i cho ta ch bi u di n ký tạ ể ễ ự coa mã ASCII l 1. à 2. Ki u nguyênể V y có th xem ki u ký t c ng l m t d ng cậ ể ể ự ũ à ộ ạ đặ bi t c a ki u nguyên. Khi ta dùng khuôn d ng "%c"ệ ủ ể ạ hi n m t s nguyên n > 255 thì ký t n%256 sđể ệ ộ ố ự ẽ c hi n. Thí d n u n = 304 thì ký t ng v iđượ ệ ụ ế ự ứ ớ mã ASCII l 48 c in, t c l ký t '0'. à đượ ứ à ự 3. Ki u d u ph y ngể ấ ẩ độ float chi m 4 byte, double chi m 8 byte.ế ế 2.2. H ng ằ H ng l các i l ng (có th có tên ho c không) ằ à đạ ượ ể ặ m giá tr c a nó không th thay i trong quá trình à ị ủ ể đổ ch y ch ng trình.ạ ươ 1. H ng ký tằ ự Ví d ; 'a', '1', 'B', ụ 2. H ng s nguyên (h 10,8,16)ằ ố ệ H ng int trong h 8 (Octal) c b t u b ng s 0,ằ ệ đượ ắ đầ ằ ố còn h ng int trong h 16 (Hexadecimal)ằ ệ b t u b ng s 0 v ký t x (in th ng ho c inắ đầ ằ ố à ự ườ ặ hoa). Thí dụ 011 = 9 0x11 = 17 Chú ý. Khi hi n m t s nguyên d i d ng bát phânệ ộ ố ướ ạ b ng l nh printf() ta dùng khuôn d ng % v ch 0,ằ ệ ạ à ữ còn v i d ng th p l c phân thì dùng % v ký t xớ ạ ậ ụ à ự (in th ng ho c in hoa). Ví dườ ặ ụ printf("%o",9) ho c printf("%x",17) cho k t quặ ế ả trên m n hình l 11à à printf("%o",011) ho c printf("%x",0x11) cho k tặ ế qu trên m n hình l 11ả à à 3. float v doubleà (s th c v s th c có chính ố ự à ố ự độ xác g p ôi)ấ đ Ví d ; 12.5, 36.98, ụ 4. M t s h ng có s n: M_PI, M_E, ộ ố ằ ẵ (trong math.h) 5. Các h ng ký t c bi t ằ ự đặ ệ '\'', '\"', '\n', '\0', L u ý: h ng '0' có mã l 48, còn '\0' ng v i ký t \ư ằ à ứ ớ ự 0, có mã l 0.à 6. H ng xâu ký t ằ ự L m t dãy ký t b t k t trong 2 d u "", thí dà ộ ự ấ ỳ đặ ấ ụ "Ha noi". Chú ý: 'a' l h ng ký t g m m t byte, còn "a" là ằ ự ồ ộ à h ng xâu ký t g m 2 byte, 1 byte ch a ký t a, ằ ự ồ ứ ự byte cu i cùng ch a ký t '\0' l ký t báo k t thúc xâuố ứ ự à ự ế . Chú ý: Khi ta dùng h m strlen(st) xác nh d i c aà để đị độ à ủ chu i ký t thì ký t '\0' không c tính v o ỗ ự ự đượ à độ d i n y. Thí d 3 bi n st1,st2,st3 sau ây u cóà à ụ ế đ đề d i l 3độ à à char st1[]="123"; char st2[7]="123"; char *st="123"; Tuy nhiên th c ra trong b nh l u tr m t chu iự ộ ớ để ư ữ ộ ỗ d i 3 thì máy c n 4 v trí vì m t v trí l u trà ầ ị ộ ị để ư ữ ký t '\0'. Do ó khác v i thao tác v i m ng, khi thaoự đ ớ ớ ả tác v i chu i ta không nên nh p s li u cho v tríớ ỗ ậ ố ệ ị cu i cùng. Thí d n u khai báo char st[10] thì taố ụ ế không nên nh p s li u cho v trí 9. i u n y có thậ ố ệ ị Đ ề à ể th y c qua ví d sau:ấ đượ ụ Gi s ta khai báo:ả ử char st[5]="123"; thì khi ó chu i có d i 3, 3 v trí ch a s li u lđ ỗ độ à ị ứ ố ệ à st[0]=='1', st[1]=='2', st[2]=='3'; v trí st[3]=='\0'. Cònị n u ta khai báoế char st[3]="012"; Thì tuy máy không báo l i nh ng th c ra có m t sỗ ư ự ộ ố i u không h p lý. N u ta dùng h m strlen(st) đ ề ợ ế à để ki m tra d i thì th y r ng d i l 4 (m cể độ à ấ ằ độ à à ặ d uth c ra d i c a st l 3), v trí st[3] khôngầ ự độ à ủ à ị ph i l '\0' m l m t ký t n o ó, ký t v tríả à à à ộ ự à đ ự ở ị st[4] m i l '\0'. Do ó n u ta dùng l nhớ à đ ế ệ while(st[i]!='\0') putch(st[i]); ch ng h n thì sau khi máy in ra các ký t '0', '1', '2'ẳ ạ ự thì còn in ti p m t ký t n o ó n a r i m i d ng. ế ộ ự à đ ữ ồ ớ ừ 7. Tên h ng v cách gán giá tr cho h ngằ à ị ằ #define max 100 #define str "Ha Noi" const float a=10.123; const char str2[]="Hai Phong"; const char *str3="Tay Ho"; Không nên dùng const char str2[5]= "Hai Phong" ch ng h n, vì có th d i c a h ng v t quá ẳ ạ ể độ à ủ ằ ượ độ d i nh ngh a.à đị ĩ Chú ý: H ng có th l các bi n chi m d ng b nhằ ể à ế ế ụ ộ ớ thí d int m =10; nh ng c ng có th l nh ng giá trụ ư ũ ể à ữ ị t m th i, không c phân ph i b nh thí dạ ờ đượ ố ộ ớ ụ M_PI, M_E, printf("\n%s","Ha Noi"); 2.3. Ki u enumể Gi s ta ph i ti n h nh m t s công vi c l p l iả ử ả ế à ộ ố ệ ặ ạ theo các ng y trong tu n. Trong ch ng trình ta vi tà ầ ươ ế for(int i=2;i<=8;i++) [l nh]ệ Tuy nhiên theo cách n y thì các con s 2, 3, khôngà ố cho ta ý ngh a g i nh ó l các ng y trong tu n. Cĩ ợ ớ đ à à ầ cho ta ta nh ngh a bi n ki u li t kê ph c v chođị ĩ ế ể ệ ụ ụ m c ích n y. Ta có th l m nh sauụ đ à ể à ư enum ngay_tt {hai, ba, tu, nam, sau, bay, chunhat}; ngay_tt i; for(i=hai;i<=chunhat;i++) {các l nh}ệ Gi s các l nh l printf("%d ",i); thì ta có k tả ử ệ à ế qu l 0 1 2 3 4 5 6ả à Vì bi n enum th c ch t l bi n nguyên, do ó cácế ự ấ à ế đ dòng l nh trên có th vi t n gi n h n nh sau:ệ ể ế đơ ả ơ ư enum {hai, ba, tu, nam, sau, bay, chunhat}; int i; for(i=hai;i<=chunhat;i++) [l nh]ệ Ta có th kh i gán các giá tr cho bi n enum. Ví dể ở ị ế ụ n u ta vi t:ế ế enum {hai=2, ba, tu, nam, sau, bay, chunhat}; thì khi ó ta s có hai=2,ba=3, đ ẽ 2.4. Bi n ế M i bi n ph i c khai báo tr c khi s d ng.ọ ế ả đượ ướ ử ụ Vi c khai báo c th c hi n theo m u sau:ệ đượ ự ệ ẫ <Ki u bi n> <tên bi n 1>,<tên bi n 2>, ,<tên bi nể ế ế ế ế n>; Có th khai báo ngay khi s d ng, thí dể ử ụ ụ for(int i=0;i<n;i++) [các l nh]ệ 1. V trí c a các khai báoị ủ Trong C++ thì bi n có th khai báo t i v trí b t kế ể ạ ị ấ ỳ trong ch ng trình.ươ 2. Kh i u cho các bi nở đầ ế float a=10.123; char str2[]="Hai Phong"; char *str3="Tay Ho"; int x[] = {1,2,3}; float y[4] = {1.2, 3.2, 4.3, 6.5}; Nh ng ư không th vi tể ế : float *py = {1.2, 3.2, 4.3, 6.5};//Vi t nh th n y lế ư ế à à sai. Nh ng ư v i chu i thì l i cớ ỗ ạ đượ : char st1[]="123"; char st2[7]="123"; char *st="123"; 3. L y a ch c a bi nấ đị ỉ ủ ế M i bi n c c p phát m t vùng nh g m m t sỗ ế đượ ấ ộ ớ ồ ộ ố byte liên ti p. a ch c a byte u tiên l a chế Đị ỉ ủ đầ à đị ỉ c a bi n. a ch c a bi n có th nh n c b ngủ ế Đị ỉ ủ ế ể ậ đượ ằ phép toán &<tên bi n>ế Chú ý: Ta ch có th l y a ch c a m t bi n. Thí d cácỉ ể ấ đị ỉ ủ ộ ế ụ l nh sau ây l saiệ đ à int *p; const int m=10; pn=&m;//Dòng l nh n y saiệ à int k; p=&(k+1);//Dòng l nh n y saiệ à Ta ch có th gán m t con tr b ng a ch c a m tỉ ể ộ ỏ ằ đị ỉ ủ ộ bi n cùng ki u v i nó. Ví d phép gán sau l sai:ế ể ớ ụ à int *p; const int m=10; p=&m;//Dòng l nh n y saiệ à Ph i s a l i lả ử ạ à L p trình C v C++ - Ch ng 2.H ng, bi n v m ngậ à ươ ằ ế à ả 6 const int *p; const int m=10; p=&m; 4. Bi n a chế đị ỉ a ch c a m t bi n l s nguyên nh ng ta khôngĐị ỉ ủ ộ ế à ố ư th thao tác chúng nh các s nguyên thông th ng.ể ư ố ườ Thí d ta không th gánụ ể int m; float x; m=&x; a ch c a m t bi n ngo i l n ch v trí c aĐị ỉ ủ ộ ế à độ ớ ỉ ị ủ bi n trong b nh còn mang thông tin ó l a chế ộ ớ đ à đị ỉ c a bi n lo i gì. Ta bi t r ng a ch c a 2 bi nủ ế ạ ế ằ đị ỉ ủ ế nguyên liên ti p thì cách nhau 2 byte, 2 s th c liênế ố ự ti p cách nhau 4 byte, có th l u tr v th cế Để ể ư ữ à ự hi n các phép toán trên các giá tr a ch , C nhệ ị đị ỉ đị ngh a m t ki u bi n nguyên c bi t m giá tr c aĩ ộ ể ế đặ ệ à ị ủ chúng l a ch c a các bi n v g i bi n n y l conà đị ỉ ủ ế à ọ ế à à tr . Khi nh ngh a con tr ta ph i ch rõ ó l conỏ đị ĩ ỏ ả ỉ đ à tr c a bi n lo i gì. Thí d khai báo m t con trỏ ủ ế ạ ụ để ộ ỏ ki u nguyên ta vi tể ế int *p; V khi ó ta có th gán p = &x; trong ó x l bi nà đ ể đ à ế nguyên n o ó.à đ 4. L y giá tr c a m t bi n thông qua a chấ ị ủ ộ ế đị ỉ Gi s ta p l m t con tr . Khi ó *p s l giá trả ử à ộ ỏ đ ẽ à ị c ch a trong vùng b nh m p tr t i.đượ ứ ộ ớ à ỏ ớ Nh v y v i bi n x b t k thì ta có *&x chính lư ậ ớ ế ấ ỳ à giá tr x. ị 2.5. M ng v chu iả à ỗ Trong ph n trên ta hi u bi n l m t vùng b nhầ ể ế à ộ ộ ớ c t tên v có th l u tr m t ki u giá tr n ođượ đặ à ể ư ữ ộ ể ị à ó. bi u di n nhi u giá tr ta ph i dùng nhi uđ Để ể ễ ề ị ả ề bi n. Tuy nhiên nhi u khi s bi n l i ph thu c m tế ề ố ế ạ ụ ộ ộ tham s n o ó. Thí d s th nh ph n c a m tố à đ ụ ố à ầ ủ ộ vect ph thu c v o m t s n, còn s các ph n tơ ụ ộ à ộ ố ố ầ ử c a m t ma tr n l i ph thu c s h ng v s c t.ủ ộ ậ ạ ụ ộ ố à à ố ộ Trong nh ng tr ng h p n y ng i ta dùng m t ki uữ ườ ợ à ườ ộ ể d li u có c u trúc l m ng bi u di n s li u.ữ ệ ấ à ả để ể ễ ố ệ M ng l m t t p h p nhi u ph n t có cùng m tả à ộ ậ ợ ề ầ ử ộ ki u giá tr v có chung m t tên. V m t n o ó cóể ị à ộ ề ặ à đ th coi m ng c ng l bi n, nh ng l bi n có c uể ả ũ à ế ư à ế ấ trúc ph c t p h n.ứ ạ ơ nh ngh a m ngĐị ĩ ả Khai báo int a[10] s d nh 10 v trí liên ti p trongẽ à ị ế b nh , m i v trí g m 2 byte có th l u tr cộ ớ ỗ ị ồ ể ư ữ đượ m t s nguyên v các v trí n y t ng ng l a[0],ộ ố à ị à ươ ứ à a[1], , a[9] Khai báo int a[8][10] s d nh 80 v trí liên ti pẽ à ị ế trong b nh , m i v trí g m 2 byte có th l u trộ ớ ỗ ị ồ ể ư ữ c m t s nguyên v các v trí n y t ng ng lđượ ộ ố à ị à ươ ứ à a[0][0], a[0][1], , a[0][9], a[1][0], a[1][1], , a[1] [9], . . ., a[7][0], a[7][1], , a[7][9]. Chú ý: Khi ta khai báo m t m ng có kích c nhộ ả ỡ đị tr c, thí dướ ụ int a[10]; thì a l m t h ng a ch , do ó ta khôngà ộ ằ đị ỉ đ th gán a = < a ch >. Tuy nhiên n u ta nh ngh aể đị ỉ ế đị ĩ m t bi n con tr , thí d int *pn; thì ta có th dùngộ ế ỏ ụ ể phép gán cho pn. V i m t chu iớ ộ ỗ char *s="123"; ch ng h n, ta có s l a ch c aẳ ạ à đị ỉ ủ bi n u tiên c a chu i, t c l s[0], do ó *sế đầ ủ ỗ ứ à đ chính l giá tr c a s[0], còn *(s+1) l giá tr c aà ị ủ à ị ủ s[1], 2.6. nh ngh a ki u b ng typedef Đị ĩ ể ằ typedef int ng; typedef int matran[8][10]; ng x,y; matran a,b; Các bi n x,y có ki u nguyên v a,b có ki u l maế ể à ể à tr n c p 8 x 10 v i các ph n t nguyên. ậ ấ ớ ầ ử báo r ng m t identifier n o ó l ki u d li uĐể ằ ộ à đ à ể ữ ệ ch không ph i l bi n, ta ch vi t nh khai báoứ ả à ế ỉ ế ư identifier ó l bi n, sau ó thêm t khóa typedef đ à ế đ ừ ở phía tr c. Ví d l nh ướ ụ ệ float a[20][20]; khai báo m t bi n a có ki u l m ng th c haiộ ế ể à ả ự chi u c 20x20. Còn l nhề ỡ ệ typedef float a[20][20]; l i khai báo ki u d li u a l ki u m ng th c 2ạ ể ữ ệ à ể ả ự chi u có c 20x20. ề ỡ 2.7. Kh i l nh ố ệ Các kh i l nh l ng nhau, ph m vi ho t ng c a cácố ệ ồ ạ ạ độ ủ bi n:ế Kh i l nh l t p h p các l nh c bao trong haiố ệ à ậ ợ ệ đượ d u { }. Kh i l nh có th g m nhi u kh i l nhấ ố ệ ể ồ ề ố ệ khác. M t bi n c khai báo trong kh i l nh thìộ ế đượ ố ệ mi n tác d ng c a nó l kh i l nh trong cùng ch aề ụ ủ à ố ệ ứ khai báo c a bi n ó. N u có các bi n cùng tên thìủ ế đ ế ế bi n c khai báo sau cùng s l bi n tích c c,ế đượ ẽ à ế ự t c l th c s tham gia trong m i phép toán có tênứ à ự ự ọ bi n chung. ế 2.8. V i nét v h m v ch ng trình à ề à à ươ Khác v i Pascal, C không cho phép các h m l ngớ à ồ nhau. Ch ng trình có th có nhi u h m trong óươ ể ề à đ h m main() l th nh ph n b t bu c.à à à ầ ắ ộ 2.9. Bi n, m ng t ng ế ả ự độ 1. nh ngh aĐị ĩ Các bi n c khai nbáo bên trong thân h m (k cế đượ à ể ả h m main()) c g i l bi n t ng hay c c b .à đượ ọ à ế ự độ ụ ộ 2. Ph m vi ho t ng v th i gian t n t iạ ạ độ à ờ ồ ạ Bi n t ng ch t n t i trong kh i l nh m nó cế ự độ ỉ ồ ạ ố ệ à đượ nh ngh ađị ĩ Ví dụ void main() {auto int x; } Bi n t ng l ng m nh cho các bi n c c b , doế ự độ à ầ đị ế ụ ộ L p trình C v C++ - Ch ng 2.H ng, bi n v m ngậ à ươ ằ ế à ả 7 ó t khóa auto th ng c b qua. đ ừ ườ đượ ỏ Chú ý: Bi n t ng ch c khai báo trong cácế ự độ ỉ đượ h m. Sau ây l ví d có l nh khai báo sai:à đ à ụ ệ auto int i; //Dòng l nh n y saiệ à void main() {auto int x; } l sai.à 3.Kh i u cho bi n v m ng t ngở đầ ế à ả ự độ Bi n ngo i (to n c c) khi khai báo thì c tế à à ụ đượ ự ng gán b ng 0 ho c r ng. Nh ng v i bi n tđộ ằ ặ ỗ ư ớ ế ự ng khi khai báo xong m không gán giá tr kh iđộ à ị ở u ho c gán giá tr thì giá tr không xác nh, lđầ ặ ị ị đị à m t giá tr vô ngh a n o ó.ộ ị ĩ à đ Khác v i C, trong C++ có th kh i u cho m ngớ ể ở đầ ả ho c bi n, thí dặ ế ụ void main() {float a[4] = {2.3,1.5,2.6,3.8}; int b[][3] = {1,2,3,4,5,6}; int c[2][3] ={2,3,4,5,6,7}; } 2.10. Bi n, m ng ngo i ế ả à 1. nh ngh aĐị ĩ Các bi n c khai báo bên ngo i h m (k c h mế đượ à à ể ả à main()) c g i l bi n ngo i.đượ ọ à ế à 2. Ph m vi ho t ng v th i gian t n t iạ ạ độ à ờ ồ ạ Bi n ngo i t n t i t v trí c khai báo cho nế à ồ ạ ừ ị đượ đế h t ch ng trình.ế ươ Ví dụ: void v1(); void v2(); void main() {clrscr(); v1(); v2(); getch(); } int i; void v1() {i=10; printf("%d",i); } void v2() { printf("%d",i); } Ch ng trình trên cho k t qu lươ ế ả à 10 10 Còn n u ta thêm l nhế ệ printf("%d",i); trong ch ng trình main() thì máy s báo l i lươ ẽ ỗ à bi n i ch a c nh ngh a.ế ư đượ đị ĩ Chú ý: • N u trong m t h m n o ó ta khai báo m t bi nế ộ à à đ ộ ế cùng tên v i bi n ngo i thì bi n ngo i không cóớ ế à ế à tác d ng trong h m n y. Khi ta dùng n bi nụ à à đế ế cùng tên ó thì bi n luôn c hi u l bi n ađ ế đượ ể à ế đị ph ng.ươ Ví d sau minh h a cho i u n y:ụ ọ đ ề à void v1();void v2();void main() {clrscr(); v1(); v2(); getch(); }int i;void v1() {int i=10; printf("\n%d",i); }void v2() {printf("\n%d",i); } K t qu ch y ch ng trình lế ả ạ ươ à 10 0 • N u ch ng trình vi t trên nhi u t p v các t pế ươ ế ề ệ à ệ c d ch c l p, thì ph m vi s d ng c ađượ ị độ ậ ạ ử ụ ủ bi n, m ng ngo i có th m r ng t t p n yế ả à ể ở ộ ừ ệ à sang t p khác b ng t khóa extern (xem ch ngệ ằ ừ ươ 11) 3. Kh i u cho bi n v m ng ngo iở đầ ế à ả à Bi n ngo i (to n c c) khi khai báo thì c t ngế à à ụ đượ ự độ gán b ng 0 ho c r ng. Quy t c khai báo v kh i uằ ặ ỗ ắ à ở đầ c ng gi ng nh bi n t ng. Tuy nhiên v i bi n tũ ố ư ế ự độ ớ ế ự ng thì sau khi khai báo bi n có th nh n m t giáđộ ế ể ậ ộ tr vu v n o ó.ị ơ à đ 2.11. Toán t sizeof ử sizeof(Ki u d li u)ể ữ ệ sizeof( i t ng d li u)Đố ượ ữ ệ ng d ngứ ụ : int x[] = {1,2,3,4}; int n = sizeof(x)/sizeof(int);// Xác nh c c a m ng.đị ỡ ủ ả 2.12. Bi n t nh, m ng t nh ế ĩ ả ĩ ý ngh a c a bi n t nh có th th y rõ qua ví d sau:ĩ ủ ế ĩ ể ấ ụ void vv() {static int i=1; printf("%d ",i++); } void main() {clrscr(); for(int j=1;j<=3;j++) vv(); getch(); } K t qu ch y ch ng trình l :ế ả ạ ươ à 1 2 3 L p trình C v C++ - Ch ng 2.H ng, bi n v m ngậ à ươ ằ ế à ả 8 [...]... //Hoac printf("\n%s",(*pv).ten); getch(); } 8.3 Phép gán c u tr c Kh c với mảng, ta c thể gán 2 c u tr c cùng kiểu với nhau Thí dụ nếu v1 v2 là 2 biến c u tr c c ng kiểu, khi đó ta c thể gán v1=v2; C c ví dụ về c u tr c: Sẽ giới thiệu trong bài giảng 8.4 C u tr c trong C+ + Thành phần c a c u tr c có thể là c c hàm đư c gọi là c c phương th c C c thành phần c a c u tr c ngầm định là public(class... c a một hàm (t c là trong thân hàm) c thể c lời gọi đến chính nó Khả năng này đư c gọi là khả năng đệ quy c a hàm Ví dụ ta c thể Lập trình C C+ + - Chương 7.Con trỏ, c p phát động hàm 23 } v3; Chương 8 C u tr c 8.1 Kiểu c u tr c 1 Định nghĩa kiểu c u tr c Có 2 c ch định nghĩa kiểu c u tr c cách 1: struct {//Khai báo thành phần c a nó }; c ch 2: typedef struct . đư c đặt vào cuối chuỗi. Chuỗi đư c bổ sung ký tự kết th c ''. C c hàm printf, cout và puts c thể hiện đư c c c chuỗi c chứa dấu c ch 4.6. M t s h m x lý chu i ộ ố à ử ỗ strcmp(st1,st2)>0. trắng char *gets(char *s); int puts(const char *s); C c hàm scanf, cin chỉ nhập đư c chuỗi không c dấu c ch. Hàm gets nhập đư c chuỗi chứa dấu c ch: Nhận dãy ký tự từ stdin cho đến khi gặp. Danh sách c c iđố C c i c n c phân c ch nhau b i d u ph y.đố ầ đượ ở ấ ẩ i c th l h ng, bi n, h m hay l k t h p c aĐố ể à ằ ế à à ế ợ ủ chúng b ng c c phép toán. V y c c i chính l c c ậ đố

Ngày đăng: 14/06/2014, 22:32

TỪ KHÓA LIÊN QUAN

w