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

Giáo trình Ngôn ngữ lập trình C do Nhà xuất bản Khoa học Tự nhiên và Công nghệ ấn hành năm 2020, được biên soạn bởi nhóm giảng viên Bộ môn Hệ thống thông tin, Khoa Công nghệ thông tin – Trường Đại học Công nghệ Giao thông vận tải, gồm: Lê Chí Luận (Chủ biên), Lê Trung Kiên, Lê Thị Chi, Phạm Thị Thuận và Nguyễn Thị Kim Huệ. Giáo trình được xây dựng trên cơ sở kinh nghiệm giảng dạy thực tế cho sinh viên từ khóa K64 đến K68 của ngành Hệ thống thông tin, đồng thời phục vụ cho chương trình đào tạo ngành Công nghệ thông tin của nhà trường.

Trong cấu trúc chương trình đào tạo đại học khối ngành kỹ thuật công nghệ, học phần Ngôn ngữ lập trình C đóng vai trò là môn học cơ sở cốt lõi được giảng dạy đầu tiên nhằm trang bị tư duy giải thuật và kỹ năng lập trình hướng cấu trúc. Mục tiêu học tập của giáo trình là giúp người học nắm vững cú pháp chuẩn của ngôn ngữ C, hiểu rõ cơ chế tương tác trực tiếp với bộ nhớ máy tính, phân chia chương trình thành các hàm độc lập, và thao tác trên các kiểu dữ liệu từ nguyên thủy đến cấu trúc phức tạp.

Cấu trúc giáo trình bao gồm 8 chương nội dung và 5 phụ lục tra cứu chuyên môn. Giáo trình tiếp cận kiến thức theo tiến trình từ cú pháp cơ bản, các cấu trúc điều khiển luồng, kỹ thuật module hóa qua hàm, đến các kỹ thuật quản lý bộ nhớ thông qua mảng, con trỏ, kiểu cấu trúc (struct), xử lý tệp tin và đồ họa cơ bản. Điểm đặc thù của tài liệu là sự tích hợp chi tiết giữa phân tích lý thuyết, sơ đồ khối thuật toán, minh họa tiến trình biên dịch mã nguồn và hệ thống bài tập thực hành kèm lời giải chi tiết.


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

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

Nội dung học thuật của giáo trình được triển khai qua 8 chương chuyên đề:

  • Chương 1: Các khái niệm cơ bản của ngôn ngữ C
    Trình bày lịch sử hình thành ngôn ngữ C (Dennis Ritchie phát triển năm 1972 tại Bell Labs dựa trên ngôn ngữ B và BCPL), các đặc tính kỹ thuật của ngôn ngữ, tập ký tự hợp lệ, danh mục 32 từ khóa chuẩn (như auto, int, struct, break, switch, typedef, unsigned, volatile...), quy tắc định danh (tối đa 32 ký tự), cấu trúc phân đoạn một chương trình C (tài liệu, tiền xử lý #include, macro #define, nguyên mẫu hàm, hàm main()), các kiểu dữ liệu cơ bản, khai báo biến, hằng số (const, #define), biểu thức số học - logic - bit, và hướng dẫn sử dụng công cụ Dev-C++, Turbo C.
  • Chương 2: Các lệnh nhập - xuất dữ liệu trong C
    Cung cấp cú pháp và cơ chế hoạt động của hàm kết xuất định dạng printf(), hàm nhập liệu scanf(), dòng vào chuẩn stdin, các hàm vào/ra ký tự và chuỗi như putchar(), puts(), getch(), cùng bảng quy chuẩn các mã định dạng dữ liệu (%d, %f, %c, %s, %x...).
  • Chương 3: Các cấu trúc phân nhánh và vòng lặp
    Phân tích chi tiết ba dạng cấu trúc điều khiển: tuần tự, rẽ nhánh (if khuyết, if đầy đủ, else...if, if lồng nhau, switch...case, lệnh nhảy goto), và vòng lặp (vòng lặp xác định for, vòng lặp không xác định while, do...while), cùng các lệnh ngắt/chuyển hướng luồng break, continue.
  • Chương 4: Hàm
    Định nghĩa về hàm, cấu trúc chương trình chứa hàm, nguyên mẫu hàm (function prototype), phạm vi biến (toàn cục và cục bộ). Giáo trình chỉ rõ trong ngôn ngữ C thuần túy chỉ tồn tại hai cơ chế truyền tham số: truyền theo giá trị (pass-by-value) và truyền con trỏ/địa chỉ (pass-by-pointer).
  • Chương 5: Mảng và con trỏ
    Trình bày khái niệm và bài toán trên mảng một chiều, mảng hai chiều; bản chất địa chỉ ô nhớ và biến con trỏ; mối quan hệ tương đương giữa mảng và con trỏ; kỹ thuật cấp phát và giải phóng bộ nhớ động (malloc(), calloc(), free()); xử lý chuỗi ký tự thông qua thư viện <string.h> (strlen, strcmp, strcpy, strcat...).
  • Chương 6: Kiểu cấu trúc
    Trình bày kiểu dữ liệu do người dùng định nghĩa (struct), định nghĩa bí danh kiểu bằng typedef, kỹ thuật cấu trúc lồng nhau, mảng cấu trúc, cấu trúc làm tham số của hàm, con trỏ cấu trúc và cấp phát bộ nhớ động cho kiểu cấu trúc.
  • Chương 7: Tệp
    Phân loại tệp văn bản (text file) và tệp nhị phân (binary file); các thao tác kỹ thuật trên tệp gồm mở tệp (fopen), đọc/ghi dữ liệu có định dạng và nhị phân, di chuyển con trỏ tệp (fseek), và đóng tệp (fclose).
  • Chương 8: Đồ họa
    Giới thiệu thư viện <graphics.h>, thiết lập chế độ đồ họa, bảng màu và các hàm vẽ hình học cơ bản tạo ảnh chuyển động.
TIẾN TRÌNH NỘI DUNG GIÁO TRÌNH:
[Chương 1-2: Cú pháp, Kiểu dữ liệu, I/O] 
       ↓
[Chương 3: Cấu trúc Rẽ nhánh & Vòng lặp] 
       ↓
[Chương 4: Kỹ thuật Hàm & Phạm vi biến] 
       ↓
[Chương 5-6: Mảng, Con trỏ, Cấu trúc (struct)] 
       ↓
[Chương 7-8: Xử lý Tệp tin & Đồ họa căn bản]

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

  1. Mô hình lập trình cấu trúc: Phân rã bài toán lớn thành các hàm độc lập có mức trừu tượng ngang hàng, tách rời cấu trúc dữ liệu và giải thuật.
  2. Mô hình biểu diễn dữ liệu và kiến trúc bộ nhớ: Nguyên lý lưu trữ dữ liệu nhị phân, quy tắc biểu diễn số nguyên có dấu dạng mã bù 2 (two's complement), sự khác biệt giữa signedunsigned, phân bổ bộ nhớ tĩnh (stack) và bộ nhớ động (heap).
  3. Tiến trình thực thi chương trình C: Chu trình chuyển đổi mã nguồn qua 5 giai đoạn:
    • Tiền xử lý (Preprocessor): Xử lý chỉ thị #include, #define, tạo tệp mã mở rộng .i.
    • Biên dịch (Compiler): Chuyển đổi mã .i thành mã assembly .s.
    • Dịch mã máy (Assembler): Chuyển đổi tệp .s thành mã đối tượng .obj.
    • Liên kết (Linker): Kết nối mã .obj với các thư viện để tạo tệp thực thi .exe.
    • Nạp (Loader): Nạp chương trình vào RAM để CPU xử lý.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật: Viết mã nguồn C chuẩn cú pháp; biên dịch, liên kết và sửa lỗi bằng công cụ Dev-C++ hoặc Turbo C; thao tác trực tiếp với con trỏ và giải phóng bộ nhớ động tránh tràn bộ nhớ.
  • Kỹ năng phân tích: Chuyển đổi bài toán thực tế thành sơ đồ khối thuật toán; phân tích điều kiện rẽ nhánh và vòng lặp tối ưu; thiết kế cấu trúc dữ liệu trừu tượng phản ánh đối tượng thực tế (ví dụ cấu trúc Sach, sinh viên).
  • Kỹ năng thực hành ứng dụng: Xử lý mảng số học, chuỗi văn bản, tổ chức lưu trữ và truy xuất tệp dữ liệu lâu dài trên ổ đĩa.

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

Giáo trình áp dụng phương pháp sư phạm cấu trúc - giải thuật, kết hợp giữa diễn giải lý thuyết toán tin và thực nghiệm kiểm chứng trên máy tính:

TIẾN TRÌNH SƯ PHẠM MỖI CHỦ ĐỀ:
Khái niệm & Cú pháp chuẩn → Sơ đồ khối (Flowchart) → Ví dụ mã nguồn kèm giải thích → Bài tập có lời giải → Bài tập tự giải
  1. Trực quan hóa thuật toán: Sử dụng hệ thống sơ đồ khối (Hình 1.1 đến Hình 3.8 trong giáo trình) để mô hình hóa hoạt động của các cấu trúc điều khiển (if, if...else, switch, for, while, do...while) và mô hình truyền tham số trong hàm.
  2. Giải thích mã nguồn từng dòng: Mỗi ví dụ đều có phần phân tích chi tiết chức năng của từng câu lệnh (ví dụ phân tích dòng lệnh #include <stdio.h>, int main(), return 0 trong chương trình in chuỗi "Hello, World").
  3. Hệ thống bài tập phân cấp:
    • Bài tập có lời giải: Cung cấp các bài toán mẫu hoàn chỉnh từ phân tích đề bài, lựa chọn cấu trúc dữ liệu, thuật toán đến cài đặt mã nguồn (như thuật toán tìm kiếm phần tử lớn nhất, sắp xếp mảng, nhập xuất thông tin đối tượng).
    • Bài tập tự giải: Đặt tại cuối mỗi chương từ Chương 1 đến Chương 8, yêu cầu người học tự thiết kế thuật toán và hiện thực hóa chương trình nhằm củng cố lý thuyết.
  4. Hỗ trợ tự học và tra cứu: Cung cấp 5 phụ lục chuyên biệt (Từ khóa, Thư viện chuẩn, Bảng mã ASCII, Bảng mức độ ưu tiên của các toán tử, Bảng mã định dạng) giúp người học tra cứu tức thì khi thực hành viết code mà không phụ thuộc vào tài liệu ngoài.

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

  • Kế thừa từ thực tiễn giảng dạy đại học: Toàn bộ nội dung được tinh chỉnh từ quá trình giảng dạy trực tiếp nhiều năm cho sinh viên các khóa K64, K65, K66, K67, K68 chuyên ngành Hệ thống thông tin và Công nghệ thông tin tại Trường Đại học Công nghệ Giao thông vận tải, có sự tham gia đóng góp chuyên môn của NCS. Trần Nguyên Hương (Trường Đại học Kinh doanh và Công nghệ Hà Nội).
  • Mở rộng nội dung ứng dụng thực tế: Mặc dù nội dung về Tệp (Chương 7) không nằm trong đề cương bắt buộc của môn học cho hai ngành trên, nhóm tác giả đã bổ sung toàn bộ chương này vào tài liệu nhằm trang bị cho sinh viên kỹ năng lưu trữ dữ liệu vĩnh viễn trên tệp văn bản và nhị phân – thành phần kỹ thuật then chốt của các phần mềm ứng dụng.
  • Mở rộng chuyên đề đồ họa: Bổ sung Chương 8 về lập trình đồ họa căn bản trên thư viện <graphics.h>, minh họa cách thiết lập chế độ đồ họa, bảng màu và vẽ chuyển động hình học.
  • Làm rõ mối quan hệ giữa C và các ngôn ngữ hiện đại: Giáo trình phân tích vai trò của C đối với các công nghệ phần mềm hiện đại: nhân Linux (Linux kernel) viết bằng C và Hợp ngữ (Assembly); các ngôn ngữ cấp cao như Python, PHP, Perl, Ruby đều được hiện thực bằng C; các ngôn ngữ C++, Java, C# được phát triển dựa trên việc kế thừa và cải tiến từ C.

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

  • Sinh viên đại học và cao đẳng: Phục vụ trực tiếp cho sinh viên năm thứ nhất và năm thứ hai thuộc các ngành Công nghệ thông tin, Hệ thống thông tin, Kỹ thuật phần mềm, và các ngành kỹ thuật công nghệ có học phần cơ sở về lập trình máy tính.
  • Điều kiện tiên quyết (Prerequisites): Người học cần có kiến thức tin học đại cương cơ bản, kỹ năng sử dụng máy tính và tư duy logic toán học sơ cấp. Không bắt buộc phải có kiến thức lập trình trước đó.
  • Giảng viên: Sử dụng làm tài liệu giảng dạy chính khóa, định hướng phân bổ nội dung bài giảng lý thuyết trên lớp và hướng dẫn bài tập thực hành trong phòng máy tính.
  • Lập trình viên tự học và tra cứu: Người mới bắt đầu học lập trình hoặc kỹ sư phát triển phần mềm nhúng (embedded systems) cần tài liệu tra cứu chuẩn về quản lý bộ nhớ, con trỏ, mã bù 2, bảng mã ASCII và các hàm vào/ra tệp tin chuẩn.

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

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được thiết kế chuẩn mực cho sinh viên đại học khối ngành Công nghệ thông tin, Hệ thống thông tin và người bắt đầu học lập trình cần nắm vững nền tảng khoa học máy tính và kỹ thuật lập trình cấu trúc.

2. Cần chuẩn bị kiến thức nền tảng nào trước khi học?

Người học chỉ cần kiến thức tin học cơ bản và tư duy toán học phổ thông. Giáo trình dẫn dắt từ các khái niệm sơ cấp nhất (tập ký tự, từ khóa, cách cài đặt công cụ Dev-C++/Turbo C) nên không đòi hỏi kinh nghiệm lập trình từ trước.

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ì?

Giáo trình phân tích sâu cơ chế máy tính ở mức thấp (cơ chế mã bù 2 của signed char, quá trình biên dịch 5 bước, quản lý bộ nhớ qua con trỏ và cấp phát động) và bổ sung 2 chương chuyên sâu ngoài đề cương bắt buộc là Chương 7 (Xử lý tệp) và Chương 8 (Đồ họa).

4. Phương pháp tự học giáo trình như thế nào để đạt hiệu quả cao?

Người học nên học tuần tự theo từng chương: đọc kỹ lý thuyết cú pháp, phân tích sơ đồ khối thuật toán, gõ và chạy lại các ví dụ mã nguồn trên Dev-C++, sau đó làm toàn bộ bài tập tự giải ở cuối mỗi chương kết hợp tra cứu các phụ lục ở cuối sách.

5. Giáo trình có những tài liệu bổ trợ nào kèm theo?

Cuối giáo trình tích hợp 5 phụ lục chuẩn: Phụ lục 1 (Danh mục từ khóa), Phụ lục 2 (Tổng hợp thư viện C chuẩn), Phụ lục 3 (Bảng mã ASCII), Phụ lục 4 (Mức độ ưu tiên của toán tử) và Phụ lục 5 (Bảng mã định dạng dữ liệu).


Kết luận

Giáo trình Ngôn ngữ lập trình C của Trường Đại học Công nghệ Giao thông vận tải cung cấp hệ thống tri thức chuẩn xác về ngôn ngữ C và phương pháp lập trình cấu trúc. Nội dung sách kết hợp chặt chẽ giữa lý thuyết nền tảng (kiểu dữ liệu, cấu trúc điều khiển, hàm, bộ nhớ con trỏ) và kỹ thuật ứng dụng thực tiễn (xử lý cấu trúc, tệp tin và đồ họa). Tiến trình học tập được thiết kế mạch lạc qua 8 chương chuyên đề cùng hệ thống bài tập thực hành phong phú và 5 phụ lục tra cứu, hỗ trợ người học làm chủ các nguyên lý lập trình cốt lõi để tiếp cận các ngôn ngữ lập trình bậc cao và hệ thống phần mềm chuyên sâu.