KỸ THUẬT LẬP TRÌNH (p4)
lượt xem 23
download
Nguyên lý chủ đạo trong công nghệ phần mềm Phân rã bài toán thành những bài toán nhỏ hơn để triển khai và đảm bảo tính đúng đắn của chương trình Nguyên lý cơ bản của lập trình cấu trúc bao gồm: • Phát triển chương development) trình từ trên xuống (Top−down
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: KỸ THUẬT LẬP TRÌNH (p4)
- KỸ THUẬT LẬP TRÌNH Khái niệm lập trình cấu trúc Nguyên lý chủ đạo trong công nghệ phần mềm LẬP TRÌNH CẤU TRÚC Phân rã bài toán thành những bài toán nhỏ hơn để triển (structured programming) khai và đảm bảo tính đúng đắn của chương trình NỘI DUNG: Nguyên lý cơ bản của lập trình cấu trúc bao gồm: Khái niệm lập trình cấu trúc • Phát triển chương trình từ trên xuống (Top−down development) So sánh với lập trình hướng đối tượng • Thiết kế môđun (Modular design) Cấu trúc lệnh. Lệnh có cấu trúc Kỹ thuật sử dụng cấu trúc lệnh (cấu trúc điều khiển) trong ngôn ngữ C. 0 1 Triển khai chương trình từ trên xuống trong ngôn ngữ C: Phương pháp đi từ trên xuống: #include /* 1. Các hàm thư viện */ • Đi từ cái chung đến cái riêng, từ kết luận đến chi tiết, từ tổng #define /* 2. Định nghĩa hằng */ thể đến đơn vị typedef /* 3. Định nghĩa kiểu dữ liệu */ Mô đun hóa: /* 4. Khai báo nguyên mẫu các hàm */ function prototype • Nhóm các câu lệnh lại với nhau tạo ra những môđun có quan hệ với nhau. Nói cách khác: chương trình được phân tách /* 5. Khai báo các biến toàn cục */ thành các phần chức năng quan hệ logic với nhau. int main (void) /* 6. “Chương trình chính” */ { Khai báo các biến; Ưu điểm: Dễ viết (write), duyệt lỗi (debug), và dễ hiểu Tập lệnh; chương trình hơn. } /* 7. “Các chương trình con”- các hàm */ 2 3
- Ví dụ: 3 sinh viên tương ứng với 3 hàng điểm sau: { { 77, 68, 86, 73 }, { 96, 87, 89, 78 }, { 70, 90, 86, 81 } }; 24 /* output array studentGrades */ 25 printf( "The array is:\n" ); Tìm điểm cao nhất, thấp nhất, tính điểm trung bình của mỗi sinh viên 26 printArray( studentGrades, STUDENTS, EXAMS ); 1 /* Fig. 6.22: fig06_22.c 27 2 Double-subscripted array example */ 28 /* determine smallest and largest grade values */ 3 29 #include printf( "\n\nLowest grade: %d\nHighest grade: %d\n", 30 4 minimum( studentGrades, STUDENTS, EXAMS ), #define STUDENTS 3 31 maximum( studentGrades, STUDENTS, EXAMS ) ); 5 #define EXAMS 4 32 6 33 /* calculate average grade for each student */ 7 /* function prototypes */ 34 for ( student = 0; student highGrade ) { 57 lowGrade = grades[ i ][ j ]; 82 highGrade = grades[ i ][ j ]; 58 } /* end if */ 83 } /* end if */ 59 84 60 } /* end inner for */ 85 } /* end inner for */ 61 86 62 } /* end outer for */ 87 } /* end outer for */ 63 88 64 return lowGrade; /* return minimum grade */ 89 return highGrade; /* return maximum grade */ 65 90 66 } /* end function minimum */ 91 } /* end function maximum */ 67 92 68 /* Find the maximum grade */ 93 /* Determine the average grade for a particular student */ 69 int maximum( const int grades[][ EXAMS ], int pupils, int tests ) 94 double average( const int setOfGrades[], int tests ) 70 { 95 { 71 int i; /* counter */ 96 int i; /* counter */ 72 int j; /* counter */ 97 int total = 0; /* sum of test grades */ 73 int highGrade = 0; /* initialize to lowest possible grade */ 98 74
- 99 /* total all grades for one student */ 123 / * output grades for one student */ 1 00 for ( i = 0; i < tests; i++ ) { 1 24 f or ( j = 0; j < tests; j++ ) { 1 01 total += setOfGrades[ i ]; 1 25 p rintf( "%-5d", grades[ i ][ j ] ); 1 02 } /* end for */ 1 26 } / * end inner for */ 1 03 1 27 1 04 return ( double ) total / tests; /* average */ 1 28 } / * end outer for */ 1 05 1 29 1 06 } / * e n d f u n c t i o n a v e r a g e * / 1 30 } / * end function printArray */ 1 07 1 08 / * P r i n t t h e a r r a y * / 1 09 v o i d p r i n t A r r a y ( c o n s t i n t g r a d e s [ ] [ E X A M S ] , i n t p u p i l s , i n t t e s t s ) The array is: [0] [1] [2] [3] 1 10 { studentGrades[0] 77 68 86 73 1 11 int i; /* counter */ studentGrades[1] 96 87 89 78 1 12 int j; /* counter */ studentGrades[2] 70 90 86 81 1 13 Lowest grade: 68 1 14 /* output column heads */ Highest grade: 96 1 15 printf( " [0] [1] [2] [3]" ); The average grade for student 0 is 76.00 The average grade for student 1 is 87.50 1 16 The average grade for student 2 is 81.75 1 17 /* output grades in tabular format */ 1 18 for ( i = 0; i < pupils; i++ ) { 1 19 1 20 /* output label for row */ 1 21 printf( "\nstudentGrades[%d] ", i ); 1 22 So sánh với lập trình hướng đối tượng (Object Oriented Quy tắc cấu trúc: Có thể viết bất kỳ chương trình nào Programming) chỉ với 3 cấu trúc điều khiển cơ bản: • Trong OOP điểm trọng tâm không phải là mã (code) mà là cái • Tuần tự (Sequential) chúng ta muốn mã thực hiện trên đó (đặt trọng tâm vào đối • Lựa chọn (hay Rẽ nhánh) (Selecttion) tượng!) • Mô tả đối tượng gồm các thuộc tính thuộc hai nhóm: • Lặp (Repetition) – Nhóm tính chất thứ nhất: khuôn dạng, sự tổ chức, kiến trúc (ví dụ: tên gọi, kích thước, mầu sắc, … – Nhóm tính chất thứ 2: sự vận động, sự tương tác với các đối tượng khác (ví dụ: cách tạo lập, hủy bỏ, sự cập nhật (thay đổi kích thước, mầu sắc,..), hình thức tổ hợp với các đối tượng khác • Trong OOP sử dụng các khái niệm cơ bản: đối tượng(object), lớp (class), tính kế thừa (inheritance), phương thức (methods), and tính đa hình (polymorphism). 10 11
- Object Oriented Programming: Mã nguồn cho lập trình cấu trúc Lập trình cấu trúc bắt buộc lập trình viên tiếp cận lập --- Bắt đầu chương trình ---Bắt đầu chương trình trình bắt đầu từ cách nhìn bài toán ở mức khái niệm, object var1 thiết kế chương trình trước khi tiến hành mã hóa (viết { var2 code) varA var3 varB function1 { ... } Lập trình cấu trúc giúp xóa bỏ mã rối (spaghetti code) functionA { ... } function2 { ... } và đảm bảo tính đúng đắn của chương trình. functionB { ... } function3 { ... } } main { ... } varC --- Kết thúc chương trình varD functionC { ... } main { ... } --- Kết thúc chương trình 12 13 Cấu trúc lệnh. Cấu trúc lệnh. Cấu trúc lựa chọn Bài toán if statement if…else statement (single selection) (double selection) Seq uenc e T F T F Thuật toán Thu đa lựa chọn (multiple selection) T F Chương trình T . . − Các thao tác được điều khiển bởi các lệnh tá ượ cá F . . − Các đối tượng chịu thao tác được mô tả thông qua các Cấu trúc dữ liệu ượ tá ượ cá trú . . T F 14 15
- Cấu trúc lệnh. Cấu trúc lựa chọn trong C Ví dụ: if ( grade >= 60 ) printf( "Passed\n" ); Cấu trúc lặp Lặp với điều kiện trước Lặp với điều kiện sau Lặp với số lần lặp cho trước T true F grade >= 60 print “Passed” T T F F false while statement do while statement for statement 16 17 Ví dụ: Sử dụng Toán tử điều kiện (?:) • Thể hiện ba tham số (điều kiện, giá trị nếu true, giá if ( grade >= 60 ) trị nếu false) printf( "Passed\n"); else • Có thể viết lệnh thực hiện, như sau: printf( "Failed\n"); printf( "%s\n", grade >= 60 ? "Passed" : "Failed" ); • Hoặc có thể viết dưới dạng: grade >= 60 ? printf( “Passed\n” ) : printf( “Failed\n” ); false true grade >= 60 print “Failed” print “Passed” 18 19
- Lệnh lặp while trong C while Lặp được kiểm soát bằng biến đếm (Counter) int product = 2; • Lặp đến khi “biến đếm” đạt được giá trị định trước while ( product
- Enter grade, -1 to end: 75 Enter grade, -1 to end: 94 Enter grade, -1 to end: 97 Enter grade, -1 to end: 88 Lặp kiểm soát bởi biến điều khiển (cờ): Enter grade, -1 to end: 70 Enter grade, -1 to end: 64 Ví dụ vấn đề đặt ra là: Enter grade, -1 to end: 83 Program Output Enter grade, -1 to end: 89 Enter grade, -1 to end: -1 • Viết chương trình tính điểm trung bình của một lớp học mà số điểm Class average is 82.50 đưa vào là tuỳ ý và khác nhau mỗi khi chạy chương trình. Enter grade, -1 to end: -1 • Không biết trước số sinh viên No grades were entered • Làm thế nào để biết chương trình sẽ kết thúc ? Sử dụng giá trị điều khiển (lính gác) • Cũng có thể gọi là giá trị tín hiệu, giá trị cờ (flag) • Thể hiện “kết thúc lặp, tính toán xong.” • Kết thúc lặp khi người dùng nhập vào đúng giá trị cờ • Giá trị cờ là giá trị được chọn trước, ngoài phạm vi các giá trị vào thông thường, chẳng hạn giá trị cờ đặt là: -1 thì kết thúc lặp. 25 1 /* Fig. 3.8: fig03_08.c 2 Class average program with sentinel-controlled repetition */ 3 #include 4 5 /* function main begins program execution */ Viết giả lệnh với 3 pha: Khởi tạo, Nhập và tính tổng điêm, Tính và in 6 int main() giá trị trung bình 7 { 8 int counter; /* number of grades entered */ Gán cho total giá trị 0; Gán cho biến đếm counter giá trị 0 9 int grade; /* grade value */ 10 int total; /* sum of grades */ 11 Input điểm đầu tiên ( có thể là cờ) 12 float average; /* number with decimal point for average */ While người dùng chưa dựng cờ 13 Cộng điểm vào biến total 14 /* initialization phase */ Tăng biến đếm lần nhập điểm lên 1 15 total = 0; /* initialize total */ 16 Input điểm của sinh viên tiếp theo (có thể là cờ) counter = 0; /* initialize loop counter */ 17 18 /* processing phase */ 19 /* get first grade from user */ If counter khác 0 20 printf( "Enter grade, -1 to end: " ); /* prompt for input */ Tính giá trị trung bình, chia total cho biến counter 21 scanf( "%d", &grade ); /* read grade from user */ Hiển thị giá trị trung bình 22 else 23 /* loop while sentinel value not yet read from user */ Hiển thị “Bạn đã không vào điểm” 24 while ( grade != -1 ) { 25 total = total + grade; /* add grade to total */ 26 counter = counter + 1; /* increment counter */ 27 26
- 28 p rintf( "Enter grade, -1 to end: " ); /* prompt for input */ 29 s canf("%d", &grade); /* read next grade */ Enter grade, -1 to end: 75 30 } /* end while */ Enter grade, -1 to end: 94 Enter grade, -1 to end: 97 31 Enter grade, -1 to end: 88 32 /* termination phase */ Enter grade, -1 to end: 70 33 /* if user entered at least one grade */ Enter grade, -1 to end: 64 34 Enter grade, -1 to end: 83 if ( counter != 0 ) { Enter grade, -1 to end: 89 35 Enter grade, -1 to end: -1 36 / * calculate average of all grades entered */ Class average is 82.50 37 a verage = ( float ) total / counter; 38 Enter grade, -1 to end: -1 39 / * display average with two digits of precision */ No grades were entered 40 p rintf( "Class average is %.2f\n", average ); 41 } /* end if */ 42 else { /* if no grades were entered, output message */ 43 p rintf( "No grades were entered\n" ); 44 } /* end else */ 45 46 return 0; /* indicate program ended successfully */ 47 48 } / * end function main */ Lệnh lặp for trong C Bản chất của việc lặp được kiểm soát bởi biến đếm: Các yêu cầu lặp kiểm soát bởi biến đếm Counter • Tên của biến kiểm soát (hoặc đếm số lần lặp) • Giá trị đầu tiên của biến kiểm soát • Với mỗi lần lặp thì biến kiểm soát sẽ thay đổi giá trị và có thể tăng lên hoặc giảm xuống • Cần điều kiện để kiểm tra giá trị cuối của biến kiểm soát 30 31
- Các biểu thức số học Lệnh lặp For có thể được viết thành lặp while như sau: Khởi tạo ban đầu; • Khởi tạo ban đầu, tiếp tục lặp lại, và việc thay đổi biến điều while ( Kiểm tra điều kiện tiếp tục lặp ) { khiển có thể là các biểu thức số học. Nếu x = 2 và y = 10 Các lệnh; tăng biến điều khiển (biến đếm); for ( j = x; j
- 1 /* Fig. 4.7: fig04_07.c 2 Counting letter grades */ 29 case 'B': /* grade was uppercase B */ 3 #include 30 case 'b': /* or lowercase b */ 4 31 ++bCount; /* increment bCount */ 5 /* function main begins program execution */ 32 break; /* exit switch */ 6 int main() 33 7 34 { case 'C': /* grade was uppercase C */ 35 8 case 'c': /* or lowercase c */ int grade; /* one grade */ 36 9 ++cCount; /* increment cCount */ int aCount = 0; /* number of As */ 37 break; /* exit switch */ 10 int bCount = 0; /* number of Bs */ 38 11 int cCount = 0; /* number of Cs */ 39 case 'D': /* grade was uppercase D */ 12 int dCount = 0; /* number of Ds */ 40 case 'd': /* or lowercase d */ 13 int fCount = 0; /* number of Fs */ 41 ++dCount; /* increment dCount */ 14 42 break; /* exit switch */ 15 printf( "Enter the letter grades.\n" ); 43 16 printf( "Enter the EOF character to end input.\n" ); 44 case 'F': /* grade was uppercase F */ 17 45 case 'f': /* or lowercase f */ 18 /* loop until user types end-of-file key sequence */ 46 ++fCount; /* increment fCount */ 19 while ( ( grade = getchar() ) != EOF ) { 47 break; /* exit switch */ 20 48 21 /* determine which grade was input */ 49 case '\n': /* ignore newlines, */ 22 switch ( grade ) { /* switch nested in while */ 50 case '\t': /* tabs, */ 23 51 case ' ': /* and spaces in input */ 24 case 'A': /* grade was uppercase A */ 52 break; /* exit switch */ 25 case 'a': /* or lowercase a */ 53 26 ++aCount; /* increment aCount */ 27 break; /* necessary to exit switch */ 28 54 default: /* catch all other characters */ 55 printf( "Incorrect letter grade entered." ); 56 Enter the letter grades. printf( " Enter a new grade.\n" ); Enter the EOF character to end input. 57 break; /* optional; will exit switch anyway */ a 58 } /* end switch */ b 59 c 60 C } /* end while */ A 61 d 62 /* output summary of results */ f 63 printf( "\nTotals for each letter grade are:\n" ); C 64 E printf( "A: %d\n", aCount ); /* display number of A grades */ Incorrect letter grade entered. Enter a new grade. 65 printf( "B: %d\n", bCount ); /* display number of B grades */ D 66 printf( "C: %d\n", cCount ); /* display number of C grades */ A 67 printf( "D: %d\n", dCount ); /* display number of D grades */ b ^Z 68 printf( "F: %d\n", fCount ); /* display number of F grades */ 69 Totals for each letter grade are: 70 return 0; /* indicate program ended successfully */ A: 3 71 B: 2 C: 3 72 } /* end function main */ D: 2 F: 1
- Lệnh lặp do…while trong C do Lệnh lặp do…while Ví dụ • Điều kiện lặp sẽ được kiểm tra sau khi khối lệnh lặp 1 /* Fig. 4.9: fig04_09.c được thực hiện. 2 Using the do/while repetition statement */ 3 #include 4 – Tất cả các hành động (lệnh) trong khối lặp được thực hiện 5 /* function main begins program execution */ ít nhất một lần. 6 int main() 7 { 8 int counter = 1; /* initialize counter */ 9 • Cú pháp: action(s) 10 do { 11 printf( "%d ", counter ); /* display counter */ 12 do { } while ( ++counter
- 1 /* Fig. 4.12: fig04_12.c 2 Using the continue statement in a for statement */ 1 /* Fig. 4.11: fig04_11.c 3 #include 2 Using the break statement in a for statement */ 4 3 #include 5 /* function main begins program execution */ 4 6 int main() 5 /* function main begins program execution */ 7 { 6 int main() 8 int x; /* counter */ 7 { 9 8 int x; /* counter */ 10 /* loop 10 times */ 9 11 for ( x = 1; x
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Giáo Trình Lập Trình Ứng Dụng CSDL Web ASP- P4
5 p | 325 | 167
-
Slide Java (P4)
37 p | 127 | 33
-
Beginning Visual C++® 2005 (P4)
70 p | 66 | 10
-
Giáo trình hình thành quy trình phân tích nguyên lý lập trình cơ bản với Androi p4
10 p | 72 | 8
-
Giáo trình hình thành đoạn mã ứng dụng nguyên lý sử dụng kỹ thuật lập trình trong access với PHP code p4
10 p | 75 | 6
-
Giáo trình hình thành quy trình điều khiển bằng ngôn ngữ visual basic trên java p4
10 p | 73 | 6
-
Giáo trình hình thành ứng dụng phân loại kỹ thuật tạo chuỗi dùng phương thức Peek qua lớp regex p4
10 p | 83 | 5
-
Giáo trình hình thành hệ thống ứng dụng cấu tạo dữ liệu sơ cấp trong ngôn ngữ lập trình p4
10 p | 70 | 4
-
Giáo trình hình thành công thức ứng dụng nguyên lý tích hợp trong điều chỉnh tối ưu của hệ thống p4
10 p | 67 | 4
-
Giáo trình hình thành ứng dụng điều khiển kiểu dữ liệu đa cấp trong ngôn ngữ lập trình p4
10 p | 61 | 4
-
Giáo trình hình thành đối chiếu ứng dụng con trỏ tham chiếu tới các kiểu dữ liệu khác nhau p4
10 p | 66 | 4
-
Giáo trình phân tích nguyên lý sử dụng kỹ thuật lập trình trong access với PHP code p4
5 p | 66 | 4
-
Giáo trình hình thành quy trình ứng dụng các cú pháp trên cùng một modun với các chương trình con p4
10 p | 46 | 3
-
Giáo trình hình thành ứng dụng phân tích cấu tạo và công dụng của máy in theo setup catridge p4
10 p | 69 | 3
-
Giáo trình hình thành phân mạng ứng dụng nguyên lý trong kỹ thuật Segment number p4
10 p | 42 | 3
-
Giáo trình hình thành quá trình vận hành cấu tạo trong bộ tụ đóng mạch cổng truyền thông p4
10 p | 51 | 3
-
Giáo trình hình thành ứng dụng điều khiển đồng bộ dãy kí tự star bit p4
10 p | 57 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn