Kỹ thuật lập trình - Chương 2: Các yếu tố cơ bản của C và C++
2.1 TổchứcchươngtrìnhC/C++
2.2 Biếnvàcáckiểudữliệucơbản
2.3 Cáckiểudữliệudẫnxuấttrựctiếp
2.4 Địnhnghĩakiểudữliệumới
2.5 Điềukhiểnchươngtrình: phânnhánh
2.6 Điềukhiểnchươngtrình: vònglặp
2.7 Mộtsốlệnh₫iềukhiểnchươngtrìnhkhác
al; }; struct Signal { SignalType type; SignalValue value; }; void main() { SignalValue B,W; B.byte = 0x01; W.word = 0x0101; unsigned char b = W.byte; // OK, the lower byte float f = W.real; // meaningless Signal DI1 = {BINARY_8, 0x11}; Signal AI1 = {ANALOG_1,{0}}; Signal AI2; AI2.type = ANALOG_2; AI2.value.lreal = 145.67; } 52 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Tóm lược về hợp nhất Hợp nhất (union) là một tập hợp (không có cấu trúc chặt chẽ) chứa các biến sử dụng chung ô nhớ, ở mỗi ngữ cảnh chỉ sử dụng một biến riêng biệt Union thường ₫ược sử dụng khi dữ liệu ₫ầu vào có thể có kiểu khác nhau Các thành viên của một union không liên quan ₫ến nhau, không cùng nhau tạo thành một thực thể thống nhất Kích cỡ của union bằng kích cỡ của biến lớn nhất Khai báo kiểu union tương tự như khai báo struct, nhưng ý nghĩa khác hẳn Truy nhập biến thành viên cũng tương tự như struct, có thể qua biến trực tiếp hoặc qua biến con trỏ. Union có thể chứa struct, struct có thể chứa union, union có thể chứa mảng, các phần tử của mảng có thể là union. 53 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.5 Điều khiển CT: phân nhánh Các kiểu phân nhánh – if .. else: Phân nhánh lựa chọn một hoặc hai trường hợp – switch .. case: Phân nhánh lựa chọn nhiều trường hợp – break: Lệnh nhảy kết thúc (sớm) một phạm vi – return: Lệnh nhảy và kết thúc (sớm) một hàm – goto: Lệnh nhảy tới một nhãn (không nên dùng!) 54 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.5.1 Cấu trúc if .. else Lựa chọn một trường hợp: sử dụng if if (npoints >= 60) cout << "Passed"; if (npoints >= 80 && npoints <= 90) { grade = ‘A’; cout << grade; } Phân nhánh hai trường hợp: sử dụng if .. else if (npoints >= 90) cout << ‘A’; else if (npoints >= 80) cout << ‘B’; else if (npoints >= 70) cout << ‘C’; else if (npoints >= 60) cout << ‘D’; else cout << ‘F’; 55 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Ví dụ: Hàm max() int max1(int a, int b) { int c; if (a > b) c = a; else c = b; return c; } int max2(int a, int b) { int c = a; if (a < b) c = b; return c; } int max3(int a, int b) { if (a < b) a = b; return a; } int max4(int a, int b) { if (a > b) return a; else return b; } int max5(int a, int b) { if (a > b) return a; return b; } int max6(int a, int b) { return (a > b)? a: b; } 56 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.5.2 Cấu trúc switch .. case Signal input; int i = 0; while (i++ < 8) { input = readInput(i); // read from input module i switch (input.type) { case BINARY_8: cout << input.value.byte; break; case BINARY_16: cout << input.value.word; break; case ANALOG_1: cout << input.value.real; break; case ANALOG_2: cout << input.value.lreal; break; default: cout << "Unknown signal type"; } } 57 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.6 Điều khiển CT: vòng lặp Các kiểu vòng lặp trong C/C++ – while (condition) { } – do { } while (condition) – for (init;condition;post_action) { } Vòng lặp có thể thực hiện với if..else + goto, song không bao giờ nên như vậy Ứng dụng vòng lặp chủ yếu trong làm việc với mảng và các cấu trúc dữ liệu tổng quát khác => truy nhập qua biến mảng + chỉ số, qua con trỏ hoặc qua iterator (sẽ ₫ề cập sau này) 58 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.6.1 Cấu trúc while.. #include void main() { char input[32]; cout << "\nEnter your full name:"; cin.getline(input,31); short nLetters=0, nSpaces=0; short i=0; while (input[i] != 0) { if (input[i] == ' ') ++nSpaces; else ++nLetters; ++i; } cout << "\nYour name has " << nLetters << " letters"; cout << "\nYou have " << nSpaces - 1 << " middle name"; cin >> i; } 59 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Cấu trúc while: Biểu thức ₫iều kiện #include void main() { char input[32], family_name[16]={0}; cout << "\nEnter your full name:"; cin.getline(input,31); short i=0; while (input[i] != 0 && input[i] != ' ') { family_name[i]= input[i]; ++i; } cout << "\nYour family name is " << family_name; cin >> i; } ) { if (input[i] == ' ') break; family_name[i]= input[i]; ++i; } 60 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.6.2 Cấu trúc do while... #include void main() { char input[32], family_name[16]={0}; short i; do { cout << "\nEnter your full name:"; cin.getline(input,31); i = 0; while (input[i] != 0 && input[i] != ' ') { family_name[i]= input[i]; ++i; } cout << "\nYour family name is " << family_name; cout << "\nDo you want to continue? (Y/N):“; cin >> i; } while (i == ‘Y’ || i == ‘N’) } 61 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ 2.6.3 Cấu trúc for .. short i =0; while (input[i]!= 0) { if (input[i]==' ') ++nSpaces; else ++nLetters; ++i; } for (short i=0;input[i]!=0; ++i) { if (input[i] == ' ') ++nSpaces; else ++nLetters; } short i=0; for (;input[i]!=0; ++i) { if (input[i] == ' ') ++nSpaces; else ++nLetters; } short i=0; for (;input[i]!= 0;) { if (input[i]==' ') ++nSpaces; else ++nLetters; ++i; } 62 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Tóm lược các cấu trúc vòng lặp Các cấu trúc vòng lặp while và for tương tự như nhau, thực ra ta chỉ cần một trong hai Cấu trúc do..while tuy có ý nghĩa khác một chút, song cũng có thể chuyển về cấu trúc while hoặc for Các cấu trúc có thể lồng vào nhau tương ₫ối tự do, tuy nhiên tránh lồng quá nhiều ₫ể còn dễ bao quát, khi cần có thể phân hoạch lại thành hàm Điều khiển vòng lặp có thể nằm trực tiếp trên ₫iều kiện, hoặc có thể kết hợp bên trong vòng lặp với các lệnh if..else và break, return Thận trọng trong kiểm tra ₫iều kiện vòng lặp (chỉ số mảng, con trỏ, ...) 63 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Luyện tập ở nhà theo sườn bài giảng Tập tạo dự án mới với Visual C++ Tập viết một chương trình bằng C (₫ặt ₫uôi *.c): — tập khai báo các loại biến, sử dụng các kiểu dữ liệu cơ bản — tập sử dụng các phép toán ₫ã học — sử dụng toán tử sizeof ₫ể tìm kích cỡ các kiểu dữ liệu, in kết quả ra màn hình — biên dịch, chạy thử và tìm lỗi — tập sử dụng công cụ debugger — ₫ổi ₫uôi file thành *.cpp và thử lại Tập viết một chương trình bằng C/C++ khác ₫ể tìm hiểu: — Cách khai báo và sử dụng kiểu hằng, kiểu liệt kê, kiểu con trỏ, kiểu mảng, kiểu tham chiếu (C++), kiểu cấu trúc — bản chất của con trỏ và quan hệ với kiểu mảng 64 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Bài tập về nhà cho chương 2 1. Viết một chương trình bằng C, thực hiện lần lượt các chức năng sau ₫ây: — yêu cầu người sử dụng nhập một số nguyên lớn hơn 0 — phân tích số nguyên ₫ó thành hàng ₫ơn vị, hàng chục, hàm trăm, v.v... và in kết quả lần lượt ra màn hình. — hỏi người sử dụng có yêu cầu tiếp tục hay không, nếu có yêu cầu thì lặp lại 2. Chuyển chương trình thành C++ và ₫ơn giản hóa các câu lệnh vào-ra bằng cách sử dụng thư viện 3. Dựa vào kiểu Date trong bài giảng, viết một chương trình cho phép người sử dụng nhập số liệu cho một ngày, và sau ₫ó: a) Kiểm tra các số liệu ngày, tháng và năm có hợp lệ hay không b) Kiểm tra xem ngày ₫ó có phải là một ngày lễ trong năm hay không c) Xác ₫ịnh ngày tiếp theo là ngày nào d) In các kết quả thông báo ra màn hình 65 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Bài tập lớn 1 (tuần 1-6: Lập trình cấu trúc) 1. Xây dựng một chương trình có chức năng tạo tín hiệu theo yêu cầu người sử dụng về dạng tín hiệu (bậc thang, tín hiệu dốc, xung vuông, hình sin hoặc ồn trắng), tham số của tín hiệu (tùy theo dạng tín hiệu chọn như biên ₫ộ, tần số, ₫ộ dốc, ₫ộ rộng xung,...). Yêu cầu người sử dụng nhập khoảng thời gian cần tạo giá trị tín hiệu cùng thời gian trích mẫu, sau ₫ó ghi các giá trị gián ₫oạn của tín hiệu ra một file với tên do người sử dụng nhập. Gợi ý: sử dụng thư viện cho việc thao tác với file. 2. Xây dựng một chương trình ₫ể tính tích phân của tín hiệu (hay tính diện tích dưới ₫ường cong) bằng phương pháp xấp xỉ hình thang với các giá trị gián ₫oạn của tín hiệu ₫ưa vào từ file tạo ra theo chương trình 1. 3. Suy nghĩ phân hoạch chương trình 1 và 2 thành các hàm ₫ưa vào thư viện. Viết lại các chương trình ₫ó theo thiết kế mới. 66 © 2 0 0 4 , H O À N G M I N H S Ơ N Chương 2: Các yếu tố cơ bản của C và C++ Chỉ dẫn về thực hiện bài tập lớn Bài tập lớn có thể thực hiện riêng hoặc theo nhóm tự chọn (tối ₫a 3 người/nhóm) Bài tập lớn 1 nộp vào cuối tuần 7, bao gồm: — Mô tả theo mẫu trên ít nhất 1 trang giấy về các tư tưởng phân tích, thiết kế và thực thi. — Toàn bộ thư mục dự án (file dự án, mã nguồn và chương trình chạy) cần nén lại dưới dạng *.zip và gửi về ₫ịa chỉ email của giáo viên: luuhongviet@gmail.com. Qui ₫ịnh tên file zip: bắt ₫ầu bằng “P1_”, tiếp theo là tên ₫ầy ₫ủ của người ₫ại diện nhóm, ví dụ “P1_NguyenVanA.zip”. Lưu ý trước khi nén cần xóa tất cả các file phụ trong thư mục “Debug”, chỉ trừ file *.exe. Hoàn thành bài tập lớn không những là ₫iều kiện dự thi học kỳ, mà ₫iểm bài tập lớn còn ₫ược tính vào ₫iểm cuối học kỳ theo một hệ số thích hợp
File đính kèm:
- C2_Basics_of_C_and_Cpp.pdf