Giáo trình Môn học Lập trình C – Trình độ Cao đẳng và Trung cấp
Tổng quan về giáo trình (250-300 từ)
Giáo trình môn Lập trình C (Mã tài liệu: THUD - MH13) được ban hành theo Quyết định số 498/QĐ-CĐGTVTTWI-ĐT ngày 25/03/2019 của Hiệu trưởng Trường Cao đẳng Giao thông vận tải Trung ương I (hoàn thiện vào ngày 15/05/2019 tại Hà Nội). Tài liệu được biên soạn phục vụ công tác giảng dạy và học tập cho học sinh, sinh viên trình độ Trung cấp và Cao đẳng thuộc ngành Tin học ứng dụng, đồng thời lưu hành nội bộ làm tài liệu chuẩn của nhà trường.
Mục tiêu học tập của giáo trình là trang bị cho người học các khái niệm nền tảng về thuật toán, kỹ thuật biểu diễn giải thuật, tư duy lập trình có cấu trúc và kỹ năng vận dụng ngôn ngữ lập trình C để giải quyết các bài toán kỹ thuật, xử lý số liệu, văn bản trên máy tính. Kết thúc môn học, người học có khả năng phân tích chu trình xử lý dữ liệu, thiết lập sơ đồ khối, viết mã nguồn, thao tác biên dịch và kiểm thử chương trình trên môi trường Turbo C.
Giáo trình được cấu trúc thành 6 chương với tổng thời lượng phân bổ cụ thể cho từng phần. Phương pháp tiếp cận đi từ nguyên lý giải thuật trừu tượng đến cú pháp lập trình chi tiết và kỹ thuật quản lý bộ nhớ:
- Chương 1: Tổng quan về môn học (Thời gian: 5 giờ).
- Chương 2: Giới thiệu về ngôn ngữ C và môi trường Turbo C (Thời gian: 10 giờ).
- Chương 3: Các thành phần trong ngôn ngữ C và nhập xuất dữ liệu (Thời gian: 10 giờ).
- Chương 4: Các lệnh đơn và các lệnh có cấu trúc (Thời gian: 15 giờ).
- Chương 5: Hàm, mảng, chuỗi.
- Chương 6: Con trỏ và các kiểu dữ liệu tự tạo.
Điểm đặc sắc của tài liệu là phương pháp đối chiếu giải thuật song song qua ba bước: mô tả bằng ngôn ngữ tự nhiên, sơ đồ hóa bằng lưu đồ (Flowchart), và chuyển đổi trực tiếp sang mã nguồn C tương ứng, kết hợp các ví dụ thực thi chi tiết trong môi trường biên dịch Turbo C 3.0.
Nội dung kiến thức cốt lõi (500-600 từ)
Các chương/chủ đề chính
- Chương 1: Tổng quan về môn học (5 giờ): Định nghĩa về thuật toán và chương trình. Giới thiệu bản chất thuật toán theo Robert Kowalski ($\text{Thuật giải} = \text{Logic} + \text{Điều khiển}$) và định nghĩa chương trình của Niklaus Wirth ($\text{Chương trình} = \text{Thuật toán} + \text{Cấu trúc dữ liệu}$). Trình bày 3 cấu trúc điều khiển nền tảng: Tuần tự (Sequential), Chọn lọc (Selection), và Lặp lại (Repetition). Trình bày quy trình 5 bước phát triển phần mềm, chu trình I-P-O (Input - Process - Output), và hệ thống ký hiệu sơ đồ lưu đồ (Process, Decision, Flow lines, Subroutine/Function, Begin/End, Connector).
- Chương 2: Giới thiệu về ngôn ngữ C và môi trường Turbo C (10 giờ): Lịch sử ngôn ngữ C tại phòng thí nghiệm Bell (Dennis Ritchie và Brian Kernighan xuất bản năm 1978), tiêu chuẩn ANSI C. Phân tích 5 đặc điểm của C: tính cô đọng (32 từ khóa, 40 toán tử), tính cấu trúc, tính tương thích, tính linh động và cơ chế biên dịch (Compile & Link). Hướng dẫn cài đặt, giao diện menu và phím tắt Turbo C 3.0 (
F10 vào menu, Alt-X thoát, Ctrl-F9 dịch và chạy, Alt-F5 xem màn hình kết quả, Alt-F9 compile). Cấu trúc một tệp mã nguồn C với chỉ thị tiền xử lý #include <stdio.h>, khối hàm void main(void) và các ký tự điều khiển (\n, \t, \r, \a, \", \', \\, %%).
- Chương 3: Các thành phần trong ngôn ngữ C và nhập xuất dữ liệu (10 giờ): Danh mục 32 từ khóa chuẩn viết thường. Quy tắc định danh tên biến, tên hàm (tối đa 32 ký tự, không bắt đầu bằng số, phân biệt hoa/thường, không trùng từ khóa) và quy ước Hungarian Notation (ví dụ:
ituoi, ftrongluong). Bảng phân loại kiểu dữ liệu cơ bản: char (1 byte, -128 đến 127), unsigned char (1 byte, 0 đến 255), short int/int/enum (2 bytes, -32.768 đến 32.767), unsigned int (2 bytes, 0 đến 65.535), long (4 bytes), unsigned long (4 bytes), float (4 bytes), long double (10 bytes). Quy tắc ghi chú đơn dòng (//) và đa dòng (/* */). Phạm vi biến toàn cục và biến cục bộ. Cú pháp và toán tử định dạng của hai hàm nhập xuất chuẩn printf() và scanf() với mã định dạng (%c, %s, %d, %f, %e, %g, %x, %u, %o, %l) và toán tử địa chỉ &.
- Chương 4: Các lệnh đơn và các lệnh có cấu trúc (15 giờ): Định nghĩa lệnh và khối lệnh
{}. Cấu trúc rẽ nhánh: if thiếu, if...else đủ, cấu trúc đa nhánh else if, và kỹ thuật lồng ghép if (quy tắc kết hợp else với if gần nhất). Cấu trúc lựa chọn switch...case (dạng thiếu, dạng đủ có default, cơ chế ngắt break, và switch lồng nhau). Các cấu trúc lặp: vòng lặp xác định for(biểu thức 1; biểu thức 2; biểu thức 3), vòng lặp kiểm tra trước while(biểu thức), vòng lặp kiểm tra sau do...while(biểu thức). Các lệnh thay đổi luồng điều khiển: break, continue, goto, return.
- Chương 5: Hàm, mảng và chuỗi: Cấu trúc hàm con trong C, cơ chế truyền tham số dạng tham trị và tham biến, biến toàn cục và chỉ thị tiền xử lý
#define. Khai báo và khởi tạo mảng một chiều, truy xuất chỉ số phần tử, nhập xuất mảng, khai báo mảng không chỉ định kích thước tường minh. Khái niệm chuỗi ký tự (mảng char), hàm nhập chuỗi gets(), hàm xuất chuỗi puts(), và các thao tác khởi tạo chuỗi.
- Chương 6: Con trỏ và các kiểu dữ liệu tự tạo: Khái niệm biến con trỏ, toán tử lấy địa chỉ và toán tử giải tham chiếu, cơ chế truyền địa chỉ con trỏ vào hàm. Định nghĩa kiểu dữ liệu cấu trúc
struct, khai báo biến cấu trúc, toán tử truy xuất thành phần dấu chấm (.), và các phương pháp khởi tạo dữ liệu cấu trúc.
Progression logic của giáo trình xây dựng tuần tự: thiết lập tư duy giải thuật logic ở Chương 1, chuyển đổi cú pháp cơ sở và môi trường ở Chương 2-3, kiểm soát luồng thực thi ở Chương 4, phân rã module dữ liệu ở Chương 5, và xử lý bộ nhớ/cấu trúc phức hợp ở Chương 6.
Kiến thức nền tảng được xây dựng
- Lý thuyết nền tảng (Fundamental theories): Lý thuyết thiết kế chương trình có cấu trúc; quy tắc phân rã bài toán I-P-O; định lý cấu trúc chương trình của Niklaus Wirth và Robert Kowalski; nguyên lý điều khiển luồng qua 3 cấu trúc cơ bản (tuần tự, lựa chọn, lặp).
- Nguyên lý cốt lõi (Core principles): Nguyên lý biên dịch tệp nguồn thành mã đối tượng (
.obj) và liên kết thành tệp thực thi (.exe); nguyên lý định kiểu dữ liệu tĩnh và giới hạn miền giá trị trên bộ nhớ; nguyên lý phân định không gian biến (biến cục bộ trong ngăn xếp hàm so với biến toàn cục trong toàn bộ vòng đời chương trình); nguyên lý truyền dữ liệu qua tham trị và tham chiếu bộ nhớ.
- Khuôn khổ tiêu chuẩn (Essential frameworks): Bộ chuẩn ngữ pháp ANSI C; thư viện chuẩn nhập xuất xuất phát từ header
<stdio.h>; quy chuẩn định danh theo quy tắc Hungarian Notation; tiêu chuẩn lưu đồ thuật toán quốc tế.
Kỹ năng phát triển
- Kỹ năng kỹ thuật (Technical skills): Thao tác thành thạo trên IDE Turbo C 3.0 / Borland C thông qua hệ thống phím chức năng; biên dịch, phát hiện lỗi cú pháp và bắt lỗi biên dịch (
Alt-F9, Ctrl-F9); khai báo đúng định dạng biến và kiểu dữ liệu; sử dụng chính xác các mã định dạng nhập xuất dữ liệu.
- Kỹ năng phân tích (Analytical skills): Phân tích yêu cầu bài toán thành ba thành phần Input, Process, Output; chuyển đổi bài toán từ ngôn ngữ tự nhiên sang lưu đồ thuật toán; thiết kế các biểu thức điều kiện logic lồng nhau và xây dựng bảng quyết định cho cấu trúc
switch...case.
- Năng lực thực hành (Practical competencies): Cài đặt các chương trình giải toán số học (tính tổng dãy số, tìm số lớn nhất giữa 2 hoặc 3 số, tính chu vi diện tích); xây dựng chương trình quản lý (tính lương công nhân, xếp loại học lực học sinh); thiết lập giao diện menu dòng lệnh 2 cấp; thao tác mảng dữ liệu và con trỏ.
Phương pháp giảng dạy và học tập (300-350 từ)
Phương pháp sư phạm của giáo trình được tổ chức theo quy trình 4 bước chuẩn hóa cho từng nội dung bài học:
- Phác họa lời giải: Xác định mục tiêu và phân tích điều kiện bài toán trên giấy.
- Mô tả giải thuật: Trình bày song song giữa ngôn ngữ tự nhiên và cấu trúc mã C tương ứng.
- Mô tả bằng lưu đồ: Sử dụng hệ thống sơ đồ khối quy chuẩn để trực quan hóa luồng dữ liệu và điều kiện rẽ nhánh/lặp.
- Viết chương trình và kiểm thử: Đưa ra toàn bộ khối mã nguồn hoàn chỉnh kèm ảnh chụp hoặc hiển thị văn bản kết quả in ra màn hình.
Hệ thống bài tập và tình huống (Case studies) bám sát các bài toán kỹ thuật và quản lý thực tế:
- Bài toán phân tích Input - Process - Output: Giải phương trình bậc nhất $ax+b=0$, tìm số lớn nhất của hai số $a$ và $b$, tính lương công nhân theo ngày công ($Lương = Lương\ căn\ bản \times Ngày\ công$).
- Bài toán rẽ nhánh: Tìm số lớn nhất trong 3 số nguyên $a, b, c$; thuật toán phân loại điểm kiểm tra thành các mức (Xuất sắc $\ge 9$, Giỏi $\ge 8$, Khá $\ge 7$, Trung bình Khá $\ge 6$, Trung bình $\ge 5$, Yếu $< 5$, và bẫy lỗi điểm ngoài khoảng $0 \le diem \le 10$).
- Bài toán lựa chọn và Menu: Chuyển đổi 12 tháng sang 4 quý bằng
switch...case; xây dựng hệ thống Menu 2 cấp cho phần mềm (1. File, 2. Edit, 3. Search; menu con gồm 1. New, 2. Open).
- Bài toán lặp: Tính tổng dãy số nguyên từ 1 đến $n$; in các số tăng dần từ 1 đến 10; lọc và in các số chẵn trong đoạn $[1; 10]$.
Phương pháp đánh giá kết quả học tập dựa trên tính chính xác của thuật toán biểu diễn trên lưu đồ, khả năng chuyển đổi sang mã C chuẩn cú pháp, xử lý triệt để các trường hợp ngoại lệ (dữ liệu nhập sai miền giá trị) và kết quả chạy thử nghiệm qua các ca kiểm thử.
Hướng dẫn tự học: Học sinh cần thực hiện tuần tự việc dựng lưu đồ trước khi gõ lệnh, thực hành trực tiếp trên máy tính theo từng ví dụ mẫu, chủ động thay đổi câu lệnh (như chuyển đổi giữa vòng lặp for và while hoặc lược bỏ lệnh break để quan sát hiện tượng tràn case trong switch), và tra cứu thông tin cú pháp qua hệ thống trợ giúp phím F1 của môi trường Turbo C.
Điểm nổi bật và cập nhật (250-300 từ)
- Căn cứ pháp lý và chuẩn hóa nội bộ: Giáo trình được phê duyệt theo Quyết định số 498/QĐ-CĐGTVTTWI-ĐT ngày 25/03/2019 của Hiệu trưởng Trường Cao đẳng GTVT Trung ương I, đảm bảo khung kiến thức bám sát chương trình đào tạo nghề hệ Cao đẳng và Trung cấp Tin học ứng dụng.
- Kế thừa các tài liệu chuẩn mực: Nhóm tác giả tổng hợp và tham khảo trực tiếp từ giáo trình kinh điển "Ngôn ngữ lập trình C" của Brian Kernighan và Dennis Ritchie (1978), cùng tài liệu giảng dạy của các trường đại học chuyên ngành trong và ngoài nước để hoàn thiện nội dung đạt chuẩn ANSI C.
- Chuẩn hóa quy tắc viết mã (Coding Conventions): Giáo trình đưa vào quy tắc đặt tên biến theo ký hiệu Hungarian Notation (tiền tố
i cho kiểu số nguyên int, f cho số thực float, c cho ký tự char), giúp người học hình thành phong cách lập trình công nghiệp rõ ràng, giảm thiểu sai sót khi định danh biến và phạm vi dữ liệu.
- Tính ứng dụng thực tế: Toàn bộ các bài toán thực hành đều gắn với nhu cầu xử lý thực tế như tính tiền lương nhân viên, phân loại kết quả học tập theo thang điểm học chế tín chỉ/niên chế, quản lý chu kỳ lịch kinh tế (tháng/quý) và xây dựng cấu trúc giao diện tương tác dạng console phân cấp menu (Console UI).
- Liên kết nền tảng hệ thống: Giáo trình làm rõ mối quan hệ giữa C và sự phát triển của hệ điều hành UNIX tại Bell Labs, giải thích cơ chế biên dịch các tệp đối tượng riêng rẽ (
.obj) và liên kết thực thi (.exe), tạo nền tảng vững chắc cho sinh viên tiếp cận các hệ thống lập trình nhúng, xử lý số liệu kỹ thuật và cơ sở dữ liệu.
Đối tượng sử dụng giáo trình (200-250 từ)
- Học sinh - Sinh viên: Dành cho học sinh và sinh viên theo học trình độ Cao đẳng và Trung cấp thuộc ngành Tin học ứng dụng, Công nghệ thông tin và các ngành kỹ thuật liên quan tại Trường Cao đẳng Giao thông vận tải Trung ương I và các cơ sở giáo dục nghề nghiệp.
- Điều kiện tiên quyết (Prerequisites): Người học cần có kiến thức tin học văn phòng cơ bản, kỹ năng thao tác tệp trên hệ điều hành (DOS/Windows), và nền tảng tư duy toán học phổ thông (đại số logic, các phép toán số học). Giáo trình không đòi hỏi người học phải có kiến thức lập trình từ trước.
- Giảng viên và phương thức sử dụng: Tài liệu đóng vai trò là giáo trình giảng dạy chính thức trên lớp lý thuyết và phòng thực hành máy tính. Giảng viên sử dụng bảng thời lượng chi tiết (5h, 10h, 15h...), hệ thống câu hỏi, lưu đồ mẫu và bài tập lập trình để biên soạn giáo án, bài giảng điện tử và đề thi kết thúc học phần.
- Tự học và tài liệu tham khảo: Cung cấp nguồn tài liệu học thuật có cấu trúc cho các kỹ thuật viên, lập trình viên mới bắt đầu tiếp cận ngôn ngữ C, cần củng cố lại kiến thức về thuật toán, cú pháp ANSI C, con trỏ và cấu trúc dữ liệu cơ bản.
Câu hỏi thường gặp (250-300 từ)
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 hóa cho học sinh, sinh viên trình độ Trung cấp và Cao đẳng ngành Tin học ứng dụng, đồng thời phù hợp với người mới bắt đầu học lập trình có cấu trúc từ mức cơ bản.
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 nắm vững kỹ năng sử dụng máy tính căn bản và tư duy toán học phổ thông. Mọi khái niệm từ định nghĩa thuật toán, quy trình I-P-O đến cấu trúc câu lệnh đều được hướng dẫn chi tiết từ đầu.
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?
Giáo trình xây dựng phương pháp tiếp cận 3 bước cố định cho mỗi bài toán: Ngôn ngữ tự nhiên $\rightarrow$ Sơ đồ khối lưu đồ (Flowchart) $\rightarrow$ Mã nguồn ngôn ngữ C, kết hợp hướng dẫn cụ thể từng phím tắt và thao tác biên dịch trực quan trên môi trường Turbo C 3.0.
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 tuân thủ tiến trình 5 bước phát triển chương trình: tự phác họa thuật giải trên giấy, dựng lưu đồ, gõ mã nguồn vào máy, biên dịch kiểm tra lỗi bằng Alt-F9, và chạy thử với nhiều bộ số liệu khác nhau (bao gồm cả dữ liệu hợp lệ và không hợp lệ) để quan sát luồng điều khiển.
5. Giáo trình có cung cấp tài liệu hoặc bảng tra cứu bổ trợ nào không?
Giáo trình tích hợp sẵn danh mục 32 từ khóa chuẩn, bảng chi tiết kích thước miền giá trị của 10 kiểu dữ liệu, danh mục mã định dạng hàm printf/scanf, bảng mã ký tự điều khiển escape (\n, \t, \a...), và các bài tập mẫu có lời giải chi tiết.
Kết luận (150 từ)
Giáo trình môn Lập trình C (Mã tài liệu: THUD - MH13) của Trường Cao đẳng Giao thông vận tải Trung ương I cung cấp một hệ thống kiến thức hoàn chỉnh và chuẩn mực về kỹ thuật lập trình có cấu trúc. Giá trị cốt lõi của tài liệu nằm ở sự kết hợp chặt chẽ giữa cơ sở lý thuyết thuật toán hình thức (chu trình I-P-O, lưu đồ, định lý Kowalski và Wirth) với kỹ năng thực hành biên dịch trực tiếp trên môi trường Turbo C 3.0.
Lộ trình học tập đề xuất được thiết kế khoa học qua 6 chương: bắt đầu từ việc làm quen với tư duy giải thuật sơ đồ (Chương 1-2), làm chủ ngữ pháp, biến và luồng điều khiển rẽ nhánh/lặp (Chương 3-4), tiến đến module hóa chương trình và tối ưu hóa quản lý bộ nhớ thông qua hàm, mảng, chuỗi, con trỏ và kiểu dữ liệu struct (Chương 5-6). Đây là tài liệu học thuật cơ sở chuẩn xác, phục vụ trực tiếp cho quá trình đào tạo nhân lực kỹ thuật ngành Tin học ứng dụng.