Bài giảng Lập trình căn bản - Trường Cao đẳng công nghệ và nông lâm Nam Bộ

pdf 219 trang Gia Huy 17/05/2022 2000
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình căn bản - Trường Cao đẳng công nghệ và nông lâm Nam Bộ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_can_ban_truong_cao_dang_cong_nghe_va_non.pdf

Nội dung text: Bài giảng Lập trình căn bản - Trường Cao đẳng công nghệ và nông lâm Nam Bộ

  1. BỘ NÔNG NGHIỆP VÀ PHÁT TRIỂN NÔNG THÔN TRƯỜNG CAO ĐẲNG CÔNG NGHỆ VÀ NÔNG LÂM NAM BỘ  BÀI GIẢNG LẬP TRÌNH CĂN BẢN Mã số: MĐ 13 NGHỀ: CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ THÔNG TIN Địa chỉ: QL 1K, Phường Bình An, TX. Dĩ An, Tỉnh Bình Dương Email: cn.cnnlnb@gmail.com. [Lưu hành nội bộ] -2018-
  2. GIỚI THIỆU. Lập trình căn bản là mô đun cơ sở bắt buộc cho ngành học công nghệ thông tin nói chung và cho ngành công nghệ thông tin của Trường Cao Đẳng Công Nghệ và Nông Lâm Nam Bộ nói riêng. Theo phân bổ chương trình đào tạo nghề mô đun được giảng dạy với thời lượng 60 tiết gồm các phần sau: - Tổng quan về ngôn ngữ lập trình. - Các thành phần cơ bản. - Các lệnh cấu trúc. - Hàm. - Kiểu mảng. - Chuỗi ký tự. - Biến con trỏ. - Kiểu cấu trúc (Struct). - Kiểu tập tin (File) Học sinh-sinh viên cùng quí đọc giả sẽ nắm bắt được các bước lập trình căn bản, bản chất của một chương trình giả lập trên máy tính thông qua giải thuật và cấu trúc dữ liệu. Phần đầu bài giảng thể hiện được các phương tiện xây dựng một giải thuật thông qua các thành phần cơ bản của trình biên dịch, các lệnh có cấu trúc, các hàm xây dựng sẵn hoặc do người lập trình định nghĩa. Cấu trúc dữ liệu được trình bày ở phần cuối bao gồm các bài về mảng, chuỗi ký tự, kiểu con trỏ, kiểu dữ liệu có cấu trúc và kiểu tập tin. Bài giảng được biên soạn lần đầu tiên nên không tránh khỏi sự thiếu sót và tham khảo từ nhiều nguồn tài liệu khác. Mọi thắc mắc hoặc đóng góp ý kiến xin liên hệ theo địa chỉ email: cn.cnnlnb@gmail.com; Khoa Công Nghệ Thông Tin, Trường Cao Đẳng Công Nghệ & Nông Lâm Nam Bộ, địa chỉ: QL 1K, Phường Bình An, TX. Dĩ An, Tỉnh Bình Dương. Chân thành cảm ơn ! Bình Dương, ngày 01 tháng 8 năm 2018 Nhóm biên soạn
  3. TỪ VIẾT TẮT BPC Biểu đồ phân cấp chức năng, còn viết là Functional Hierarchical Decomposition Diagram (FHD) BFD Mô hình phân rã chức năng (Business Function Diagram) CNTT Công nghệ thông tin. CSDL Cơ sở dữ liệu. DFD Sơ đồ luồng dữ liệu (Data Flow Diagram). BLD Biểu đồ luồng dữ liệu DL Dữ liêu. E-R Thực thể - M ối quan hệ. HT Hệ thống. HTTT Hệ thống thông tin. HSDL Hồ sơ dữ liệu. K T - X H Kinh tế - xã hội. LDT Luồng dữ liệu. NSD Người sử dụng. P T - T K Phân tích và thiết kế X L Xử lý. 3
  4. MỤC LỤC GIỚI THIỆU. 1 MỤC LỤC i Chương 1. ĐẠI CƯƠNG VỀ HỆ THỐNG THÔNG TIN QUẢN LÝ Error! Bookmark not defined. 1.1. HỆ THỐNG THÔNG TIN QUẢN LÝ. Error! Bookmark not defined. 1.1.1. Khái niệm về thông tin, hệ thống thông tin. Error! Bookmark not defined. 1.1.2. Nhiệm vụ và vai trò của hệ thống thông tin. Error! Bookmark not defined. 1.1.3. Thành phần của Hệ thống thông tin: Error! Bookmark not defined. 1.1.4. Các đặc trưng của Hệ thống thông tin: Error! Bookmark not defined. 1 2. CÁC HỆ THỐNG THÔNG TIN THÔNG DỤNG. Error! Bookmark not defined. 1.2.1. Hệ xử lý tác nghiệp (TPS: Transaction Processing Systems). Error! Bookmark not defined. 1.2.2. Hệ thống thông tin quản lý (MIS:Management Information Systems). Error! Bookmark not defined. 1.2.3. Hệ hỗ trợ ra quyết định (DSS: Decision Support Systems). Error! Bookmark not defined. 1.2.4. Hệ thống thông tin tổng thể trong tổ chức hoạt động. Error! Bookmark not defined. 1.2.5. Qúa trình phát triển hệ thống thông tin: Error! Bookmark not defined. 1.3. CÁC THÀNH PHẦN MỘT HỆ THỐNG THÔNG TIN. Error! Bookmark not defined. 1.3.1. Hệ thống trang thiết bị. Error! Bookmark not defined. 1.3.2. Hệ thống phần mềm máy tính. Error! Bookmark not defined. 1.3.3. Hệ thống dữ liệu. Error! Bookmark not defined. 1.3.4. Sự quản lý vận hành hệ thống. Error! Bookmark not defined. 1.4. XÂY DỰNG THÀNH CÔNG MỘT DỰ ÁN CNTT. Error! Bookmark not defined. 1.4.1. Bước 1: Phát triển kế hoạch sơ khởi, giải thích với những người liên quan về tầm quan trọng và thảo luận các thành phần trọng điểm của dự án. Error! Bookmark not defined. 1.4.2. Bước 2: Xác định vai trò và nhiệm vụ Error! Bookmark not defined. 1.4.3. Bước 3: Xác định phát triển phạm vi của dự án Error! Bookmark not defined. 1.4.4. Bước 4: Phát triển chi tiết của phạm vi dự án. Error! Bookmark not defined. 1.4.5. Bước 5: Bắt đầu dự án. Error! Bookmark not defined. 1.4.6. Bước 6: Phát triển lịch trình dự án. Error! Bookmark not defined. 1.4.7. Bước 7: Phát triển kế hoạch sử dụng nhân sự. Error! Bookmark not defined. 1.4.8. Bước 8: Phân tích chất lượng và rủi ro cho dự án. Error! Bookmark not defined. 1.4.9. Bước 9: Phát triển kế hoạch truyền thông. Error! Bookmark not defined.
  5. 1.4.10. Bước 10: Tạo ra bản baseline cho kế hoạch dự án và truyền thông. Error! Bookmark not defined. 1.5. MỘT SỐ PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ. . Error! Bookmark not defined. 1.5.1. Phương pháp thiết kế hệ thống cổ điển (thiết kế phi cấu trúc) . Error! Bookmark not defined. 1.5.2. Phương pháp phân tích thiết kế hệ thống bán cấu trúc. Error! Bookmark not defined. 1.5.3. Phương pháp phân tích thiết kế hệ thống có cấu trúc. Error! Bookmark not defined. 1.6.1. Chiến lược và khảo sát. Error! Bookmark not defined. 1.6.2. Phân tích hệ thống Error! Bookmark not defined. 1.6.3. Thiết kế hệ thống. Error! Bookmark not defined. 1.6.4. Xây dựng. Error! Bookmark not defined. 1.6.5. Kiểm thử và tích hợp hệ thống. Error! Bookmark not defined. 1.6.6. Cài đặt, vận hành và bảo trì hệ thống. Error! Bookmark not defined. Chương 2. KHẢO SÁT HIỆN TRẠNG HỆ THỐNG Error! Bookmark not defined. 2.1. PHƯƠNG PHÁP MÔ HÌNH HOÁ HỆ THỐNG. Error! Bookmark not defined. 2.1.1. Các phương pháp mô hình hóa. Error! Bookmark not defined. 2.1.2. Ba thành phần cơ bản của một phương pháp. Error! Bookmark not defined. 2.1.3. Các phương pháp mô hình hóa. Error! Bookmark not defined. 2.2. NỘI DUNG NGHIÊN CỨU VÀ ĐÁNH GIÁ HIỆN TRẠNG. Error! Bookmark not defined. 2.2.1. Mục đích Error! Bookmark not defined. 2.2.2. Nội dung nghiên cứu và đánh giá hiện trạng Error! Bookmark not defined. 2.3. CÁC NGUỒN ĐIỀU TRA VÀ MỘT SỐ PHƯƠNG PHÁP KHẢO SÁT THƯỜNG DÙNG. Error! Bookmark not defined. 2.3.1. Các nguồn điều tra. Error! Bookmark not defined. 2.3.2. Một số phương pháp khảo sát thường dùng. Error! Bookmark not defined. 2.4. XÂY DỰNG DỰ ÁN. Error! Bookmark not defined. 2.4.1. Lập hồ sơ về điều tra và xác lập giải pháp Error! Bookmark not defined. 2.4.2. Dự trù về thiết bị. Error! Bookmark not defined. 2.4.3. Kế hoạch triển khai dự án. Error! Bookmark not defined. 2.5. GIỚI THIỆU NGHIÊN CỨU HIỆN TRANG MỘT SỐ HỆ THỐNG THÔNG TIN PHỔ BIẾN. Error! Bookmark not defined. 2.5.1. Hệ thống thông tin "Quản lý kho hàng" Error! Bookmark not defined. 2.5.2. Hệ thống thông tin " Quản lý công chức" Error! Bookmark not defined. 2.5.3. Hệ thống thông tin "Quản lý đào tạo" Error! Bookmark not defined. Chương 3. PHÂN TÍCH HỆ THỐNG VỀ CHỨC NĂNG Error! Bookmark not defined. ii
  6. 3.1. SƠ ĐỒ CHỨC NĂNG NGHIỆP VỤ. Error! Bookmark not defined. 3.1.1. Định nghĩa mô hình phân rã chức năng. Error! Bookmark not defined. 3.1.2. Các thành phần của mô hình phân rã chức năng. . Error! Bookmark not defined. 3.2. SƠ ĐỒ DÒNG DỮ LIỆU. Error! Bookmark not defined. 3.2.1. Mục đích. Error! Bookmark not defined. 3.2.2. Định nghĩa Error! Bookmark not defined. 3.2.3. Các thành phần của mô hình dòng dữ liệu Error! Bookmark not defined. 3.2.4. Một số quy tắc Error! Bookmark not defined. 3.2.5. Trình tự xây dựng sơ đồ dòng dữ liệu Error! Bookmark not defined. 3.2.6. Chuyển từ mô hình luồng dữ liệu vật lý sang mô hình luồng dữ liệu logic . Error! Bookmark not defined. 3.2.7. Chuyển từ mô hình luồng dữ liệu của hệ thống cũ sang mô hình luồng dữ liệu của hệ thống mới Error! Bookmark not defined. 3.2.8. Hoàn chỉnh mô hình dòng dữ liệu Error! Bookmark not defined. 3.3. ĐẶC TẢ TIẾN TRÌNH. Error! Bookmark not defined. 3.3.1. Mục đích và yêu cầu đặc tả chức năng Error! Bookmark not defined. 3.3.2. Các phương tiện đặc tả chức năng Error! Bookmark not defined. Chương 4. PHÂN TÍCH HỆ THỐNG VỀ DỮ LIỆU Error! Bookmark not defined. 4.1. PHƯƠNG TIỆN MÔ TẢ DỮ LIỆU. Error! Bookmark not defined. 4.1.1. Mã hóa dữ liệu Error! Bookmark not defined. 4.1.2. Từ điển dữ liệu Error! Bookmark not defined. 4.2. XÂY DỰNG MÔ HÌNH THỰC THỂ LIÊN KẾT. Error! Bookmark not defined. 4.2.1. Các khái niệm Error! Bookmark not defined. 4.2.2. Đặc tả mối quan hệ giữa hai kiểu thực thể Error! Bookmark not defined. 4.2.3. Mô hình thực thể liên kết mở rộng và hạn chế Error! Bookmark not defined. 4.2.4. Các phương pháp xây dựng mô hình Error! Bookmark not defined. 4.3. CHUYỂN ĐỔI SANG MÔ HÌNH QUAN HỆ DỮ LIỆU. Error! Bookmark not defined. 4.3.1. Một số khái niệm Error! Bookmark not defined. 4.3.2. Chuẩn hóa quan hệ Error! Bookmark not defined. 4.3.3. Phương pháp lập lược đồ dữ liệu theo mô hình Error! Bookmark not defined. Chương 5. THIẾT KẾ HỆ THỐNG Error! Bookmark not defined. 5.1. THIẾT KẾ TỔNG THỂ. Error! Bookmark not defined. 5.1.1. Phân định hệ thống máy tính và hệ thống thủ công Error! Bookmark not defined. 5.1.2. Xác định các hệ thống con máy tính. Error! Bookmark not defined. 5.1.3. Sơ đồ luồng dữ liệu hệ thống Error! Bookmark not defined. iii
  7. 5.2. THIẾT KẾ GIAO DIỆN NGƯỜI – MÁY. Error! Bookmark not defined. 5.2.1. Thiết kế giao diện hướng đối thoại Error! Bookmark not defined. 5.2.2. Thiết kế màn hình Error! Bookmark not defined. 5.2.3. Thiết kế báo cáo Error! Bookmark not defined. 5.3. THIẾT KẾ KIỂM SOÁT Error! Bookmark not defined. 5.3.1. Kiểm soát dữ liệu vào/ra Error! Bookmark not defined. 5.3.2. Kiểm soát các sự cố làm gián đoạn chương trình Error! Bookmark not defined. 5.3.3. Kiểm soát xâm phạm từ con người Error! Bookmark not defined. 5.4. THIẾT KẾ CHƯƠNG TRÌNH Error! Bookmark not defined. 5.4.1. Thiết kế cấu trúc chương trình Error! Bookmark not defined. 5.4.2. Đặc tả modul Error! Bookmark not defined. TÀI LIỆU THAM KHẢO Error! Bookmark not defined. THUẬT NGỮ SỬ DỤNG 191 A 191 B 192 C 192 D 194 E 196 F 197 G 198 H 198 I 198 K 199 L 200 M 200 N 201 O 201 P 202 R 204 S 204 T 207 U 208 V 208 W 208 iv
  8. NỘI DUNG TỔNG QUÁT VÀ PHÂN BỐ THỜI GIAN MÔ – ĐUN Số Tên các bài trong mô đun Thời gian TT Tổng Lý Thực Kiểm số thuyết hành tra* 1 Mở đầu: Giới thiệu mô đun Lập trình căn bản. 2 Tổng quan về ngôn ngữ lập trình. 2 2 3 Các thành phần cơ bản. 7 2 5 4 Các lệnh cấu trúc. 12 4 7 1 5 Hàm. 10 3 7 6 Kiểu mảng. 10 3 7 7 Chuỗi ký tự. 8 2 5 1 8 Biến con trỏ. 5 2 3 9 Kiểu cấu trúc (Struct). 3 1 2 10 Kiểu tập tin (File) 3 1 2 Cộng 60 20 38 2 * Ghi chú: Thời gian kiểm tra được tích hợp giữa lý thuyết với thực hành được tính vào giờ thực hành. 1
  9. THIẾT BỊ - DỤNG CỤ - VẬT LIỆU (CỦA MÔ - ĐUN) TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 80 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte 2
  10. Bài 1. NGÔN NGỮ LẬP TRÌNH VÀ PHƯƠNG PHÁP LẬP TRÌNH A. MỤC TIÊU. - Trình bày được các nét cơ bản về ngôn ngữ lập trình, các bước lập trình, kỹ thuật lập trình. - Ứng dụng được các kiến thức nói trên vài các bài tập. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 3 III VẬT LIỆU 1 Các cấu trúc lệnh, byte 2 Cấu trúc dữ liệu byte 3
  11. C. NỘI DUNG. 1.1. NGÔN NGỮ LẬP TRÌNH (ProgrammingLanguage) - Thuật giải (Algorithm) Thuật giải là một tập các thao tác hữu hạn trên một đối tượng cụ thể nhằm đạt được những mục tiêu ban đầu . R.A.Kowalski có nói: Thuật giải = Logic + Điều khiển + Logic: Thể hiện tính thống nhất và liên hệ chặt chẽ giữa các mặt trong một sự vật, sự việc. Ở đây muốn nói tính logic của một quá trình giải quyết bài toán là bao gồm các bước thực hiện theo một trình tự hợp lí và tương quan đúng đắn giữa chúng + Điều khiển: Các cách thể hiện tính logic ấy của các mặt trong một đối tượng. - Chương trình (Program) Là một tập hợp các mô tả, các phát biểu, nằm trong một hệ thống qui ước về ý nghĩa và thứ tự thực hiện, nhằm điều khiển máy tính làm việc. Theo Niklaus Wirth thì: Chương trình = Thuật giải + Cấu trúc dữ liệu - Các loại lệnh trong một chương trình: + Tuần tự (Sequential): Các lệnh thực hiện tuần tự chính xác từ trên xuống. Các lệnh chỉ thực hiện đúng một lần. + Chọn lọc (Selection): Chọn một trong hai hay nhiều khối lệnh để thực thi. + Lặp lại (Repetition): Một khối lệnh được thực hiện lại một số lần. - Lập trình viên cần tuân theo các bước sau: - Ngôn ngữ lập trình (Programming language) Ngôn ngữ lập trình là hệ thống các ký hiệu tuân thủ các qui ước về ngữ pháp và ngữ nghĩa, nhằm xây dựng các chương trình trên máy tính. 4
  12. Chương trình nguồn là chương trình được soạn thảo trên các ngôn ngữ lập trình nhất định như Pascal, C Chương trình dịch sẽ biện dịch chương trình nguồn này thành chương trình thực thi được trên máy. 1.2. CÁC BƯỚC LẬP TRÌNH Việc lập trình cần tuân theo các bước sau: Bước 1: Phân tích đối tượng (vấn đề) và xác định được các đặc điểm. (Xác định Input-Process-Output) Bước 2: Đưa ra các giải pháp. (các thuật giải) Bước 3: Cài đặt. (viết chương trình) Bước 4: Dịch chương trình. Bước 5: Thực nghiệm (Kiểm chứng) và hoàn thiện chương trình. 1.3. KỸ THUẬT LẬP TRÌNH - Qúa trình nhập - xử lý - xuất Qúa trình xử lý của máy tính gồm I-P-O. Process + Input là đầu vào quá trình xử lý (Process). + Output kết quả của quá trình xử lý. Ví dụ 1: Xác định Input, Process, Output của việc làm 1 ly nước chanh nóng Input : ly, đường, chanh, nước nóng, muỗng. Process : - Cho hỗn hợp đường, chanh, nước nóng vào ly. - Dùng muỗng khuấy đều. Output : ly chanh nóng đã sẵn sàng để dùng. Trình tự thực hiện: TT BƯỚC CÔNG VIỆC THỰC HIỆN PHƯƠNG TIỆN 1 Xác định input Ly, đường, chanh, nước nóng, Cách thức xác muỗng. định input. 2 Xác định process - Cho hỗn hợp đường, chanh, Cách thức xác nước nóng vào ly. định quá trình xử - Dùng muỗng khuấy đều. lý. 3 Xác định output Ly chanh nóng đã sẵn sàng để Cách thức xác dùng. định output. 5
  13. Ví dụ 2: Xác định Input, Process, Output của chương trình tính tiền lương công nhân tháng 10/2002 biết rằng lương = lương căn bản * ngày công Input : lương căn bản, ngày công Process : nhân lương căn bản với ngày công Output : lương Trình tự thực hiện TT BƯỚC CÔNG VIỆC THỰC HIỆN PHƯƠNG TIỆN 1 Xác định input Lương căn bản, ngày công. Cách thức xác định input. 2 Xác định process Nhân lương căn bản với ngày Cách thức xác công. định quá trình xử lý. 3 Xác định output Lương. Cách thức xác định output. Ví dụ 3: Xác định Input, Process, Output của chương trình giải phương trình bậc nhất ax + b = 0 Input : hệ số a, b Process : chia - b cho a Output : nghiệm x Trình tự thực hiện TT BƯỚC CÔNG VIỆC THỰC HIỆN PHƯƠNG TIỆN 1 Xác định input Hệ số a, b. Cách thức xác định input. 2 Xác định process Chia - b cho a. Cách thức xác định quá trình xử lý. 3 Xác định output Nghiệm x. Cách thức xác định output. Ví dụ 4: Xác định Input, Process, Output của chương trình tìm số lớn nhất của 2 số a và b. Input : a, b 6
  14. Process : Nếu a > b thì Output = a lớn nhất Ngược lại Output = b lớn nhất Trình tự thực hiện TT BƯỚC CÔNG VIỆC THỰC HIỆN PHƯƠNG TIỆN 1 Xác định input a, b Cách thức xác định input. 2 Xác định process Nếu a > b thì Output = a lớn nhất Cách thức xác Ngược lại Output = b lớn nhất định quá trình xử lý. 3 Xác định output Giá trị lớn nhất. Cách thức xác định output. - Sử dụng lưu đồ (Flowchart) Để dễ hơn về quy trình xử lý, các nhà lập trình đưa ra dạng lưu đồ để minh họa từng bước quá trình xử lý một vấn đề (bài toán). 7
  15. (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học 9
  16. (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không nắm rõ yêu cầu Kĩ năng phân tích bài toán Xác định được input, bài toán. hạn chế. output và proccessing 2 Không phân biệt được Cơ sở lí luận, kiến thức toán Củng cố lại kiến thức giải thuật, cấu trúc dữ học, kiến thức bộ nhớ chính toán, kiến thức bộ nhớ liệu. còn hạn chế. chính máy tính. 3 Nhằm lẫn các kí hiệu Tiếp nhận kiến thức không Trao dồi thường xuyên lưu đồ thuật toán. đầy đủ. 10
  17. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Ngôn ngữ lập trình. 3 2 Các bước lập trình. 2 3 Kỹ thuật lập trình. 5 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong việc thực hiện các thao tác 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 11
  18. Bài 2. LÀM QUEN LẬP TRÌNH C QUA CÁC VÍ DỤ ĐƠN GIẢN A. MỤC TIÊU. - Trình bày được các chức năng cơ bản của trình biên dịch C. - Lập trình được các bài toán đơn giản. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 4 III VẬT LIỆU 1 Các cấu trúc lệnh, byte 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 2.1. KHỞI ĐỘNG VÀ THOÁT BORLAND C. - Khởi động Ta có thể khởi động Borland C theo các cách sau: 12
  19. Khởi động tại dấu nhắc DOS: Tùy theo tập tin BC.EXE được lưu trữ tại đâu thì ta có đường dẫn cần nhập tại dấu nhắc DOS tương ứng. Ví dụ tập tin BC.EXE được lưu tại C:\ BORLANDC\BIN thì để khởi động Borland C ta cần nhập đường dẫn: C:\BORLANDC\BIN\BC ↵ Khởi động trên Windows: Ta dùng Window Explorer để chọn và mở ổ đĩa có chứa thư mục BORLANDC và tập tin BC.EXE, rồi khởi chạy tập tin BC.EXE này. Màn hình sau khi khởi động thành công Trình tự TT BƯỚC CÔNG VIỆC THỰC HIỆN PHƯƠNG TIỆN 1 Cách 1: Khởi động thông C:\ BORLANDC\BIN Dùng tiện ích qua đường dẫn lệnh. cmd.exe, file chương trình 2 Cách 2: Kích hoạt icon BC.exe, File chương trình. chương trình đã cài đặt hoặc click vào tệp tin chạy. - Thoát Để thoát chương trình Borland C ta dùng tổ hợp phím tắt Alt – X. Thêm cách nữa là ta mở menu File rồi chọn Quit. 1. Các ví dụ đơn giản 13
  20. Ví dụ 1 Kết quả in ra màn hình Cặp dấu /* */ : Dùng bao bọc những chú thích cần thiết trong việc lập trình. Việc này làm cho chương trình được dễ hiểu và rõ ràng hơn. Khi thông biên dịch chương trình dòng có cặp dấu này không được thực thi. #include Tiền xử lý này buộc phải có bởi đây là thư viện của hàm printf . Nếu không có thư viện thì chương trình sẽ bị báo lỗi. Hàng cách dòng: Người lập trình nên viết cách dòng sau một nhóm lệnh nào đó nhằm làm cho chương trình được thông thoáng và dễ đọc hơn. void main(void): Đây là hàm chính của các chương trình. Ta có thể viết theo các cách sau cho hàm chính với ý nghĩa là hàm chính không nhận giá trị trả về, hàm chính không có bất kì tham số nào: main() hoặc void main() hoặc void main(void)). Hàm main luôn được thực thi đầu tiên trong chương trình. Cặp dấu ngoặc móc {}: Bao bọc nhóm lệnh thuộc hàm main(). printf("Xin chào các bạn! Hãy bước vào thế giới lập trình.");:Dòng lệnh có chức năng xuất chuỗi "Xin chào các bạn! Hãy bước vào thế giới lập trình." ra màn hình. Kết thúc mỗi câu lệnh ta phải dùng “;”. 14
  21. Để chạy chương trình ta ấn tổ hợp phím Ctrl + F9, nhưng lúc này ta thấy màn hình màu đen xuất hiện chớp tắt rât nhanh. Thay vào đó ta nên dùng Alt + F5 để xem kết quả. Kết thúc quá trình chạy ta nhấn phím bất kì để trở về màn hình soạn thảo chương trình. Nếu dòng lệnh printf có bổ sung thêm “\n” như sau: printf("Xin chào các bạn! Hãy bước vào thế giới lập trình.\n"); Kết quả in ra màn hình Vậy “\n” có chức năng xuống dòng cho chuỗi câu trong câu lệnh printf tiếp theo. Dưới đây là một số kí hiêu với các chức năng khác : \ n : Chức năng xuống dòng tiếp theo và về cột đầu. \ t : Canh tab ngang. \ r : Về đầu dòng và không xuống dòng. \ a : Phát tiếng kêu beep. \\ : In ra dấu \ \" : In ra dấu " \' : In ra dấu ' Thay thế tổ hợp phím Alt + F5 ta viết bằng dòng lệnh getch() như sau: Chương trình được viết lại có thêm tiền xử lý #include bởi conio.h là thư viện xác định dòng lệnh getch(). Dĩ nhiên chương trình sẽ bị báo lỗi nếu không có thư viện này. 15
  22. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Lệnh Lệnh xử lý printf, lệnh getch(). Ví dụ 2 int i;: Đây là lệnh khai báo, i gọi là tên biến. Biến là một vị trí nào đó trong bộ nhớ dùng lưu trữ giá trị và cho chương trình sử dụng đến. Biến phải có kiểu dữ liệu. Ví dụ trên cho thấy biến i có kiểu dữ liệu số nguyên integer được viết tắt int. 17
  23. Lệnh scanf trong ví dụ dùng để nhận một giá trị từ người nhập. %d và &i là các đối mục của hàm scanf. Giá trị của người nhập được lưu vào biến i theo kiểu định dạng số nguyên %d. Kết quả hiển thị: Trình tự thực hiện BƯỚC CÔNG PHƯƠNG TT THỰC HIỆN VIỆC TIỆN 1 Khai báo thư viện Các file thư chương trình. viện. 2 Thân chương trình Hàm main, từ khóa void. 3 Lệnh xử lý Lệnh printf, scanf, biến i, lệnh getch(). Ví dụ 3 18
  24. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Lệnh Lệnh xử lý printf, scanf, biến N1, N2, lệnh getch(). Ví dụ 4 19
  25. #define PI 3.14: Hằng số PI trị là 3.14. Để máy hiểu điều này ta dùng define. Đây cũng như hình thức định nghĩa hằng số PI khi mã hóa. Không cần dấu “;” phía sau lệnh này và phía trước là dấu “#”. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Khai báo Từ khóa hằng define. 3 Thân Hàm main, chương từ khóa trình void. 20
  26. 4 Lệnh xử lý Lệnh printf, scanf, biến fR, lệnh getch(). (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không làm chủ được Tần suất sử dụng chương Trao dồi nhiều trên trình biên dịch C++. trình thấp. trình biên dịch. 2 Chưa nắm vững bố cục Không phân biệt được phần Cần nắm rõ nguyên tắc: chương trình thực thi. khai báo thư viện, khai báo dữ Chương trình= Cấu liệu, giải thuật chương trình. trúc dữ liệu+ Giải thuật. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Khởi động và thoát Borland C. 2 2 Các ví dụ đơn giản. 8 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 21
  27. Bài 3. CÁC THÀNH PHẦN TRONG NGÔN NGỮ C A. MỤC TIÊU. - Trình bày được các từ khóa cơ bản, qui tắc đặt tên, kiểu dữ liệu, cách chú thích, cách khai báo biến, các phép toán và biểu thức. - Vận dụng các kiến thức trên để lập trình các bài toán cơ bản. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 5 III VẬT LIỆU 1 Các cấu trúc lệnh, byte 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 3.1. TỪ KHÓA Từ khóa: Từ khóa có ý nghĩa cụ thể liên quan đến việc khai báo dữ liệu, viết lệnhTừ khóa trong C được viết thường . 22
  28. 1. Tên Tên thể hiện rõ ý nghĩa trong chương trình và được dùng để xác định các đại lượng khác nhau khi viết chương trình. Tên dùng đặt cho biến, hằng, mảng, nhãn, hàm(Function) Tên có tối đa 32 ký tự. Tên hợp lệ chỉ gồm: Chữ, số và dấu gạch dưới. Tên bắt đầu chỉ là kí tự chữ hoặc dấu gạch dưới. Tên và từ khóa không được trùng nhau. Tên trong C có phân biệt hoa thường. Ví dụ 1 : Tên đúng: max, c_2, Num_MIN, If Tên sai: 4abc, giai-thua, if, phuong trinh, y(x) . 2. Kiểu dữ liệu Các kiểu dữ liệu cơ bản trong C là: char, int, float và double. Mã Ascii 23
  29. - Nhóm mã dành cho kí tự điều khiển + Xuống dòng: 10(10)= 00001010(2) + Esc : 27(10)= 0001 1011 (2) - Nhóm mã dành cho kí tự hiển thị + Khoảng trống: 32(10)= 00100000 (2) + @ : 64(10)= 01000000 (2) + “A” : 65(10)= 01000001 (2) +“Z” : 90(10)= 01011010 (2) + “a” = Ascii(“A”) + 32 = 65 +32 =97 + “z” = Ascii(“Z”) + 32 = 90 +32 =122 3. Ghi chú Ví dụ 3 : Kết quả chương trình 24
  30. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Lệnh xử lý Lệnh printf, câu lệnh if, biến N1, N2. 4. Khai báo biến - Tên biến Việc đặt tên biến như đã nói ở trên 3.2 - Khai báo biến Khai báo: Kiểu dữ liệu Danh sách tên biến; Danh sách tên biến là các biến có cùng kiểu dữ liệu, mỗi biến cách nhau bởi dấu phẩy. Kết thúc câu lệnh khai bao là dấu “;”. Theo qui tắc khai báo biến kiểu Hungarian Notation thì cần thêm kí tự đầu tiên của kiểu dữ liệu vào trước tên biến. Điều này giúp cho lập trình viên hiểu được đây là biến kiểu gì. Cần tuân theo qui tắc này khi đặt tên biến. Ví dụ 4: int imax; float fdiem; char ckitu; Vừa khai báo vừa khởi gán Trong quá trình khai báo biến ta có thể khởi trị cho biến này thông qua toán tử gán. Ví dụ 5 : Khai báo trước, gán giá trị sau: 25
  31. Vừa khai báo vừa gán giá trị: Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 26
  32. 3 Lệnh xử lý Toán tử gán, ba biến ia, ib, ic. 5. Biểu thức Là sự phối hợp của những toán tử và toán hạng. Ví dụ 1: a+b b = 1 + 5 * 2/i a = 6 % (7 + 1) x++ * 2/4 + 5 - power(i, 2) Toán hạng sử dụng trong biểu thức có thể là hằng số, biến, hàm. 6. Phép toán Có 4 nhóm toán tử chính yếu trong C như sau: Phép toán số học: + : cộng - : trừ * : nhân / : chia % : lấy phần dư Áp dụng trên tất cả các toán hạng có kiểu dữ liệu char, int, float, double (kể cả long, short, unsigned) Áp dụng trên các toán hạng có kiểu dữ liệu char, int, long cho phép toán %. Ví dụ 2: 10%4 = 2 (10 chia 4 dư 2) 9%3 = 0 (9 chia 3 dư 0) 3 * 5 + 4 = 19 6+2/2-3=4 -7 + 2 * ((4 + 3) * 4 + 8) = 65 Chỉ sử dụng cặp ngoặc () trong biểu thức, cặp ngoặc đơn được thực hiện theo thứ tự ưu tiên từ trong ra ngoài. Phép quan hệ: > : lớn hơn 27
  33. >= : lớn hơn hoặc bằng , >= , 10 có giá trị 0 (sai) 4 >= 4 có giá trị 1 (đúng) 3 == 5 có giá trị 0 (sai) 2 4) - Giàu || Nghèo * Thứ tự ưu tiên giữa các toán tử: 28
  34. - Phép toán trên bit (bitwise) & : và (AND) | : hoặc (OR) ^ : hoặc loại trừ (XOR) >> : dịch phải << : dịch trái ~ : đảo Ví dụ 5: a = 13 đổi ra hệ nhị phân 1101 b = 10 đổi ra hệ nhị phân 1010 1101 1101 1101 & 1010 | 1010 ^ 1010 = 1000 = 1111 = 0111 = 8 = 15 = 7 - Các phép toán khác a. Phép toán gán Phép gán là thay thế giá trị hiện tại của biến bằng một giá trị mới. Các phép gán: =, +=, -=, *=, /=, %= Ví dụ 6: ta có giá trị i = 3 i=i+3 i=6 i += 3 i=6  i=i+3 i *= 3 i=9  i=i*3 29
  35. - Phép toán tăng, giảm: ++, Toán tử ++ sẽ cộng thêm 1 vào toán hạng của nó, toán tử sẽ trừ đi 1. Ví dụ 7: Ta có giá trị n = 6 + Sau phép tính ++n hoặc n++, ta có n = 7. + Sau phép tính n hoặc n , ta có n = 5. * Sự khác nhau giữa ++n và n++, n và n + Sau phép tính x = ++n + 2, ta có x = 9. (n tăng 1 cộng với 2 rồi gán cho x) + Sau phép tính x = n++ + 2, ta có x = 8. (n cộng với 2 gán cho x rồi mới tăng 1cho n. Lúc này n=7 nhưng x vẫn là 8) (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không nắm vững các Tiếp nhận kiến thức hạn chế. Trao dồi thông qua các từ khóa trình biên dịch bài tập mẫu. C++ , không phân biệt rõ các kiểu dữ liệu, qui tắc đặt tên biến, hằng, 2 Các qui tắc trên bảng Kiến thức chuyển đổi giữa hệ Hệ thống lại kiến thức mã Ascii. thập, nhị phân hạn chế. chuyển đổi giữa hệ thập, nhị phân. Ghi nhớ mã Ascii của các kí tự cơ bản. A. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Từ khóa 1 2 Tên 1 30
  36. 3 Kiểu dữ liệu 2 4 Ghi chú 1 5 Khai báo biến 2 6 Biểu thức 1 7 Phép toán 2 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 Bài 4 NHẬP / XUẤT DỮ LIỆU A. MỤC TIÊU. - Trình bày được lệnh nhập xuất dữ liệu - Ứng dụng lệnh nhập xuất vào các bài tập. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. 31
  37. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 6 III VẬT LIỆU 1 Các cấu trúc lệnh, byte 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 1. Hàm printf Hàm này có chức năng in ra màn hình chuỗi định dạng Hàm nàyPrintf( để sử“ dụngchuỗi cần định khai dạng báo” tiền, đối xử mục lý #include1, đối mục 2, ); . Các đối mục 1, là các giá trị cần in ra màn hình. Đối mục có thể là biến, là hằng hoặc biểu thức đã định trị. Các đối mục trước khi in ra màn hình cần được định dang. Phần định dạng này được lòng ghép với chuổi kí tự cần xuất ra màn hình. Đây được gọi là chuổi định dạng và nó được đặt trong cặp dấu “” Dưới đây là một số mã định dang cho các đối mục: %c : Định dạng cho ki tự %s : Định dạng cho chuỗi %d : Định dạng cho số nguyên có dấu %f : Định dạng cho số chấm động (Dạng thập phân) Nếu thêm tiền tố l vào trước %d, %u, %x, %o ta được các số có trị lớn hơn (ví dụ %ld) \n : Xuống dòng và trở về cột đầu tiên. \t : Canh cột tab ngang. \r : Về đầu dòng và không xuống dòng. \a : Tiếng kêu bip. \\ : In dấu \ \" : In dấu " \' : In dấu ' %%: In dấu % Ví dụ 1: printf("Vi du ve ki tu dieu khien \n"); 32
  38. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Lệnh xử Lệnh lý printf, getch(). Ví dụ 2: printf("In ra chuoi ki tu, ki tu dieu khien va ki tu dac biet \\\ , \" . \n"); 33
  39. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Lệnh xử Lệnh lý printf, getch(). Ví dụ 3: Nếu biến i có giá trị là 7, kết quả sẽ như sau khi thực hiện câu lệnh printf("Gia tri cua bien i la: %d . \n", i); Kết quả chương trình 34
  40. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Lệnh xử lý Biến i, lệnh printf, getch(). Ví dụ 4: printf("Tong cua 2 so %d va %d la %d . \n", a, b, a+b); Kết quả in ra màn hình: Trình tự thực hiện 35
  41. BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Lệnh Biến a, b, xử lý lệnh printf, getch(). Ví dụ 5: printf("Tong cua 2 so %5d va %3d la %1d . \n", a, b, a+b); Kết quả in ra man hình: Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện 36
  42. chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Lệnh Biến a, b, xử lý lệnh printf, getch(). Ví dụ 6: printf("Tong cua 2 so %-5d va %-3d la %-1d . \n", a, b, a+b); Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện 37
  43. chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Lệnh Biến a, b, xử lý lệnh printf, getch(). Ví dụ 7: printf("Tong cua 2 so %02d va %02d la %04d . \n", a, b, a+b); 38
  44. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Lệnh Biến a, b, xử lý lệnh printf, getch(). Ví dụ 8: printf("%7d%7d%7d.\n", a, b, c); printf("%7d%7d%7d.\n", 165, 2, 965); 39
  45. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Lệnh xử lý Biến a, b, c, lệnh printf, getch(). 2. Hàm scanf Hàm này có chức năng nhập liệu theo định dạng: scanf(“ chuỗi định dạng”, &đối mục 1, &đối mục 2, ); - Cần khai báo tiền xử lý #include cho hàm scanf. - Hàm scanf viết thường. Dữ liệu nhập vào cũng cần phải định dạng. - Dấu “” bao bọc chuỗi định dạng. Các đối mục cách nhau bởi “,”. - Mỗi đối mục sẽ lưu trữ một giá trị nhập vào. Ví dụ 11: scanf("%d", &i); Nếu nhập vào 14xyz, biến i chỉ nhận giá trị 14. Nếu nhập 7.4, i chỉ nhận giá trị 7 40
  46. Ví dụ 12: scanf("%d%d", &a, &b); Ví dụ 13: scanf("%d/%d/%d", &day, &month, &year); (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không nắm vững Không nắm rõ qui tắc thể hiện Trao dồi thường xuyên. chuỗi định dạng trong chuỗi định dạng. Chưa phân 2 câu lệnh printf, biệt được các mã định dạng scanf. cho các kiểu dữ liệu. 2 Không phân biệt được Không phân biệt được các Cần ghi nhớ toán tử & các đối mục trong lệnh trường hợp sử dụng toán tử luôn có trước 1 biến scanf và lệnh printf. lấy địa chỉ &. trong lệnh scanf. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Hàm printf 5 2 Hàm Scanf 5 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 41
  47. Tổng điểm 10 42
  48. Bài 5 CẤU TRÚC RẼ NHÁNH CÓ ĐIỀU KIỆN (Cấu trúc chọn) A. MỤC TIÊU. - Trình bày được lệnh, khối lệnh, lệnh if, lệnh switch. - Lập trình các bài toán có các lệnh rẽ nhánh. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 10 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 1. Lệnh và khối lệnh - Lệnh Là những tác vụ, biểu thức, hàm, cấu trúc điều khiển Ví dụ 1: s + = i ; printf("Lenh in ra man hinh.\n"); 43
  49. - Khối lệnh Là một dãy các câu lệnh được đặt trong cặp dấu { }, nên thụt vào một tab các lệnh trong khối lệnh so với cặp dấu { } . Ví dụ 2: { x= 5; y = 6; printf("Tong %d + %d = %d", x, y, x+y); } 2. Lệnh if Câu lệnh if thể hiện khã năng lựa chọn một trong hai hay nhiều trường hợp tùy thuộc vào tính đúng sai của biểu thức điều kiện (biểu thức luận lí). - Dạng 1 (if thiếu) Khối lệnh sẽ được thực hiện hay không phụ thuộc vào trị đúng hoặc sai của biểu thức luận lí. • Cú pháp lệnh if được viết thường, biểu thức luận lí thuộc một trong hai chân trị: đúng (≠ 0) hoặc sai (= 0). Trước tiên máy kiểm tra trị của biểu thức luận lí. Nếu biểu thức đúng thì khối lệnh được thực hiện và kết thúc câu lệnh. Ngược lại khi biểu thức luận lí sai thì không làm gì cả và kết thúc lệnh. Ví dụ 3: Viết chương trình nhập vào hai số nguyên. Tìm và xuất số lớn nhất. 44
  50. - Phác họa lời giải Đầu tiên ta cho giá trị N1 là lớn nhất. Tiếp đó ta so sánh N2 với N1, nếu N2 lớn hơn N1 ta gán N2 cho max Vậy giá trị lớn nhất là max. - Mô tả quy trình xử lý (giải thuật) - Mô tả bằng lưu đồ Viết chương trình 45
  51. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Nhập liệu Biến N1, N2, hàm nhập xuất dữ liệu. 3 Quá trình xử Lệnh if lý 4 Xuất kết quả Lệnh xuất dữ liệu. - Dạng 2 (if đủ) Thực hiện một trong hai khối lệnh cho trước. 46
  52. Trị của biểu thức luận lý phải là đúng ( 0) hoặc sai (= 0) . Khối lệnh chỉ có một lệnh thì không nhất thiết phải dùng dấu “{}”. Nếu biểu thức luận lý đúng thì khối lệnh 1 được thực hiện và kết thúc câu lệnh if, ngược lại hệ thống sẽ thực hiện khối lệnh 2 và kết thúc lệnh if. Ví dụ 5: Viết chương trình nhập hai số nguyên. Xuât ra màn hình thông báo "N1 bằng N2" nếu N1 = N2, ngược lại in ra thông báo "N1 khác N2". - Phác họa lời giải So sánh hai số N1 và N2, nếu N1 bằng N2 thì in ra câu thông báo "N1 bằng N2" hoặc ngược lại in ra thông báo "N1 khác N2". - Mô tả quy trình xử lý (giải thuật) 48
  53. - Viết chương trình - Kết quả in ra màn hình Trình tự thực hiện 49
  54. BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư thư viện viện. chương trình. 2 Thân Hàm main, chương từ khóa trình void. 3 Nhập liệu Biến N1, N2, hàm nhập xuất dữ liệu. 4 Quá trình xử Lệnh if, lý, xuất kết printf. quả. - Cấu trúc else if Thực hiện 1 trong nhiều khối lệnh cho trước. Cú pháp lệnh 50
  55. if, else if, else phải viết bằng chữ thường. Biểu thức luận lí 1, 2 n phải có trị đúng hoặc sai. - Cấu trúc else if Lưu đồ Nếu biểu thức luận lý 1 đúng thì khối lệnh 1 được thực hiện và thoát khỏi lệnh if. Ngược lại nếu biểu thức luận lý 2 đúng thì khối lệnh 2 được thực hiện và thoát khỏi lệnh if. Ngược lại nếu biểu thức luận lý n-1 đúng thì thực hiện khối lệnh n-1 và thoát khỏi cấu trúc if. Ngược lại thì thực hiện khối lệnh n. - Cấu trúc else if Ví dụ 6: Viết chương trình nhập vào kí tự kitu. Kiểm tra xem nếu kí tự nhập vào là kí tự thường trong khoảng từ 'a' đến 'z' thì đổi sang chữ in hoa và in ra, nếu kí tự in hoa trong khoảng A đến Z thì đổi sang chữ thường và in ra, nếu kí tự là số từ 0 đến 9 thì in ra câu "Kí tự bạn vừa nhập là số", còn lại không phải 3 trường hợp trên in ra thông báo "Kí tự đa nhập là kitu)". Phác họa lời giải Nhập kí tự kitut vào, kiểm tra xem nếu kí tự kitu thuộc khoảng 'a' và 'z' đổi kí tự kitu thành chữ in hoa bằng cách lấy kí tự kitu - 32 rồi gán lại cho chính nó (kitu = kitu - 32, sau khi đổi xong ta in kí tự ra. Ngược lại nếu kí tự kitu thuộc khoảng 'A' và 'Z', đổi kí tự kitu thành chữ thường và in ra. Ngược lại nếu kí tự kitu thuộc khoảng '0' và '9' thì 51
  56. in ra thông báo "Kí tự bạn vừa nhập là số". Ngược lại, in câu thông báo "Bạn đã nhập kí tự kitu". Mô tả quy trình xử lý (giải thuật) 52
  57. Viết chương trình Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 54
  58. 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Nhập Biến kí tự, liệu hàm nhập xuất dữ liệu. 4 Chuyển Lệnh if, kí tự printf, qui thường tắc bảng sang mã hoa ASCII. 5 Chuyển Lệnh if, hoa printf, mã sang ASCII. thường. 6 Kí tự số Lệnh if, và các printf, mã trường ASCII. hợp khác. - Cấu trúc if lồng Thực hiện 1 trong n khối lệnh cho trước. Cú pháp lệnh Cũng là một trong 3 dạng trên, nhưng trong 1 hoặc nhiều khối lệnh bên trong phải chứa ít nhất một trong 3 dạng trên. Cấu trúc if lồng nhau càng nhiều thì độ phức tạp càng cao, chương trình chạy càng chậm và dễ bị nhầm lẫn khi lập trình. Ví dụ 9: Ta có các dòng lệnh sau: if (i > 0) if (N1 >N2) x = N1; else 55
  59. x = N2; Lưu đồ: Tương tự 3 dạng trên. 3. Lệnh switch Lệnh switch cũng giống cấu trúc else if, nhưng nó mềm dẻo hơn và linh động hơn nhiều so với cấu trúc lệnh if. Một bài toán sử dụng lệnh switch thì cũng có thể sử dụng if, nhưng ngược lại còn tùy thuộc vào giải thuật của bài toán. - Cấu trúc switchcase (switch thiếu) Chọn thực hiện 1 trong n lệnh cho trước. switch, case, break phải viết bằng chữ thường . Lệnh 1, 2n có thể gồm nhiều lệnh, nhưng không cần đặt trong cặp dấu { } Lưu đồ Khi giá trị của biểu thức bằng giá trị i thì lệnh i sẽ được thực hiện. Nếu sau lệnh i không có lệnh break thì sẽ tiếp tục thực hiện lệnh. i+1Ngược lại thoát khỏi cấu trúc switch 56
  60. Ví dụ 7: Nhập vào số 1, 2, 3. Xuất ra số sao tương ứng. Viết chương trình 57
  61. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Nhập Biến liệu nguyên i, hàm nhập xuất dữ liệu. 4 Xử lý Lệnh dữ liệu. switch, printf. 5 Xuất Lệnh kết quả printf, getch(). Ví dụ 8: Viết chương trình nhập vào tháng và in ra quý. Phác họa lời giải Nhập vào tháng, kiểm tra xem tháng có hợp lệ (trong khoảng 1 đến 12) không. Nếu hợp lệ in ra quý tương ứng. Viết chương trình 58
  62. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Nhập Biến liệu nguyên t, hàm nhập xuất dữ liệu. 59
  63. 4 Ràng Lệnh if buộc < t <=12 5 Xử lý Lệnh dữ liệu switch, và xuất printf. kết quả. - Cấu trúc switchcasedefault (switch đủ) Chọn thực hiện 1 trong n + 1 lệnh cho trước. 60
  64. switch, case, break, default phải viết bằng chữ. Lệnh 1, 2n có thể gồm nhiều lệnh, nhưng không cần đặt trong cặp dấu { } Khi giá trị của biểu thức bằng giá trị i thì lệnh i sẽ được thực hiện. Nếu sau lệnh i không có lệnh break thì sẽ tiếp tục thực hiện lệnh i + 1Ngược lại thoát khỏi cấu trúc switch. Nếu giá trị biểu thức không trùng với bất kỳ giá trị i nào thì lệnh tương ứng với từ khóa default sẽ được thực hiện. Ví dụ 10: Viết lại chương trình ở ví dụ 8 Viết chương trình Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 61
  65. 2 Thân Hàm chương main, từ trình khóa void. 3 Nhập Biến liệu nguyên i, hàm nhập xuất dữ liệu. 4 Xử lý Lệnh dữ liệu switch, và xuất printf, từ kết khóa quả. default. Ví dụ 11: Viết lại chương trình ở Ví dụ 9 Viết chương trình 62
  66. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Nhập Biến liệu nguyên ithang, hàm nhập xuất dữ liệu. 4 Xử lý Lệnh dữ liệu switch, và xuất printf, từ kết khóa quả. default, case, break. - Cấu trúc switch lồng Thực hiện 1 trong n khối lệnh cho trước. • Cú pháp lệnh Cú pháp chỉ là một trong 2 dạng trên, nhưng trong 1 hoặc nhiều lệnh bên trong phải chứa ít nhất một trong 2 dạng trên gọi là cấu trúc switch lồng nhau. 63
  67. Cấu trúc switch lồng nhau càng nhiều cấp thì độ phức tạp càng cao, chương trình chạy càng chậm và dễ bị nhầm lẫn khi lập trình. • Lưu đồ Tương tự 2 dạng switch trên. Nhưng trong mỗi lệnh có thể có một hoặc nhiều cấu trúc switch ở trên. Ví dụ 12: Viết chương trình menu có hai cấp Viết chương trình Viết chương trình 64
  68. Kết quả in ra màn hình 65
  69. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Khai Biến báo nguyên. biến cục bộ 4 Tao Lệnh menu. printf. 5 Nhập Lệnh liệu scanf. 6 Tạo Lồng lệnh menu switch, con lệnh printf, scanf, 7 Chọn Lệnh menu switch, con printf. 8 Chọn Từ khóa các case, lệnh mục printf. khác của menu (*) Chú ý về an toàn. 66
  70. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Khó khăn sử dụng các Không nắm được điểm khác Nhận ra điểm khác biệt dạng mệnh đề if biệt giữa các dạng lệnh. giữa các dạng lệnh if thông qua ví dụ, bài tập mẫu. 2 Không phân biệt được Chưa rõ phạm vi ứng dụng Phân biệt thông qua trường hợp ứng dụng giữa switch và if. các bài tập điển hình. giữa lệnh switch với lệnh if. Không nhớ đầy đủ các từ khóa trong lệnh switch. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Lệnh và khối lệnh. 2 2 Lệnh if. 4 3 Switch 4 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 67
  71. Tổng điểm 10 68
  72. Bài 6 CẤU TRÚC VÒNG LẶP A. MỤC TIÊU. - Trình bày được lệnh for, lệnh break, lệnh continue, lệnh while, lệnh do while, vòng lặp lồng nhau. - Lập trình được các bài toán có các lệnh trên. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 7 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 1. Lệnh for Vòng lặp xác định thực hiện lặp lại một số lần xác định của một khối lệnh (chuỗi hành động) Cú pháp lệnh 69
  73. for phải viết bằng chữ thường. Nếu khối lệnh bao gồm từ 2 lệnh trở lên thì phải đặt trong dấu { } Lưu đồ Kiểm tra điều kiện, nếu đúng thì thực hiện khối lệnh và lặp lại kiểm tra điều kiện nếu sai thoát khỏi vòng lặp. Biểu thức 1 khởi tạo giá trị ban đầu cho biến điều khiển. Biểu thức 2 là quan hệ logic thể hiện điều kiện tiếp tục vòng lặp. Biểu thức 3 là phép gán dùng thay đổi giá trị biến điều khiển. Biểu thức 1 bao giờ cũng chỉ được tính toán một lần khi gọi thực hiện for. Biểu thức 2, 3 và thân for có thể thực hiện lặp lại nhiều lần. Lưu ý: + Biểu thức 1, 2, 3 phải phân cách bằng dấu “;” + Nếu biểu thức 2 không có, vòng for được xem là luôn luôn đúng. Muốn thoát khỏi vòng lặp for phải dùng một trong 3 lệnh break, goto hoặc return. + Khi gặp lệnh break, cấu trúc lặp sẽ thoát ra. + Trong thân for có thể dùng lệnh goto để thoát khỏi vòng lặp đến vị trí mong muốn. + Trong thân for có thể sử dụng return để trở về một hàm nào đó. + Trong thân for có thể sử dụng lệnh continue để chuyển đến đầu vòng lặp (bỏ qua các câu lệnh còn lại trong thân). 70
  74. Ví dụ 1: Viết chương trình in ra câu "Vong lap for”. 71
  75. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Định Từ khóa nghĩa define trước 3 Thân Hàm chương main, từ trình khóa void. 4 Xử lý Lệnh for, dữ liệu printf. và xuất kết quả. Ví dụ 2: Viết chương trình nhập vào 3 số nguyên. Tính và in ra tổng của chúng. 72
  76. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Khởi Các biến tạo nguyên biến 4 Xử lý Lệnh for, dữ liệu. printf, scanf. 5 Xuất Lệnh xuất kết quả printf. Ví dụ 4: Thay đổi biến điều khiển vòng lặp. - Thay đổi biến điều khiển từ 1 đến 100, mỗi lần tăng 1: for(i = 1; i = 1; i- -) - Thay đổi biến điều khiển từ 7 đến 77, mỗi lần tăng 7: for(i = 7; i = 2; i - = 2) 73
  77. Ví dụ 7: Đọc vào một loạt kí tự trên bàn phím, đếm số kí tự nhập vào. Kết thúc khi gặp “s”. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Định Từ khóa nghĩa define. trước 3 Thân Hàm chương main, từ trình khóa void. 74
  78. 4 Khởi Các biến tạo nguyên, kí biến tự 5 Xử lý Lệnh for, dữ liệu. các hàm. 6 Xuất Lệnh xuất kết quả printf. Ví dụ 8: Nhập vào 1 dãy số nguyên từ bàn phím đến khi gặp số 0 thì dừng. In ra tổng các số nguyên dương. 75
  79. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Khởi Các biến tạo nguyên biến 4 Xử lý Lệnh for, dữ liệu. printf, scanf, từ khóa continue, break. 5 Xuất Lệnh xuất kết quả printf. 2. Lệnh break Thông thường lệnh break dùng để thoát khỏi vòng lặp không xác định điều kiện dừng hoặc bạn muốn dừng vòng lặp theo điều kiện do bạn chỉ định. Việc dùng lệnh break để thoát khỏi vòng lặp thường sử dụng phối hợp với lệnh if. Lệnh break dùng trong for, while, dowhile, switch. Lệnh break thoát khỏi vòng lặp chứa nó. Ví dụ 9 : Như ví dụ 7, 8 76
  80. Sử dụng lệnh break trong switch để nhảy bỏ các câu lệnh kế tiếp còn lại. 3. Lệnh continue Được dùng trong vòng lặp for, while, dowhile. Khi lệnh continue thi hành quyền điều khiển sẽ trao qua cho biểu thức điều kiện của vòng lặp gần nhất. Nghĩa là quay ngược lên đầu vòng lặp, tất cả những lệnh đi sau trong vòng lặp chứa continue sẽ bị bỏ qua không thi hành. Ví dụ 10 : Như ví dụ 8 4. Lệnh while Vòng lặp thực hiện lặp lại trong khi biểu thức còn đúng. • Lưu đồ Trước tiên biểu thức được kiểm tra, nếu sai thì kết thúc vòng lặp while (khối lệnh không được thi hành 1 lần nào), nếu đúng thực hiện khối lệnh; lặp lại kiểm tra biểu thức. + Trong thân while có thể sử dụng lệnh continue để chuyển đến đầu vòng lặp (bỏ qua các câu lệnh còn lại trong thân). + Muốn thoát khỏi vòng lặp while tùy ý có thể dùng các lệnh break, goto, return như lệnh for. 77
  81. Ví dụ 11: Viết chương trình in ra câu "Cau lenh vong lap while”. 78
  82. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Định Từ khóa nghĩa define. trước 3 Thân Hàm chương main, từ trình khóa void. 4 Khởi Các biến tạo nguyên biến 5 Xử lý Lệnh dữ liệu while, và xuất printf. kết quả. 5. Lệnh dowhile Vòng lặp thực hiện lặp lại cho đến khi biểu thức sai. • Cú pháp lệnh do, while phải viết bằng chữ thường.Nếu khối lệnh bao gồm từ 2 lệnh trở lên thì không cần đặt trong dấu { } 79
  83. • Lưu đồ Kiểm tra biểu thức nếu đúng thì lặp lại việc thực hiện khối lệnh, nếu sai thì kết thúc vòng lặp (Tại đây khối lệnh được thi hành 1 lần). + Trong thân dowhile có thể sử dụng lệnh continue để chuyển đến đầu vòng lặp (bỏ qua các câu lệnh còn lại trong thân). + Muốn thoát khỏi vòng lặp dowhile tùy ý có thể dùng các lệnh break, goto, return. Ví dụ 12: Viết chương trình nhập vào năm hiện tại và năm sinh. In ra tuoi. 80
  84. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Định Từ khóa nghĩa define. trước 3 Thân Hàm chương main, từ trình khóa void. 4 Khởi Các biến tạo nguyên, kí biến tự 81
  85. 5 Xử lý Lệnh do dữ liệu. while, printf, scanf. 6. Vòng lặp lồng nhau Ví dụ 13: Vẽ hình chữ nhật bằng các dấu '*' Kết quả in ra màn hình Trình tự thực hiện 82
  86. BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Thân Hàm chương main, từ trình khóa void. 3 Nhập Các biến liệu nguyên, lệnh printf, scanf 4 Xử lý 2 lệnh for dữ liệu lồng nhau, và xuất printf. kết quả. 7. So sánh sự khác nhau của các vòng lặp - Vòng lặp for thường sử dụng khi biết được số lần lặp xác định. - Vòng lặp while, dowhile sử dụng khi không biết rõ số lần lặp. - Khi gọi vòng lặp while, dowhile, nếu biểu thức sai vòng lặp while sẽ không được thực hiện lần nào nhưng vòng lặp dowhile đã thực hiện được 1 lần. (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không phân biệt được Xác định thời điểm dừng của Thiết lặp đầy đủ các giữa các lệnh lặp như vòng lặp chưa chuẩn xác. biểu thức đi theo vòng for, while, do while lặp. 2 Không phân biệt được Chưa nắm phạm vi ứng dụng Trao dồi với các bài tập trường hợp sử dụng các lệnh. có vòng lặp. lệnh break, continue, go to. 83
  87. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Lệnh for 2 2 Lệnh break 1 3 Lệnh continue 1 4 Lệnh while 2 5 Lệnh do while 2 6 Vòng lặp lồng nhau 2 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng. 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 84
  88. Bài 7 HÀM A. MỤC TIÊU. - Trình bày được tham biến, tham trị, biến toàn cục và hàm đệ qui. - Vận dụng các kiến thức trên để lập trình các bài toán. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 5 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. Hàm là một chương trình con thực hiện một khối công việc được lặp đi lặp lại nhiều lần trong khi chạy chương trình hoặc dùng tách một khối công việc cụ thể để chương trình đỡ phức tạp. 1. Các ví dụ về hàm Ví dụ 1: 85
  89. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Từ khóa prototype void. 3 Định Dùng nghĩa hàm vòng lặp star_line(). for, lệnh printf. 4 Thân Hàm chương main, từ trình khóa void. 86
  90. 5 Sử dụng Lời gọi hàm hàm. star_line. Ví dụ 2: 87
  91. Kết quả in ra màn hình Giải thích chương trình Hàm ham_mu có hai tham số truyền vào là x, n có kiểu int và kiểu trả về cũng có kiểu int. Hai tham số x, n của hàm ham_mu là dạng truyền tham trị. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Từ khóa prototype int. 3 Định Dùng nghĩa hàm vòng lặp for. 4 Thân Hàm chương main, từ trình khóa void. 5 Sử dụng Lời gọi hàm. hàm. Ví dụ 3: 88
  92. Kết quả in ra màn hình Giải thích chương trình Hàm time có hai tham số truyền vào là h, m có kiểu int. Hai tham số này có toán tử địa chỉ & đi trước cho biết 2 tham số này là được truyền tham biến. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Từ khóa prototype void. 3 Định Phép gán, nghĩa hàm toán tử &. 89
  93. 4 Thân Hàm chương main, từ trình khóa void. 5 Nhập liệu Lệnh nhập xuất dữ liệu. 6 Xử lý Lời gọi chương hàm. trình 7 Xuất kết Lệnh xuất quả dữ liệu. 2. Tham số dạng tham biến và tham trị Ví dụ 4: Đối với hàm sử dụng lệnh return bạn chỉ có thể trả về duy nhất 1 giá trị mà thôi. Để có thể trả về nhiều giá trị sau khi gọi hàm bạn sử dụng hàm truyền nhiều tham số dạng tham biến. 90
  94. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Xây dựng Từ khóa hàm void, các tham_trị đối số, biến. 3 Định Từ khóa nghĩa hàm void, các tham_bien đối số, biến., toán tử &. 4 Thân Hàm chương main, từ trình khóa void. 5 Khởi trị Biến nguyên 6 Xử lý Lời gọi chương hàm. Lệnh trình và xuất dữ xuất kết liệu. quả. 3. Sử dụng biến toàn cục Ví dụ 5: Kết quả in ra màn hình Giải thích chương trình 91
  95. Chương trình trên gồm 2 hàm chan_le và so_am, 2 hàm này bạn thấy không có tham số để truyền biến num vào xử lý nhưng vẫn cho kết quả đúng. Do chương trình sử dụng biến num toàn cục nên biến này có ảnh hưởng đến toàn bộ chương trình mỗi khi gọi và sử dụng nó. Xét tình huống sau: Giả sử trong hàm so_am ta khai báo biến num có kiểu int như sau: void so_am() { int num; . } Khi đó chương trình sẽ cho kết quả không đúng Do các câu lệnh trong hàm so_am sử dụng biến num sẽ sử dụng biến num khai báo trong hàm so_am và lúc này biến num toàn cục không có tác dụng đối với các câu lệnh trong hàm này. Biến num khai báo trong hàm so_am chỉ có ảnh hưởng trong phạm vi hàm và chu trình sống của nó bắt đầu từ lúc gọi hàm đến khi thực hiện xong hàm. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Xây dựng Từ khóa hàm void, câu chan_le. lệnh if. 3 Định Từ khóa nghĩa hàm void, câu so_am lệnh if. 4 Thân Hàm chương main, từ trình khóa void. 5 Nhập liệu Hàm printf, scanf 92
  96. 6 Xử lý dữ Lời gọi liệu hàm. Lệnh xuất dữ liệu. Ví dụ 6: Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Đinh Từ khóa nghĩa define. trước 3 Khai báo Kiểu dữ prototype liệu hàm. 93
  97. 4 Khai báo Biến biến toàn cục 5 Định Từ khóa nghĩa hàm return, dientich biến, hằng 6 Chương Hàm trình main, từ chính khóa void. 7 Nhập liệu Hàm printf, scanf 8 Xử lý dữ Lời gọi liệu và hàm, lệnh xuất kết printf. quả. 4. Dùng dẫn hướng #define Sau đây là một vài ví dụ dùng dẫn hướng #define để định nghĩa hàm đơn giản #define AREA_CIRCLE (rad) (4*PI*rad*rad) #define SUM (x, y) (x + y) #define SQR (x) (x*x) #define MAX(x, y) (x > y) ? x : y #define ERROR (s) printf("%s.\n", s) Ví dụ7: Trong ví dụ 6 thêm dòng AREA_CIRCLE (frad) (4*PI+frad*frad).Roi sửa dòng printf("Dien tich hinh cau: %10.3f.\n", area()) printf("Dien tich hinh cau: %10.3f.\n", AREA_CIRCLE(frad));. Chạy lại chương trình, quan sát thấy kết quả nhận được như ở ví dụ 6 trên. Ví dụ 8: 94
  98. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Đinh Từ khóa nghĩa define. trước 3 Chương Hàm trình main, từ chính khóa void. 4 Khởi trị Biến a, b. 5 Xử lý Lời gọi dữ liệu hàm, lệnh và xuất printf. kết quả. 5. Hàm đệ qui 95
  99. Bất cứ một hàm nào đó có thể triệu gọi hàm khác, nhưng ở đây một hàm nào đó có thể tự triệu gọi chính mình. Kiểu hàm như thế được gọi là hàm đệ quy. Phương pháp đệ quy thường dùng phổ biến trong những ứng dụng mà cách giải quyết có thể được thể hiện bằng việc áp dụng liên tiếp cùng giải pháp cho những tập hợp con của bài toán. Ví dụ 1: Tính n! n! = 1*2*3**(n-2)*(n-1)*n với n >= 1 và 0! = 1. 96
  100. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Tên hàm. prototype 3 Định Hàm, đối nghĩa hàm số hàm, giai thừa các lệnh thực hiện nhập, xử lý dữ liệu và xuất dữ liệu. 3 Chương Hàm trình main, từ chính khóa void. 4 Nhập liệu Biến n, lệnh printf, scanf. 5 Xử lý dữ Lời gọi liệu và hàm, lệnh xuất kết printf. quả. Ví dụ 1: Với n! = 1*2*3**(n-2)*(n-1)*n.Ta viết lại như sau: (1*2*3**(n-2)*(n- 1))*n = n*(n-1)!  = n*(n-1)*(n-2)! Ta viết lại hàm giaithua bằng đệ quy như sau: 97
  101. Kết quả in ra màn hình Giải thích hoạt động của hàm đệ quy giaithua. Ví dụ giá trị truyền vào hàm giai thua qua biến n bằng 5. • Thứ tự gọi thực hiện hàm Khi tham số n = 0 thì return về giá trị 1. Lúc này các giá trị ? bắt đầu định trị theo thứ tự ngược lại. • Định trị theo thứ tự ngược lại Kết quả sau cùng ta có 5! = 120. 99
  102. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Tên hàm. prototype 3 Định Hàm, đối nghĩa hàm số hàm, giai thừa các lệnh theo vòng thực hiện lặp. nhập, xử lý dữ liệu và xuất dữ liệu, vòng lặp. 4 Định Hàm, đối nghĩa hàm số hàm, giai thừa các lệnh theo đệ thực hiện qui. nhập, xử lý dữ liệu và xuất dữ liệu, lời gọi đệ qui. 5 Chương Hàm trình main, từ chính khóa void. 100
  103. 6 Nhập liệu Biến n, lệnh printf, scanf. 7 Xử lý dữ Lời gọi liệu và hàm, lệnh xuất kết printf. quả. Ví dụ 2: Dãy số Fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,  Bắt đầu bằng 0 và 1, các số tiếp theo bằng tổng hai số đi trước. Dãy Fibonacci được khai báo đệ quy như sau: 101
  104. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Tên hàm. prototype 3 Định Hàm, đối nghĩa hàm số hàm, fibonacci. các lệnh thực hiện nhập, xử lý dữ liệu và xuất dữ liệu, lời gọi hàm. 4 Chương Hàm trình main, từ chính khóa void. 5 Nhập liệu Biến n, lệnh printf, scanf. 6 Xử lý dữ Lời gọi liệu và hàm, lệnh xuất kết printf. quả. Ưu nhược điểm giữa đệ qui và vòng lặp Phương pháp đệ quy không phải bao giờ cũng là giải pháp hữu hiệu nhất.Giải pháp vòng lặp có hiệu quả về mặt thời gian và vùng nhớ. Còn với đệ quy mỗi lần gọi đệ quy máy phải dành một sốvùng nhớ để trữ các trị, thông số và biến cục bộ. Do đó, đệ quy tốn nhiều vùng nhớ, thời gian truyền đối mục, thiết lập vùng nhớ trung gian và trả về kết quả Nhưng sử dụng phương pháp đệ quy trông chương trình 102
  105. đẹp mắt hơn vòng lặp và tính thuyết phục của nó. Điều cốt lõi khi thiết đặt chương trình phải làm thế nào hàm đệquy có thể chấm dứt thông qua điều kiện cơ bản. (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Phân biệt giữa tham Phạm vi sử dụng. Qui ước mã Mã hóa đúng trong biến, tham trị. hóa. từng trường hợp. 2 Cơ chế thực hiện đệ Không nắm được nguyên tắc Hệ thống lại kiến thức qui hoạt động stack. bộ nhớ chính. Kiến thức toán về hệ thức truy hồi. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Tham biến, tham trị 4 2 Biến toàn cục 2 3 Hàm đệ qui 4 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng. 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 103
  106. 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 104
  107. Bài 8 MẢNG A. MỤC TIÊU. - Trình bày được việc khai báo mảng, tham chiếu đến từng phần tử mảng, nhập liệu mảng, kĩ thuât sentinel, khởi tạo mảng, mảng nhiều chiều, tham chiếu đến từng phần tử mảng 2 chiều, nhập dữ liệu cho mảng 2 chiều, đọc dữ liệu từ mảng 2 chiều, khởi tạo mảng 2 chiều, dùng mảng 1 chiều làm tham số cho hàm, dùng mảng 2 chiều làm tham số cho hàm. - Vận dụng các kiến thức trên để lập trình các bài toán. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 10 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. Là tập hợp các phần tử có cùng dữ liệu. Giả sử bạn muốn lưu n số nguyên để tính trung bình, bạn không thể khai báo n biến để lưu n giá trị rồi sau đó tính trung bình. 105
  108. Ví dụ 1 : bạn muốn tính trung bình 10 số nguyên nhập vào từ bàn phím, bạn sẽ khai báo 10 biến: a, b, c, d, e, f, g, h, i, j có kiểu int và lập thao tác nhập cho 10 biến này như sau: printf("Nhap vao bien a: "); scanf("%d", &a); 10 biến bạn sẽ thực hiện 2 lệnh trên 10 lần, sau đó tính trung bình: (a + b + c + d + e + f + g + h + i + j)/10 Điều này chỉ phù hợp với n nhỏ, còn đối với n lớn thì khó có thể thực hiện được. Vì vậy khái niệm mảng được sử dụng. 1. Cách khai báo mảng Ví dụ 2 : int a[10]; với int là kiểu mảng, a là tên mảng, 10: số phần tử mảng Ý nghĩa: Khai báo một mảng số nguyên gồm 10 phần tử, mỗi phần tử có kiểu int. 2. Tham chiếu đến từng phần tử mảng Sau khi mảng được khai báo, mỗi phần tử trong mảng đều có chỉ số để tham chiếu. Chỉ số bắt đầu từ 0 đến n-1 (với n là kích thước mảng). Trong ví dụ trên, ta khai báo mảng 10 phần tử thì chỉ số bắt đầu từ 0 đến 9. 106
  109. 3. Nhập dữ liệu cho mảng for (i = 0; i < 10; i++) { printf("Nhap vao phan tu thu %d: ", i + 1); scanf("%d", &a[i]); } for(i = 0; i < 10; i++) printf("%3d ", a[i]); Ví dụ 3 : Viết chương trình nhập vào n số nguyên. Tính và in ra trung bình cộng. 107
  110. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. 4 Nhập liệu Biến n, mảng, sum, lệnh printf, scanf. 5 Nhập liệu Vòng lặp, vào mảng lệnh nhập, xuất. 108
  111. 6 Tính tổng Vòng lặp, các phần biến chạy tử 7 Lệnh xuất Lệnh xuất kết quả Ví dụ 3 : Điều gì sẽ xảy ra cho đoạn chương trình trên nếu bạn nhập n > 50 trong khi bạn chỉ khai báo mảng ia tối đa là 50 phần tử. Bạn dùng lệnh if để ngăn chặn điều này trước khi vào thực hiện lệnh for. do { printf("Nhap vao gia tri n: "); scanf("%d", &n); } while (n 50); - Sử dụng biến kiểu khác Ngoài kiểu int, bạn có thể khai báo mảng kiểu char, float, double Ví dụ 4 : char loai[20]; float temp[10]; 4. Kỹ thuật Sentinal Sử dụng kỹ thuật này để nhập liệu giá trị cho các phần tử mảng mà không biết rõ số lượng phần tử sẽ nhập vào là bao nhiêu (không biết số n). Ví dụ 5 : Viết chương trình nhập vào 1 dãy số dương rồi in tổng các số dương đó. 109
  112. Phác họa lời giải: Chương trình yêu cầu nhập vào dãy số dương mà không biết trước số lượng phần tử cần nhập là bao nhiêu, vì vậy để chấm dứt nhập liệu khi thỏa mãn bằng cách nhập vào số âm hoặc không. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. 4 Khởi trị Biến i, mảng, sum. 110
  113. 5 Nhập liệu Vòng lặp, vào mảng lệnh nhập, xuất. 6 Tính tổng Vòng lặp, các phần biến chạy tử 7 Lệnh xuất Lệnh xuất kết quả Hoặc if (i >= MAX) { printf("Mang da day!\n"); break; } 5. Khởi tạo mảng Ví dụ 6 : Có 4 loại tiền 1, 5, 10, 25 và 50 đồng. Hãy viết chương trình nhập vào số tiền sau đó cho biết số số tiền trên gồm mấy loại tiền, mỗi loại bao nhiêu tờ. Phác họa lời giải: Số tiền là 246 đồng gồm 4 tờ 50 đồng, 1 tờ 25 đồng, 2 tờ 10 đồng, 0 tờ 5 đồng và 1 tờ 1 đồng. Nghĩa là bạn phải xét loại tiền lớn trước, nếu hết khả năng mới xét tiếp loại kế tiếp. 111
  114. Kết quả in ra màn hình Điều gì sẽ xảy nếu số phần tử mảng lớn hơn số mục, số phần tử dôi ra không được khởi tạo sẽ điền vào số 0. Nếu số phần tử nhỏ hơn số mục khởi tạo trình biên dịch sẽ báo lỗi. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 112
  115. 3 Hàm Hàm chính main, từ khóa void. 4 Nhập liệu Biến i, mảng, , hàm printf, scanf. 5 Xử lý và Vòng lặp, in kết quả các lệnh xử lý và xuất dữ liệu. Ví dụ 7 : int tien[5] = {50, 25}, phần tử tien[0] sẽ có giá trị 50, tien[1] có giá trị 25, tien[2], tien[3], tien[4] có giá trị 0. int tien[3] = {50, 25, 10, 5, 1} trình biên dịch báo lỗi - Khởi tạo mảng không bao hàm kích thước Trong ví dụ trên giả sử ta khai báo int tien[] = {50, 25, 10, 5, 1}. Khi đó trình biên dịch sẽ đếm số mục trong danh sách khởi tạo và dùng con số đó làm kích thước mảng. 6. Mảng nhiều chiều Ví dụ 8 : khai báo mảng 2 chiều int a[5][10]; Với int là kiểu mảng, a là tên mảng, số phần tử mảng là 5 x 10. Ý nghĩa: Khai báo một mảng 2 chiều số nguyên gồm 50 phần tử, mỗi phần tử có kiểu int. 113
  116. 7. Tham chiếu đến từng phần tử mảng 2 chiều Sau khi được khai báo, mỗi phần tử trong mảng 2 chiều đều có 2 chỉ số để tham chiếu, chỉ số hàng và chỉ số cột. Chỉ số hàng bắt đầu từ 0 đến số hàng - 1 và chỉ số cột bắt đầu từ 0 đến số cột - 1. Tham chiếu đến một phần tử trong mảng 2 chiều a: a[chỉ số hàng][chỉ số cột] a[1][7] là phần tử tại hàng 1 cột 7 trong mảng 2 chiều xem như là một biến kiểu int. 8. Nhập dữ liệu cho mảng 2 chiều Dùng hai vòng lặp và hai biến chạy để nhập liệu cho mảng hai chiều. Cần có các lệnh nhập xuất dữ liệu printf và scanf. Chú ý toán tử & trong lệnh scanf. for (i = 0; i < 5; i++) for (j = 0; j < 10; j++) { printf("Nhap vao phan tu a[%d][%d]: ", i + 1, j + 1); scanf("%d", &a[i][j]); } 9. Đọc dữ liệu từ mảng 2 chiều Ví dụ 9 : In giá trị các phần tử mảng 2 chiều ra màn hình. for (i = 0; i < 5; i++) { for (j = 0; j < 10; j++) 114
  117. printf("%3d ", a[i][j]); printf("\n"); } Dùng hai vòng lặp và hai biến chạy để xuất dữ liệu từ mảng hai chiều. Chỉ cần lệnh xuất dữ liệu printf để hiển thị kết quả. Lệnh vòng lặp không nhất thiết phải là for. Ví dụ 10 : Viết chương trình nhập vào 1 ma trận số nguyên n x n. In ra ma trận vừa nhập vào và ma trận theo thứ tự ngược lại. 115
  118. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. 4 Nhập liệu Biến i, j, mảng, , hàm printf, scanf, 2 vòng lặp lồng nhau. 5 Xuất ma 2 vòng lặp trận lồng nhau, các lệnh xử lý và xuất dữ liệu. 6 Xuất ma 2 vòng lặp trận theo lồng nhau, thứ tự các lệnh ngược. xử lý và xuất dữ liệu. 10. Khởi tạo mảng 2 chiều Ví dụ 11 : Vẽ chữ H lớn. 116
  119. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 117
  120. 3 Khởi tạo Mảng 2 mảng chiều. 4 Hàm Hàm chính main, từ khóa void. Xuất 2 vòng lặp 5 mảng lồng nhau, các lệnh xử lý và xuất dữ liệu. 11. Dùng mảng 1 chiều làm tham số cho hàm Ví dụ 12 : Tìm số lớn nhất 118
  121. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Khai báo Hàm prototype 4 Định Hàm, các nghĩa hàm tham số, max các lệnh nhập, xử lý và xuất dữ liệu. 5 Hàm Hàm chính main, từ khóa void. 119
  122. Nhập liệu 2 vòng lặp 6 mảng lồng nhau, các lệnh xử lý và xuất dữ liệu. 7 Xử lý Gọi hàm 8 Xuất kết Hàm xuất quả Ví dụ 13 : Bạn khai báo các mảng sau a[MAX], b[MAX], c[MAX]. Để tìm giá trị lớn nhất của từng mảng. Bạn chỉ cần gọi hàm - max_a = max(a, i); - max_b = max(b, i); - max_c = max(c, i); Ví dụ 14 : Tìm số lớn nhất của mảng một chiều. 120
  123. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Khai báo Hàm prototype 4 Định Hàm, các nghĩa hàm tham số, max các lệnh nhập, xử lý và xuất dữ liệu. 5 Định Hàm, các nghĩa hàm tham số, nhập liệu các lệnh nhập dữ liệu. 6 Hàm Hàm chính main, từ khóa void. Nhập liệu, Lời gọi 7 tìm phần hàm, lệnh tử max, xuất dữ xuất phần liệu. tử max. 12. Dùng mảng 2 chiều làm tham số cho hàm Ví dụ 15 : Nhập vào 2 ma trận vuông cấp n số thập phân. Cộng 2 ma trận này lưu vào ma trận thứ 3 và tìm số lớn nhất trên ma trận thứ 3. 122
  124. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 124
  125. 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Khai báo Hàm prototype 4 Khai báo Biến biến toàn cục 5 Định Hàm, các nghĩa hàm tham số, max các lệnh nhập, xử lý và xuất dữ liệu. 6 Định Hàm, các nghĩa hàm tham số, nhập liệu các lệnh nhập dữ liệu: 2 vòng lặp lồng nhau 7 Định Hàm, các nghĩa hàm tham số, công hai các lệnh ma trận cộng hai ma trân: 2 vòng lặp lồng nhau 8 Hàm Hàm chính main, từ khóa void. Nhập dữ Lời gọi 9 liệu cho hàm, lệnh các ma xuất, nhập trận dữ liệu. 10 Cộng hai Gọi hàm. ma trận 125
  126. 11 Xuất các Gọi hàm, ma trận lệnh xuất. 12 Xuất giá Gọi hàm, trị lớn lệnh xuất nhất Ví dụ 16 : Mảng 2 chiều được khai báo int a[3][3] Truyền tham số vào hàm: a[][3], để tham khảo đến ptử [2][1], hàm tính như sau: 2 * 3 + 1 = 7 (chỉ số hàng * số cột + chỉ số cột) a[3][3] gồm 9 phần tử được lưu trữ trong bộ nhớ như sau: (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Truyên tham biến với Mảng luôn được xác định bởi Ta không cần ghi toán mảng là đối số của phần tử đầu. tử & khi truyền tham hàm ta không cần ghi biến là mảng. toán tử &. 2 Thao tác với mảng một Không nắm được cấu trúc Sử dụng đúng cấu trúc chiều và hai chiều mảng 1 chiều và 2 chiều. lệnh và dữ liệu khi mã tương ứng dùng 1 hóa các thao tác trên vòng lặp và 2 vòng lặp. mảng. D. TIÊU CHÍ ĐÁNH GIÁ. 126
  127. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Khai báo mảng. 0.5 2 Tham chiếu đến từng phần tử mảng. 1 3 Nhập liệu mảng 1 4 Kĩ thuât sentinal 0.5 5 Khởi tạo mảng 0.5 6 Mảng nhiều chiều 1 7 Tham chiếu đến từng phần tử mảng 2 chiều 1 8 Nhập dữ liệu cho mảng 2 chiều 1 9 Đọc dữ liệu từ mảng 2 chiều 1 10 Khởi tạo mảng 2 chiều 0.5 11 Dùng mảng 1 chiều làm tham số cho hàm 1 12 Dùng mảng 2 chiều làm tham số cho hàm 1 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 127
  128. Bài 9 CHUỖI A. MỤC TIÊU. - Trình bày được khai báo chuỗi, hàm nhập xuất chuỗi gets, puts, khởi tạo chuỗi, mảng chuỗi, các hàm chuyển đổi dữ liệu, các hàm xử lý chuỗi. - Vận dụng các kiến thức trên để lập trình các bài toán. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 7 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. Chuỗi được xem như là mảng một chiều gồm các phần tử có kiểu char như mẫu tự, con số và bất cứ ký tự đặc biệt như +, -, *, /, $, # Theo quy ước, một chuỗi sẽ được kết thúc bởi ký tự null ('\0' : kí tự rỗng). Ví dụ: chuỗi "Computer Science" được lưu trữ như 129
  129. 1. Cách khai báo chuỗi Ví dụ 17 : char name[30]; Ví dụ 18 : Nhập vào và in ra tên 130
  130. Lưu ý: Không cần sử dụng toán tử địa chỉ & trong name trong lệnh scanf("%s", name), vì bản thân name đã là địa chỉ. Dùng hàm scanf để nhập chuỗi có hạn chế như sau: Khi bạn thử lại chương trình trên với dữ liệu nhập vào là Minh Anh, nhưng khi in ra bạn chỉ nhận được Minh. Vì hàm scanf nhận vào dữ liệu đến khi gặp khoảng trắng thì kết thúc. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Hàm Hàm chính main, từ khóa void. Nhập dữ Mảng kí 3 liệu tự, lệnh xuất, nhập dữ liệu. 4 Xuất Xuất dữ chuôi liệu. 131
  131. 2. Hàm nhập (gets), xuất (puts) chuỗi Sử dụng hàm gets, puts phải khai báo #include Kết quả in ra màn hình Đối với hàm puts kí tự kết thúc chuỗi null (\0) được thay thế bằng kí tự newline (\n). Hàm gets và puts chỉ có 1 đối số và không sử dụng dạng thức trong nhập liệu cũng như xuất ra màn hình. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Hàm Hàm chính main, từ khóa void. 132
  132. Nhập dữ Mảng kí 3 liệu tự, lệnh xuất, nhập dữ liệu: puts, gets. . 4 Xuất Xuất dữ chuôi liệu. 3. Khởi tạo chuỗi Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 133
  133. 2 Hàm Hàm chính main, từ khóa void. Nhập dữ Mảng kí 3 liệu tự, lệnh xuất, nhập dữ liệu: puts, gets. . 4 Xuất Xuất dữ chuôi liệu. 4. Mảng chuỗi 134
  134. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khởi tạo Mảng hai mảng chiều. chuỗi 135
  135. 3 Hàm Hàm chính main, từ khóa void. Nhập dữ Biến, hàm 4 liệu nhập, xuất dữ liệu. 5 Xuất Xuất dữ chuỗi liệu mảng 5. Các hàm chuyển đổi dữ liệu - atof double atof(const char *s); Chuyển đổi 1 chuỗi sang giá trị double. Phải khai báo math.h hoặc stdlib.h Ví dụ: float f; char *str = "12345.67"; f = atof(str); Kết quả f = 12345.67; - atoi int atoi(const char *s); Chuyển đổi 1 chuỗi sang giá trị int. Ví dụ: int i; char *str = "12345.67"; i = atoi(str); Kết quả i = 12345 - itoa char *itoa(int value, char *string, int radix); Chuyển đổi số nguyên value sang chuỗi string theo cơ số radix. Phải khai báo stdlib.h Ví dụ: int number = 12345; char string[25]; 136
  136. itoa(number, string, 10); Kết quả string = "12345"; itoa(number, string, 2); Kết quả string = "11000000111001"; - tolower int tolower(int ch); Đổi chữ hoa sang chữ thường. Phải khai báo ctype.h Ví dụ: int len, i; char *string = "THIS IS A STRING"; len = strlen(string); for (i = 0; i < len; i++) string[i] = tolower(string[i]); //đổi từ kí tự trong string thành chữ thường - toupper int toupper(int ch); Đổi chữ thường sang chữ hoa. Phải khai báo ctype.h Ví dụ: int len, i; char *string = "this is a string"; len = strlen(string); for (i = 0; i < len; i++) string[i] = toupper(string[i]); //đổi từ kí tự trong string thành chữ thường 6. Các hàm xử lý chuỗi ký tự - strcat char *strcat(char *dest, const char *src); 137
  137. Thêm chuỗi src vào sau chuỗi dest. Phải khai báo string.h - strcpy char *strcpy(char *dest, const char *src); Chép chuỗi src vào dest. Phải khai báo string.h Ví dụ: char destination[25]; char *blank = " ", *c = "C++", *borland = "Borland"; strcpy(destination, borland); //chép chuỗi borland vào destination strcat(destination, blank); //thêm chuỗi blank vào sau chuỗi destination strcat(destination, c); //thêm chuỗi c vào sau chuỗi destination - strcmp int *strcmp (const char *s1, const char *s2); So sánh chuỗi s1 với chuỗi s2. Kết quả trả về: • 0 nếu s1 > s2 Phải khai báo string.h Ví dụ: char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "aaa"; strcmp(buf1, buf2); //kết quả trả về - 1 strcmp(buf1, buf3); //kết quả trả về 0 strcmp(buf2, buf3); //kết quả trả về 1 - strcmpi int *strcmpi(const char *s1, const char *s2); So sánh chuỗi s1 với chuỗi s2 không phân biệt chữ hoa, chữ thường. Kết quả trả về: • < 0 nếu s1 < s2 138
  138. • = 0 nếu s1 = s2 • > 0 nếu s1 > s2 Ví dụ: char *buf1 = "aaa", *buf2 = "AAA"; strcmp(buf1, buf2); //kết quả trả về 0 Ví dụ Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 139
  139. 2 Khởi tạo Mảng hai mảng chiều. chuỗi 3 Hàm Hàm chính main, từ khóa void. Khởi trị 2 mảng 4 chuỗi chuỗi 5 Xuất dữ Xuất dữ liệu liệu - strlwr char *strlwr (char *s); Chuyển chuỗi s sang chữ thường Phải khai báo string.h Ví dụ: char *s = "Borland C"; s = strlwr(s); - strupr char *strupr(char *s); Chuyển chuỗi s sang chữ hoa Ví dụ: char *s = "Borland C"; s = strlwr(s); kết quả s = "BORLAND C" - strlen int strlen (const char *s); Trả về độ dài chuỗi s. Phải khai báo string.h Ví dụ: char *s = "Borland C"; 140
  140. int len_s; len_s = strlen(s); Ví dụ: Các hàm xử lý chuỗi Kết quả in ra màn hình 141
  141. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Hàm Hàm chính main, từ khóa void. Khởi Mảng 3 trị chuỗi chuỗi 4 Xử lý Các hàm chuỗi xử lý chuỗi dữ liệu, lệnh xuất. (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không quản lí được số Chuỗi luôn có phần tử đánh Khai báo chuỗi hợp lí. lượng phần tử trong dấu kết thúc chuỗi. chuỗi. 2 Thao tác nhập xuất Chuỗi hoàn chỉnh sẽ được Sử dụng đúng hàm chuỗi phải dùng hàm thực hiện. nhập xuất chuỗi. gets, puts. 142
  142. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Khai báo chuỗi 1 2 Hàm nhập xuất chuỗi gets, puts 1 3 Khởi tạo chuỗi 1 4 Mảng chuỗi 3 5 Các hàm chuyển đổi dữ liệu 2 6 Các hàm xử lý chuỗi 2 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 143
  143. Bài 10 CON TRỎ A. MỤC TIÊU. - Trình bày được khai báo biến con trỏ, truyền địa chỉ sang hàm, con trỏ và mảng, con trỏ trỏ đến mảng trong hàm, con trỏ và chuỗi, khởi tạo mảng con trỏ trỏ đến chuỗi, xử lí con trỏ trỏ đến chuỗi, con trỏ trỏ đến con trỏ, con trỏ với mảng 2 chiều. - Vận dụng các kiến thức trên để lập trình các bài toán. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 8 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 144
  144. Con trỏ là gì? Con trỏ dùng để truy cập biến thông qua địa chỉ biến và chương trình tham khảo biến gián tiếp qua địa chỉ này. 1. Khái báo biến con trỏ Ví dụ 1: Kết quả in ra màn hình Giải thích chương trình Khai báo ở dòng 9 cấp phát 2 bytes để lưu giữ địa chỉ của biến nguyên và vùng nhớ đó có tên là px, tương tự cho py. Dấu * cho biết biến này chứa địa chỉ chứ không phải giá trị, int cho biết địa chỉ đó sẽ trỏ đến các biến nguyên. Ví dụ trên cho thấy *px và *py là 2 biến con trỏ trỏ đến địa chỉ của 2 biến x và y. 145
  145. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Hàm Hàm chính main, từ khóa void. Khởi Biến 3 tạo nguyên, con trỏ, toán tử & 4 Xử lý Các lệnh xử lý. 5 Xuất Lệnh xuất dữ liệu 146
  146. 2. Truyền địa chỉ sang hàm Ví dụ 2: 147
  147. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Khai báo Tên hàm prototype 3 Hàm Hàm chính main, từ khóa void. Khởi tạo Biến, hàm 4 dữ liệu khởi tạo. 5 Xuất dữ Lệnh xuất liệu 6 Định Hàm, các nghĩa đối số, các hàm khởi lệnh xử lý. tạo 148
  148. 3. Con trỏ và mảng Ví dụ 3: Khai báo mảng sau int num[] = {23, 54, 16, 72, 16, 84}; Như đã nghiên cứu cách tham chiếu đến phần tử mảng thứ 5 là num[4], còn với kiểu con trỏ là *(num + 4). Nghĩa là num[4] tương đương với *(num + 4). Tương tự như vậy, cách tham khảo địa chỉ của phần tử mảng là &num[4]. Tên mảng cũng là địa chỉ mảng. 4. Con trỏ trỏ đến mảng trong hàm Ví dụ 4: Kết quả in ra màn hình Giải thích chương trình Hàm gán địa chỉ của mảng vào biến con trỏ ptr, kích thước vào biến num và hằng số vào biến a. Sau đó dùng vòng lặp để cộng hằng vào từng phần tử của mảng. Giả sử địa chỉ của mảng Mang là 245 khi truyền vào hàm add qua con trỏ p, p sẽ có giá trị = 245. 149
  149. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Khai báo Tên hàm prototype 3 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng, các 4 dữ liệu biến nguyên. 5 Quá trình Gọi hàm xử lý 6 Xuất dữ Dùng liệu vòng lặp 150
  150. 7 Định Hàm, các nghĩa đối số, các hàm add lệnh xử lý. 5. Con trỏ và chuỗi Ví dụ 5: Kết quả in ra màn hình Giải thích chương trình Loichao là biến con trỏ được khởi tạo bằng phát biểu char *loichao = "Chao ban" thay vì char loichao[] = "Chao ban". Cả hai cách đều cho cùng kết quả và đều dành số byte cho chuỗi và kèm theo kí tự null. 151
  151. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng, con 3 dữ liệu trỏ. 4 Quá trình Hàm nhập xử lý xuất chuỗi. 5 Xuất dữ Hàm xuất liệu chuỗi 6. Khởi tạo mảng con trỏ trỏ đến chuỗi Ví dụ 6: 152
  152. Giải thích chương trình Khai báo char *thang[12] có ý nghĩa như sau: thang là tên gọi, dấu * là kiểu con trỏ trỏ đến kí tự. 153
  153. Chú ý: Khởi tạo mảng các con trỏ trỏ đến các chuỗi chiếm ít bộ nhớ hơn khởi tạo mảngchuỗi. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng con 3 và nhập trỏ, lệnh dữ liệu nhập xuất. 4 Xuất dữ Hàm xuất liệu 7. Xử lý con trỏ trỏ đến chuỗi Ví dụ 7: 154
  154. Kết quả in ra màn hình 155
  155. Giải thích chương trình Trong chương trình dùng cả mảng chuỗi char name[MAX_NUM][MAX_LEN] và mảng con trỏ trỏ đến chuỗi char *ptr[MAX_NUM];. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. 156
  156. Khởi tạo Mảng con 4 trỏ, con trỏ, mảng 2 chiều. 5 Nhập Vòng lặp, liệu các lệnh nhập liệu. 6 Sắp xếp 2 vòng lặp tăng lồng nhau, lệnh rẽ nhánh. 7 Xuất kết Vòng lặp, quả lệnh printf. 8. Con trỏ trỏ đến con trỏ Ví dụ 8: 157
  157. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng 2 4 chiều. 5 Cập nhật 2 vòng lặp trị lồng nhau các lệnh cập nhật. 6 In dữ liệu 2 vòng lặp mảng lồng nhau, lệnh printf. 9. Con trỏ với mảng 2 chiều Dùng hàm malloc hoặc calloc để cấp phát mảng động. Mảng này được đặt trong vùng heap của bộ nhớ chương trình. Sử dụng hai hàm này ta phải khai báo thư viện alloc.h Cú pháp: (KieuDL *) malloc (KichThuoc). (KieuDL *)calloc(KichThuoc,sizeof(KieuDL)). Ví dụ: Tạo mảng 2 chiều động, nhập liệu cho mảng, xuất mảng, hủy vùng nhớ động của mảng. (Dùng hàm malloc) 158
  158. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng con 4 mảng 2 trỏ. chiều. 5 Nhập 2 vòng lặp liệu lồng nhau các lệnh nhập liệu. 6 In dữ liệu 2 vòng lặp mảng 2 lồng nhau, chiều. lệnh printf. 7 Giải Vòng lặp, phóng toán tử mảng free. Ví dụ: Tạo mảng 2 chiều động, nhập liệu cho mảng, xuất mảng, hủy vùng nhớ động của mảng. (Dùng hàm calloc) 160
  159. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng con 4 mảng 2 trỏ. chiều. 5 Nhập 2 vòng lặp liệu lồng nhau các lệnh nhập liệu. 6 In dữ liệu 2 vòng lặp mảng 2 lồng nhau, chiều. lệnh printf. 7 Giải Vòng lặp, phóng toán tử mảng free. 10. Cấp phát mảng động với toán tử new Toán tử new có chức năng cấp phát động một vùng nhớ nào đó. Vùng nhớ này cũng được đặt trong heap. Ví dụ: int *p; char *q; 162
  160. p= new int; q= new char; p= new int(3); p= new int[3]; Ví dụ: Tạo mảng 2 chiều động, nhập liệu cho mảng, xuất mảng, hủy vùng nhớ động của mảng. (Dùng new) 163
  161. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. Khởi tạo Mảng con 4 mảng 2 trỏ. chiều. 164
  162. 5 Nhập 2 vòng lặp liệu lồng nhau các lệnh nhập liệu. 6 In dữ liệu 2 vòng lặp mảng 2 lồng nhau, chiều. lệnh printf. 7 Giải Vòng lặp, phóng toán tử mảng delete. (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Các toán tử của con Tiếp nhận kiến thức hạn chế Trao dồi qua bài tập. trỏ. 2 Đối số hàm là con trỏ Không nắm được cơ chế Hệ thống lại kiến thức truyền đối số thông qua con truyền tham biến của trỏ. hàm. 3 Con trỏ với mảng hai Không nắm được cấu trúc dữ Thực hiện tạo các dãy chiều liệu mảng 2 chiều trỏ bởi mảng cho các phần tử mảng con trỏ. mảng con trỏ. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 165
  163. 1 Khai báo biến con trỏ 0.5 2 Truyền địa chỉ sang hàm 1 3 Con trỏ và mảng 1 4 Con trỏ trỏ đến mảng trong hàm 1 5 Con trỏ và chuỗi 1 6 Khởi tạo mảng con trỏ trỏ đến chuỗi 1 7 Xử lí con trỏ trỏ đến chuỗi 1 8 Con trỏ trỏ đến con trỏ 1 9 Con trỏ với mảng 2 chiều 1.5 10 Cấp phát mảng động với toán tử new 1 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 166
  164. Bài 11 CÁC KIỂU DỮ LIỆU TỰ TẠO A. MỤC TIÊU. - Trình bày được struct và enum - Vận dụng các kiến thức trên để lập trình các bài toán. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 7 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 1. Structure Đối với mảng, chỉ có thể lưu nhiều thông tin có cùng kiểu dữ liệu. Nhưng với structure ta có thể lưu thông tin như một mảng có nhiều kiểu dữ liệu khác nhau. - Khai báo kiểu structure Ví dụ 1: Khai báo một structure về thông tin nhân viên 167
  165. Ví dụ trên định nghĩa kiểu dữ liệu mới có tên là nhanviên. Mỗi biến kiểu này gồm 2 phần tử: biến nguyên có tên là manv và biến chuỗi có tên hoten. struct phải viết bằng chữ thường. - Cách khai báo biến có kiểu structure Khai báo biến nv có kiểu struct nhanvien vừa tạo structure nhanvien vừa khai báo biến nv. Ví dụ 2: struct nhanvien { int manv; char hoten[30]; } nv; struct nhanvien { int manv; char hoten[30]; } ; struct nhanvien nv; hoặc nhanvien nv; - Tham chiếu các phần tử trong structure Để tham chiếu đến manv trong nv ta viết như sau: nv.manv. 168
  166. Đối với biến khai báo kiểu con trỏ nhanvien *nv thì tham chiếu đến phần tử manv: nv -> manv. Ví dụ 3: Nhập và in danh sách nhân viên. Kết quả in ra màn hình 169
  167. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. 4 Tạo cấu Từ khóa trúc struct, mảng, biến cơ sở. 5 Khai báo Mảng, biến cục biển. bộ. Nhập Hàm xử lý 6 liệu chuỗi. 7 Nhập Vòng lặp, liệu cho các lệnh danh nhập liệu. sách. 170
  168. 8 In dữ liệu Vòng lặp, mảng. lệnh printf. - Khởi tạo structure Ví dụ 4: Nhập vào bảng số xe, cho biết xe đó thuộc tỉnh thành nào. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Định Từ khóa nghĩa define trước 171
  169. 3 Hàm Hàm chính main, từ khóa void. 4 Tạo Từ khóa cấu struct, trúc mảng, biến cơ sở, con trỏ. 5 Khai Mảng, báo biển. biến cục bộ. Nhập Hàm nhập 6 liệu liệu. 7 Xuất Vòng lặp, dữ liệu các lệnh xuất. - Structure lồng nhau Ví dụ 5: Nhập và in danh sách nhân viên. 172
  170. Kết quả in ra màn hình Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện 173
  171. chương trình. 2 Định Từ khóa nghĩa define trước 3 Hàm Hàm chính main, từ khóa void. 4 Tạo Từ khóa cấu struct, trúc mảng, biến cơ sở, cấu trúc. 5 Khởi Mảng, trị biển, hàm Nhập Vòng lặp, 6 liệu các hàm cho printf, danh gets sách 7 Duyệt Vòng lặp, danh các lệnh sách xuất, mảng. - Truyền structure sang hàm Giống như mảng, bạn có thể truyền vào hàm qua tham biến. Ví dụ 6: Sửa lại ví dụ 3, sử dụng hàm cho nhập và in danh sách 174
  172. Giải thích chương trình Ở chương trình này ta phải khai báo struct nhan_vien là biến toàn cục, vì khi định nghĩa hàm input và output có sử dụng kiểu dữ liệu struct nhan_vien. Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai báo Các file thư viện thư viện. chương trình. 2 Định Từ khóa nghĩa define trước 3 Khai báo Tên hàm prototype 4 Tạo cấu Từ khóa trúc struct, mảng, biến cơ sở, cấu trúc. 5 Định Hàm, các nghĩa đối số, hàm mảng, input vòng lặp, các lệnh nhập liệu. 6 Định Hàm, các nghĩa đối số, hàm xuất vòng lặp, lệnh xuất 176
  173. 7 Hàm Hàm chính main, từ khóa void. 8 Khởi trị Mảng, biển, hàm Nhập Gọi hàm 9 liệu cho danh sách 10 Xuất Gọi hàm danh sách 2. Enum Một biến là kiểu dữ liệu enum có thể nhận được một giá trị nào đó trong các giá trị được liệt kê. - Định nghĩa kiểu enum Ví dụ 8: Định nghĩa kiểu enum day Các tên thứ (SUN, MON  SAT) trong day sẽ được nhận lần lượt các giá trị từ 0 đến 6 (SUN = 0, MON = 1 SAT = 6). enum phải viết bằng chữ thường. - Cách khai báo biến có kiểu enum Ví dụ 9: enum day ngay; hoặc day ngay; Khai báo biến ngay có kiểu enum day. Vừa tạo enum day vừa khai báo biến ngay: enum day { SUN, MON, TUE, WED, THU, FRI, SAT } ngay; - Sử dụng enum trong chương trình 177
  174. Ví dụ: Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Hàm Hàm chính main, từ khóa void. 3 Khai Từ khóa báo enum. enum 4 Khai Mảng. báo mảng cục bộ. Khởi enum 5 trị 178
  175. 6 Xuất Lệnh xuất. dữ liệu Chú ý: Quan sát cách khai báo: typedef kieudulieu ten; Ten sẽ trở thành kiểu dữ liêu. Ví dụ: typedef enum tuan tu; tu là kiểu dữ liệu. (*) Chú ý về an toàn. - Tuân thủ nội quy phòng máy. - Dữ liệu lưu trữ trên máy tính gọn gàng, khoa học (*) Những sai hỏng thường gặp, nguyên nhân và biện pháp khắc phục TT Sai hỏng thường gặp Nguyên nhân Biện pháp khắc phục 1 Không quản lí được Kiến thức kiểu dữ liệu, hạn Thực hành thông qua các thành phần cấu chế tiếp thu. các ví dụ, bài tập mẫu. trúc. 2 Truy cập kiểu dữ liệu Không nắm vững các thành Trao dồi thông qua các cấu trúc phần biến cấu trúc bài tập. D. TIÊU CHÍ ĐÁNH GIÁ. Điểm Điểm TT Nội dung chuẩn đánh giá I Điểm thao tác 10 1 Struct 6 2 Enum 4 II Điểm cộng sáng tạo 0.5 1 Sáng tạo trong các bài tập ứng dụng 0.5 179
  176. III Điểm cộng hoàn thành trước thời gian qui định 0.5 1 Hoàn thành đúng thời gian qui định. 0 2 Hoàn thành trước thời gian qui định từ 10-15 phút. 0.25 3 Hoàn thành trước thời gian qui định từ 16 phút trở lên. 0.5 Tổng điểm 10 180
  177. Bài 12 TẬP TIN (File) A. MỤC TIÊU. - Trình bày được ghi đọc mảng, ghi đọc các biến thuộc kiểu dữ liệu cơ sở, các mode khác để mở tập tin, các hàm xử lý file. - Vận dụng các kiến thức trên để lập trình các bài toán. - Rèn luyện ý thức lao động, tác phong công nghiệp, có trách nhiệm và sáng tạo. B. DỤNG CỤ - THIẾT BỊ - VẬT LIỆU. TÊN THIẾT BỊ - THÔNG SỐ TT DỤNG CỤ - VẬT ĐƠN VỊ SỐ LƯỢNG GHI CHÚ KT LIỆU I THIẾT BỊ 1 Máy tính Core i3 Bộ 18 2 Máy chiếu Shard PG- Cái 1 D3510X II DỤNG CỤ 1 Chương trình Turbo file 1 C++ 2 Chương trình mẫu file 6 III VẬT LIỆU 1 Các phương thức, byte các cấu trúc lệnh, 2 Cấu trúc dữ liệu byte C. NỘI DUNG. 1. Ví dụ ghi, đọc số nguyên Dữ liệu là số có thể được lưu trữ tại file trên thiết bị ngoại vi. Dưới đây minh hoa cho việc lưu trữ n số nguyên vào file và đọc dữ liệu ra từ file ấy. 181
  178. Giải thích chương trình FILE *f; khai báo biến con trỏ f có kiểu cấu trúc FILE. 182
  179. if(f = fopen("n_int_data.dat", "wb") == NULL) : là câu lệnh mở tập tin có tên n_int_data.dat ở trạng thái "w" (ghi ) dạng "b" (nhị phân), sau khi lệnh này thực hiện xong trả về dạng con trỏ FILE và gán cho f, nếu kết quả trả về = NULL thì không thể mở được tập tin, tập tin mở ở dạng "w" nếu trên đĩa đã có sẵn tập tin này thì nội dung của nó sẽ bị ghi đè, nếu chưa có thì tập tin sẽ được tạo mới. fwrite(&i, sizeof(int), 1, f); : Ghi thông tin vào tập tin, thông tin được ghi vào mỗi lần là một số nguyên i. Hàm này có 4 đối số: Địa chỉ để ghi cấu trúc, kích thước của cấu trúc và số cấu trúc sẽ ghi, sau cùng là con trỏ để trỏ tới tập tin. fclose(f);: đóng tập tin f = fopen("n_int_data.dat", "rb");: mở tập tin có tên n_int_data.dat ở mode "r" (đọc), dạng "b" (nhị phân). Tập tin phải có sẵn trên đĩa. while(fread(&i, sizeof(int), 1, f) == 1) : đọc thông tin từ tập tin, mỗi lần đọc một số nguyên và lưu vào biến i. Mỗi lần đọc thành công giá trị trả về sẽ là số cấu trúc thực sự được đọc, nếu giá trị trả về là 0 báo hiệu kết thúc file. Từ khóa FILE, NULL phải viết bằng chữ in hoa. Sử dụng fopen, fwrite, fread, fclose phải khai báo #include . Trình tự thực hiện BƯỚC PHƯƠNG TT CÔNG THỰC HIỆN TIỆN VIỆC 1 Khai Các file báo thư thư viện. viện chương trình. 2 Hàm Hàm chính main, từ khóa void. 3 Khởi Từ khóa trị FILE, lệnh nhập, xuât. 4 Kiểm Lệnh if, tra sự hàm tồn tại fopen, file. printf, exit. Ghi Vòng lặp, 5 file hàm fwrite, fclose, file. 183