Tài liệu Kỹ thuật lập trình

I. Khái niệm thuật toán:

I.1. Khái niệ m:

Thuậ t toá n là tậ p hợp cá c quy tắ c có logic nhằ m giả i một lớp bà i toá n nà o

đó để được một kế t quả xá c định.

I.2.Các tí nh chất đặc trưng của thuật toán:

I.2.1. Tí nh tổng quát :

Thuậ t toá n được lậ p không phả i chỉ để giả i một bà i toá n cụ thể mà thôi mà

còn phả i giả i được một lớp cá c bà i toá n có dạ ng tương tự.

I.2.2. Tí nh giới hạn :

Thuậ t toá n giả i một bà i toá n phả i được thực hiệ n qua một số giới hạ n cá c

thao tá c để đạ t đế n kế t quả .

I.2.3.Tí nh duy nhất :

Toà n bộ quá trì nh biế n đổi, cũng nhưtrậ t tự thực hiệ n phả i được xác định

và là duy nhấ t. Nhưvậ y khi dù ng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho

cùng một kế t quả .

pdf134 trang | Chia sẻ: luyenbuizn | Lượt xem: 1012 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Tài liệu Kỹ thuật lập trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Kỹ thuật lập trì nh 1 CHƯƠNG i ĐạI CƯƠNG Về LậP TRìNH I. Khái niệm thuật toán: I.1. Khái niệ m: Thuậ t toá n là tậ p hợp cá c quy tắ c có logic nhằ m giả i một lớp bà i toá n nà o đó để được một kế t quả xá c định. I.2. Các tí nh chất đặc trưng của thuật toán : I.2.1. Tí nh tổng quát : Thuậ t toá n được lậ p không phả i chỉ để giả i một bà i toá n cụ thể mà thôi mà còn phả i giả i được một lớp cá c bà i toá n có dạ ng tương tự. I.2.2. Tí nh giới hạn : Thuậ t toá n giả i một bà i toá n phả i được thực hiệ n qua một số giới hạ n cá c thao tá c để đạ t đế n kế t quả . I.2.3. Tí nh duy nhất : Toà n bộ quá trì nh biế n đổi, cũng như trậ t tự thực hiệ n phả i được xá c định và là duy nhấ t. Như vậ y khi dùng thuậ t toá n cùng một dữ liệ u ban đầ u phả i cho cùng một kế t quả . I.3. Phân loại: Theo cấ u trúc, ta có thể phâ n thà nh ba loạ i thuậ t toá n cơ bả n sau : - Thuậ t toá n không phâ n nhá nh. - Thuậ t toá n có phâ n nhá nh. - Thuậ t toá n theo chu trì nh có bước lặ p xá c định và có bước lặ p không xá c định. II. Mô tả thuật toán bằng lưu đồ : II.1. Lưu đồ : Lưu đồ là một dạ ng đồ thị dùng để mô tả quá trì nh tí nh toá n một cá ch có hệ thống. Người ta thường thể hiệ n thuậ t toá n bằ ng lưu đồ. II.2. Các ký hiệ u trê n lưu đồ : Tê n khối Ký hiệ u ý nghĩ a Khối mở đầ u hoặ c kế t thúc Dùng mở đầ u hoặ c kế t thúc chương trì nh Khối và o ra Đưa số liệ u và o hoặ c in kế t quả Kỹ thuật lập trì nh 2 Khối tí nh toá n Biể u diễ n cá c công thức tí nh toá n và thay đổi giá trị của cá c biế n Khối điề u kiệ n Dùng để phâ n nhá nh chương trì nh Chương trì nh con Dùng để gọi chương trì nh con Mũi tê n Chỉ hướng truyề n thông tin, liê n hệ cá c khối II.3. Một số ví dụ biể u diễ n thuật toán bằng lưu đồ II.3.1. Thuật toán không phân nhánh: Ví dụ 1: Tí nh A = x2 + y2 Begin Nhaọp (x,y) A = x2 + y2 Xuaỏt (A) End Ví dụ 2 : Tí nh yx CByAxS 22 + ++ = ; biế t A,B,C,x,y Begin Nhaọp (A, B, C, x,y) S = (Ax + By + C) / SQRT (x*x + y*y) Xuaỏt S End Kỹ thuật lập trì nh 3 II.3.2. Thuật toán có phân nhánh: Ví dụ 1: Tì m giá trị max của ba số thực a,b,c Begin Nhaọp (a, b, c) Max = a Xuaỏt (Max) End a > b Max < c Max = c S S Max = b ẹ ẹ Ví dụ 2: Giả i phương trì nh bậ c nhấ t Ax+B =0 với cá c nghiệ m thực. Begin Nhaọp (a, b) Xuaỏt (‘PTVẹ’) End a = 0 S S Xuaỏt (-b/a) b = 0 Xuaỏt (‘PTVN’) ẹ ẹ Kỹ thuật lập trì nh 4 Ví dụ 3 : Giả i phương trì nh bậ c hai Ax2+Bx+C =0 với cá c nghiệ m thực. Begin Nhaọp (a, b, c) Xuaỏt (‘X1= ’,(-b + SQRT(Delta)) / (2*a)) Xuaỏt (‘X2= ’,(-b - SQRT(Delta)) / (2*a)) End a = 0 ẹ ẹ PTB1 (b, c) Delta < 0 Xuaỏt (‘PTVN’) S S Delta = b*b - 4*a*c ẹ Delta = 0 Xuaỏt (-b / (2*a)) S II.3.3. Thuật toán có chu trì nh: Thuậ t toá n có chu trì nh với cá c bước lặ p xá c định thường được thể hiệ n bằ ng lưu đồ sau : i = giaự trũ ban ủaàu Leọnh S; Taờng i i <= n S ẹ với n là giá trị kế t thúc. Kỹ thuật lập trì nh 5 Ví dụ 4: Tí nhS= i i n x = ∑ 1 , với cá c xi do ta nhậ p và o. Begin Nhaọp (n) i = 1 S = 0 Nhaọp (xi) End i = i+1 S = S+xi i <= n Xuaỏt (S) S ẹ III. CáC NGôN NGữ LậP TRìNH & CHươNG TRìNH DịCH: III.1. Ngôn ngữ lập trì nh: III.1.1. Giới thiệ u: Con người muốn giao tiế p với má y tí nh phả i thông qua ngôn ngữ. Con người muốn má y tí nh thực hiệ n công việ c, phả i viế t cá c yê u cầ u đưa cho má y bằ ng ngôn ngữ má y hiể u được. Việ c viế t cá c yê u cầ u ta gọi là lậ p trì nh (programming). Ngôn ngữ dùng để lậ p trì nh được gọi là ngôn ngữ lậ p trì nh. Nế u ngôn ngữ lậ p trì nh gầ n với vấ n đề cầ n giả i quyế t, gầ n với ngôn ngữ tự nhiê n thì việ c lậ p trì nh sẽ đơn giả n hơn nhiề u. Những ngôn ngữ lậ p trì nh có tí nh chấ t như trê n được gọi là ngôn ngữ cấ p cao. Nhưng máy tí nh chỉ hiể u được ngôn ngữ riê ng của mì nh, đó là cá c chuỗi số 0 với 1 và như vậ y rõ rà ng là khó khă n cho lậ p trì nh viê n, vì nó không gầ n gũi với con người. Hiệ n tạ i, ngôn ngữ lậ p trì nh được chia ra là m cá c loạ i sau: III.1.2. Phân loại ngôn ngữ lập trì nh: - Ngôn ngữ má y (machine language) Kỹ thuật lập trì nh 6 - Hợp ngữ (assembly language) - Ngôn ngữ cấ p cao (higher-level language) Do má y tí nh chỉ hiể u được ngôn ngữ má y, cho nê n một chương trì nh viế t trong ngôn ngữ cấ p cao phả i được biê n dịch sang ngôn ngữ má y. Công cụ thực hiệ n việ c biê n dịch đó được gọi là chương trì nh dịch. III.2. Chương trì nh dịch: Chương trì nh dịch được chia ra là m 2 loạ i : trì nh biê n dịch (compiler) và trì nh thông dịch (interpreter) III.2.1. Trì nh biê n dịch: là việ c chuyể n một chương trì nh trong ngôn ngữ cấ p cao nà o đó (chương trì nh nguồn) sang ngôn ngữ má y (chương trì nh đí ch). - Thời gian chuyể n một chương trì nh nguồn sang chương trì nh đí ch được gọi là thời gian dịch. - Thời gian mà chương trì nh đí ch thực thi được gọi là thời gian thực thi. Như vậ y, chương trì nh nguồn và dữ liệ u để chương trì nh thực thi được xử lý trong cá c thời điể m khá c nhau, được gọi là thời gian dịch (compile time) và thời gian thực thi (run-time) Chửụng trỡnh nguoàn Trỡnh bieõn dũch Chửụng trỡnh ủớch Maựy tớnh thửùc hieọn Keỏt quaỷ Dửừ lieọu Hì nh I.1. Chương trì nh thực thi theo cơ chế dịch của trì nh biê n dịch III.2.2. Trì nh thông dịch: quá trì nh dịch và thực thi xả y ra cùng 1 thời gian, dịch đế n đâ u thi hà nh lệ nh đế n đó. Chửụng trỡnh nguoàn Chửụng trỡnh thoõng dũch Keỏt quaỷ Dửừ lieọu Hì nh I.2. Chương trì nh thực thi theo cơ chế dịch của trì nh thông dịch Kỹ thuật lập trì nh 7 CHươNG 2 LàM QUEN VớI NGôN NGữ C * Giới thiệu ngôn ngữ C Ngôn ngữ C do Dennis Ritchie là người đầ u tiê n đề xuấ t, đ∙ thiế t kế và cà i đặ t C trong môi trường UNIX. Nó có nguồn gốc từ 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 nă m 1970 khi viế t hệ điề u hà nh Unix. C là ngôn ngữ lậ p trì nh đa dụng, cấ p cao nhưng lạ i có khả nă ng thực hiệ n cá c thao tá c như của ngôn ngữ Assembly. Vì thế ngôn ngữ C nhanh chóng được cà i đặ t, sử dụng trê n máy vi tí nh và đ∙ trở thà nh một công cụ lậ p trì nh khá mạ nh, hiệ n nay đang có khuynh hướng trở thà nh một ngôn ngữ lậ p trì nh chí nh cho má y vi tí nh trê n thế giới. * Đặc điể m ngôn ngữ C Ngôn ngữ C có những đặ c điể m cơ bả n sau : - Tí nh cô đọng (compact) : Ngôn ngữ C chỉ có 32 từ khoá chuẩ n, 40 toá n tử chuẩ n mà hầ u hế t được biể u diể n bởi cá c d∙ y ký tự ngắ n gọn. - Tí nh cấ u trúc (structured) : Ngôn ngữ C có một tậ p hợp cá c phá t biể u lậ p trì nh cấ u trúc như phá t biể u quyế t định hoặ c lặ p. Do đó, nó cho phép chúng ta viế t chương trì nh có tổ chức và dể hiể u. - Tí nh tương thí ch (compactable) : Ngôn ngữ C có bộ lệ nh tiề n xử lý và cá c thư việ n chuẩ n là m cho cá c chương trì nh viế t bằ ng ngôn ngữ C có thể tương thí ch khi chuyể n từ má y tí nh nà y sang má y tí nh kiể u hoà n toà n khá c. - Tí nh linh động (flexible) : Ngôn ngữ C là một ngôn ngữ rấ t linh động về ngữ phá p, nó có thể chấ p nhậ n rấ t nhiề u cá ch thể hiệ n mà không có ở ngôn ngữ khá c như Pascal, nó giúp cho kí ch thước m∙ lệ nh có thể thu gọn lạ i để chương trì nh thực thi nhanh chóng hơn. - Biê n dịch : Ngôn ngữ C được biê n dịch bằ ng nhiề u bước và 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à nối cá c đối tượng đó lạ i với nhau (link) thà nh một chương trì nh thực thi thống nhấ t. I. CáC KHáI NIệM Cơ BảN I.1. Cấu trúc cơ bản của một chương trì nh C [tiề n xử lý] [Cá c hà m] main() Kỹ thuật lập trì nh 8 { [khai bá o biế n;] [nhậ p dữ liệ u ;] [xử lý ;] [xuấ t ;] } Ví dụ : Chương trì nh hiệ n trê n mà n hì nh câ u “Chao cac ban” void main() { printf(“Chao cac ban\n”); } Một và i nhậ n xét quan trọng : - Chương trì nh C bao giờ cũng có một hay nhiề u hà m, trong đó có một hà m chí nh bắ t buộc phả i có là hà m main(). Đâ y chí nh là hà m được thực hiệ n đầ u tiê n trong chương trì nh. - Cặ p dấ u “{ } “ để xá c định một khối lệ nh. - Hà m printf(“ Chao cac ban \n”) là hà m chuẩ n của C dùng để xuấ t câ u thông bá o “Chao cac ban” ra mà n hì nh. Ký tự “\n“ là ký tự đặ c biệ t dùng để xuống dòng. - Dấ u “;” để chấ m dứt một lệ nh. - Chương trì nh C có phâ n biệ t chữ thường với chữ hoa. Đa số cá c từ khoá của C được viế t bằ ng chữ thường, còn một số í t được viế t bằ ng chữ hoa mà ta phả i tuâ n thủ chặ t chẽ , nế u không thì chương trì nh dịch sẽ không hiể u. * Một vài ví dụ Ví dụ 1: In bả ng lũy thừa 2 của cá c số nguyê n từ 10 đế n 50 /* Chương trì nh in bì nh phương cá c số từ 10 đế n 50*/ #include void main() {int n; /*Khai bá o biế n n kiể u nguyê n */ n=10; /*Gá n n=10 */ while (n<=50) /*Lặ p từ 10 đế n 50 bằ ng while */ { printf(“%3d \t %5d\n”,n,n*n); /*in dạ ng 5d là dà nh 5 vị trí để in n và n2 */ n++; /* Tă ng n lê n 1 */ } /*Hế t while*/ } /*Hế t main*/ Kỹ thuật lập trì nh 9 Ví dụ 2 : Tương tự như ví dụ 1 nhưng viế t cá ch khá c : #include #define max 50 /*Tiề n xử lý, định nghĩ a max =50*/ void main() { int n; /*Khai bá o biế n n kiể u nguyê n*/ for (n=10; n<=max; n++) /*Lặ p từ 10 đế n 50 bằ ng for*/ printf(“%3d \t %5d\n”,n,n*n); /*in n và n2 dạ ng 5d là nă m chữ số*/ } /*Hế t main*/ Ví dụ 3 : Chương trì nh in lũy thừa 2, 3, 4, 5; có dùng hà m để tí nh lũy thừa : #include #define max 50 /*Tiề n xử lý, định nghĩ a max =50*/ float luythua(int n, int m) /*Hà m luythua với 2 thông số*/ { float s=1; /*Khai bá o và khởi tạ o biế n s*/ for ( ;m>0;m--) /*Lặ p giả m dầ n từ m tới 1*/ s=s*n; return s; /*Trả kế t quả về */ } void main() { int n,n2,n3,n4,n5; /*Khai bá o biế n kiể u nguyê n*/ for (n=10;n<=50;n++) /*Lặ p từ 10 đế n 50 bằ ng for*/ { n2= luythua(n,2); /*Gọi hà m luythua*/ n3= luythua(n,3); n4= luythua(n,4); n5= luythua(n,5); printf(“%3d \t %5.2f \t %5.2f\t %5.2f\t %5.2f\t %5.2f\n”, n,n2,n3,n4,n5); /*in n và nm dạ ng 5 chữ số với 2 số lẻ */ } } /*Hế t main*/ * Hàm xuất chuẩn printf() Cú pháp : printf(“chuỗi-địnhdạ ng”,thamso1,thamso2,...) ý nghĩ a : Hà m printf() sẽ xem xét chuỗi-địnhdạ ng, lấ y giá trị cá c tham số (nế u cầ n) để đặ t và o theo yê u cầ u của chuỗi-địnhdạ ng và gởi ra thiế t bị chuẩ n. Chuỗi-địnhdạ ng là một chuỗi ký tự, trong đó có những ký tự xuấ t ra nguyê n vẹ n hoặ c xuấ t ở dạ ng đặ c biệ t, và có thể có những chuỗi điề u khiể n cầ n lấ y giá trị của cá c tham số để thay và o đó khi in ra. Kỹ thuật lập trì nh 10 - Những ký tự đặc biệ t : Ký tự Tác dụng Mã ASCII \n Xuống hà ng mới 10 \t Tab 9 \b Xóa ký tự bê n trá i 8 \r Con trỏ trở về đầ u hà ng 13 \f Sang trang 12 \a Phá t tiế ng còi 7 \\ Xuấ t dấ u chéo ngược 92 \’ Xuấ t dấ u nhá y đơn ‘ 39 \’’ Xuấ t dấ u nhá y kép “ 34 \xdd Xuấ t ký tự có m∙ ASCII dạ ng Hex là dd \ddd Xuấ t ký tự có m∙ ASCII dạ ng Dec là ddd \0 Ký tự NULL 0 - Chuỗi định dạng : % [ flag][width][.prec][FNhl] type Type : định kiể u của tham số theo sau chuỗi-địnhdạ ng để lấ y giá trị ra Type ý nghĩ a d,i Số nguyê n cơ số 10 u Số nguyê n cơ số 10 không dấ u o Số nguyê n cơ số 8 x Số nguyê n cơ số 16, chữ thường(a,b,...,f) X Số nguyê n cơ số 16, chữ in (A,B,...,F) f Số thực dạ ng [-]dddd.ddd... e Số thực dạ ng [-]d.ddd e[+/-]ddd E Số thực dạ ng [-]d.ddd E[+/-]ddd g,G Số thực dạ ng e(E) hay f tùy theo độ chí nh xá c c Ký tự s Chuỗi ký tự tậ n cùng bằ ng ‘\0’ % Dấ u % cầ n in Kỹ thuật lập trì nh 11 Flag : Dạ ng điề u chỉ nh Flag ý nghĩ a nế u không có in dữ liệ u ra với canh phả i - in dữ liệ u ra với canh trá i + Luôn bắ t đầ u số bằ ng + hay - # in ra tùy theo type, nế u: 0 : Chè n thê m 0 đứng trước giá trị >0 x,X : Chè n thê m 0x hay 0X đứng trước số nà y e,E,f : Luôn luôn có dấ u chấ m thậ p phâ n G,g : Như trê n nhưng không có số 0 đi sau Width : định kí ch thước in ra Width ý nghĩ a n Dà nh í t nhấ t n ký tự , điề n khoả ng trắ ng cá c ký tự còn trống 0n Dà nh í t nhấ t n ký tự , điề n số 0 cá c ký tự còn trống * Số ký tự í t nhấ t cầ n in nằ m ở tham số tương ứng Prec : định kí ch thước phầ n lẽ in ra Prec ý nghĩ a không có độ chí nh xá c như bì nh thường 0 d,i,o,u,x độ chí nh xá c như cũ e,E,f Không có dấ u chấ m thậ p phâ n n nhiề u nhấ t là n ký tự (số) * Số ký tự í t nhấ t cầ n in nằ m ở tham số tương ứng Các chữ bổ sung : F Tham số là con trỏ xa XXXX:YYYY N Tham số là con trỏ gầ n YYYY h Tham số là short int l Tham số là long int (d,i,o,u,x,X) double (e,E,f,g,G) Ví dụ 1: char c=‘A’; char s[]=“Blue moon!” ; Kỹ thuật lập trì nh 12 Dạng Thông số tương ứng Xuất Nhận xét %c c “A” độ rộng 1 %2c c “ A” độ rộng 2, canh phả i %-3c c “A “ độ rộng 3, canh trá i %d c “65” M∙ ASCII của ‘A’ %s s “Blue moon!” độ rộng 10 %3s s “Blue moon!” Nhiề u ký tự hơn cầ n thiế t %.6s s “Blue m” Chí nh xá c 6 ký tự %-11.8s s “Blue moo “ Chí nh xá c 8, canh trá i Ví dụ 2: int i = 123; float x = 0.123456789; Dạng Thông số tương ứng Xuất Nhận xét %d i “123” độ rộng 3 %05d i “00123” Thê m 2 số 0 %7o” i “ 123” Hệ 8, canh phả i %-9x i “7b “ Hệ 16, canh trá i %c i “{“ Ký tự có m∙ ASCII 123 %-#9x i “0x7b “ Hệ 16, canh trá i %10.5f x “ 0.12346” độ rộng 10, có 5 chữ số thậ p phâ n %-12.5e x “1.23457e-01 “ Canh trá i, in ra dưới dạ ng khoa học Ví dụ 3: Viế t chương trì nh in hì nh chữ nhậ t kép bằ ng cá c ký tự ASCII C9 CD BB C8 CD BC void main() { printf(“\n\xC9\xCD\xBB”); printf(“\n\xC8\xCD\xBC\n); } Kỹ thuật lập trì nh 13 I.2. Kiể u dữ liệ u cơ bản I.2.1. định nghĩ a: Kiể u dữ liệ u cơ bả n là kiể u dữ liệ u có giá trị đơn, không phâ n chia được nữa như số, ký tự I.2.2. Phân loại: Tê n kiể u ý nghĩ a Kí ch thước Phạm vi char Ký tự 1 byte -128→ 127 unsigned char Ký tự không dấ u 1 byte 0→255 unsigned short Số nguyê n ngắ n không dấ u 2 bytes 0→65535 enum Số nguyê n có dấ u 2 bytes -32768→32767 short int Số nguyê n có dấ u 2 bytes -32768→32767 int Số nguyê n có dấ u 2 bytes -32768→32767 unsigned int Số nguyê n không dấ u 2 bytes 0 → 65535 long Số nguyê n dà i có dấ u 4 bytes -2147483648 → 2147483647 unsigned long Số nguyê n dà i không dấ u 4 bytes 0→4294967295 float Số thực độ chí nh xá c đơn 4 bytes 3.4 E-38→3.4 E+38 double Số thực độ chí nh xá c kép 8 bytes 1.7 E-308 → 1.7 E+308 long double Số thực độ chí nh xá c hơn double 10 bytes 3.4 E-4932 → 1.1 E+4932 Chú ý : 1. Ngôn ngữ C không có kiể u logic (boolean như Pascal) mà quan niệ m 0 là false ; Khá c 0 là true 2. Ngôn ngữ C không có kiể u chuỗi như kiể u string trong Pascal 3. Cá c kiể u đồng nhấ t: int = short int = short = signed int = signed short int long int = long signed long int = long unsigned int = unsigned = unsigned short = unsigned short int unsigned long int = unsigned long Kỹ thuật lập trì nh 14 I.3. Biế n I.3.1. Tê n biế n : Tê n biế n là một chuỗi ký tự bắ t đầ u bằ ng ký tự chữ, ký tự kế tiế p là ký tự chữ (dấ u gạ ch dưới “_” được xem là ký tự chữ) hoặ c số và không được trùng với cá c từ khóa của C. Chú ý : - Ngôn ngữ C phâ n biệ t chữ thường với chữ hoa nê n biế n chữ thường với chữ hoa là khá c nhau. Ví dụ : Bien_1 _bien2 là hợp lệ bi&en 2a a b là không hợp lệ - Ngôn ngữ C chỉ phâ n biệ t hai tê n hợp lệ với nhau bằ ng n ký tự đầ u tiê n của chúng. Thông thường n=8, nhưng hiệ n nay nhiề u chương trì nh dịch cho phép n=32, như Turbo C cho phép thay đổi số ký tự phâ n biệ t từ 8-32) Ví dụ :Hai biế n sau bị xem là cùng tê n bien_ten_dai_hon_32_ky_tu_dau_tien_1 bien_ten_dai_hon_32_ky_tu_dau_tien_2 I.3.2. Khai báo biế n Cá c biế n phả i được khai bá o trước khi sử dụng nhằ m giúp cho chương trì nh dịch có thể xử lý chúng. Khai bá o biế n có dạ ng : Kiể udữliệ u tê nbiế n1 [,tenbiế n2 ...] ; Ví dụ: int a,b,c; float x,y,delta; char c; * Khai bá o và khởi tạ o biế n: Kiể u dữ liệ u tê nbiế n = giá trị ; I.3.3. Hàm nhập dữ liệ u chuẩn a) Hàm scanf() Cú pháp: scanf(“chuỗi-địnhdạ ng“,điạ chỉ thamsố1, điạ chỉ thamsố2,...) - Chuỗi-địnhdạ ng của scanf() gồm có ba loạ i ký tự : + Chuỗi điề u khiể n + Ký tự trắ ng + Ký tự khá c trắ ng ! Chuỗi điề u khiể n có dạ ng : %[width][h/l] type Kỹ thuật lập trì nh 15 Với type: xá c định kiể u của biế n địa chỉ tham số sẽ nhậ n giá trị nhậ p và o Type ý nghĩ a d,i Số nguyê n cơ số 10 (int) o Số nguyê n cơ số 8 (int) u Số nguyê n cơ số 10 không dấ u (unsigned) x Số nguyê n cơ số 16 (int) f,e Số thực (float) c Ký tự (char) s Chuỗi ký tự p Con trỏ (pointer) lf Số thực (double) Lf Số thực (long double) Width : xá c định số ký tự tối đa sẽ nhậ n và o cho vùng đó. Hà m scanf() chỉ nhậ n cho đủ width ký tự hoặ c cho đế n khi gặ p ký tự trắ ng đầ u tiê n. Nế u chuỗi nhậ p và o nhiề u hơn thì phầ n còn lạ i sẽ dà nh lạ i cho lầ n gọi scanf() kế tiế p. Ví dụ 1: scanf(“%3s”,str); Nế u nhậ p chuỗi ABCDEFG ↵ thì scanf() sẽ nhậ n tối đa 3 ký tự cấ t và o mả ng str, còn DEFG sẽ được lấ y nế u sau đó có lầ n gọi sanf(“%s”,str) khá c. Ví dụ 2: unsigned long money; scanf(“%lu”,&money); Lưu ý : Nế u scanf(“%ul”, &money) thì giá trị nhậ p và o sẽ không được lưu trữ trong biế n money, nhưng chương trì nh dịch không bá o lỗi. Ví dụ 3: Nhậ p và o tê n và bị giới hạ n trong khoả ng [A-Z,a-z] char name[20]; printf(“Name : ”) ; scanf(“%[A-Za-z]”,&name); Trong trường hợp nà y, nế u ta gõ sai dạ ng thì name =”” ! Ký tự trắ ng: nế u có trong chuỗi-dạ ng sẽ yê u cầ u scanf() bỏ qua một hay nhiề u ký tự trắ ng trong chuỗi nhậ p và o. Ký tự trắ ng là ký tự khoả ng trắ ng (‘ ‘), tab (‘\t’), xuống hà ng (‘\n’). Một ký tự trắ ng trong chuỗi-địnhdạ ng sẽ được hiể u là chờ nhậ p đế n ký tự khá c trắ ng tiế p theo. Kỹ thuật lập trì nh 16 Ví dụ 4: scanf(“%d “,&num); Hà m scanf() cho ta nhậ p một ký tự khá c trắ ng nữa thì mới thoá t ra. Ký tự đó sẽ nằ m trong vùng đệ m và sẽ được lấ y bởi hà m scanf() hoặ c gets() tiế p theo. ! Ký tự khá c trắ ng: nế u có trong chuỗi-địnhdạ ng sẽ khiế n cho scanf() nhậ n và o đúng ký tự như thế . Ví dụ 5: scanf(%d/%d/%d”,&d,&m,&y); Hà m scanf() chờ nhậ n một số nguyê n, cấ t và o d, kế đế n là dấ u ‘/’, bỏ dấ u nà y đi và chờ nhậ n số nguyê n kế tiế p để cấ t và o m. Nế u không gặ p dấ u ‘/’ kế tiế p số nguyê n thì scanf() chấ m dứt. Chú ý : Hà m scanf() đòi hỏi cá c tham số phả i là cá c địa chỉ của cá c biế n hoặ c là một con trỏ. * Toá n tử địa chỉ & : Lấ y địa chỉ của một biế n Ví dụ 6: int n; → biế n n &n; → đ ịa chỉ của n printf(“trị = %d, địa chỉ = %d”,n,&n); b) Hàm getch(): Hà m getch() dùng để nhậ n một ký tự do ta nhậ p trê n bà n phí m mà không cầ n gõ Enter với cú phá p : ch = getch(); Không hiệ n ký tự nhậ p trê n mà n hì nh ch = getche(); Hiệ n ký tự nhậ p trê n mà n hì nh Với ch là biế n kiể u char. Ví dụ 7: void main() { char ch; printf(“Go vao ky tu bat ky : ‘); ch = getche(); printf(“\n Ban vua go %c”,ch); getch(); } Ví dụ 8: Bạ n nhậ p và o 1 chữ cá i. Nế u chữ cá i nhậ p và o là 'd' thì chương trì nh sẽ kế t thúc, ngược lạ i chương trì nh sẽ bá o lỗi và bắ t nhậ p lạ i. #include #include void main() { char ch; Kỹ thuật lập trì nh 17 printf("\nBan nhap vao 1 chu cai tu a den e: "); while ((ch=getche()) != 'd') { printf("\nXin loi, %c la sai roi",ch); printf("\n Thu lai lan nua. \n"); } } Lưu ý: Hà m getch() còn cho phép ta nhậ p và o 1 ký tự mở rộng như cá c phí m F1, F2,.., cá c phí m di chuyể n cursor. Cá c phí m nà y luôn có 2 bytes: byte thứ nhấ t bằ ng 0, còn byte 2 là m∙ scancode của phí m đó. Để nhậ n biế t ta đ∙ gõ phí m ký tự hay phí m mở rộng, ta có chương trì nh sau: void main() { int c; int extended = 0; c = getch(); if (!c) extended = getch(); if (extended) printf("The character is extended\n"); else printf("The character isn't extended\n"); } Phí m Mã scancode F1 59 F2 60 F3 61 F4 62 F5 63 F6 64 F7 65 F8 66 F9 67 F10 68 Home 71 " 72 # 80 $ 75 Kỹ thuật lập trì nh 18 % 77 PgUp 73 PgDn 81 End 79 Ins 82 Del 83 Bả ng m∙ scancode của cá c phí m mở rộng c. Hàm kbhit(): Hà m int kbhit() sẽ kiể m tra xem có phí m nà o được gõ và o hay không. Nế u có, hà m kbhit sẽ trả về một số nguyê n khá c 0, và ngược lạ i. Ký tự mà ta nhậ p và o qua hà m kbhit() có thể lấ y được qua hà m getch() hoặ c getche(). Ví dụ: void main() { printf("Press any key to continue:"); while (!kbhit()) /* do nothing */ ; char kytu=getch(); printf("\nKy tu vua an : %c",kytu); } I.4 Hằng: Hằ ng là cá c đạ i lượng mà giá trị của nó không thay đổi trong quá trì nh chương trì nh thực hiệ n. I.4.1. Phân loại : a. Hằng số : là cá c giá trị số đ∙ xá c định và không đổi. int unsigned long hệ 8 hệ 16 float/double Dạ ng nnnn -nnnn nnnnU/u nnnnL/l -nnnnl/L 0nnnn 0xnnnn nnnn.nnnn nnnn.nnnE/e±nnn Ví dụ 4567 -12 123U 12uL 456789L -1234L 0345 0x1AB 123.654 123.234E-4 Chú ý : - Cá c hằ ng số viế t không dấ u hoặ c không số mũ được hiể u là số nguyê n, ngược lạ i là double. - Cá c hằ ng số nguyê n lớn hơn int sẽ được lưu trữ theo kiể u long, còn lớn hơn long thì được lưu trữ theo kiể u double. - Cá c hằ ng số nguyê n dương lớn hơn long sẽ được lưu trữ theo kiể u double - Một hằ ng số được lưu trữ theo dạ ng long nế u theo số đó có ký tự l (L), Kỹ thuật lập trì nh 19 dạ ng unsigned nế u sau đó có chữ u (U), dạ ng thậ p lục phâ n nế u trước số đó có 0x và dạ ng bá t phâ n nế u trước số đó có 0 Ví dụ: 50000; 10 L; → Long 5U, 100u → unsigned 0x10 → hệ 16 = 1610 010 → hệ 8 = 810 b. Hằng ký tự : là ký tự riê ng biệ t được viế t trong hai dấ u nhá y đơn : ‘A’ Giá trị của hằ ng ký tự là m∙ ASCII của nó. Ví dụ : printf(“%c có giá trị là %d”,’A’,’A’); % ‘A’ có giá trị là 65 & Hằ ng ký tự có thể tham gia và o cá c phép toá n như mọi số nguyê n khá c. Ví dụ :‘9’-’0’=57-48=9 & Hằ ng ký tự có thể là cá c ký tự đặ c biệ t dạ ng ‘\c1’ mà ta đ∙ xét ở hà m printf() như ‘\n’,’\a’,’\t’ ... c. Hằng chuỗi : Là một chuỗi ký tự nằ m trong hai dấ u nhá y kép “ “. Ví dụ : “Day la mot chuoi” “Hang chuoi co ky tu đạ c biệ t như \ \n \248” “” → chuỗi rỗng. Chú ý : - Phâ n biệ t “A” ≠ ‘A’ Hằ ng: Chuỗi Ký tự Dạ ng lưu trữ : A \0 A - Nhậ n xét: ở dạ ng lưu trữ, ta thấ y tậ n cùng của chuỗi có ký tự NULL ‘\0’ mà không có ở dạ ng ký tự. Chí nh vì vậ y mà không có ký tự rỗng ‘’. - Một chuỗi có thể được viế t trê n nhiề u hà ng với điề u kiệ n hà ng trê n phả i có dấ u ‘\’. Ví dụ :“Day la mot chuoi duoc viet tren \ nhieu hang \n” d. Hằng biể u thức : Là một biể u thức mà trong đó cá c toá n hạ ng đề u là cá c hằ ng. Khi đó chương trì nh dịch sẽ tí nh toá n biể u thức trước, và kế t quả được lưu trữ thẳ ng bằ ng một hằ ng số tương đương. Ví dụ : 8*20-13 → kế t quả lưu trữ là 173 Kỹ thuật lập trì nh 20 ‘a -’A’ → “ là 97-65 = 32 1<8 → “ là 0 (sai) I.4.2. Khai báo hằng: Cú pháp: const tê nhằ ng = biể uthức; Ví dụ : const MAX = 50; const PI = 3.141593; Chú ý : - Ta có thể khai bá o hằ ng bằ ng cá ch định nghĩ a 1 macro như sau: #define tê nhằ ng giá trị - Lệ nh #define phả i được khai bá o ngoà i hà m và sau nó không có dấ u ; I.5. Phép toán I.5.1. Phép gán: Cú pháp: biế n = biể u thức; Chú ý : Phép gá n trong ngôn ngữ C trả về một kế t quả là trị của biể u thức Ví dụ 1 : c = 10; a = b = c; printf(“a=%d , b=%d”,a,b); → a=10,b=10 Ví dụ 2 : x = b + 2*c; ⇔ y= a + (x= b + 2*c) y = a + x; Ví dụ 3 : (n+3) = 4+z; (không hợp lệ vì bê n trá i là biể u thức) ‘ ‘= c +’o’; (không hợp lệ vì bê n trá i là hằ ng) I.5.2. Các phép toán số học : a. Phép toán hai toán hạng : +, -, *, /, % Phép toán Kiể u toán hạng Kiể u kế t quả +, -, * char, int, long, float, double Kiể u của toá n hạ ng có kiể u cao nhấ t / nguyê n/nguyê n Kiể u nguyê n và là phép chia nguyê n thực(nguyê n)/thực (nguyê n) Kiể u thực và là phép chia thực % nguyê n/nguyê n Kiể u nguyê n và là phép chia lấ y phầ n dư Ví dụ : #include void main() Kỹ thuật lập trì nh 21 { char cv; int iv = 121; float fv1,fv2; printf(“ Chuyể n kiể u :\n\n”); cv = iv; printf(“int được gá n cho char : %d → %d (%c)\n\n”,iv,cv,cv); fv1 = iv/50; printf(“ int : %d / 50 = %f \n\n”,iv,fv1); fv1 = iv/50.0; printf(“ float : %d / 50.0 = %f \n\n”,iv,fv1); fv1 = 1028.75; fv2 = fv1 +iv ; printf(“ %f + %d = %f \n\n”,fv1,iv,fv2); getch(); } b. Phép toán một toán hạng : phép tă ng ++, phép giả m -- a++ hoặ c ++a ⇔ a = a+1 a-- hoặ c --a ⇔ a = a

Các file đính kèm theo tài liệu này:

  • pdfki_thuat_lap_trinh.pdf