Giáo trình Lập trình C/C++ cơ bản (Đại học Sư phạm – Đại học Đà Nẵng)


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

Giáo trình Lập trình C/C++ cơ bản do Nhà xuất bản Đà Nẵng ấn hành (tháng 12 năm 2019), được biên soạn bởi tác giả Phạm Anh Phương đại diện nhóm tác giả thuộc Trường Đại học Sư phạm – Đại học Đà Nẵng, cùng sự đóng góp chuyên môn từ các giảng viên tại Đại học Khoa học – Đại học Huế, Đại học Duy Tân và Đại học Bách Khoa – Đại học Đà Nẵng. Trong chương trình đào tạo trình độ Đại học và Cao đẳng khối ngành Công nghệ Thông tin, học phần Lập trình C/C++ giữ vị trí học phần cơ sở ngành bắt buộc, cung cấp nền tảng trực tiếp cho các chuyên ngành chuyên sâu như Công nghệ phần mềm và Kỹ thuật mạng.

Mục tiêu học tập (learning outcomes) của giáo trình tập trung vào việc trang bị cho người học:

  • Hiểu biết về nguyên lý biểu diễn thông tin và hệ đếm trong máy tính.
  • Phương pháp luận xây dựng và biểu diễn thuật toán thông qua ngôn ngữ tự nhiên, sơ đồ khối (lưu đồ) và mã giả.
  • Khả năng sử dụng cú pháp chuẩn ANSI C và các phần mở rộng hướng đối tượng cơ bản của C++.
  • Kỹ năng thao tác trên các cấu trúc dữ liệu cơ bản (mảng, con trỏ, chuỗi ký tự, bản ghi struct, tệp tin) và ứng dụng thư viện tiêu chuẩn STL.

Cấu trúc giáo trình gồm 7 chương được phân bố trên 175 trang, tiếp cận người học theo mô hình diễn dịch tuyến tính: từ kiến thức toán học/tin học đại cương, chuyển tiếp sang cú pháp lệnh, cấu trúc điều khiển, kỹ thuật module hóa qua hàm, quản trị bộ nhớ với con trỏ, đến tổ chức dữ liệu phức hợp và xử lý tệp.

Điểm đặc trưng của giáo trình là sự đồng bộ hóa toàn bộ mã nguồn ví dụ và bài tập trên môi trường trình biên dịch Dev C++ 5.X (chạy trên hệ điều hành Windows và Linux). Hệ thống bài toán thực hành được chuẩn hóa theo định dạng dữ liệu đầu vào (Input) và đầu ra (Output) tương thích với hệ thống chấm bài tự động, phục vụ cho các kỳ thi học thuật như Olympic Tin học sinh viên và kỳ thi lập trình quốc tế ACM/ICPC.


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

[Chương 1: Kiến thức cơ bản] ──> [Chương 2: Cú pháp C/C++] ──> [Chương 3: Cấu trúc điều khiển]
           │                                 │                               │
           ▼                                 ▼                               ▼
(Thông tin, Hệ đếm, Lưu đồ)      (Kiểu dữ liệu, Toán tử, I/O)    (if, switch, for, while, goto)
           │                                 │                               │
           └─────────────────────────────────┼───────────────────────────────┘
                                             ▼
                       [Chương 4: Hàm & Phân rã module]
                                             │
                                             ▼
                   [Chương 5: Mảng, Con trỏ & Xử lý Chuỗi]
                                             │
                                             ▼
                    [Chương 6: Kiểu Cấu trúc & Kiểu Tập tin]
                                             │
                                             ▼
                  [Chương 7: Thư viện STL & Kỹ thuật Gỡ lỗi]

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

Giáo trình phân chia nội dung giảng dạy qua 7 đơn vị kiến thức cốt lõi:

  • Chương 1: Các kiến thức cơ bản: Trình bày khái niệm thông tin và dữ liệu, nguyên lý đóng/mở mạch điện (On-Off) dẫn đến hệ thống nhị phân, các đơn vị đo lường thông tin ($1\text{ Byte} = 8\text{ bit}$, $1\text{ KB} = 1024\text{ Byte}$, $1\text{ MB} = 1024\text{ KB}$, $1\text{ GB} = 1024\text{ MB}$, $1\text{ TB} = 1024\text{ GB}$). Phân tích các hệ đếm cơ số 10, cơ số 2, cơ số 16 (Hexa) và công thức chuyển đổi tổng quát $N = \sum_{i=-m}^{n-1} d_i B^i$. Khái quát các phép toán cộng, trừ, nhân, chia trên hệ nhị phân. Định nghĩa thuật toán cùng 5 đặc trưng bản chất, 4 dạng ngôn ngữ mô tả thuật toán và 4 thành phần quy chuẩn của sơ đồ khối (nút giới hạn ôvan, nút thao tác chữ nhật, nút điều kiện hình thoi, nút xuất/nhập hình bình hành).
  • Chương 2: Cơ bản về ngôn ngữ lập trình C/C++: Lược sử ngôn ngữ do Dennis Ritchie phát triển năm 1972 tại Bell Telephone và chuẩn hóa ANSI Standard C năm 1983; phần mở rộng lập trình hướng đối tượng (class) trong C++. Quy trình 4 bước phát triển phần mềm (Soạn thảo $\rightarrow$ Dịch $\rightarrow$ Sửa lỗi $\rightarrow$ Chạy). Giới thiệu 32 từ khóa chuẩn, 2 định dạng chú thích (/* *///), các kiểu dữ liệu sơ cấp (char, int, float, double, bool, void), khai báo biến, quy tắc đặt tên biến (độ dài tối đa mặc định 32 ký tự), lấy địa chỉ bằng toán tử &, khai báo hằng (const, #define). Hệ thống biểu thức và toán tử: số học, quan hệ, logic, toán tử bitwise (~, &, |, ^, <<, >>), toán tử điều kiện 3 ngôi ?:. Hàm xuất nhập printf()/scanf() của C cùng luồng cin/cout kết hợp định dạng số thực <iomanip> (fixed, setprecision) của C++.
  • Chương 3: Các cấu trúc điều khiển: Cấu trúc rẽ nhánh if...else đơn/phức hợp; cấu trúc lựa chọn đa trường hợp switch...case...default. Các cấu trúc lặp for(var_init; loop_condition; var_inc/dec), while(B), do...while(B). Các lệnh can thiệp luồng điều khiển: lệnh thoát break, lệnh chuyển tiếp vòng lặp continue, và lệnh nhảy vô điều kiện goto kèm quy tắc định danh nhãn trong phạm vi hàm.
  • Chương 4: Khái niệm về hàm và xây dựng hàm: Phương pháp thiết kế chương trình từ trên xuống (top-down), kỹ thuật phân rã bài toán, khai báo nguyên mẫu hàm (prototype), định nghĩa hàm, truyền tham số theo giá trị (pass-by-value) và truyền tham số theo địa chỉ/tham chiếu (pass-by-reference), phạm vi biến cục bộ và toàn cục.
  • Chương 5: Mảng, chuỗi và con trỏ: Tổ chức dữ liệu mảng một chiều, mảng hai chiều. Bản chất bộ nhớ và mối liên hệ đại số giữa mảng và con trỏ. Chuỗi ký tự chuẩn C (mảng ký tự kết thúc bằng \0, các hàm xử lý trong <ctype.h> và chuỗi) và thao tác với lớp đối tượng string trong C++.
  • Chương 6: Kiểu cấu trúc và kiểu tập tin: Định nghĩa kiểu dữ liệu do người dùng tự tạo với struct, định danh kiểu mới qua typedef, khởi tạo và truy cập trường dữ liệu cấu trúc. Xử lý tập tin: các chế độ đọc/ghi dữ liệu, thao tác trên tệp tin văn bản (text file) và tệp tin nhị phân.
  • Chương 7: Thư viện STL và Trình gỡ lỗi: Giới thiệu các container và thuật toán thông dụng trong thư viện Standard Template Library (STL) như <algorithm>, header tổng hợp <bits/stdc++.h>. Hướng dẫn quy trình sử dụng công cụ gỡ lỗi (debugger) tích hợp trên Dev C++ (trang 171) để theo dõi biến và ngắt điểm thực thi.

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

Giáo trình xác lập các nền tảng lý thuyết và nguyên lý vận hành cốt lõi:

  • Nguyên lý số học máy tính (Computer Arithmetic): Nắm vững bản chất chuyển đổi qua lại giữa hệ thập phân, nhị phân, thập lục phân; kỹ thuật chia liên tiếp cho 2 lấy phần dư để đổi phần nguyên, nhân liên tiếp với 2 để đổi phần lẻ; cơ chế thực hiện các phép tính số học và thao tác logic trên từng bit nhị phân.
  • Lý thuyết thuật toán hình thức: Hiểu và tuân thủ 5 đặc trưng bắt buộc của giải thuật bao gồm tính xác định (mỗi bước chỉ có một cách hiểu và kết quả duy nhất), tính kết thúc/dừng (thuật toán luôn kết thúc sau số hữu hạn bước), tính đúng đắn (cho kết quả chính xác theo yêu cầu), tính phổ dụng (giải quyết một lớp bài toán cùng dạng), và tính hiệu quả/hiện thực (tối ưu về thời gian và dung lượng bộ nhớ).
  • Nguyên lý kiến trúc bộ nhớ và định danh: Hiểu cơ chế phân vùng bộ nhớ khi khai báo biến, kích thước ô nhớ của các kiểu dữ liệu sơ cấp, cách thức tham chiếu địa chỉ qua toán tử &, và bản chất con trỏ trong việc truy cập dữ liệu.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical Skills):
    • Cài đặt mã nguồn bằng cú pháp C/C++ chuẩn ANSI, quản lý thư viện tiền xử lý (#include).
    • Thao tác xuất nhập dữ liệu theo định dạng yêu cầu thông qua printf/scanfcin/cout/iomanip.
    • Sử dụng các cấu trúc rẽ nhánh, lặp, mảng, con trỏ, kiểu cấu trúc struct và thao tác đọc/ghi file văn bản.
    • Ứng dụng các hàm xử lý thuật toán dựng sẵn trong thư viện <algorithm>.
  • Kỹ năng phân tích (Analytical Skills):
    • Khả năng phân tích bài toán thực tế thành dãy thao tác xử lý tuần tự hoặc rẽ nhánh.
    • Kỹ năng mô hình hóa giải thuật thông qua ngôn ngữ sơ đồ khối (lưu đồ) trước khi lập trình.
    • Kỹ năng biện luận các trường hợp biên của bài toán (ví dụ: phương trình vô nghiệm, năm nhuận, tháng có 28/29/30/31 ngày).
  • Kỹ năng thực hành (Practical Competencies):
    • Sử dụng thành thạo IDE Dev C++ 5.X trên hai môi trường Windows và Linux.
    • Kỹ năng kiểm thử, phân tích lỗi biên dịch và vận hành trình gỡ lỗi (debugger) để dò từng bước thực thi (step-by-step).
    • Chuẩn hóa mã nguồn theo định dạng bài thi lập trình tự động: đặt tên tệp theo mã bài (ví dụ: STAMGIAC.CPP), xuất nhập dữ liệu chính xác và không chứa các ký tự dư thừa.

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

Giáo trình triển khai phương pháp tiếp cận sư phạm đi từ khái niệm lý thuyết trừu tượng đến mô hình hóa trực quan và cài đặt chương trình cụ thể:

[1. Khái niệm lý thuyết] ──> [2. Mô hình hóa Lưu đồ] ──> [3. Cài đặt Mã nguồn] ──> [4. Bài tập có Test Case]
  1. Lý thuyết và cú pháp: Trình bày ngắn gọn các định nghĩa, bảng quy chuẩn (bảng từ khóa, bảng kiểu dữ liệu, bảng toán tử logic/bitwise).
  2. Mô hình hóa trực quan: Sử dụng lưu đồ khối để làm rõ luồng đi của thuật toán đối với từng cấu trúc điều khiển (if, switch, for, while, do...while) hoặc bài toán mẫu (giải phương trình bậc nhất, bậc hai, tính tổng, tìm cực trị).
  3. Mã nguồn đối sánh: Cung cấp mã nguồn hoàn chỉnh với đầy đủ phần khai báo thư viện, hàm main(), và ghi chú chú thích chi tiết cho từng khối lệnh.
  4. Hệ thống bài tập phân hóa: Cuối mỗi chương là hệ thống bài tập thực hành được sắp xếp theo mức độ từ dễ đến khó:
    • Bài tập cơ bản: Củng cố cú pháp (ví dụ: chuyển đổi hệ đếm, chuyển đổi ký tự hoa - thường LOWER, UPPER, hoán vị giá trị SWAP).
    • Bài tập ứng dụng tính toán toán học/hình học: Cài đặt các công thức giải tích và hình học giải tích (tính diện tích tam giác theo công thức Heron HERONG, tính căn bậc $n$ CANBACN, chu vi hình tròn CVTRON, diện tích mặt hình hộp chữ nhật HINHHOP, tính khoảng cách hai điểm, tính tích vô hướng hai vector, tính góc giữa hai đường thẳng ANGLE, tìm tâm đường tròn ngoại tiếp).
    • Bài tập tối ưu hóa và logic phức tạp: Yêu cầu tư duy giải thuật nâng cao (ví dụ: tìm giá trị cực đại của biểu thức $P = a \cdot b^2$ với điều kiện $a+b=n$ trong bài toán MAXIMA, thuật toán tìm số nguyên tố, tìm ước số chung lớn nhất).
Tiêu chí Quy cách thiết kế trong giáo trình
Phương thức đánh giá Kiểm tra tự động hóa thông qua đối sánh kết quả INPUT/OUTPUT mẫu.
Tài liệu trợ giúp Phần "Ý tưởng" và "Gợi ý" giải thuật được tích hợp trực tiếp dưới các bài toán khó.
Hướng dẫn tự học Tuân thủ quy trình 4 bước: Soạn thảo $\rightarrow$ Biên dịch $\rightarrow$ Phân tích lỗi $\rightarrow$ Thực thi; sử dụng debugger trang 171 để kiểm soát biến.

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

Nội dung giáo trình phản ánh các yếu tố thực nghiệm và chuẩn hóa phục vụ trực tiếp cho giảng dạy đại học:

  • Tính chuẩn hóa theo chuẩn ANSI C và C++: Cập nhật các quy ước viết mã của chuẩn ANSI, đồng thời chỉ rõ sự khác biệt giữa các kiểu xuất nhập của C (printf/scanf trong <stdio.h>) và C++ (cin/cout trong <iostream>), cách cố định chữ số thập phân bằng fixedsetprecision của <iomanip>.
  • Tích hợp thư viện chuẩn C++ (STL): Giáo trình bổ sung chương mục về thư viện mẫu chuẩn STL, bao gồm việc sử dụng thư viện xử lý thuật toán <algorithm> và header đa năng <bits/stdc++.h>, vốn là các công cụ thường được dùng trong lập trình thi đấu hiện đại.
  • Đồng bộ với môi trường Dev C++ 5.X: Toàn bộ các ví dụ và mã nguồn được xây dựng và kiểm thử tương thích với trình biên dịch Dev C++ 5.X, một IDE gọn nhẹ, khả dụng trên cả hệ điều hành Windows lẫn Linux.
  • Hỗ trợ công cụ gỡ lỗi (Debugging): Giáo trình dành riêng mục kỹ thuật tại trang 171 để hướng dẫn người học thao tác với trình gỡ lỗi trong Dev C++, giúp sinh viên chuyển đổi từ việc sửa lỗi bị động qua thông báo dịch sang chủ động kiểm soát trạng thái biến trong bộ nhớ.
  • Kết nối với các kỳ thi học thuật chuyên ngành: Định dạng bài tập thực hành được biên soạn sát với cấu trúc đề thi của kỳ thi Olympic Tin học sinh viên toàn quốc và kỳ thi lập trình quốc tế ACM/ICPC (tiền thân của ICPC hiện nay), chú trọng tính tối ưu thời gian thực hiện của giải thuật và chuẩn hóa dữ liệu vào/ra.

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

Giáo trình được thiết kế phục vụ các nhóm người học và giảng dạy cụ thể:

  • Sinh viên đại học và cao đẳng: Phù hợp cho sinh viên năm thứ nhất hoặc năm thứ hai thuộc các ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Khoa học Máy tính, Hệ thống Thông tin, Kỹ thuật Mạng và Sư phạm Tin học.
  • Điều kiện tiên quyết (Prerequisites): Người học không bắt buộc phải có kiến thức lập trình trước đó. Yêu cầu tiên quyết là kiến thức toán học phổ thông (đại số cơ bản, logic mệnh đề, các công thức hình học tọa độ phẳng cơ bản) và kỹ năng sử dụng máy tính căn bản.
  • Giảng viên chuyên ngành: Sử dụng làm giáo trình giảng dạy chính khóa, tài liệu tham khảo biên soạn đề cương bài giảng, bài tập thực hành phòng máy và xây dựng ngân hàng đề thi học phần Lập trình C/C++ cơ sở.
  • Người tự học và ôn luyện thi đấu: Dành cho bạn đọc muốn nắm bắt tư duy lập trình cấu trúc, làm quen với ngôn ngữ C/C++ từ nền tảng toán học, hoặc học sinh/sinh viên trong đội tuyển tham dự Olympic Tin học và ACM/ICPC cần tài liệu bài tập có gợi ý thuật toán.

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

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

Giáo trình phù hợp với sinh viên các hệ đào tạo Đại học và Cao đẳng ngành Công nghệ Thông tin, Kỹ thuật Mạng, Công nghệ Phần mềm; giảng viên giảng dạy học phần lập trình cơ sở; và người học bắt đầu tiếp cận tư duy giải thuật bằng ngôn ngữ C/C++.

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

Người học chỉ cần kiến thức toán học bậc phổ thông (các phép toán số học, hình học cơ bản, phương trình đại số). Giáo trình tự xây dựng các khái niệm nền tảng từ đầu như biểu diễn thông tin, hệ đếm nhị phân, cấu trúc máy tính và sơ đồ thuật toán trước khi học cú pháp ngôn ngữ.

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

Giáo trình kết hợp đồng thời cấu trúc thủ tục của C với các mở rộng hướng đối tượng (class, string) và thư viện chuẩn STL của C++; toàn bộ mã nguồn đồng bộ trên Dev C++ 5.X (chạy được trên Windows và Linux); bài tập được xây dựng theo chuẩn chấm thi tự động với test case Input/Output rõ ràng, có gợi ý thuật toán và có hướng dẫn sử dụng debugger.

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

Người học nên tuân thủ quy trình: đọc lý thuyết $\rightarrow$ vẽ lưu đồ thuật toán cho bài toán $\rightarrow$ cài đặt mã lệnh trên Dev C++ 5.X $\rightarrow$ kiểm tra với các bộ dữ liệu Input/Output mẫu. Đối với bài tập khó, tham khảo phần "Ý tưởng/Gợi ý" và sử dụng trình gỡ lỗi (hướng dẫn tại trang 171) để theo dõi luồng dữ liệu khi chương trình xảy ra sai sót.

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

Giáo trình cung cấp hệ thống mã giải mẫu cho các bài toán điển hình, danh mục bài tập thực hành có test case đối chiếu, phần gợi ý thuật toán và danh mục Tài liệu tham khảo học thuật được liệt kê tại trang 175.


Kết luận

Giáo trình Lập trình C/C++ cơ bản của Nhà xuất bản Đà Nẵng cung cấp hệ thống tri thức cơ bản về khoa học tính toán, kỹ thuật lập trình C/C++ chuẩn ANSI và phương pháp xây dựng thuật toán. Lộ trình học tập được thiết kế mạch lạc: đi từ nền tảng thông tin – hệ đếm, thiết kế giải thuật qua lưu đồ, làm chủ cú pháp và các cấu trúc điều khiển, quản trị bộ nhớ với con trỏ, đến thao tác trên cấu trúc dữ liệu, tệp tin và ứng dụng thư viện STL. Tài liệu kết hợp chặt chẽ giữa lý thuyết sư phạm và thực hành trên công cụ Dev C++ 5.X, hỗ trợ hiệu quả cho việc đào tạo chuyên ngành Công nghệ Thông tin và nghiên cứu học thuật tại trang 175.