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

Giáo trình Ngôn ngữ lập trình C (Ngành Kỹ thuật máy tính) là tài liệu học tập chính quy được biên soạn cho học phần kỹ thuật lập trình cơ sở trong chương trình đào tạo kỹ sư khối ngành kỹ thuật, đặc biệt là ngành Kỹ thuật máy tính và nhóm ngành Điện - Điện tử. Công trình do nhóm giảng viên thuộc Bộ môn Kỹ thuật Máy tính – Viễn thông, Khoa Điện - Điện tử, Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh biên soạn, gồm: TS. Trương Ngọc Sơn, ThS. Lê Minh, ThS. Trương Ngọc Hà và ThS. Lê Minh Thành. Tài liệu được Nhà xuất bản Đại học Quốc gia TP. Hồ Chí Minh ấn hành năm 2020 (Mã số tiêu chuẩn quốc tế: ISBN 978-604-73-7623-0).

Về mục tiêu học tập (learning outcomes), giáo trình trang bị cho người học:

  • Khả năng phân biệt các cấp độ ngôn ngữ lập trình từ mã máy (machine language), hợp ngữ (assembly language) đến ngôn ngữ cấp cao (high-level programming language).
  • Kỹ năng phân tích bài toán và biểu diễn giải thuật bằng lưu đồ (flowchart) chuẩn hóa.
  • Kiến thức cú pháp và nguyên lý vận hành của ngôn ngữ C: kiểu dữ liệu, biến, hằng, toán tử số học, toán tử quan hệ, toán tử luận lý và toán tử thao tác bit (bit-wise).
  • Kỹ năng làm việc với các cấu trúc điều khiển luồng, mảng, chuỗi ký tự, con trỏ, quản lý bộ nhớ động, hàm, kiểu dữ liệu tự định nghĩa (struct, union, enum) và các chỉ thị tiền xử lý.

Về cấu trúc và cách tiếp cận, giáo trình gồm 8 chương được sắp xếp theo trình tự sư phạm từ cơ bản đến chuyên sâu. Nội dung kết hợp giữa lý thuyết cú pháp, phân tích cơ chế thực thi phần cứng, minh họa qua sơ đồ khối thuật toán và các đoạn mã nguồn mẫu kèm kết quả chạy thực tế. Điểm đặc thù của giáo trình là định hướng trực tiếp vào kỹ thuật phần cứng, liên hệ chặt chẽ giữa lập trình C với hệ thống nhúng, vi điều khiển và lập trình hệ thống.


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

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

Giáo trình gồm 8 chương với tiến trình phát triển nội dung mang tính logic cao:

  1. Chương 1: Giới thiệu

    • Trình bày tổng quan về chương trình máy tính và phân loại ngôn ngữ lập trình (ngôn ngữ máy, hợp ngữ, ngôn ngữ cấp cao).
    • Thiết lập phương pháp tư duy giải thuật và quy ước chuẩn hóa lưu đồ (flowchart), mã giả (pseudocode).
    • Giới thiệu quy trình 4 giai đoạn biên dịch chương trình C: Tiền xử lý (Preprocessor) $\rightarrow$ Biên dịch (Compilation) $\rightarrow$ Hợp dịch (Assembly) $\rightarrow$ Liên kết (Linker).
    • Cung cấp bảng 32 từ khóa chuẩn, quy tắc định danh tên gọi, phân loại biến (toàn cục global, cục bộ local), hằng số và biểu diễn dữ liệu theo các hệ đếm (nhị phân, bát phân, thập phân, thập lục phân).
    • Khảo sát hệ thống toán tử: số học, quan hệ, luận lý, toán tử bit-wise (&, |, ^, ~, <<, >>), toán tử tăng/giảm (++, --), toán tử điều kiện ba ngôi (?:) và các hàm xuất nhập dữ liệu chuẩn printf, scanf trong thư viện <stdio.h>.
  2. Chương 2: Lệnh rẽ nhánh có điều kiện

    • Phân biệt câu lệnh đơn và câu lệnh phức (khối lệnh đặt trong cặp dấu { }).
    • Cấu trúc rẽ nhánh điều kiện: if thiếu, if đủ, if...else if...else, cấu trúc if lồng nhau.
    • Cấu trúc lựa chọn đa nhánh switch...case và ứng dụng toán tử điều kiện ba ngôi.
  3. Chương 3: Lệnh vòng lặp

    • Cú pháp và nguyên lý vận hành của các cấu trúc lặp: for, while, do...while.
    • Các câu lệnh điều khiển luồng chương trình trong vòng lặp: break (thoát vòng lặp), continue (chuyển sang bước lặp kế tiếp), goto và nhãn điều khiển.
  4. Chương 4: Mảng và chuỗi

    • Định nghĩa, khai báo, khởi tạo và truy xuất mảng 1 chiều, mảng đa chiều.
    • Xử lý chuỗi ký tự (mảng ký tự kết thúc bằng ký tự null \0) và mảng chuỗi.
    • Ứng dụng các hàm thư viện chuẩn xử lý ký tự và chuỗi ký tự.
  5. Chương 5: Con trỏ

    • Bản chất địa chỉ ô nhớ trong bộ nhớ RAM, toán tử lấy địa chỉ & và toán tử giải tham chiếu *.
    • Mối quan hệ giữa con trỏ và mảng, các phép toán số học trên con trỏ.
    • Cơ chế cấp phát và giải phóng bộ nhớ động thông qua các hàm malloc, calloc, reallocfree.
  6. Chương 6: Hàm

    • Cú pháp khai báo nguyên mẫu (prototype), định nghĩa hàm và tầm vực của biến trong hàm.
    • Cơ chế truyền tham số: truyền theo giá trị (pass-by-value), truyền theo địa chỉ thông qua con trỏ (pass-by-reference), truyền mảng cho hàm.
    • Giới thiệu các hàm thư viện chuẩn trong C.
  7. Chương 7: Kiểu dữ liệu tự tạo

    • Định nghĩa và khai báo kiểu cấu trúc (struct), truy xuất thành phần thông qua toán tử dấu chấm . và toán tử mũi tên ->.
    • Mảng cấu trúc, con trỏ cấu trúc và truyền cấu trúc vào hàm.
    • Kiểu kết hợp (union) và kiểu liệt kê (enum), cơ chế chia sẻ ô nhớ trong union.
  8. Chương 8: Tiền xử lý

    • Chỉ thị bao hàm tệp (#include) nạp các tệp tiêu đề (header .h).
    • Chỉ thị định nghĩa macro (#define) và chỉ thị điều khiển quá trình biên dịch (#ifdef, #ifndef, #endif).

Progression logic của giáo trình đi từ đơn vị dữ liệu cơ sở $\rightarrow$ cấu trúc điều khiển giải thuật $\rightarrow$ cấu trúc dữ liệu tuyến tính $\rightarrow$ quản lý bộ nhớ trực tiếp $\rightarrow$ mô-đun hóa chương trình $\rightarrow$ cấu trúc dữ liệu phức hợp và tiền xử lý.

+-------------------------------------------------------------------------------+
| Chương 1: Cơ sở lập trình & Lưu đồ thuật toán (Variables, Data types, I/O)    |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Chương 2 & 3: Cấu trúc điều khiển luồng (Branching: if/switch & Loops)        |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Chương 4 & 5: Dữ liệu có cấu trúc & Bộ nhớ (Arrays, Strings, Pointers, Memory)|
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Chương 6: Mô-đun hóa chương trình (Functions & Parameter passing mechanisms)  |
+-------------------------------------------------------------------------------+
+-------------------------------------------------------------------------------+
| Chương 7 & 8: Dữ liệu nâng cao & Tiền xử lý (struct, union, enum & Macros)   |
+-------------------------------------------------------------------------------+

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

  • Lý thuyết biểu diễn dữ liệu và kiến trúc bộ nhớ: Nguyên lý định danh ô nhớ trong RAM, kích thước các kiểu dữ liệu (char 1 byte, int 2/4 bytes, float 4 bytes, double 8 bytes, long double 10 bytes), phạm vi biểu diễn số nguyên có dấu/không dấu và các hệ đếm (nhị phân 0b, bát phân 0, thập lục phân 0x).
  • Nguyên lý lập trình cấu trúc: Nền tảng ba cấu trúc điều khiển căn bản (tuần tự, rẽ nhánh, lặp) và phương pháp chuyển đổi hình thức từ lưu đồ giải thuật sang mã nguồn thực thi.
  • Mô hình biên dịch mã nguồn: Cơ chế chuyển đổi từ mã nguồn cấp cao sang mã hợp ngữ, mã máy và liên kết thư viện nhị phân .exe / thực thi.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Viết mã nguồn đúng chuẩn ANSI C; sử dụng toán tử bit-wise để thao tác trực tiếp trên các bit nhị phân và thanh ghi; quản lý con trỏ và thao tác cấp phát vùng nhớ động.
  • Kỹ năng phân tích (Analytical skills): Phân tích bài toán, xác định điều kiện biên, thiết lập sơ đồ khối lưu đồ thuật toán trước khi viết mã; phân tích luồng dữ liệu và phát hiện lỗi logic thông qua việc truy vết từng dòng lệnh.
  • Kỹ năng thực hành (Practical competencies): Sử dụng các công cụ biên dịch (Compiler/IDE); kiểm tra và sửa lỗi cú pháp dựa trên thông báo của trình biên dịch; hiện thực hóa các bài toán số học, chuỗi và cấu trúc dữ liệu trên máy tính.

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

Tiếp cận sư phạm (Pedagogical approach)

Giáo trình áp dụng phương pháp tiếp cận quy nạp kết hợp trực quan hóa và thực nghiệm:

  1. Nêu vấn đề kỹ thuật và phân tích yêu cầu logic.
  2. Xây dựng lưu đồ giải thuật (Flowchart) hoặc mô tả mã giả (Pseudocode) để chuẩn hóa quy trình xử lý.
  3. Trình bày cú pháp C tương ứng và giải thích chi tiết chức năng từng từ khóa, tham số, toán tử.
  4. Cung cấp mã nguồn chương trình hoàn chỉnh, phân tích cấu trúc từng dòng lệnh và hiển thị kết quả đầu ra (output trace).
+------------------+     +--------------------+     +-------------------+
|  1. Phân tích    |     |  2. Thiết lập      |     |  3. Hiện thực     |
|     kỹ thuật     |     |     thuật toán     |     |     chuẩn hóa     |
+------------------+     +--------------------+     +-------------------+
+------------------+     +--------------------+     +-------------------+
|  6. Bài tập      |     |  5. Phân tích      |     |  4. Biên dịch &   |
|     và sửa lỗi   |     |     đầu ra         |     |     chương trình  |
+------------------+     +--------------------+     +-------------------+

Bài tập và minh họa thực hành

Hệ thống ví dụ mẫu và bài tập trong giáo trình được phân cấp cụ thể:

  • Ví dụ mẫu từng bước: Minh họa các thuật toán cơ sở như tính tổng hai số nguyên, giải phương trình bậc hai $ax^2 + bx + c = 0$, tìm giá trị lớn nhất trong ba số bằng cấu trúc so sánh lồng nhau, thao tác dịch bit (<<, >>) và toán tử gán mở rộng (+=, -=, *=, /=, %=).
  • Phân tích lỗi cú pháp và ngữ nghĩa: Yêu cầu người học tìm và sửa lỗi trong các đoạn mã mẫu (ví dụ: thiếu dấu ngoặc nhọn, cú pháp hàm scanf chứa dấu phẩy không hợp lệ, thứ tự ưu tiên của tiền tố/hậu tố ++--).
  • Phân tích kết quả thực thi (Dry-run): Dự đoán giá trị của biến qua từng bước tính toán số học, phép gán và toán tử tăng giảm trước khi đối chiếu với kết quả thực tế từ trình biên dịch.
  • Bài tập lập trình độc lập: Xây dựng lưu đồ và viết chương trình hoàn chỉnh cho các bài toán: tính 4 phép toán cơ bản trên hai số nguyên, kiểm tra số nguyên tố, tìm giá trị lớn nhất/nhỏ nhất trong tập 4 số nguyên.

Phương pháp đánh giá và hướng dẫn tự học

  • Phương pháp đánh giá: Đánh giá dựa trên tính chính xác của lưu đồ thuật toán, mức độ tối ưu trong việc lựa chọn kiểu dữ liệu và cấu trúc điều khiển, khả năng xử lý con trỏ/bộ nhớ và kết quả thực thi của chương trình.
  • Hướng dẫn tự học: Người học được khuyến nghị thực hiện đúng quy trình: tự vẽ lại lưu đồ trước khi gõ mã nguồn; tự nhập và biên dịch lại các chương trình mẫu; chủ động theo dõi sự thay đổi giá trị của các biến trong bộ nhớ RAM qua từng bước thực thi.

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

Bối cảnh biên soạn và định hướng kỹ thuật máy tính

Giáo trình được biên soạn năm 2020 bởi các giảng viên Khoa Điện - Điện tử (HCMUTE), gắn liền với bối cảnh chuyển dịch công nghệ trong kỷ nguyên Cách mạng Công nghiệp 4.0, Internet vạn vật (IoT), trí tuệ nhân tạo (AI) và các hệ thống tự động hóa. Nội dung giáo trình phản ánh chính xác vị trí của ngôn ngữ C trong việc điều khiển các thiết bị phần cứng lập trình được.

Tính liên kết hệ thống và ứng dụng thực tế

  • Cơ sở cho lập trình hệ thống và hệ điều hành: Giáo trình chỉ rõ ngôn ngữ C là nền tảng xây dựng hệ điều hành UNIX và là tiêu chuẩn cho lập trình hệ thống nhúng chạy trên nền tảng Linux (Embedded Linux System Programming).
  • Thao tác phần cứng trực tiếp: Việc đưa các phép toán bit-wise (AND, OR, XOR, NOT, dịch bit) và quản lý con trỏ vào vị trí trọng tâm giúp sinh viên ngành Kỹ thuật máy tính có kiến thức nền tảng để học tiếp các môn lập trình vi xử lý, vi điều khiển (MCU) và thiết bị kỹ thuật số.
  • Mối liên hệ với các ngôn ngữ phát triển sau: Giáo trình phân tích cấu trúc của C như ngôn ngữ nguồn cội của các ngôn ngữ hiện đại và ngôn ngữ mô tả phần cứng:
    • Ngôn ngữ hướng đối tượng và ứng dụng: C++, C#, Java, Objective-C, Swift.
    • Ngôn ngữ mô tả phần cứng: Verilog HDL trong thiết kế vi mạch số.
    • Ngôn ngữ kịch bản và AI: Python.
                                    +------------------------------+
                                    |     Ngôn ngữ lập trình C     |
                                    +------------------------------+
+------------------+      +------------------+            +------------------+      +------------------+
| Lập trình nhúng  |      | Thiết kế vi mạch |            | Lập trình hệ     |      | Nền tảng ngôn    |
| & Vi điều khiển  |      | số (Verilog HDL) |            | thống (Linux OS) |      | ngữ bậc cao      |
+------------------+      +------------------+            +------------------+      +------------------+

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

Nhóm đối tượng Phạm vi và mục đích sử dụng Yêu cầu kiến thức tiên quyết (Prerequisites)
Sinh viên đại học Sinh viên năm thứ nhất hoặc năm thứ hai thuộc các ngành: Kỹ thuật máy tính, Công nghệ kỹ thuật Điện - Điện tử, Kỹ thuật Điều khiển và Tự động hóa, Công nghệ thông tin và các ngành kỹ thuật công nghệ liên quan. Sử dụng làm tài liệu học tập bắt buộc cho học phần Ngôn ngữ lập trình C / Kỹ thuật lập trình. Kiến thức toán học phổ thông, tư duy logic cơ bản và kỹ năng sử dụng máy tính văn phòng; không yêu cầu đã biết lập trình trước đó.
Giảng viên Dùng làm đề cương, bài giảng lý thuyết và ngân hàng bài tập thực hành trên lớp hoặc trong phòng thí nghiệm; làm khung chuẩn để xây dựng tiêu chí đánh giá môn học. Chuyên môn về khoa học máy tính, kỹ thuật máy tính hoặc kỹ thuật điện tử.
Người tự học và kỹ sư Kỹ sư phần cứng, kỹ thuật viên nhúng cần hệ thống hóa lại kiến thức cú pháp chuẩn ANSI C, kỹ thuật quản lý bộ nhớ qua con trỏ và các phép toán xử lý bit trên thanh ghi. Nắm vững các khái niệm cơ bản về logic số và hệ thống máy tính.

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

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

Tài liệu được thiết kế chuyên biệt cho sinh viên đại học khối ngành kỹ thuật, đặc biệt là sinh viên ngành Kỹ thuật máy tính và Điện - Điện tử. Ngoài ra, giáo trình phù hợp cho người mới bắt đầu học lập trình muốn nắm vững nguyên lý vận hành mức thấp của máy tính.

2. Cần kiến thức nền nào để học giáo trình này?

Người học không cần có kiến thức lập trình trước đó. Giáo trình bắt đầu từ các khái niệm cơ sở nhất như phân loại ngôn ngữ, biểu diễn số nhị phân, quy ước lưu đồ giải thuật. Yêu cầu duy nhất là tư duy logic toán học ở mức phổ thông và kỹ năng thao tác máy tính cơ bản.

3. Điểm khác biệt của giáo trình so với các tài liệu lập trình C thông thường là gì?

Giáo trình tập trung sâu vào bản chất kỹ thuật máy tính: phân tích cơ chế quản lý bộ nhớ RAM của biến và con trỏ, quy trình 4 bước biên dịch chi tiết (Preprocessor, Compiler, Assembler, Linker), các hệ đếm (nhị phân, bát phân, thập lục phân) và hệ thống toán tử bit-wise phục vụ lập trình điều khiển phần cứng, thay vì chỉ dừng lại ở các bài toán thuật toán thuần túy.

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

Người học cần tuân thủ tiến trình 4 bước được đề xuất trong giáo trình:

  1. Phân tích bài toán và vẽ lưu đồ giải thuật trên giấy trước khi lập trình.
  2. Gõ trực tiếp mã nguồn của các chương trình mẫu vào môi trường biên dịch (không sao chép) để ghi nhớ cú pháp.
  3. Tự phân tích và dự đoán kết quả in ra màn hình trước khi thực thi.
  4. Tự giải quyết các bài tập tìm lỗi và bài tập lập trình ở cuối mỗi chương.

5. Giáo trình cung cấp các bảng tra cứu và tài liệu bổ trợ nào?

Giáo trình tích hợp sẵn các bảng tra cứu học thuật bao gồm:

  • Bảng 32 từ khóa chuẩn trong C.
  • Bảng kích thước và định dạng các kiểu dữ liệu cơ bản.
  • Bảng biểu diễn giá trị theo các hệ đếm (Nhị phân, Bát phân, Thập phân, Thập lục phân).
  • Bảng toán tử số học, quan hệ, luận lý, bit-wise và toán tử tăng/giảm.
  • Bảng mã định dạng chuỗi xuất/nhập cho các hàm printfscanf.
  • Danh mục tài liệu tham khảo chuyên ngành tại trang 206–207.

Kết luận

Giáo trình Ngôn ngữ lập trình C (Ngành Kỹ thuật máy tính) của TS. Trương Ngọc Sơn và nhóm tác giả Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh là tài liệu học thuật tiêu chuẩn, cung cấp hệ thống kiến thức hoàn chỉnh về ngôn ngữ C gắn liền với tư duy phần cứng và kỹ thuật lập trình hệ thống.

Lộ trình học tập khuyến nghị từ giáo trình:

  • Giai đoạn 1 (Nền tảng cú pháp và cấu trúc điều khiển): Hoàn thành Chương 1, Chương 2 và Chương 3 để làm chủ giải thuật lưu đồ, biến, toán tử và cấu trúc rẽ nhánh, vòng lặp.
  • Giai đoạn 2 (Xử lý dữ liệu và bộ nhớ): Nghiên cứu Chương 4 và Chương 5 để nắm vững mảng, chuỗi ký tự, bản chất con trỏ và cấp phát động trong RAM.
  • Giai đoạn 3 (Mô-đun hóa và cấu trúc nâng cao): Nghiên cứu Chương 6, Chương 7 và Chương 8 để làm chủ kỹ thuật chia hàm, kiểu dữ liệu tự định nghĩa (struct, union, enum) và các chỉ thị tiền xử lý.

Người học có thể kết hợp việc nghiên cứu giáo trình này với các tài liệu tham khảo chuyên ngành được liệt kê ở trang 206–207 cùng các công cụ biên dịch C tiêu chuẩn để hoàn thiện năng lực lập trình kỹ thuật.