Tài liệu Giáo trình ngôn ngữ lập trình cc++ - ts. nguyễn ngọc cương (chủ biên)

  • Số trang: 197 |
  • Loại file: PDF |
  • Lượt xem: 215 |
  • Lượt tải: 0
nguyen-thanhbinh

Đã đăng 10809 tài liệu

Mô tả:

TS. Nguyễn Ngöc Cương (Chủ biên) ThS. Nguyễn Đình Nghïa - ThS. Đỗ Quốc Huy - CN. Trần Nghi Phú - KS. Phạm Thành Công NHμ XUÊT B¶N TH¤NG TIN Vμ TRUYÒN TH¤NG M· sè: GD 14 HM 11 LỜI NÓI ĐẦU Từ ngàn năm nay, con người liên lạc với nhau thông qua ngôn  ngữ,  tạo  ra  các  mẫu  từ  ngữ  và  âm  thanh.  Ngôn  ngữ  lập  trình  cũng  tương tự như vậy, đó là một tập từ ngữ và ký hiệu cho phép lập trình  viên hoặc người dùng có thể tương tác với máy tính. Việc hiểu biết  và nắm vững các ngôn ngữ lập trình là yêu cầu bắt buộc đối với các  lập trình viên. Mặc dù đã có hàng trăm ngôn ngữ lập trình được sinh  ra, song chỉ có một số ít là được sử dụng rộng rãi và được xem là một  chuẩn công nghiệp. Các ngôn ngữ này đều có thể được sử dụng trên  nhiều loại máy tính khác nhau. Hiện nay, ngôn ngữ lập trình C/C++  là ngôn ngữ bậc cao đang được sử dụng khá rộng rãi trong lập trình.   Nhằm  giúp  các  bạn  sinh  viên,  nghiên  cứu  sinh  và  các  lập  trình  viên    có  được  một  tài  liệu  chuẩn  về  ngôn  ngữ  lập  trình  C/C++,  Nhà  xuất  bản  Thông  tin  và  Truyền  thông  trân  trọng  giới  thiệu  cuốn  sách  “Giáo  trình  ngôn  ngữ  lập  trình  C/C++ʺ  do  TS.  Nguyễn  Ngọc  Cương  (Trưởng khoa Toán tin, Học viện An ninh Nhân dân) làm chủ biên.  Nội dung cuốn sách gồm 7 chương:  Chương 1: Giới thiệu C/C++  Chương 2: Sử dụng các phép toán của C/C++  Chương 3: Sử dụng các lệnh của C/C++  Chương 4: Mảng và con trỏ  Chương 5: Cấu trúc và vào/ra tệp  Chương 6: Kỹ thuật đồ họa trong C/C++  Chương 7: Giới thiệu lập trình hướng đối tượng  Hy vọng cuốn sách không chỉ dành riêng cho các Học viên Học  viện An ninh Nhân dân, Học viện Cảnh sát, còn là tài liệu tham khảo  bổ  ích  cho các  cán  bộ  giảng  dạy, sinh  viên  các  trường đại  học  cũng  như  các  kỹ  sư,  kỹ  thuật  viên  chuyên  ngành  Công  nghệ  Thông  tin,  Điện tử Viễn thông và Tự động hóa.  Nhà xuất bản xin trân trọng giới thiệu cùng bạn đọc và rất mong  nhận được ý kiến đóng góp của quý vị. Mọi ý kiến đóng góp xin gửi  về Nhà xuất bản Thông tin và Truyền thông ‐ 18 Nguyễn Du, Hà Nội  hoặc gửi trực tiếp cho tác giả theo địa chỉ: cuongnnhvan@yahoo.com.  Xin trân trọng cảm ơn./.  NXB THÔNG TIN VÀ TRUYỀN THÔNG    5 Ch−¬ng 1: Giíi thiÖu C/C++ Chương 1  GIỚI THIỆU C/C++ Ng«n ng÷ C/C++ lμ mét trong c¸c ng«n ng÷ lËp tr×nh ®−îc sö dông réng r·i nhÊt trªn thÕ giíi. §· cã rÊt nhiÒu c«ng ty tin häc x©y dùng ch−¬ng tr×nh dÞch cho ng«n ng÷ C/C++ mμ dÉn ®Çu lμ Borland vμ Microsoft. HiÖn nay ng«n ng÷ C/C++ ®· trë thμnh c«ng cô chuÈn, hiÖu qu¶ vμ th«ng dông cho c¸c lËp tr×nh viªn chuyªn nghiÖp. 1.1. LÞch sö C/C++ Nh÷ng n¨m cuèi cña thËp kû 60 ®Çu 1970, xuÊt hiÖn yªu cÇu cÇn cã ng«n ng÷ bËc cao ®Ó hç trî c¸c nhµ tin häc trong viÖc x©y dùng phÇn mÒm hÖ thèng, hÖ ®iÒu hµnh vµ do ®ã ®· ra ®êi ng«n ng÷ C t¹i phßng thÝ nghiÖm ®iÖn tho¹i Bell Labs (Mü) ®Ó viÕt hÖ ®iÒu hµnh Unix cho m¸y tÝnh mini PDP11 cña c«ng ty DEC (Mü) vµ trë nªn rÊt quen thuéc víi c¸c chuyªn gia tin häc. Vµo nh÷ng n¨m 1980, Bjourn Stroustrup, lµm viÖc t¹i C«ng ty §iÖn b¸o vµ §iÖn tho¹i (AT&T - American Telephone & Telegraph) ®· bæ sung c¸c ®Æc tÝnh míi “h−íng ®èi t−îng” cho ng«n ng÷ C. C¸c kh¸i niÖm vÒ lËp tr×nh h−íng ®èi t−îng ®· cã tr−íc ®ã trong c¸c ng«n ng÷ lËp tr×nh kh¸c nh− Smalltalk, nh−ng C++ lµ ng«n ng÷ lËp tr×nh h−íng ®èi t−îng m¹nh. 1.2. Ch−¬ng tr×nh m¸y tÝnh lμ g×? Ch−¬ng tr×nh m¸y tÝnh lµ d·y c¸c lÖnh cho m¸y tÝnh biÕt cÇn ph¶i thùc hiÖn. C/C++ lµ ng«n ng÷ lËp tr×nh m¸y tÝnh gióp chóng ta x©y dùng ch−¬ng tr×nh ®Ó m¸y tÝnh thùc hiÖn ®óng c¸c c«ng viÖc mµ ta yªu cÇu. 6 Gi¸o tr×nh Ng«n ng÷ lËp tr×nh C/C++ §Ó cung cÊp c¸c lÖnh cho m¸y tÝnh b»ng ng«n ng÷ lËp tr×nh C/C++ chóng ta cÇn cã ch−¬ng tr×nh so¹n th¶o (Editor) vµ ch−¬ng tr×nh biªn dÞch (C++ compiler). C¸c b−íc x©y dùng ch−¬ng tr×nh m¸y tÝnh b»ng C/C++ 1. X¸c ®Þnh vÊn ®Ò cÇn gi¶i quyÕt b»ng m¸y tÝnh 2. §Þnh nghÜa ®Çu ra ch−¬ng tr×nh 3. Chia nhá vÊn ®Ò thµnh c¸c b−íc logic 4. ViÕt ch−¬ng tr×nh 5. DÞch ch−¬ng tr×nh 6. KiÓm tra, thö nghiÖm ch−¬ng tr×nh C¸c lÖnh trong ch−¬ng tr×nh C/C++ ®−îc gäi lµ m· nguån. Sau khi nhËp m· nguån ta cã thÓ ghi lªn ®Üa tõ d−íi d¹ng tÖp tr−íc khi dÞch vµ ch¹y chóng. C¸c tªn tÖp m· nguån cã phÇn më réng lµ .C cho ng«n ng÷ C vµ .CPP cho ng«n ng÷ C++. VÝ dô: Tªn tÖp cña ch−¬ng tr×nh C cã thÓ lµ myprog.c cßn trong C++ cã thÓ lµ sales.cpp,... Sau khi nhËp m· ch−¬ng tr×nh ta ph¶i dÞch ch−¬ng tr×nh. NÕu cã th«ng b¸o lçi trªn mµn h×nh th× ph¶i trë l¹i tr×nh so¹n th¶o m· nguån ®Ó söa lçi. Tr−íc khi t×m hiÓu kü vÒ C/C++ ta h·y lµm quen víi tr×nh so¹n th¶o m· nguån vµ tr×nh biªn dÞch C++ cña Borland th«ng qua vÝ dô sau ®©y: VÝ dô: Ch−¬ng tr×nh sau ®−îc viÕt b»ng ng«n ng÷ C: #include main () { printf("Xin chao"); } VÝ dô trªn sÏ ®−a ra mµn h×nh dßng ch÷: Xin chao Ch−¬ng 1: Giíi thiÖu C/C++ 7 //Ten tep hello.cpp // Chuong trinh hien thi dong chu "Hello C++!" tren man hinh #include #include main() { cout << "Hello C++!\n"; getch(); return 0; } Sau khi nhËp xong m· ch−¬ng tr×nh, chóng ta nhÊn tæ hîp phÝm (Alt + R) ®Ó ch¹y thö ch−¬ng tr×nh. Trªn mµn h×nh sÏ xuÊt hiÖn dßng ch÷ Hello C++! vµ chê nhÊn phÝm bÊt kú ®Ó tho¸t khái ch−¬ng tr×nh. 1.3. CÊu tróc ch−¬ng tr×nh C/C++ §Ó thÊy râ ®−îc cÊu tróc ch−¬ng tr×nh cña C/C++ chóng ta sÏ xÐt mét sè vÝ dô viÕt trªn ng«n ng÷ C, sau ®ã sÏ xem xÐt viÕt trªn C++ 1.3.1. Mét sè ch−¬ng tr×nh vÝ dô VÝ dô 1: LËp ch−¬ng tr×nh s¾p xÕp mét d·y sè n thùc a1, a2,... an theo thø tù t¨ng dÇn. §©y lµ bµi to¸n øng dông nhiÒu trong thùc tÕ nh−: s¾p xÕp kÕt qu¶ thi, b¶ng kÕt qu¶ häc tËp, s¾p xÕp danh s¸ch c¸n bé cña mét ®¬n vÞ theo tuæi… ThuËt to¸n: 1) NhËp sè n vµ d·y sè a1, a2,... an vµo m¶ng a[1], a[2],... a[n]; 2) for i →1 to n-1 do 3) for j → i+1 to n do KiÓm tra ®iÒu kiÖn: nÕu a[i] >a[j] th× ®æi gi¸ trÞ a[i], a[j] cho nhau; 8 Gi¸o tr×nh Ng«n ng÷ lËp tr×nh C/C++ 4) In ra d·y sè a[1], a[2],... a[n]; 5) KÕt thóc ch−¬ng tr×nh Ch−¬ng tr×nh nh− sau: # include # include # define Nmax 50 short i,j, n; float tg, A[Nmax]; void main() { clrscr(); printf("Nhap n="); scanf("%d",&n); for (i=1; i<=n; i++) { printf("Nhap so thu %d ",i); scanf("%f",&A[i]); } printf("\n"); for (i=1; i<=n-1; i++) for (j=i+1; j<=n; j++) if (A[i]>A[j]) { tg=A[i]; A[i]=A[j]; A[j]=tg; } printf("Day so da duoc sap xep la \n \n"); for (i=1; i<=n; i++) printf("%4.1f",A[i]); printf("\n"); getch(); } Ch−¬ng 1: Giíi thiÖu C/C++ 9 VÝ dô 2: LËp ch−¬ng tr×nh tÝnh sè c¸ch chän k sinh viªn vµo häc khoa To¸n tin trong sè n sinh viªn tróng tuyÓn vµo Häc viÖn An ninh Nh©n d©n. ThuËt to¸n Ta sö dông hµm ®Ö quy TH ®Ó tÝnh tæ hîp chËp k cña n. TH(n,0) = TH(n,n) = 1; TH (n, k) = TH (n-1,k) + TH(n-1,k-1) ; // Chuong trinh de quy tinh to hop chap k cua n # include # include short nL, kL; short TH(short n, short k) { if (n== k||k== 0) return 1; else return TH(n-1,k)+ TH(n-1,k-1); } void main() { clrscr(); printf("Cho biet tong so hoc sinh n="); scanf("%d", &nL); printf("Cho biet so hoc sinh duoc chon"); scanf("%d", &kL); printf("So cach chon la: %d",TH(nL, kL)); getch(); } NhËn xÐt: + Ch−¬ng tr×nh C b¾t ®Çu b»ng #include ®Ó khai b¸o th− viÖn to¸n häc, ®å häa, c¸c ®¬n vÞ ch−¬ng tr×nh mµ ®−îc gäi lµ chØ thÞ tiÒn xö lý. C¸c tÖp conio.h hay math.h ph¶i cã trong th− viÖn cña C. 10 Gi¸o tr×nh Ng«n ng÷ lËp tr×nh C/C++ + Dßng define ®Ó ®Þnh nghÜa c¸c h»ng sè, macro. T−¬ng øng víi c¸c biÕn kiÓu nguyªn, thùc, ký tù chóng ta còng sÏ cã c¸c h»ng kiÓu d÷ liÖu ®ã. B¶ng d−íi ®©y cho ta mét cÊu tróc chung cña ch−¬ng tr×nh viÕt trªn ng«n ng÷ C. 1.3.2. CÊu tróc ch−¬ng tr×nh C # include <...> ChØ thÞ tiÒn xö lý bao hμm c¸c tÖp tiªu ®Ò vμ tÖp ghÐp # define §Þnh nghÜa c¸c h»ng, macro typedef Khai b¸o kiÓu d÷ liÖu míi ; Khai b¸o c¸c biÕn toμn côc Khai b¸o hμm 1 { ; Khai b¸o c¸c biÕn ®Þa ph−¬ng D·y c©u lÖnh C¸c lÖnh thùc hiÖn trong hμm .... return ;} Tr¶ kÕt qu¶ cho hμm main() Ch−¬ng tr×nh chÝnh - hμm main { ; Khai b¸o c¸c biÕn ®Þa ph−¬ng D·y c©u lÖnh; C¸c c©u lÖnh thùc hiÖn trong ch−¬ng tr×nh chÝnh ...... } 1.4. C¸c ký hiÖu c¬ b¶n trong ng«n ng÷ C TËp c¸c ký hiÖu c¬ b¶n ®−îc gäi lµ b¶ng ch÷ c¸i cña ng«n ng÷. Nã bao gåm nhãm c¸c ch÷ c¸i, nhãm c¸c ch÷ sè vµ nhãm c¸c ký hiÖu ®Æc biÖt. a) C¸c ch÷ c¸i: A, B, C,... Z, a, b, c,... z, _ (dÊu g¹ch nèi) b) C¸c ch÷ sè: 0, 1, 2,..., 9 c) C¸c dÊu phÐp to¸n 11 Ch−¬ng 1: Giíi thiÖu C/C++ - C¸c phÐp to¸n sè häc: +, -, *, /, % - C¸c phÐp so s¸nh: <, <=, >=, >, ==, != - C¸c phÐp to¸n logic: !, ⏐⏐, && - C¸c phÐp to¸n trªn bit: ~, ⏐, &, ^, <<, >> - C¸c phÐp t¨ng, gi¶m: ++, -- DÊu phÐp g¸n: = d) C¸c ký hiÖu ®Æc biÖt: - C¸c dÊu ngoÆc (,), [, ], {, } - C¸c dÊu chó thÝch /*, */, // - C¸c ký hiÖu kh¸c ->, #, \,:, ?, ., '; 1.5. C¸c tõ khãa cña ng«n ng÷ C Ng«n ng÷ lËp tr×nh C sö dông 38 tõ tiÕng Anh ®Ó t¹o nªn c¸c khai b¸o, c¸c biÓu thøc, c©u lÖnh. §©y lµ c¸c tõ khãa cña ng«n ng÷ C vµ ®−îc viÕt b»ng ch÷ th−êng. Mçi tõ khãa mang mét ý nghÜa nhÊt ®Þnh do ®ã trong lËp tr×nh kh«ng ®−îc sö dông tõ khãa ®Ó ®Æt tªn cho c¸c ®èi t−îng kh¸c trong ch−¬ng tr×nh. asm far short auto float signed break for sizeof case goto Static cdecl huge struc char if switch continue int typedef default interrupt union do long unsigned double near void else pascal volatile enum register while extern return 12 Gi¸o tr×nh Ng«n ng÷ lËp tr×nh C/C++ Ngoµi c¸c tõ khãa, ng«n ng÷ C cßn ®Æt mét sè tªn chuÈn cho c¸c h»ng, c¸c kiÓu, c¸c biÕn, c¸c hµm mÉu. VÝ dô: BLUE, M_PI, SEEK_CUR, clrscr; printf, sizeof, strcmp, stdin, textattr... Khi ®Æt tªn cho c¸c ®èi t−îng trong ch−¬ng tr×nh, chóng ta kh«ng ®−îc phÐp ®Æt trïng víi tªn chuÈn ®· cã. 1.6. C¸c më réng cña C++ VÒ thùc chÊt C++ gièng nh− C nh−ng bæ sung thªm mét sè më réng kh¸c nh−: ®èi t−îng, lËp tr×nh h−íng ®èi t−îng. Tõ c¸c n¨m 70 cña thÕ kû XX ®· cã c¸c ý t−ëng vÒ cÊu tróc trong C++ tõ ng«n ng÷ Simula 70 vµ Algol 68. 1.6.1. C¸c tõ khãa míi cña C++ §Ó bæ sung c¸c tÝnh n¨ng míi vµo C, c¸c tõ khãa sau ®· ®−îc ®−a vµo C++: asm catch class delete friend inline new operator private protected public template this throw try virtual Nh− vËy, khi chóng ta chuyÓn ch−¬ng tr×nh tõ C sang C++, cÇn ph¶i thay ®æi mét sè tªn nÕu trïng víi tõ khãa cña C++ sau ®ã míi biªn dÞch l¹i. 1.6.2. LÖnh nhËp vμ xuÊt d÷ liÖu chuÈn Trong ch−¬ng tr×nh C, chóng ta th−êng sö dông c¸c hµm nhËp/xuÊt d÷ liÖu lµ scanf() vµ printf(), cßn trong C++ cã thÓ dïng dßng nhËp/xuÊt chuÈn (standard input/output stream) ®Ó nhËp/xuÊt d÷ liÖu th«ng qua hai biÕn ®èi t−îng cña dßng (stream object) lµ cout vµ cin. XÐt vÝ dô: ViÕt ch−¬ng tr×nh nhËp vµo hai sè, sau ®ã tÝnh tæng, hiÖu, tÝch cña hai sè ®ã. # include # include int main() Ch−¬ng 1: Giíi thiÖu C/C++ 13 { int a,b; clrscr(); cout<<"Nhap so a="; cin>>a; cout<<"Nhap so b="; cin>>b; cout<<"Tong hai so la:"<>. CÇn ph¶i khai b¸o tÖp iostream.h b»ng include. 1.6.3. C¸ch chuyÓn ®æi kiÓu d÷ liÖu Trong C++ cã thªm c¸ch chuyÓn ®æi kiÓu d÷ liÖu gièng nh− lÖnh gäi hµm. VÝ dô: # include; # include; int main() { int X=200; long Y = (long) X; //Chuyen doi theo cach cua C long Z = long(X);//Chuyen doi theo cach moi cua C++ cout<<"X="< ; Trong ®ã: KiÓu d÷ liÖu: Tªn kiÓu d÷ liÖu cña mét hoÆc nhiÒu biÕn cÇn khai b¸o. Danh s¸ch tªn biÕn: NÕu cã nhiÒu biÕn thuéc cïng mét kiÓu d÷ liÖu, ta cã thÓ liÖt kª danh s¸ch c¸c tªn biÕn, ph©n c¸ch nhau bëi dÊu ph¶y (,). KÕt thóc khai b¸o lµ dÊu chÊm ph¶y (;). ViÖc khai b¸o biÕn nªu trªn ch−a t¹o ra viÖc cÊp ph¸t bé nhí cho biÕn, nã chØ x¸c nhËn r»ng biÕn ®ã ®· ®−îc ®Þnh nghÜa ®©u ®ã trong ch−¬ng tr×nh. Mét biÕn cã thÓ ®−îc khai b¸o nhiÒu lÇn trong ch−¬ng tr×nh. VÝ dô 1: khai b¸o biÕn: int i; /* biÕn tªn i cã kiÓu nguyªn */ float f1, f2; /*c¸c biÕn tªn f1 vμ f2 ®Òu cã kiÓu sè thùc dÊu ph¶y ®éng*/ int j = 5; /* khai b¸o biÕn j vμ khëi t¹o gi¸ trÞ lμ 5*/ VÝ dô 2: # include main() { int a, b,c ; /*khai b¸o 3 biÕn kiÓu int */ long ad, biÓu diÔn, cd; /*khai b¸o 3 biÕn kiÓu long*/ 19 Ch−¬ng 1: Giíi thiÖu C/C++ unsigned au, bu, cu; /*khai b¸o 3 biÕn kiÓu unisigned */ char k1, k2; /* khai b¸o 2 biÕn kiÓu char */ float x, y; /*khai b¸o 2 biÕn kiÓu float */ double xd, yd; /*khai b¸o 2 biÕn kiÓu double */ Mét biÕn ph¶i ®−îc ®Þnh nghÜa hay khai b¸o cho ch−¬ng tr×nh tr−íc khi nã ®−îc sö dông. Chó ý: ViÖc khai b¸o biÕn trong C/C++ vµ Pascal cã sù kh¸c nhau. §èi víi Turbo C KiÓu DS biÕn; §èi víi Pascal DS biÕn:KiÓu; Var # include a, b, c: Integer; main() Begin { int a, b, c; .... .. } End; VÞ trÝ khai b¸o biÕn C¸c biÕn trong C/C++ cã thÓ ®−îc khai b¸o bªn ngoµi hoÆc bªn trong hµm hay khèi lÖnh. Khai b¸o biÕn ngoμi VÞ trÝ c¸c biÕn ®Æt ë bªn ngoµi tÊt c¶ c¸c hµm. C¸c biÕn nµy sÏ t¸c ®éng tíi toµn bé ch−¬ng tr×nh cña C/C++. VÝ dô: int n, tong ; /*Khai b¸o biÕn ngoμi */ main () { n = tong +10; ... }
- Xem thêm -