THƯ MỤC HỌC THUẬT: GIÁO TRÌNH KỸ THUẬT LẬP TRÌNH C

Tổng quan về giáo trình

Giáo trình Kỹ thuật lập trình C là tài liệu giảng dạy chính quy thuộc ngành Công nghệ thông tin, được ban hành vào tháng 08 năm 2021 bởi Trường Cao đẳng Công nghệ Thành phố Hồ Chí Minh (trực thuộc Tập đoàn Dệt May Việt Nam). Môn học có mã số MH 11, đóng vai trò là học phần cơ sở ngành bắt buộc, được bố trí giảng dạy trong học kỳ 1 với tổng thời lượng 45 giờ (bao gồm 15 giờ lý thuyết, 27 giờ thực hành/thảo luận/bài tập và 3 giờ kiểm tra).

Mục tiêu học tập của giáo trình được xác lập cụ thể trên ba phương diện:

  • Kiến thức: Người học trình bày được các quy tắc, cú pháp của ngôn ngữ C, cơ chế nhập/xuất dữ liệu, các cấu trúc điều khiển rẽ nhánh, vòng lặp, cách thức xây dựng hàm, mảng và chuỗi ký tự; hiểu rõ phương pháp biểu diễn thuật toán qua ngôn ngữ tự nhiên, sơ đồ khối (lưu đồ) và giả mã (pseudocode).
  • Kỹ năng: Thiết lập được môi trường lập trình (Dev-C++, C-Free Pro 5); giải quyết được các bài toán cơ sở bằng ngôn ngữ C; thao tác thành thạo biến cục bộ, biến toàn cục, kỹ thuật truyền tham số và xử lý chuỗi ký tự.
  • Năng lực tự chủ và trách nhiệm: Rèn luyện tư duy logic trong việc phân tích, tổng hợp bài toán và hình thành tính cẩn thận, chính xác trong thao tác lập trình.

Về cấu trúc và cách tiếp cận, tài liệu được tổ chức thành 6 chương theo tiến trình sư phạm tuyến tính: từ phương pháp giải bài toán tổng quát, làm quen môi trường phát triển, đến cú pháp cốt lõi, các cấu trúc điều khiển và các cấu trúc dữ liệu cơ bản. Điểm đặc thù của giáo trình là việc kết hợp chặt chẽ giữa lý thuyết giải thuật và hướng dẫn thực hành chi tiết theo từng bước thử nghiệm mã nguồn trên các môi trường IDE cụ thể.


Nội dung kiến thức cốt lõi

Các chương/chủ đề chính

Toàn bộ nội dung giáo trình được triển khai qua 6 chương chuyên đề:

  • Chương 1: Giới thiệu ngôn ngữ C: Trình bày phương pháp giải bài toán trên máy tính theo mô hình chuyển đổi từ giả thiết $A$ (Input) sang kết luận $B$ (Output). Giới thiệu định lý nền tảng "Cấu trúc dữ liệu + Giải thuật = Chương trình" (Algorithms + Data Structures = Programs). Phân tích 3 cấu trúc suy luận (tuần tự, lựa chọn, lặp); 3 phương pháp biểu diễn thuật toán (ngôn ngữ tự nhiên, lưu đồ, giả mã); phân loại ngôn ngữ lập trình (ngôn ngữ máy, hợp ngữ, ngôn ngữ bậc cao) và hai phương thức dịch mã (thông dịch và biên dịch). Trình bày lịch sử phát triển của ngôn ngữ C (Dennis Ritchie, phòng thí nghiệm Bell, hệ điều hành UNIX trên máy DEC PDP-11, chuẩn ANSI C) cùng hướng dẫn cài đặt, sử dụng IDE Bloodshed Dev-C++ (trình biên dịch MinGW/GCC) và C-Free Pro 5.
  • Chương 2: Các thành phần trong ngôn ngữ C: Khảo sát tập ký tự, hệ thống 32 từ khóa chuẩn (int, float, char, if, for, struct,...), quy tắc đặt danh biểu (identifier) với giới hạn 31 ký tự có nghĩa đầu tiên. Phân loại biến (toàn cục, cục bộ), hằng số (const, #define), hằng số nguyên (thập phân, bát phân tiền tố 0, thập lục phân tiền tố 0x, kiểu long hậu tố L), hằng số thực và hằng chuỗi kết thúc bằng ký tự \0. Khái quát miền giá trị của các kiểu dữ liệu nguyên (1 byte: char, unsigned char; 2 bytes: int, unsigned int, short int, enum; 4 bytes: long, unsigned long) và kiểu số thực (4 bytes: float; 8 bytes: double; 10 bytes: long double). Hệ thống toán tử số học, toán tử tăng/giảm (++, --), toán tử quan hệ, logic (&&, ||, !), toán tử trên bit (Bitwise: &, |, ^, ~, >>, <<), toán tử điều kiện ?:, toán tử con trỏ &, *, toán tử dấu phẩy ,. Hướng dẫn chi tiết hàm nhập scanf(), hàm xuất printf(), các ký tự điều khiển (\n, \t, \a, \b, \r,...) và hàm xóa bộ đệm fflush(stdin).
  • Chương 3: Cấu trúc rẽ nhánh có điều kiện: Phân tích khái niệm câu lệnh, khối lệnh đặt trong cặp dấu {} và phạm vi hoạt động của biến trong các khối lệnh lồng nhau. Cú pháp và giải thuật của cấu trúc lựa chọn if, cấu trúc rẽ nhánh 2 nhánh if...else, các cấu trúc if...else lồng nhau. Cấu trúc lựa chọn đa trường hợp switch...case...default với điều kiện biểu thức và nhãn case phải thuộc kiểu số nguyên.
  • Chương 4: Cấu trúc lặp: Trình bày chi tiết các dạng vòng lặp xác định (for) và vòng lặp không xác định (while, do...while); kỹ thuật lồng các vòng lặp; so sánh sự khác nhau về cơ chế kiểm tra điều kiện trước (for, while) và kiểm tra điều kiện sau (do...while).
  • Chương 5: Hàm: Cung cấp kiến thức về thiết kế chương trình theo mô-đun: khai báo nguyên mẫu hàm (prototype), định nghĩa hàm, lời gọi hàm. Phân biệt cơ chế truyền tham số theo giá trị (tham trị), theo địa chỉ (tham biến/con trỏ); phạm vi biến toàn cục, biến cục bộ; chỉ thị tiền xử lý #define và cách khai thác thư viện hàm có sẵn.
  • Chương 6: Mảng và chuỗi: Cấu trúc dữ liệu mảng một chiều, mảng nhiều chiều (khai báo, nhập/xuất, duyệt phần tử); cấu trúc lưu trữ chuỗi ký tự dạng mảng char kết thúc bằng \0, các hàm nhập/xuất chuỗi gets(), printf(), scanf("%s") và các hàm xử lý chuỗi tiêu chuẩn.

Kiến thức nền tảng được xây dựng

Giáo trình hình thành nền tảng khoa học máy tính thông qua các nguyên lý:

  1. Nguyên lý cấu trúc hóa chương trình: Tiếp cận phương pháp lập trình có cấu trúc (Structured Programming), chia tách bài toán thành các khối lệnh, hàm độc lập.
  2. Mô hình định lượng dữ liệu và bộ nhớ: Giúp người học hiểu rõ cách thức biểu diễn nhị phân, định dạng bit dấu, miền giá trị và dung lượng chiếm dụng bộ nhớ của từng kiểu dữ liệu nguyên, thực.
  3. Cơ chế dịch và thực thi: Phân định bản chất giữa quá trình biên dịch (Compiler - dịch toàn bộ mã nguồn tạo mã đối tượng rồi liên kết thực thi) và thông dịch (Interpreter - dịch từng dòng lệnh).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt môi trường IDE Dev-C++, sử dụng trình biên dịch GCC/MinGW; viết mã nguồn theo đúng chuẩn cú pháp ANSI C; khai báo kiểu dữ liệu tối ưu bộ nhớ; sử dụng chuỗi định dạng %d, %f, %s, %.2f trong nhập xuất dữ liệu.
  • Kỹ năng phân tích (Analytical skills): Khả năng mô hình hóa bài toán từ điều kiện biên; phân tích nhánh rẽ điều kiện phức tạp bằng đại số logic Boole; truy vết thuật toán qua từng bước lặp.
  • Kỹ năng thực hành (Practical competencies): Kỹ năng gỡ lỗi (debugging) từng bước, quan sát giá trị biến trên IDE; xử lý lỗi trôi lệnh nhập chuỗi bằng fflush(stdin)gets(); giải quyết các bài toán kỹ thuật như giải phương trình bậc 2, tìm ước chung lớn nhất (UCLN), sắp xếp dãy số và tính toán hình học.

Phương pháp giảng dạy và học tập

Giáo trình được thiết kế theo phương pháp sư phạm thực hành ứng dụng, trong đó thời lượng thực hành và bài tập chiếm ưu thế (27/45 giờ, tương đương 60% tổng thời lượng môn học). Mỗi bài học lý thuyết đều được ánh xạ trực tiếp sang các ví dụ minh họa có mã nguồn hoàn chỉnh và giải thích chi tiết.

Hệ thống bài tập của giáo trình được phân thành hai nhóm rõ rệt:

  1. Bài tập làm theo yêu cầu: Cung cấp sẵn bài toán mẫu, mã nguồn khung và kịch bản thực nghiệm nhiều bước (ví dụ: bài tập tính diện tích tam giác, bài tập tính tổng - hiệu - tích - thương). Sinh viên được hướng dẫn biên dịch (nhấn F9), nhập các bộ dữ liệu thử nghiệm ($A=6, B=4$; trường hợp đặc biệt $A=6, B=0$) và thay đổi định dạng in (%f, %.2f, %10.2f) nhằm tự rút ra nhận xét về cơ chế làm tròn và định dạng hiển thị.
  2. Bài tập tự làm: Bao gồm các yêu cầu độc lập đòi hỏi người học tự thiết kế lưu đồ thuật toán và cài đặt mã nguồn (in thiệp mời sinh nhật, tính chu vi diện tích hình tròn theo bán kính, tính diện tích tam giác theo công thức Heron $S = \sqrt{p(p-a)(p-b)(p-c)}$, đảo ngược số nguyên 3 chữ số, quản lý hồ sơ sinh viên, sắp xếp mảng).

Phương pháp đánh giá bao gồm kiểm tra thường xuyên trong 27 giờ thực hành phòng máy và 3 giờ kiểm tra định kỳ tập trung vào khả năng viết mã đúng cú pháp, thuật toán tối ưu và khả năng xử lý các trường hợp ngoại lệ. Về tự học, giáo trình hướng dẫn người học tự vẽ lưu đồ trước khi gõ mã, sử dụng tính năng gỡ lỗi (Debug) để xem giá trị biến a, b, và tra cứu tệp trợ giúp (Help) để nắm rõ các hàm trong thư viện stdio.h.


Điểm nổi bật và cập nhật

  • Hệ thống hóa chuẩn ANSI C: Giáo trình tuân thủ các quy tắc chuẩn của ngôn ngữ C, giới thiệu đầy đủ 32 từ khóa chuẩn và 40 toán tử, đảm bảo mã nguồn có tính tương thích cao khi chuyển dịch giữa các môi trường máy tính khác nhau.
  • Tích hợp môi trường phát triển hiện đại: Thay vì sử dụng các công cụ dòng lệnh DOS cũ (như Turbo C, Borland C), tài liệu tập trung hướng dẫn trên Bloodshed Dev-C++ (sử dụng trình dịch GCC/MinGW, hỗ trợ DevPaks, tích hợp giao diện Windows) và C-Free Pro 5.
  • Phương pháp tiếp cận giải thuật trực quan: Chương 1 xây dựng phương pháp luận giải quyết bài toán qua các sơ đồ hình khối, giải mã và ví dụ trực quan (thuật toán hoán đổi chất lỏng trong hai bình qua bình trung gian, giải thuật tìm ước chung lớn nhất, bài toán 8 quân hậu, giải thuật sắp xếp dãy số $n-1$ lần).
  • Ứng dụng thực tế và gắn kết kỹ thuật: Các ví dụ và bài tập được chọn lọc gắn liền với các bài toán số học, hình học, xử lý ngày tháng năm và quản lý chuỗi ký tự cơ bản, tạo nền tảng trực tiếp cho các môn học chuyên ngành tiếp theo như Cấu trúc dữ liệu & Giải thuật hoặc Lập trình hướng đối tượng.

Đối tượng sử dụng giáo trình

  • Sinh viên: Tài liệu được biên soạn chính thức cho học sinh hệ Trung học chuyên nghiệp (THCN) và sinh viên trình độ Cao đẳng chuyên ngành Công nghệ thông tin theo học môn Kỹ thuật lập trình ở học kỳ 1. Đồng thời, giáo trình là tài liệu tham khảo cơ bản cho sinh viên bậc Đại học các ngành kỹ thuật cần học ngôn ngữ C làm môn lập trình đầu tiên.
  • Điều kiện tiên quyết (Prerequisites): Người học không yêu cầu phải có kiến thức lập trình từ trước; chỉ cần nắm các kỹ năng tin học văn phòng cơ bản, thao tác tệp tin trên hệ điều hành Windows và kiến thức toán học phổ thông (đại số cơ bản, logic toán học, phương trình bậc nhất, bậc hai).
  • Giảng viên: Sử dụng giáo trình làm khung bài giảng và đề cương giảng dạy chuẩn cho thời lượng 45 giờ; khai thác hệ thống bài tập thực hành mẫu và các kịch bản thử nghiệm để tổ chức các buổi học trên phòng máy tính.
  • Tự học và tham khảo: Kỹ thuật viên tin học, người mới bắt đầu học lập trình có thể sử dụng tài liệu để tự học nhờ phần giải thích chi tiết từng câu lệnh và bảng tra cứu ký tự, kiểu dữ liệu rõ ràng.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với ai?

Giáo trình phù hợp cho sinh viên Cao đẳng ngành Công nghệ thông tin học kỳ 1, học sinh trung học chuyên nghiệp, sinh viên đại học ngành kỹ thuật và những người bắt đầu học lập trình có nhu cầu tìm hiểu ngôn ngữ C từ mức cơ bản.

2. Cần kiến thức nền nào để học?

Người học chỉ cần kiến thức tin học căn bản (sử dụng máy tính, hệ điều hành Windows), tư duy logic và kiến thức toán học phổ thông cơ bản (các phép tính số học, phương trình đại số, công thức hình học đơn giản).

3. Điểm khác biệt của giáo trình này so với các tài liệu khác là gì?

Tài liệu cân đối thời lượng thực hành vượt trội (27 giờ thực hành trên tổng số 45 giờ), hướng dẫn chi tiết quy trình thực nghiệm trên các công cụ như Dev-C++ và C-Free Pro 5, cung cấp các kịch bản quan sát sự thay đổi của mã nguồn khi thay đổi định dạng xuất nhập dữ liệu.

4. Làm sao để tự học giáo trình hiệu quả?

Người học cần thực hiện tuần tự: đọc hiểu lý thuyết giải thuật, tự vẽ sơ đồ khối, gõ trực tiếp các đoạn mã mẫu vào IDE Dev-C++, thực hiện đầy đủ các bước thử nghiệm thay đổi định dạng in/nhập, và tự giải các bài tập không có lời giải ở cuối mỗi chương.

5. Có tài liệu bổ trợ nào kèm theo không?

Giáo trình cung cấp các bảng tra cứu hệ thống từ khóa, bảng mã ký tự điều khiển (escape sequences), bảng chân trị logic, bảng toán tử Bitwise và hướng dẫn tra cứu hệ thống trợ giúp (Help) của trình biên dịch để tham khảo thêm các hàm dựng sẵn trong thư viện chuẩn stdio.h.


Kết luận

Giáo trình Kỹ thuật lập trình C của Trường Cao đẳng Công nghệ Thành phố Hồ Chí Minh là tài liệu giảng dạy chuẩn mực, cung cấp đầy đủ các nguyên lý lập trình cấu trúc, giải thuật cơ bản và cú pháp ngôn ngữ C theo chuẩn ANSI C.

Lộ trình học tập được định hình chặt chẽ từ tư duy mô hình hóa bài toán (Chương 1), thành phần ngôn ngữ và dữ liệu (Chương 2), cấu trúc điều khiển rẽ nhánh và lặp (Chương 3, 4) đến cấu trúc mô-đun hàm (Chương 5) và tổ chức dữ liệu mảng/chuỗi (Chương 6). Để củng cố kiến thức, người học nên kết hợp thực hành thường xuyên trên IDE Dev-C++ cùng việc tham khảo tài liệu kinh điển The C Programming Language của Dennis Ritchie và Brian Kernighan.