PRF192 - Cơ sở lập trình
Chủ đề học tập
PRF192 - Phần 1: Máy tính, phần mềm và chương trình C đầu tiên
Ứng với CLO1, buổi 1 đến 3. Phần mở đầu trả lời câu hỏi nền tảng: một chương trình là gì và nó chạy trên máy tính như thế nào. Nội dung gồm khái niệm cơ bản về hệ thống máy tính với phần cứng, phần mềm, bộ nhớ và bộ xử lý; các bước phát triển một phần mềm từ phân tích bài toán, thiết kế thuật toán, viết mã, kiểm thử tới bảo trì; và cách chuyển một bài toán thực tế thành thuật toán rồi thành mã nguồn. Phần thứ hai đi vào cấu trúc một chương trình C đơn giản: chỉ thị tiền xử lý #include và vai trò của nó, hàm main làm điểm bắt đầu thực thi, dấu chấm phẩy kết thúc câu lệnh, cặp ngoặc nhọn gom khối, cách viết chú thích. Khép lại bằng quy trình mã nguồn - biên dịch - liên kết - thực thi và cách dùng trình biên dịch C trong môi trường DevC++.
PRF192 - Phần 2: Biến, kiểu dữ liệu, toán tử và biểu thức
Ứng với CLO2, buổi 4 đến 8. Phần này xây dựng bộ công cụ tính toán cơ bản của C. Nội dung bắt đầu từ khai báo biến và hằng, quy tắc đặt tên định danh, hai cách tạo hằng bằng const và bằng #define; rồi tới kiểu dữ liệu với int, float, double, char cùng các biến thể unsigned và long, kích thước ô nhớ và miền giá trị của từng kiểu, cùng thao tác bộ nhớ cơ bản khi một biến được cấp phát. Phần nhập xuất giới thiệu scanf và printf với các đặc tả định dạng %d, %f, %c, %s. Phần biểu thức trình bày toán tử số học kèm bẫy phép chia nguyên và phép chia lấy dư, toán tử quan hệ, toán tử logic, toán tử trên bit, toán tử gán rút gọn và toán tử tăng giảm, rồi khép lại bằng trộn kiểu dữ liệu, ép kiểu và thứ tự ưu tiên.
PRF192 - Phần 3: Cấu trúc điều khiển - rẽ nhánh và vòng lặp
Ứng với CLO3, buổi 9 và 10. Phần này dạy cách điều khiển luồng thực thi của chương trình. Nhánh rẽ gồm câu lệnh if, if-else, if lồng nhau và thang else-if để xử lý nhiều điều kiện, cùng switch-case với vai trò bắt buộc của break và nhánh default, kèm những giới hạn khiến switch không thay thế được if trong mọi tình huống. Nhánh lặp gồm ba dạng for, while và do-while, tiêu chí chọn dạng phù hợp, biến đếm và điều kiện dừng, khác biệt cốt lõi giữa while kiểm tra trước và do-while kiểm tra sau nên luôn chạy ít nhất một lần, hai lệnh break và continue, cùng vòng lặp lồng nhau. Phần cuối bàn về phong cách lập trình: thụt lề nhất quán, đặt tên có nghĩa, viết chú thích và tránh lồng quá sâu.
PRF192 - Phần 4: Mô-đun hoá và hàm
Ứng với CLO4, buổi 16 đến 27 và là phần trọng số lớn nhất trong đề thi cuối kỳ. Nửa đầu bàn về mô-đun: mô-đun là gì, vì sao phải chia nhỏ chương trình, đặc điểm của một mô-đun tốt với tính kết dính cao và ghép nối lỏng, mỗi mô-đun chỉ làm một việc, cùng các nguyên tắc định nghĩa mô-đun khi phân tích một bài toán thực tế. Nửa sau hiện thực hoá mô-đun bằng hàm trong C: định nghĩa hàm với kiểu trả về, tên và danh sách tham số; nguyên mẫu hàm và lý do phải khai báo trước khi dùng; cách gọi hàm và nhận giá trị trả về; truyền tham số theo giá trị cùng hệ quả là hàm không sửa được biến của lời gọi; phân biệt hàm thư viện với hàm tự viết; phạm vi và thời gian sống của biến cục bộ, toàn cục và static.
PRF192 - Phần 5: Con trỏ
Ứng với CLO5, buổi 28 đến 31. Phần này giới thiệu con trỏ là biến lưu địa chỉ của một biến khác, cùng những tình huống bắt buộc phải dùng tới nó. Nội dung gồm cú pháp khai báo con trỏ theo kiểu dữ liệu trỏ tới, hai toán tử cốt lõi là lấy địa chỉ và truy xuất giá trị tại địa chỉ, số học con trỏ và ý nghĩa của việc cộng trừ theo kích thước kiểu, con trỏ NULL cùng nguy cơ truy xuất con trỏ chưa khởi tạo. Trọng tâm ứng dụng là truyền con trỏ làm tham số hàm để đạt hiệu ứng truyền theo tham chiếu, nhờ đó hàm sửa được biến của lời gọi, minh hoạ kinh điển bằng hàm hoán đổi hai giá trị. Phần cuối là dữ liệu cấp phát động với malloc, calloc, realloc và free, kèm rủi ro rò rỉ bộ nhớ khi quên giải phóng.
PRF192 - Phần 6: Thư viện chuẩn C và vào ra có định dạng
Ứng với CLO6, buổi 32 đến 34. Phần này hệ thống hoá các thư viện chuẩn hay dùng và cách khai thác chúng. Thư viện stdlib.h cung cấp sinh số ngẫu nhiên với rand và srand, chuyển chuỗi sang số, giá trị tuyệt đối, cấp phát bộ nhớ và kết thúc chương trình. Thư viện time.h cho phép lấy thời gian hệ thống, đo thời gian chạy và làm hạt giống cho bộ sinh ngẫu nhiên. Thư viện math.h gồm căn bậc hai, luỹ thừa, trị tuyệt đối thực, làm tròn lên và xuống, các hàm lượng giác và lôgarit. Thư viện ctype.h phục vụ xử lý ký tự với các hàm kiểm tra chữ cái, chữ số, chữ hoa chữ thường và các hàm chuyển đổi. Phần cuối đi sâu vào vào ra có định dạng: độ rộng trường, số chữ số thập phân, cờ căn lề và các chuỗi thoát.
PRF192 - Phần 7: Mảng và kiểu cấu trúc (struct)
Ứng với CLO7, buổi 37 đến 45. Phần mảng bắt đầu từ mảng một chiều: khai báo, khởi tạo, chỉ số bắt đầu từ 0, duyệt nhập xuất bằng vòng lặp, và rủi ro truy cập vượt biên vì C không tự kiểm tra. Tiếp đó là mảng hai chiều dùng biểu diễn ma trận với cách duyệt theo dòng và theo cột cùng các phép toán trên ma trận. Phần thuật toán trên mảng gồm tìm kiếm tuyến tính và sắp xếp chọn, kèm cách lập luận về số phép so sánh. Phần cấu trúc giới thiệu struct để gom nhiều trường dữ liệu khác kiểu thành một thực thể: khai báo kiểu, truy cập thành viên bằng toán tử chấm, struct lồng nhau, mảng struct để quản lý danh sách bản ghi, truyền struct cho hàm và dùng typedef cho gọn.
PRF192 - Phần 8: Chuỗi ký tự
Ứng với CLO8, buổi 46 đến 51. Điểm mấu chốt của phần này là trong C không có kiểu chuỗi riêng: chuỗi chỉ là mảng ký tự kết thúc bằng ký tự null, và mọi lỗi chuỗi thường bắt nguồn từ việc quên ký tự kết thúc đó hoặc khai báo mảng thiếu một ô cho nó. Nội dung gồm khai báo và khởi tạo chuỗi theo nhiều cách; nhập xuất chuỗi bằng các hàm có sẵn cùng khác biệt quan trọng giữa việc đọc một từ và đọc cả dòng có khoảng trắng, và lý do nên tránh hàm đọc chuỗi không giới hạn độ dài. Phần thao tác chuỗi giới thiệu các hàm trong string.h gồm đo độ dài, sao chép, nối, so sánh và tìm kiếm. Phần cuối là mảng chuỗi và kết hợp với ctype.h để xử lý từng ký tự.
PRF192 - Phần 9: Tệp tin
Ứng với CLO9, buổi 52 đến 57 và là phần khép lại môn học. Nội dung bắt đầu từ lý do cần tệp tin: dữ liệu trong biến mất khi chương trình kết thúc, còn tệp giúp lưu trữ lâu dài. Phần phân loại so sánh tệp văn bản với tệp nhị phân về cách lưu trữ, khả năng đọc bằng mắt thường, kích thước và tốc độ. Phần thao tác trình bày con trỏ FILE, hàm mở tệp cùng các chế độ đọc, ghi và ghi thêm, thói quen bắt buộc là kiểm tra kết quả mở tệp trước khi dùng, và hàm đóng tệp để đẩy dữ liệu từ bộ đệm xuống đĩa. Phần cuối là hai cách truy cập tuần tự và ngẫu nhiên cùng bộ hàm tương ứng để đọc ghi theo định dạng, theo dòng, theo ký tự, theo khối, và các hàm dịch chuyển vị trí đọc ghi.