giáo án kỹ thuật lập trình c

76 682 0
giáo án kỹ thuật lập trình c

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

TRƯỜNG ĐẠI HỌC HÀNG HẢI VIỆT NAM KHOA CÔNG NGHỆ THÔNG TIN -*** - BÀI GIẢNG TÊN HỌC PHẦN : KỸ THUẬT LẬP TRÌNH C MÃ HỌC PHẦN : 17206 TRÌNH ĐỘ ĐÀO TẠO : ĐẠI HỌC CHÍNH QUY Hải Phòng, ngày …………… Hải Phòng, ngày …………… Hải Phòng, ngày …………… TRƯỞNG KHOA TRƯỞNG BỘ MÔN NGƯỜI BIÊN SOẠN TS LÊ QUỐC ĐỊNH TS NG DUY TRƯỜNG GIANG T.S N D TRƯỜNG GIANG HẢI PHÒNG – 2015 MỤC LỤC Đề cương chi tiết học phần Tên học phần: Kỹ thuật lập trình (C) Mã HP: 17206 a Số tín chỉ: 03 TC BTL ĐAMH b Đơn vị giảng dạy: Bộ môn Khoa học máy tính c Phân bổ thời gian: - Tổng số (TS): 60 tiết - Lý thuyết (LT): 28 tiết - Thực hành (TH): 30 tiết - Bài tập (BT): tiết - Hướng dẫn BTL/ĐAMH (HD): tiết - Kiểm tra (KT): tiết d Điều kiện đăng ký học phần: Học phần bố trí sau học phần: Đại số, Tin học Đại cương e Mục đích, yêu cầu học phần: Kiến thức: - Nắm bắt cấu trúc, cách viết cách thực chương trình xây dựng ngôn ngữ lập trình C - Có thể sử dụng ngôn ngữ lập trình C để giải toán tin học Kỹ năng: - Thành thạo việc sử dụng câu lệnh ngôn ngữ C - Có thể dùng ngôn ngữ lập trình C để giải toán tin học Thái độ nghề nghiệp: - Dựa kiến thức học ngôn ngữ lập trình C tự tiếp cận ngôn ngữ lập trình có khác f Mô tả nội dung học phần: - Học phần trình bày vấn đề lập trình nói chung lập trình ngôn ngữ C nói riêng với nội dung cụ thể cấu trúc chung chương trình, thành phần gồm hằng, biến, chương trình con; kiểu liệu C; Các câu lệnh cấu trúc câu lệnh C; Cách thức cách xây dựng chương trình dựa ngôn ngữ lập trình C thao tác soạn thảo chương trình ngôn ngữ C g Người biên soạn: Nguyễn Hạnh Phúc – Bộ môn Khoa học máy tính, Khoa CNTT h Nội dung chi tiết học phần: PHÂN PHỐI SỐ TIẾT TÊN CHƯƠNG MỤC TS LT BT TH HD Chương Giới thiệu 1.1 Giới thiệu ngôn ngữ lập trình C 0,25 1.2 Cấu trúc chung chương trình C 0,25 1.3 Các phần tử ngôn ngữ lập trình C 0,50 1.4 Các bước lập chương trình 0,50 1.5 Một số công cụ (IDE) cho lập trình C 0,50 0,5 1.6 Biến kiểu liệu sở 1,00 Bài tập 0,5 Nội dung tự học(10t): - Tự đọc cách Debug chương trình -Xem chương trình Examples,… Chương Các câu lệnh C 17 2.1 Lệnh gán, lệnh gộp 0,5 0,5 2.2 Hàm in liệu hình 0,5 1,0 2.3 Hàm nhập liệu vào từ bàn phím 0,5 1,0 2.4 Câu lệnh rẽ nhánh 1,5 1,5 2.5 Câu lệnh lựa chọn 0,5 1,0 2.6 Câu lệnh lặp 1,5 1,5 2.7 Lệnh break, continue, … 1,0 1,0 KT 0 Bài tập 2,0 1,5 Nội dung tự học(15t): - Các lệnh nhập chuỗi, tìm hiểu macro Chương Hàm 12 3.1 Khái niệm chương trình 0,5 3.2 Hàm C 1,0 1,0 3.3 Tham số hàm 1,5 1,5 3.4 Biến toàn cục biến địa phương 1,5 1,5 3.5 Sử dụng thư viện 0,5 0,5 Bài tập 1,5 Nội dung tự học(10t): - Tự làm thư viện riêng - Tìm hiểu thư viện algorithm.h Chương Kiểu liệu có cấu trúc 18 10 4.1 Dữ liệu kiểu mảng/con trỏ 2,0 2,0 4.2 Dữ liệu kiểu xâu ký tự 1,0 1,0 4.3 Dữ liệu kiểu ghi 2,0 3,0 4.4 Một số ví dụ tổng hợp 1,5 2,0 Bài tập 1,5 2,0 Nội dung tự học(15t): - Kiểu union, enum, trỏ Chương Dữ liệu kiểu tệp tin (file) 4 5.1 Khái niệm 0,5 5.2 Cấu trúc phân loại tệp 0,5 5.3 Tạo tệp để ghi liệu 1,0 1,0 5.4 Mở tệp liệu có để đọc liệu 1,0 1,0 5.5 Các hàm xử lý tệp C 1,0 1,0 Bài tập 1,0 Nội dung tự học (10t): - Tệp nhị phân: cách khai báo, đọc/ghi liệu Tổng số tiết: 60 28 30 i Mô tả cách đánh giá học phần: - Sinh viên phải tham dự tối thiểu 75% số lên lớp phải đạt điểm thành phần X2, X3 từ 4,0 trở lên (X1 điểm chuyên cần ≥ 6.0, X2 điểm trung bình 02 kiểm tra lớp, X3 điểm đánh giá kết thực hành) - Điểm học phần (Z) tính theo công thức: Z = 0.3X + 0.7Y - Trong đó: • X: điểm trình, trung bình cộng X1, X2, X3 • Y: điểm thi kết thúc học phần • Hình thức thi: thi thực hành máy, vấn đáp, thời gian 75 phút - Thang điểm đánh giá: A+, A, B+, B, C+, C, D+, D F k Giáo trình: Phạm Văn Ất, Kỹ thuật lập trình C - Cơ sở nâng cao, NXB KHKT, 2008 l Tài liệu tham khảo: Hoàng Đức Hải, Ngôn ngữ lập trình C từ A đến Z, NXB Lao động, 2008 Nguyễn Hữu Ngự, Bài tập lập trình C nâng cao Nhà xuất Tri Thức, 2007 Nguyễn Quang Huy, Nguyễn Thanh Thủy, Bài tập lập trình C, NXB KHKT, 2007 m Ngày phê duyệt: 30/06/2014 n Cấp phê duyệt: Khoa CNTT Trưởng Khoa P Trưởng Bộ môn Người biên soạn 1 TS Lê Quốc Định ThS Nguyễn Văn Thủy ThS Nguyễn Hạnh Phúc o Tiến trình cập nhật Đề cương: Cập nhật lần 1: ngày 25/06/2014 Người cập nhật Nội dung: Rà soát theo kế hoạch Nhà trường gồm: - Chỉnh sửa, làm rõ mục e, i theo mục tiêu đổi Nguyễn Hạnh Phúc - Mục h: bổ sung Nội dung tự học cuối chương mục, bổ P Trưởng Bộ môn sung số nội dung tự học - Bổ sung mục m, n, o Nguyễn Văn Thủy Cập nhật lần 2: ngày / / Người cập nhật Nội dung Trưởng Bộ môn Danh mục hình vẽ CHƯƠNG GIỚI THIỆU 1.1 Giới thiệu ngôn ngữ lập trình C Khoảng cuối năm 1960 đầu 1970 xuất nhu cầu cần có ngôn ngữ bậc cao để hỗ trợ cho nhà tin học việc xây dựng phần mềm hệ thống, hệ điều hành Ngôn ngữ C đời từ đó, phát triển phòng thí nghiệm Bell Đến năm 1978, giáo trình " Ngôn ngữ lập trình C " tác giả ngôn ngữ Dennish Ritchie B.W Kernighan viết, xuất phổ biến rộng rãi C ngôn ngữ lập trình đa Ngoài việc C dùng để viết hệ điều hành UNIX, người ta nhanh chóng nhận sức mạnh C việc xử lý cho vấn đề đại tin học C không gắn với hệ điều hành hay máy nào, gọi "ngôn ngữ lập trình hệ thống" dùng cho việc viết hệ điều hành, tiện lợi cho việc viết chương trình xử lý số, xử lý văn sở liệu 1.2 Cấu trúc chung chương trình C Một chương trình C đặt nhiều file văn khác Mỗi file văn chứa số phần chương trình Với chương trình đơn giản ngắn thường cần đặt chúng file Một chương trình gồm nhiều hàm, hàm phụ trách công việc khác chương trình Đặc biệt hàm có hàm có tên hàm main() Khi chạy chương trình, câu lệnh hàm main() thực Trong hàm main() có câu lệnh gọi đến hàm khác cần thiết, hàm chạy lại gọi đến hàm khác viết chương trình (trừ việc gọi quay lại hàm main()) Sau chạy đến lệnh cuối hàm main() chương trình kết thúc Cụ thể, thông thường chương trình gồm có nội dung sau: − Phần khai báo tệp nguyên mẫu: khai báo tên tệp chứa thành phần có sẵn (như chuẩn, kiểu chuẩn hàm chuẩn) mà NSD (người sử dụng) dùng chương trình − Phần khai báo kiểu liệu, biến, NSD định nghĩa dùng chung toàn chương trình − Danh sách hàm chương trình (do NSD viết, bao gồm hàm main()) Cấu trúc chi tiết hàm đề cập đến chương Dưới đoạn chương trình đơn giản gồm hàm hàm main() Nội dung chương trình dùng in hình dòng chữ: Chao cac ban, bay gio gio #include // khai báo tệp nguyên mẫu để sử dụng hàm printf, scanf int main() { int h = 2; // Khai báo khởi tạo biến h = printf(“Chao cac ban, bay gio la %d gio”, h) ; // in hình } Dòng chương trình khai báo tệp nguyên mẫu stdio.h Đây khai báo bắt buộc chương trình có sử dụng hàm chuẩn printf() (in hình), hàm khai báo định nghĩa sẵn stdio.h Không riêng hàm main(), hàm khác phải bắt đầu tập hợp câu lệnh dấu { kết thúc dấu } Tập lệnh bên cặp dấu gọi khối lệnh Khối lệnh cú pháp cần thiết câu lệnh có cấu trúc ta thấy chương Vậy nói tóm lại cấu trúc chương trình sau:       Các #include Các #define Khai báo đối tượng liệu (biến, mảng, cấu trúc vv ) Khai báo nguyên mẫu hàm Hàm main() Định nghĩa hàm khai báo nguyên mẫu Trong phần định nghĩa hàm, hàm main đặt sau xen vào hàm khác 1.3 Các phần tử ngôn ngữ lập trình C a) Tập ký tự dùng ngôn ngữ C Mọi ngôn ngữ lập trình xây dựng từ ký tự Các ký tự nhóm lại theo nhiều cách khác để tạo nên từ Các từ lại liên kết với theo qui tắc để tạo nên câu lệnh Một chương trình bao gồm nhiều câu lệnh thể thuật toán để giải toán Ngôn ngữ C xây dựng ký tự sau:        26 chữ hoa: A B C Z 26 chữ thường: a b c z 10 chữ số: Các ký hiệu toán học: + - * / = () Ký tự gạch nối: _ Các ký tự khác: , : ; [ ] {} ! \ & % # $ Dấu cách (space) dùng để tách từ Ví dụ chữ VIET NAM có ký tự, VIETNAM có ký tự Chú ý: Khi viết chương trình, ta không sử dụng ký tự khác ký tự Ví dụ lập chương trình giải phương trình bậc hai ax +bx+c=0 , ta cần tính biệt thức delta ∆= b2 - 4ac, ngôn ngữ C không cho phép dùng ký tự ∆, ta phải dùng ký hiệu khác để thay b) Từ khoá Từ khoá từ sử dụng để khai báo kiểu liệu, để viết toán tử câu lệnh Bảng liệt kê từ khoá C: asm break case cdecl char const continue default double else enum extern far float for goto huge if int interrupt long near pascal register return short signed sizeof static struct switch tipedef union unsigned void volatile while Bảng 1.1 Danh mục từ khóa C Ý nghĩa cách sử dụng từ khoá đề cập sau này, ta cần ý: - Không dùng từ khoá để đặt tên cho hằng, biến, mảng, hàm - Từ khoá phải viết chữ thường, ví dụ: viết từ khoá for FOR, hay For, … c) Tên Tên khái niệm quan trọng, dùng để xác định đại lượng khác chương trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên trỏ, tên tệp, tên cấu trúc, tên nhãn, Tên đặt theo qui tắc sau: Tên dãy ký tự bao gồm chữ cái, số gạch nối Ký tự tên phải chữ gạch nối Tên không trùng với khoá Độ dài cực đại tên theo mặc định 32 đặt lại giá trị từ tới 32 nhờ chức năng: Option-Compiler-Source-Identifier length dùng TURBO C Ví dụ: Các tên đúng: a_1 Các tên sai: delta 3MN Ký tự số m#2 Sử dụng ký tự # f(x) Sử dụng dấu () Trùng với từ khoá te ta Sử dụng dấu trắng Y-3 Sử dụng dấu - x1 _step GAMA Bảng 1.2 Một số tên sai Chú ý: Trong C, tên chữ thường chữ hoa khác ví dụ tên AB khác với ab Trong C, ta thường dùng chữ hoa để đặt tên cho dùng chữ thường để đặt tên cho hầu hết cho đại lượng khác biến, biến mảng, hàm, cấu trúc Tuy nhiên điều bắt buộc 1.4 Các bước lập chương trình a) Qui trình viết thực chương trình Trước viết chạy chương trình thông thường cần: Xác định yêu cầu chương trình Nghĩa xác định liệu đầu vào (input) cung cấp cho chương trình tập liệu cần đạt tức đầu (output).Các tập hợp liệu tên gọi cần xác định kiểu Ví dụ để giải phương trình bậc dạng: ax2 + bx + c = 0, cần báo cho chương trình biết liệu đầu vào a, b, c đầu nghiệm x1 x2 phương trình Kiểu a, b, c, x1, x2 số thực Xác định thuật toán giải Cụ thể hoá khai báo kiểu thuật toán thành dãy lệnh, tức viết thành chương trình thông thường giấy, sau bắt đầu soạn thảo vào máy Quá trình gọi soạn thảo chương trình nguồn Dịch chương trình nguồn để tìm sửa lỗi gọi lỗi cú pháp Chạy chương trình, kiểm tra kết in hình Nếu sai, sửa lại chương trình, dịch chạy lại để kiểm tra Quá trình thực lặp lặp lại chương trình chạy tốt theo yêu cầu đề NSD b) Soạn thảo tệp chương trình nguồn Soạn thảo chương trình nguồn công việc đơn giản: gõ nội dung chương trình (đã viết giấy) vào máy lưu lại lên đĩa Các tệp chương trình ngôn ngữ C có phần mở rộng C, ví dụ : bai1.c, giai_pt.c, … Thông thường lưu lại chương trình lên đĩa lần sau không cần phải gõ lại Có thể soạn chương trình nguồn soạn thảo (editor) khác phải chạy môi trường tích hợp C++ (Borland C, Turbo C, Dev C, …) Mục đích soạn thảo tạo văn chương trình đưa vào nhớ máy Văn chương trình cần trình bày sáng sủa, rõ ràng Các câu lệnh cần gióng thẳng cột theo cấu trúc lệnh (các lệnh chứa lệnh cấu trúc trình bày thụt vào so với điểm bắt đầu lệnh) Các thích nên ghi ngắn gọn, rõ nghĩa phù hợp c) Dịch chương trình Sau soạn thảo xong chương trình nguồn, bước thường dịch chương trình Tùy vào trình biên dịch chí tùy vào phiên trình biên dịch mà tổ hợp phím để thực thao tác dịch, chạy chương trình, … khác Việc dịch để tìm sửa lỗi gọi lỗi cú pháp Sau sửa xong lỗi NSD dùng chuyển trỏ đến lỗi dịch lại Quá trình sửa lỗi − dịch lặp lại văn sửa hết lỗi cú pháp Sản phẩm sau dịch tệp gọi chương trình đích có đuôi EXE tức tệp mã máy để thực Tệp lưu tạm thời nhớ phục vụ cho trình chạy chương trình lưu lại đĩa tuỳ theo tuỳ chọn dịch NSD Trong sau dịch, C cửa sổ chứa thông báo lỗi (nếu có), thông báo chương trình dịch thành công (không lỗi) Các lỗi gọi lỗi cú pháp d) Chạy chương trình Giống dịch chương trình, việc chạy chương trình tùy thuộc vào trình biên dịch Nếu chương trình chưa dịch sang mã máy, máy tự động dịch lại trước chạy Kết chương trình cửa sổ kết để NSD kiểm tra Nếu kết chưa mong muốn, NSD quay lại văn để sửa lại chạy lại chương trình Quá trình lặp lại chương trình chạy yêu cầu đề Khi chương trình 10 printf("\nHo ten: %10s; Ma sv: %5d; Diem Toan: %6.2f; Diem Tin: %6.2f ; Diem Anh: %6.2f", a.hten, a.masv, a.dToan, a.dTin, a.dAnh); printf("; Diem trung binh: %6.2f ", dtb(a)); } void hthi_ds(SV a[], int n)//hiển thị toàn danh sách n sinh viên { int i; for(i=0; i=7.0 { int i; for(i=0; i=7.0) { printf("\nThong tin cua SV %d\n", i+1); hthi(a[i]); } } void sxep(SV a[], int n)//sắp xếp danh sách sinh viên theo mã { int i, j; SV tam; for(i=0; i[...]... trư c đây ta đã xét C c phép toán đã đư c đề c p đến ở phần trên Hàm sẽ đư c đề c p trong chương sau Bài tập 1 Viết chương trình in ra màn hình chuỗi “Chao cac ban.” trên c c IDE kh c nhau 2 Tìm hiểu c c option c a c c IDE: Dev C, TC, Cfree, … 3 Tìm hiểu c ch th c dịch chương trình, soát lỗi, debug c a TC, DevC, Cfree, … 4 Tìm hiểu thư viện math.h trong C 22 CHƯƠNG 2 C C CÂU LỆNH TRONG C 2.1 Lệnh gán,... &y, &a, &ch, &ct); Với dòng vào: 54.32e-1 25 12452348a 28 Kết quả là lệnh scanf sẽ gán 5.432 cho x 25.0 cho y 124 cho a xâu "523" và dấu kết th c \0 cho ch xâu "48a" và dấu kết th c \0 cho ct Ký tự chuyển dạng: Ký tự chuyển dạng x c định c ch th c dò đ c c c ký tự trên dòng vào c ng như c ch chuyển dịch thông tin đ c đự c trư c khi gán nó cho c c địa chỉ tương ứng C ch dò đ c thứ nhất là đ c theo trường...chạy, c a sổ kết quả sẽ hiện ra tạm thời che c a sổ soạn thảo Sau khi kết th c chạy chương trình NSD c thể đóng c a số kết quả và trở về c a sổ soạn thảo 1.5 Một số c ng c (IDE) cho lập trình C a) Turbo C (TC) Hình 1.1 Giao diện Turbo C Turbo C+ + 3.0 là c ng c phổ biến nhất hiện nay đư c dùng trong c c môi trường giáo d c khi c n dạy về lập trình C/ C++ c bản Phần mềm c a hãng Borland... 35 cho a xâu "13145" cho ch xâu "xyz' cho ck 584 cho b Chú ý: Xét đoạn chương trình dùng để nhập (từ bàn phím) ba giá trị nguyên rồi gán cho ba biến a, b, c như sau: int a, b, c; scanf("%d%d%d”, &a, &b, &c) ; Để vào số liệu ta c thể thao t c theo nhiều c ch kh c nhau: C ch 1: Đưa ba số vào c ng một dòng, c c số phân c ch nhau bằng dấu c ch ho c dấu tab C ch 2: Đưa ba số vào ba dòng kh c nhau C ch 3:... chạy đư c) DevCpp khi biên dịch một chương trình đơn giản (chỉ c 1 file chẳng hạn) thì không c n tạo Project để quản lý nhưng Pelles C thì luôn sử dụng project để quản lý c c chương trình Pelles C for Windows sử dụng trình biên dịch riêng và c c thư viện API c a Windows cung c p Nói chung Pelles C for Windows rất thích hợp để phát triển c c chương trình hệ thống trên Windows và trên Pocket PC, SmartPhone... c hệ điều hành DOS Tuy nhiên phần mềm này c một số như c điểm c bản: không c p nhật, vì thế chỉ c thể sử dụng cho những người mới h c lập trình, viết c c chương trình chạy trên DOS hay chương trình chạy trên hệ thống nhúng, mô phỏng một số thuật toán đồ họa trên DOS C c như c điểm kh c của Turbo C+ + 3.0: không hỗ trợ c c tính năng mới c a C/ C++ (như kiểu dữ liệu bool, namespace, thư viện STL, c c. .. giữa c c dấu { } gọi là thân c a toán tử switch default là một thành phần không bắt bu c phải c trong thân c a switch Sự hoạt động c a toán tử switch phụ thu c vào giá trị c a biểu th c viết trong dấu ngo c () như sau: Khi giá trị c a biểu th c này bằng ni, máy sẽ nhảy tới c c câu lệnh c nhãn là case ni Khi giá trị biểu th c kh c tất c c c ni thì c ch làm vi c của máy lại phụ thu c vào sự c mặt... vào sẽ đư c đ c, nội dung c a nó đư c dịch và đư c gán cho địa chỉ tương ứng (nếu không c dấu *) Nếu giá trị c a d d nhỏ hơn độ dài c a trường vào thì chỉ phần đầu c a trường c kích c bằng d d đư c đ c và gán cho địa chỉ c a biến tương ứng Phần c n lại c a trường sẽ đư c xem xét bởi c c đ c tả và đối tương ứng tiếp theo Ví dụ: int a; float x, y; char ch[6], ct[6] ; //khai báo xâu ký tự scanf("%f%5f%3d%3s%s",... 2.5 C u lệnh lựa chọn-lệnh switch Là c u tr c tạo nhiều nhánh đ c biệt Nó c n c vào giá trị một biểu th c nguyên để chọn một trong nhiều c ch nhảy C u tr c tổng quát c a nó là: switch (biểu th c nguyên) { case n1: khối lệnh 1 case n2: khối lệnh 2 case nk: khối lệnh k [ default: khối lệnh k+1] } Với ni là c c số nguyên, hằng ký tự ho c biểu th c hằng C c ni c n c giá trị kh c nhau Đoạn chương trình. .. tiên c c phép toán Chú thích: C c phép toán tên một dòng c c ng thứ tự ưu tiên, c c phép toán ở hàng trên c số ưu tiên cao hơn c c số ở hàng dưới Đối với c c phép toán c ng m c ưu tiên thì trình tự tính toán c thể từ trái qua phải hay ngư c lại đư c chỉ ra trong c t trình tự kết hợp Ví dụ: * px=*( px) (phải qua trái) 8/4*6=(8/4)*6 (trái qua phải) Nên dùng c c dấu ngo c tròn để viết biểu th c một c ch

Ngày đăng: 14/05/2016, 11:24

Từ khóa liên quan

Mục lục

  • CHƯƠNG 1. GIỚI THIỆU

    • 1.1. Giới thiệu ngôn ngữ lập trình C.

    • 1.2. Cấu trúc chung của chương trình C

    • 1.3. Các phần tử cơ bản của ngôn ngữ lập trình C.

    • 1.4. Các bước cơ bản khi lập chương trình

    • 1.5. Một số công cụ (IDE) cho lập trình C.

    • 1.6. Biến, hằng, biểu thức và các kiểu dữ liệu cơ sở

    • Bài tập

    • CHƯƠNG 2. CÁC CÂU LỆNH TRONG C

      • 2.1. Lệnh gán, lệnh gộp

      • 2.2. Hàm in dữ liệu ra màn hình

      • 2.3. Hàm nhập dữ liệu vào từ bàn phím

      • 2.4. Câu lệnh rẽ nhánh

      • 2.5. Câu lệnh lựa chọn-lệnh switch

      • 2.6. Câu lệnh lặp

      • 2.7. Câu lệnh break, continue

      • Bài tập:

      • CHƯƠNG 3 . HÀM

        • 3.1. Khái niệm về chương trình con.

        • 3.2. Hàm trong C

        • 3.2. Tham số của hàm.

        • 3.3. Biến toàn cục, biến địa phương

        • 3.4. Hàm không cho các giá trị:

Tài liệu cùng người dùng

Tài liệu liên quan