Các Thành Phần Cơ Bản và Kiểu Dữ Liệu trong C — Chương 7


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

Chương 7 thuộc tài liệu bài giảng về ngôn ngữ lập trình C, trình bày các thành phần cú pháp nền tảng mà người học cần nắm vững trước khi tiến hành viết bất kỳ chương trình C hoàn chỉnh nào. Trong bố cục tổng thể của môn Lập trình C, chương này giữ vị trí trung tâm: nó cung cấp hệ thống khái niệm mà các chương sau (cấu trúc điều kiện, vòng lặp, hàm, mảng, con trỏ) đều dựa vào.

Mục tiêu học tập của chương bao gồm: phân biệt ký hiệu và danh hiệu trong C; hiểu bốn kiểu dữ liệu chuẩn (char, int, float, double) cùng các dạng bổ sung (signed, unsigned, short, long); nhận biết và sử dụng đúng hằng số nguyên, hằng thực và hằng ký tự; nắm cú pháp biểu thức và hệ thống phép toán; đọc hiểu cấu trúc tổng quát của một chương trình C.

Nội dung được triển khai qua 7 mục chính: 7.1 Danh hiệu, 7.2 Các kiểu dữ liệu chuẩn của C, 7.3 Hằng (Constant), 7.5 Biểu thức, 7.6 Các phép toán của C, 7.7 Cấu trúc tổng quát của một chương trình C, và Bài tập cuối chương. Cách tiếp cận là định nghĩa khái niệm → phân loại → ví dụ mã nguồn cụ thể, phù hợp với sinh viên đại học tiếp cận C lần đầu.


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

Các chủ đề chính và tiến trình nội dung

Mục 7.1 — Danh hiệu (Identifier)

Danh hiệu được định nghĩa là "tên của hằng, biến, hàm hoặc các ký hiệu đã được quy định đặc trưng cho một thao tác nào đó". Chương phân loại danh hiệu thành hai nhóm lớn:

  • Ký hiệu (symbol): Gồm ký hiệu đơn (single symbol) như +, -, *, /, %, =, >, < và ký hiệu kép (compound symbol) khi dùng hai dấu trở lên để biểu diễn một thao tác.
  • Danh hiệu (identifier): Gồm từ khóa (keyword) do C định nghĩa sẵn như if, for, while, và danh hiệu do lập trình viên tự đặt. Danh hiệu chuẩn là tên của các hằng, biến, hàm mà C đã khai báo sẵn như main, scanf, printf; danh hiệu không chuẩn là tên tự đặt như a, b, delta.

Chương nêu rõ hai nguyên tắc đặt tên danh hiệu không chuẩn: không trùng từ khóa, không trùng danh hiệu chuẩn. Một lưu ý quan trọng được nhấn mạnh: C phân biệt chữ hoa và chữ thường, do đó While và while là hai danh hiệu hoàn toàn khác nhau. Về chiều dài, Borland C++ 3.0 quy định 31 ký tự đầu có nghĩa; Borland C++ 5.02 nâng lên 55 ký tự.

Mục 7.2 — Các kiểu dữ liệu chuẩn của C

Bốn kiểu chuẩn được trình bày kèm kích thước và tầm trị:

Kiểu Kích thước Đặc điểm
char 8 bit Lưu ký tự hoặc giá trị 8 bit; có dấu trong Turbo C 2.0
int 16 bit (Borland C/C++) Tầm trị −32768 đến 32767 (−2¹⁵ đến 2¹⁵ − 1)
float — Số thực dấu chấm động, độ chính xác đơn (7 chữ số sau dấu thập phân)
double — Số thực dấu chấm động, độ chính xác kép (15 chữ số); tương đương long float

Ngoài bốn kiểu cơ bản, ANSI bổ sung kiểu void dùng cho giá trị trả về của hàm và khai báo con trỏ không trỏ đến kiểu xác định. Các từ bổ nghĩa signed, unsigned, short, long cho phép mở rộng biểu diễn, ví dụ unsigned int n hoặc viết gọn unsigned n; long p tương đương signed long int p.

Phần này còn giải thích cơ chế lưu trữ nhị phân: bit được đánh số từ phải sang trái bắt đầu từ 0, trọng số của bit ở vị trí n là 2ⁿ. Ví dụ cụ thể: nhị phân 1000001010001010 diễn giải theo kiểu int có dấu cho kết quả −32118, còn theo kiểu unsigned int cho kết quả 33418.

Mục 7.3 — Hằng (Constant)

Hằng được định nghĩa là "những giá trị cố định có trị hoàn toàn xác định và không thể thay đổi được chúng trong quá trình thực thi chương trình". Các loại hằng bao gồm:

  • Hằng số nguyên: Có thể ở dạng thập phân, bát phân (tiền tố 05), thập lục phân (tiền tố 0x6). Hằng nguyên int từ −32768 đến 32767; hằng long integer lưu 32 bit, tầm trị từ −2 147 483 648 đến +2 147 483 647, ký hiệu bằng hậu tố L hoặc l. Hằng unsigned ký hiệu bằng U hoặc u, ví dụ 123U, 234u, 24UL.
  • Hằng thực: Ở dạng dấu chấm tĩnh (ví dụ 1.0234) hoặc dấu chấm động với ký tự e/E và số mũ. Hằng không có dấu thập phân và số mũ được lưu kiểu int; ngược lại lưu kiểu double.
  • Hằng ký tự: Ký tự đơn đặt giữa cặp nháy đơn (' '), tương ứng với mã ASCII, ví dụ 'A' có mã 65, '0' có mã 48.

Mục 7.5, 7.6, 7.7 — Biểu thức, Phép toán và Cấu trúc chương trình

Các mục này trình bày hệ thống phép toán của C và cách kết hợp chúng thành biểu thức, từ đó dẫn đến cấu trúc tổng quát của một chương trình C hoàn chỉnh — nền tảng để tiếp cận các chủ đề lập trình phức tạp hơn.

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

  • Phân loại hệ thống: Danh hiệu → ký hiệu / định danh → từ khóa / chuẩn / không chuẩn; kiểu dữ liệu → nguyên / thực / ký tự; hằng → số / ký tự / chuỗi / biểu thức hằng.
  • Biểu diễn nhị phân: Cách máy tính lưu trữ số nguyên có dấu và không dấu, cơ sở lý thuyết của tầm trị mỗi kiểu.
  • Quy tắc ngầm định kiểu (implicit typing): Hằng không có dấu thập phân → int; lớn hơn int → long; lớn hơn long → double.

Kỹ năng phát triển

  • Đặt tên danh hiệu hợp lệ và nhận biết danh hiệu sai cú pháp (ví dụ -batdau, 2thang9, ket thuc là sai; _batdau là đúng).
  • Chọn kiểu dữ liệu phù hợp với yêu cầu bộ nhớ và tầm trị của bài toán.
  • Sử dụng chuỗi định dạng đúng: %c, %d cho char/int; %f cho float; %lf cho double; %ld cho long.
  • Khai báo biến và viết chương trình C đơn giản với printf, scanf.

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

Chương áp dụng phương pháp giảng dạy theo từng bước: mỗi khái niệm được giới thiệu bằng định nghĩa tường minh, sau đó phân loại có hệ thống, và cuối cùng minh họa bằng ví dụ mã nguồn hoàn chỉnh có thể biên dịch và chạy được.

Ví dụ minh họa trong văn bản:

  • Chương trình minh họa biến char lưu ký tự: khai báo char d; d = 'a'; printf("Ky tu trong bien d la %c", d);
  • Chương trình minh họa biến char lưu số nguyên: char c; c = 89; printf("Tri trong bien c la %d", c);
  • Chương trình minh họa int: int i; i = 1234; i = i + 123; printf(...);
  • Chương trình minh họa double và hàm pow: tính lũy thừa với kiểm tra đầu vào hợp lệ.
  • Chương trình minh họa tràn tầm trị: printf("%d %d %d", 32767, 32767+1, 32767+2) cho kết quả 32767 -32768 -32767, làm rõ hiện tượng overflow.

Sơ đồ cú pháp (syntax diagram) được sử dụng để mô tả quy tắc đặt tên danh hiệu không chuẩn, với quy ước ô vuông (bắt buộc lấy một phần tử) và ô tròn (phần tử bắt buộc trong lộ trình đi qua).

Bài tập cuối chương được liệt kê trong mục lục, cho phép sinh viên tự kiểm tra mức độ nắm vững các khái niệm và thực hành viết mã. Các bài tập bao gồm nhận diện danh hiệu hợp lệ/không hợp lệ và viết chương trình sử dụng các kiểu dữ liệu đã học.

Để học hiệu quả, người học nên: đọc định nghĩa → tự phân loại ví dụ → gõ lại và chạy từng đoạn mã trong chương → làm bài tập cuối chương trước khi chuyển sang mục tiếp theo.


Điểm nổi bật và các lưu ý kỹ thuật cụ thể

Chương cung cấp một số thông tin kỹ thuật gắn với trình biên dịch cụ thể, phản ánh bối cảnh giảng dạy C trên nền tảng DOS/Windows thời kỳ đầu:

  • Borland C++ 3.0: Giới hạn 31 ký tự có nghĩa cho danh hiệu.
  • Borland C++ 5.02: Nâng giới hạn lên 55 ký tự.
  • Turbo C Version 2.0: Kiểu char là kiểu có dấu (signed).
  • Máy PC và Borland C/C++: Kiểu int có chiều dài 16 bit.

Các quy tắc ngầm định kiểu được trình bày rõ ràng, giúp người học tránh lỗi phổ biến khi dùng hằng số vượt tầm trị. Ví dụ về hiện tượng tràn số nguyên (32767 + 1 = -32768) là một minh họa trực quan cho giới hạn biểu diễn của kiểu int 16 bit.

Đặc điểm phân biệt hoa/thường (case-sensitive) của C được nhấn mạnh qua đối chiếu While và while, một lưu ý thực tế cần thiết cho người mới học.


Đối tượng sử dụng tài liệu

Tài liệu này phù hợp với sinh viên đại học năm nhất hoặc năm hai thuộc các ngành Khoa học Máy tính, Kỹ thuật Phần mềm, Công nghệ Thông tin, hoặc các ngành kỹ thuật có học phần Lập trình C.

Kiến thức nền cần có: Người học cần có hiểu biết cơ bản về hệ đếm nhị phân (hệ cơ số 2) và hệ thập lục phân để theo dõi phần biểu diễn bộ nhớ trong mục 7.2. Kiến thức về lập trình trước đó không bắt buộc, nhưng sẽ giúp tiếp thu nhanh hơn.

Đối với giảng viên: Tài liệu được định dạng dạng slide bài giảng (tiêu đề chương lặp lại ở mỗi slide), phù hợp để trình chiếu trực tiếp trên lớp. Các ví dụ mã nguồn có thể được chạy minh họa trực tiếp trong môi trường Turbo C hoặc Borland C++.

Tự học và tham khảo: Người tự học có thể dùng tài liệu này làm điểm khởi đầu, kết hợp với tài liệu chuẩn ANSI C và trình biên dịch hiện đại (GCC, Clang) để kiểm chứng các quy tắc. Cần lưu ý một số thông số kỹ thuật trong tài liệu (chiều dài int 16 bit, giới hạn ký tự danh hiệu) là đặc thù của trình biên dịch Borland/Turbo C, có thể khác trên các trình biên dịch hiện đại.


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 phù hợp với người bắt đầu học lập trình C ở bậc đại học. Nội dung Chương 7 tập trung vào nền tảng cú pháp — từ danh hiệu đến kiểu dữ liệu và hằng — nên phù hợp nhất với những ai chưa có kinh nghiệm với C hoặc cần hệ thống lại kiến thức cơ bản trước khi học các chủ đề nâng cao.

2. Cần kiến thức nền nào để học chương này?

Người học cần nắm hệ đếm nhị phân (để hiểu phần biểu diễn bộ nhớ và tầm trị của từng kiểu), đồng thời có khả năng đọc hiểu ký hiệu toán học cơ bản. Không yêu cầu kinh nghiệm lập trình trước đó.

3. Điểm khác biệt so với tài liệu C khác?

Chương này trình bày tường minh cơ chế lưu trữ nhị phân và ảnh hưởng của nó đến tầm trị (ví dụ phân tích bit 1000001010001010 theo cả hai kiểu signed và unsigned), thay vì chỉ liệt kê bảng tầm trị. Phần danh hiệu có sơ đồ cú pháp trực quan và danh sách ví dụ hợp lệ/không hợp lệ giúp người học tự kiểm tra.

4. Làm sao để tự học hiệu quả?

Nên học theo trình tự: đọc định nghĩa → xem bảng phân loại → tự giải thích ví dụ trước khi đọc giải thích trong tài liệu → gõ lại và biên dịch từng đoạn mã (đặc biệt chương trình minh họa tràn số nguyên và chương trình tính lũy thừa với pow) → làm bài tập cuối chương. Việc chạy mã trực tiếp sẽ làm rõ các hiện tượng như overflow hoặc sự khác biệt giữa %f và %lf.

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

Tài liệu đề cập phần phụ lục liệt kê toàn bộ từ khóa của C, có thể dùng để đối chiếu khi đặt tên danh hiệu. Để mở rộng, người học có thể tham khảo thêm tài liệu chuẩn ANSI C89/C99 nhằm xem xét sự thay đổi về tầm trị kiểu dữ liệu trên các kiến trúc máy tính hiện đại (32 bit hoặc 64 bit), nơi int thường có chiều dài 32 bit thay vì 16 bit như trong tài liệu.


Kết luận

Chương 7 xây dựng vốn từ vựng kỹ thuật và hệ thống khái niệm tối thiểu cần có để đọc và viết mã C: phân loại danh hiệu, bốn kiểu dữ liệu chuẩn, các dạng hằng số, và biểu thức. Các khái niệm được trình bày có hệ thống từ định nghĩa → phân loại → ví dụ mã nguồn cụ thể, tạo điều kiện cho người học áp dụng ngay sau khi đọc. Để tiếp tục, người học nên chuyển sang các chương về cấu trúc điều kiện (if, switch) và vòng lặp (for, while, do-while) — những phần sử dụng trực tiếp kiểu dữ liệu và biểu thức đã được đặt nền tảng ở đây.