Kỹ thuật lập trình C

134 372 2
Kỹ thuật lập trình C

Đ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

Kỹ thuật lập trình C

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 hiệu trên lưu đồ : Tê n khối 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 BeginNhaọp (x,y)A = x2 + y2Xuaỏt (A)End Ví dụ 2 : Tí nhyxCByAxS22+++=; biế t A,B,C,x,y BeginNhaọp (A, B, C, x,y)S = (Ax + By + C) / SQRT (x*x + y*y)Xuaỏt SEnd 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 BeginNhaọp (a, b, c)Max = aXuaỏt (Max)Enda > bMax < cMax = cSSMax = 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. BeginNhaọp (a, b)Xuaỏt (PTVẹ)Enda = 0SSXuaỏt (-b/a)b = 0 Xuaỏt (PTVN)ẹẹ Kü tht 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. BeginNhập (a, b, c)Xuất (‘X1= ’,(-b + SQRT(Delta)) / (2*a))Xuất (‘X2= ’,(-b - SQRT(Delta)) / (2*a))Enda = 0ĐĐPTB1 (b, c)Delta < 0Xuất (‘PTVN’)SSDelta = b*b - 4*a*cĐDelta = 0Xuất (-b / (2*a))S II.3.3. Tht to¸n cã chu tr× nh: Th 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 = giá trò ban đầuLệnh S;Tăng ii <= nSĐ víi n lµ gi¸ trÞ kÕ t thóc. Kỹ thuật lập trì nh 5 Ví dụ 4: Tí nhS=iinx=1, với cá c xi do ta nhậ p và o. BeginNhaọp (n)i = 1S = 0Nhaọp (xi)Endi = i+1S = S+xii <= nXuaỏ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ü tht 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 chu n mét ch­¬ng tr× nh trong ng«n ng÷ cÊ p cao nµ o ®ã (ch­¬ng tr× nh ngn) sang ng«n ng÷ m¸ y (ch­¬ng tr× nh ®Ý ch). - Thêi gian chu n mét ch­¬ng tr× nh ngn 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 ngn 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ìnhnguồnTrình biêndòchChương trìnhđíchMáy tínhthực hiệnKết quảDữ liệ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ìnhnguồnChương trìnhthông dòchKết quảDữ liệ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 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. tự \n là 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 <stdio.h> 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 <stdio.h> #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 <stdio.h> #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 tự, trong đó có những 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 tự đặc biệ t : tự Tác dụng Mã ASCII \n Xuống hà ng mới 10 \t Tab 9 \b Xóa 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 tự có m ASCII dạ ng Hex là dd \ddd Xuấ t tự có m ASCII dạ ng Dec là ddd \0 tự NULL 0 - Chuỗi định dạng : % [ flag][width][.prec][FNhl] 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 tự s Chuỗi tự tậ n cùng bằ ng \0 % Dấ u % cầ n in [...]... để 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 nguồn Trình biên dịch Chương trình đích Máy tính th c hiện Kết quả 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... 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. tự \n là 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. .. printf(“\n\xC8\xCD\xBC\n); } 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... printf(“NhË p c u :”); gets (c u); printf(“NhË p tõ :”); gets(tõ); ptr = strstr (c u, tõ); if (ptr == NULL) printf(“Kh«ng c tõ”); else printf( c tõ”); } II. C c cấu tr c điều khiển trong C : Ngôn ngữ C là ngôn ngữ lậ p trì nh c p cao c c u tr c, gåm: c u tr c t n tự, chọn, và lặ p. II.1 C u tr c tuần tự (Sequence) : C c lệ nh trong chương trì nh đ ư c th c hiệ n tuầ n tự từ lệ... canh ph¶ i %-9x i “7b “ HƯ 16, canh tr¸ i %c i “{“ 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 tù ASCII C9 CD BB C8 CD BC void main() { printf(“\n\xC9\xCD\xBB”); printf(“\n\xC8\xCD\xBC\n);... <stdio.h> #include <conio.h> void main() { char ch; 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 tự hơn c n thiế t %.6s s Blue m” ChÝ nh x¸ c 6 tù %-11.8s s “Blue moo “ ChÝ nh x¸ c 8, canh tr¸ i... 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... 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 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();... VÝ dụ 1: Xét tự c có phả i là sè hay kh«ng? char c; if (c >= ‘0’ && c <= ‘9’) printf (“% c tù sè “, c) ; VÝ dơ 2 : XÐt tự ch là chữ c i hay không? if ((ch> =‘a’) and (ch< =‘z’)) or ((ch> =‘A’) and (ch< =‘Z’)) printf(“ %c lµ chu cai \n”,ch); VÝ dơ 3 : int a=10, b=5, c= 0; a && b → 1 a && c → 0 a | | c → 1 VÝ dô 4 :... u c a 2 chuỗi S1, S2 với nhau. - int strnicmp(S1, S2, n): chØ so s¸ nh n tù đầ u c a 2 chuỗi S1, S2 với nhau, không phâ n biệ t chữ thường, chữ hoa - strcpy(dest, source): chép chuỗi từ nguồn source sang đí ch dest VÝ dô : char string[10]; char *str1 = "abcdefghi"; strcpy(string, str1); printf("%s\n", string); // "abcdefghi" - strncpy(dest, source, n): chép . n ®ã. Chương trìnhnguồnChương trìnhthông dòchKết quảDữ liệ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ì. 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)

Ngày đăng: 16/08/2012, 13:53

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan