1. Trang chủ
  2. » Công Nghệ Thông Tin

LAP TRINH CAN BAN TRUNG CẤP

39 8 0

Đ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

Thông tin cơ bản

Tiêu đề Lập trình căn bản
Trường học Trường TCN khu vực Nam Tây Ninh
Chuyên ngành Lập trình căn bản
Thể loại Giáo trình
Định dạng
Số trang 39
Dung lượng 518,5 KB

Cấu trúc

  • Bài 1:TỔNG QUAN VỀ NGÔN NGỮ C (0)
    • I. GIỚI THIỆU (1)
    • II. CÁCH KHỞI ĐỘNG VÀ THOÁT KHỎI (1)
      • 1. Khởi động (1)
      • 2. Thoát khỏi: Nhấn tổ hợp phím Alt _ X hoặc vào menu File / Quit (1)
    • III. CÁCH SỬ DỤNG SỰ TRỢ GIÚP (1)
      • 1. Trợ giúp từ Help File (1)
      • 2. Vớ duù (1)
  • Bài 2:CÁC THÀNH PHẦN CƠ BẢN (0)
    • I. HỆ THỐNG TỪ KHÓA VÀ KÍ HIỆU ĐƯỢC DÙNG TRONG C (3)
      • 1. Hệ thống từ khóa (3)
      • 2. Bộ ký tự và ký hiệu (3)
      • 3. Teân (4)
    • II. CÁC KIỂU DỮ LIỆU (4)
    • III. CÁC LOẠI BIẾN, CÁCH KHAI BÁO, SỬ DỤNG (5)
      • 1. Biến và cách khai báo (5)
      • 2. Biến toàn cục, biến cục bộ: a> Biến toàn cục (5)
    • IV. LEÄNH ẹễN, LEÄNH KEÙP (6)
      • 1. Caõu leọnh ủụn (6)
      • 2. Câu lệnh kép hay còn gọi là khối lệnh (6)
    • V. THỰC THI CHƯƠNG TRÌNH (7)
      • 1. Dịch và thực thi chương trình (7)
      • 2. Câu lệnh nhập xuất (7)
  • Bài 3:CÁC LỆNH CÓ CẤU TRÚC (0)
    • I. KHÁI NIỆM VỀ LỆNH CẤU TRÚC (10)
    • II. CÁC LỆNH CẤU TRÚC RẼ NHÁNH (10)
      • 1. Lệnh rẽ nhánh đơn (if (0)
      • 2. Lệnh rẽ nhiều nhánh (switch) (12)
    • III. CÁC LỆNH ĐƠN NHẰM KẾT THÚC SỚM VÒNG LẶP (14)
      • 1. Leọnh Goto (14)
      • 2. Leọnh break (14)
      • 3. Leọnh continue (15)
    • IV. CÁC LỆNH LẶP (15)
      • 1. Lặp xác định (for…) (15)
      • 2. Lặp xác định (while…) (16)
      • 3. Các ví dụ (17)
  • Bài 4:HÀM.......................................................................................................21 (0)
    • I. KHÁI NIỆM (21)
      • 1. Khái niệm (21)
      • 2. Tại sao phải xây dựng hàm, sử dụng hàm (21)
    • II. HÀM (21)
      • 1. Nguyên tắc xây dựng hàm (21)
      • 2. Tham số hình thức và tham số thực của hàm (23)
      • 3. Truyền tham số cho hàm (23)
    • III. LỆNH THƯỜNG SỬ DỤNG TRONG HÀM (24)
  • Bài 5:MẢNG.....................................................................................................27 (0)
    • I. KHÁI NIỆM MẢNG (27)
    • II. MẢNG MỘT CHIỀU (27)
      • 1. Khái niệm (27)
      • 2. Khai báo (27)
      • 3. Nhập mảng (28)
      • 4. Xuất mảng (28)
      • 5. Khởi gán biến mảng (28)
      • 6. Toán tử size of (28)
      • 7. Phát sinh mảng số nguyên (28)
      • 8. Sắp xếp mảng một chiều (29)
    • III. MẢNG HAI CHIỀU (29)
      • 2. Khai báo (29)
      • 3. Khởi gán (29)
      • 4. Xác định phần tử của mảng hai chiều (30)
      • 5. Nhập mảng hai chiều (30)
      • 6. Xuất mảng hai chiều (30)
      • 7. Sắp xếp mảng 2 chiều tăng dần (30)
      • 8. Sắp xếp mảng 2 chiều giảm dần (31)
  • Bài 6:CHUỖI KÝ TỰ (0)
    • I. KHÁI NIỆM CHUỖI LÝ TỰ (33)
    • II. KHAI BÁO BIẾN CHUỖI (33)
      • 1. Khai báo (33)
      • 2. Nhập xuất dữ liệu với chuỗi (34)
    • III. CÁC HÀM XỬ LÝ CHUỖI (35)

Nội dung

Để yêu cầu máy tính giải 1 bài toán nào đó thì ta phải viết 1 chương trình tương ứng. Ngôn ngữ dùng để viết chương trình cho máy tính được gọi là “Ngôn Ngữ Lập Trình”. Ngôn ngữ lập trình gồm: Bậc thấp: Hợp ngư. Bậc cao: Pascal, C, C++, ...

QUAN VỀ NGÔN NGỮ C

GIỚI THIỆU

Để máy tính giải quyết một bài toán, cần phải viết một chương trình tương ứng Ngôn ngữ được sử dụng để lập trình cho máy tính được gọi là "Ngôn Ngữ Lập Trình".

Ngôn ngữ lập trình gồm:

CÁCH KHỞI ĐỘNG VÀ THOÁT KHỎI

- Cách 1: Double click vào biểu tượng Borland C trên màn hình Desktop.

- Cách 2: :\ BORLANDC\ BIN\ BC

2 Thoát khỏi: Nhấn tổ hợp phím Alt _ X hoặc vào menu File / Quit.

CÁCH SỬ DỤNG SỰ TRỢ GIÚP

1 Trợ giúp từ Help File:

 Ấn phím F1,con trỏ đang ở trong cửa sổ nào sẽ có ngay một bảng chỉ dẫn cần thiết về cửa sổ đó.

 Hoặc nhấn tổ hợp phím Alt + H.

Vớ duù 1: Viết chương trỡnh nhập vào 1 số thực In ra màn hỡnh số bạn vừa nhập.

# include “ conio.h” ; void main() { clrscr(); float a; printf (“\n Nhap vao 1 so thuc :“); scanf (“%f”,&a); printf(“\n So ban vua nhap la: %7.1f”,a); getch();

Ví dụ 2: Viết chương trình nhập vào 2 số nguyên Xuất ra màn hình hai số bạn vừa nhập.

# include “ conio.h” ; void main() { clrscr(); int a,b ; printf (“\n Nhap 2 so nguyen :“); scanf (“%d%d”,&a,&b); printf(“\n Hai so ban vua nhap la: %d %d”,a,b); getch();

Ví dụ 3: Viết chương trình nhập vào bán kính đường tròn Tính diện tích.

{ clrscr(); float r,s ; printf (“\n Nhap ban kinh :“); scanf (“%f”,&r); s = r*r*3.1416; printf(“\n Dien tich duong tron la: %7.1f”,s); getch();

THÀNH PHẦN CƠ BẢN

HỆ THỐNG TỪ KHÓA VÀ KÍ HIỆU ĐƯỢC DÙNG TRONG C

Có một số từ được ngôn Ngữ Lập Trình dành riêng cho viêc xây dựng các câu lệnh, cách khai báo, các phép tính gọi là từ khoá (Keyword)

Người lập trình không được đặt tên (biến, hằng, hàm, thủ tục ) trùng với một trong các từ khoá Mỗi một từ khoá có 1 công dụng khác nhau.

Danh sách các từ khoá: asm, break, case, char, conts, continue, default, do, double, else, enum, float, for, goto, if, int, long, return, signed, sizeof, switch, union, void, while

 Lưu ý: Khác với Pascal, trong ngôn ngữ lập trình C từ khóa bao giờ cũng được viết bằng chữ thường.

2 Bộ ký tự và ký hiệu:

 Các toán tử số học trong C:

 Các toán tử quan hệ trong C:

Lớn hơn hoặc bằng >Nhỏ hơn Biến toàn cục:

Biến được khai báo bên ngoài các khối lệnh, tức là bên ngoài các hàm, được gọi là biến toàn cục Phạm vi sử dụng của biến toàn cục kéo dài từ vị trí khai báo cho đến khi kết thúc chương trình Ngược lại, biến cục bộ chỉ có giá trị trong phạm vi của khối lệnh mà nó được khai báo.

Biến cục bộ, hay còn gọi là biến trong, được khai báo bên trong một khối lệnh như các hàm Phạm vi sử dụng của biến cục bộ chỉ giới hạn trong khối lệnh mà nó được khai báo, tức là nó chỉ có thể được truy xuất trong khối lệnh đó Thời gian tồn tại của biến bắt đầu từ khi máy bắt đầu làm việc với khối lệnh cho đến khi ra khỏi khối lệnh đó.

LEÄNH ẹễN, LEÄNH KEÙP

Trong ngôn ngữ lập trình, lệnh được hình thành từ sự kết hợp của các từ khóa, từ chuẩn, tên gọi và toán tử, tuân theo một quy tắc cú pháp cụ thể để tạo ra chỉ thị cho chương trình.

- Các câu lệnh cách nhau bởi dấu chấm phẩy ”;”.

- Câu lệnh chia ra làm 2 loại: Câu lệnh đơn và Câu lệnh kép (hay còn gọi là câu lệnh có cấu trúc)

Câu lệnh gán (assignment): là phép dùng để đưa ra giá trị của 1 biểu thức nào đó vào trong một biến tương thích theo cú pháp như sau:

< teân_bieán > = < biểu_thức_cùng_kiểu_dữ_liệu > ;

Trong đoạn mã Vớ duù, biến float a và b được khởi tạo với giá trị 3.5 Biểu thức b * (b – 1.5) + 10 sẽ được tính toán và gán kết quả cho biến a, với giá trị cuối cùng là 17 Đặc biệt, trong một số phép gán, biến có thể xuất hiện trong cả hai vế của biểu thức gán.

Vớ duù: int i, j, k ; i = i + 2 ; Có thể viết ngắn hơn như sau: i+ = 2; j = j – 1 ; j-= 1 ; k = k * ( i + j ) ; k*= i+j ;

- Kí hiệu = được gọi là dấu gán.

+ Tính biểu thức bên phải dấu gán.

+ Gán giá trị vừa tìm được cho biến bên trái dấu gán.

2 Câu lệnh kép hay còn gọi là khối lệnh:

Khối lệnh là 1 dãy các câu lệnh nằm trong khối được bao bởi cặp dấu “ { “ và “}”

Sử dụng khối lệnh trong câu lệnh điều kiện (rẽ nhánh hoặc lặp) có nhiều câu lệnh con hoặc trong các hàm.

THỰC THI CHƯƠNG TRÌNH

1 Dịch và thực thi chương trình:

Chương trình dịch là một phần mềm chuyên trách chuyển đổi mã nguồn từ ngôn ngữ lập trình bậc cao sang ngôn ngữ lập trình bậc thấp Nó thực hiện nhiều chức năng quan trọng trong quá trình biên dịch, giúp tối ưu hóa và đảm bảo mã nguồn hoạt động hiệu quả trên máy tính.

+ Duyệt chương trình nguồn để phát hiện và thông báo các lỗi về cú pháp.

+ Khi chương trình nguồn không còn lỗi thì chương trình dịch sẽ dịch nó sang ngôn ngữ máy.

 Dịch và thực thi chương trình:

Sau khi hoàn thành việc soạn thảo chương trình, bạn cần dịch chương trình bằng cách nhấn phím F9 Khi chương trình không còn lỗi, bạn sẽ nhận được thông báo "Compile Successful press any key" Để chạy chương trình, hãy nhấn tổ hợp phím Ctrl + F9.

 Xuất dữ liệu ra màn hình: printf (dòng điều khiển, b1, b2, , bn);

- b1,b2,…,bn: là các biến cần xuất ra.

- dòng điều khiển: là 1 chuỗi ký tự gồm 3 loại:

+ Ký tự xuống dòng, về đầu dòng “\n”.

+ Các ký tự định dạng:

%c: xuất biến ký tự ( char).

%ld: xuất biến nguyên dài ( long).

%lf: xuất biến thực chuẩn ( double).

%4d: xuất biến nguyên dành cho nó 4 vị trí (khoảng cách).

%7.2f: xuất biến thực dành cho nó 7 vị trí, 2 chữ số phần thập phân.

% d: có 1 dấu cách trước biến nguyên.

%d : có 1 dấu cách sau biến nguyên.

Hằng kiểu chuỗi đặt trong dấu “ “

 Nhập dữ liệu từ bàn phím: scanf (“ ký tự định dạng”, &tên_biến1,

- Ký tự địng dạng: như phần xuất dữ liệu có thể nhập nhiều biến bằng lệnh scanf

- Các ký tự định dạng phải tương ứng với danh sách bieán phía sau.

Vớ duù: int a,b; float r; printf (“\n Nhap a,r “); scanf( “%d %f”, &a, &r);

Câu 1: Viết chương trình nhập vào 2 số nguyên Tính tổng, hiệu, tích, thương của hai số đó.

Câu 2: Viết chương trình nhập vào chiều dài và chiều rộng hình chữ nhật Tính chu vi và diện tích.

Câu 3: Viết chương trình nhập vào 3 số thực Tinh x n + y n

LỆNH CÓ CẤU TRÚC

KHÁI NIỆM VỀ LỆNH CẤU TRÚC

Lệnh cấu trúc là những lệng ghép, các câu lệnh lựa chọn,các lệnh lặp (if , switch…, for , while…).

CÁC LỆNH CẤU TRÚC RẼ NHÁNH

1 Lệnh rẽ nhánh đơn (if ):

- Diễn giải : Nếu đúng > thực hiện

, ngược lại nếu sai > bỏ qua

trong if, thực hiện lệnh đứng sau câu lệnh if.

- Diễn giải : Nếu đúng > thực hiện

bỏ qua , ngược lại nếu

sai > bỏ qua thực hiện

- Chú ý: Trong trường hợp có nhiều lệnh if lồng nhau thì else sẽ gắn liền với if gần nó nhất.

; else if ;

Ví dụ 1 : Tìm số lớn nhất trong 3 số nguyên a,b,c.

# include “ conio.h” int max (int a, int b, int c );

/* hoặc int max (int , int , int); */ void main () { int a,b,c ; printf (“\n Nhập 3 số nguyên :”); scanf (“%d %d %d “,&a, &b, &c); printf(“\n So max là %d “, max(a,b,c)); getch();

} int max (int a,int b, int c) { int m; m = a ; if ( m >= b ) m = b ; if ( m >= c) m = c; return m;

Ví dụ 2 : Viết chương trình giải phương trình bậc nhất : ax + b = 0 (a, b : số thực). Giải : Xét các trường hợp xảy ra :

+ b =0 : vô số nghiệm + b != 0 ( ngược lại) : vô nghiệm.

/* Giải phương trình bậc nhất : ax + b = 0 */

The provided C program prompts the user to input two floating-point numbers, a and b It checks the values of a and b to determine the nature of the linear equation represented by ax + b = 0 If both a and b are zero, it indicates that there are infinitely many solutions If a is zero and b is not, it states that the equation has no solutions If a is non-zero, it calculates and displays the unique solution for x as -b/a.

2 Lệnh rẽ nhiều nhánh (switch):} switch

{ case : ; break ; case : ; break ;

… case : ; break ; [default] : ; }

Biểu thức trong lập trình không mang nghĩa đúng hay sai mà cho kết quả thuộc kiểu nguyên hoặc kiểu ký tự Lệnh switch sẽ so sánh kết quả của biểu thức với các giá trị đã định sẵn như , ,…, và thực hiện lệnh tương ứng Nếu kết quả không khớp với bất kỳ giá trị nào, lệnh switch sẽ không thực hiện hành động nào.

…, thì thực hiện (sau default) o break : Thoát khỏi lệnh switch, nhưng ở case có thể không có break.

Ví dụ 1: Viết chương trình nhập vào 1 số từ 1 đến 5 In ra màn hình số bạn vừa nhập.

Đoạn mã này yêu cầu người dùng nhập một số từ 1 đến 5 Nếu số nhập vào nằm ngoài khoảng này, chương trình sẽ thông báo rằng số đó không hợp lệ Ngược lại, nếu số hợp lệ được nhập, chương trình sẽ sử dụng cấu trúc switch để in ra số tương ứng với giá trị đã nhập.

Ví dụ 2: Viết chương trình nhập vào ngày, tháng và năm Cho biết tháng bạn vừa nhập có bao nhiêu ngày.

To determine the number of days in a given month and year, the user is prompted to input the day, month, and year Input validation checks if the day is between 1 and 31, the month is between 1 and 12, and the year is non-negative If the input is invalid, a message requests re-entry The program then uses a switch statement to identify the number of days for each month: January, March, May, July, August, October, and December each have 31 days, while April, June, September, and November have 30 days For February, the program checks if the year is a leap year to determine if it has 28 or 29 days.

{ printf("\n Nam %d la nam nhuan nen thang %d co 29 ngay ",y,m);

} else printf("\n Thang 2 co 28 ngay"); break;

CÁC LỆNH ĐƠN NHẰM KẾT THÚC SỚM VÒNG LẶP

Cú pháp: goto ;

Khi gặp toán tử này máy sẽ nhảy tới câu lệnh có nhãn viết sau từ khoá goto.

Câu lệnh goto và nhãn phải được đặt trong một hàm, cho phép nhảy giữa các vị trí trong thân hàm mà không thể chuyển đổi giữa các hàm khác nhau.

Việc sử dụng toán tử goto để nhảy từ bên ngoài vào trong một khối lệnh là không được phép Ngược lại, việc nhảy từ bên trong một khối lệnh ra ngoài là hoàn toàn hợp lệ.

Lệnh break được sử dụng để kết thúc một cấu trúc lặp như switch, for hoặc while, và chuyển điều khiển chương trình đến lệnh ngay sau cấu trúc đó.

Lệnh continue chỉ áp dụng trong các vòng lặp, giúp kết thúc sớm một chu kỳ lặp và bắt đầu chu kỳ tiếp theo Những lệnh nằm sau lệnh continue trong cấu trúc lặp sẽ bị bỏ qua.

Lệnh break và continue không thuộc vào cấu trúc điều khiển nào, do đó có thể gây ra lỗi "Error 4: Missplaced Break" hoặc "Error 4: Missplaced Continue" Cần lưu ý rằng break và continue dễ bị nhầm lẫn với lệnh gọi hàm, tuy nhiên chúng là từ khóa chứ không phải là hàm.

CÁC LỆNH LẶP

1 Lặp xác định (for…) for (; ;

- : Chỉ ra giá trị ban đầu của biến điều khieồn.

- : Chỉ ra giá trị cuối của biến điều khieồn.

- : Các lệnh làm thay đổi biến điều khieồn.

- Các biểu thức có thể là một dãy gồm nhiều lệnh cách nhau bởi dấu phẩy “,”

- Các , , không bắt buộc phải có đủ trong dấu () nhưng phải có đủ dấu chấm phẩy “;”

Các lệnh trong thân vòng lặp sẽ được thực hiện lặp đi lặp lại khi biến điều khiển thay đổi từ giá trị đầu đến giá trị cuối Sau mỗi lần lặp, giá trị của biến điều khiển sẽ tăng hoặc giảm một lượng nhất định.

1 Nếu trong lệnh for thiếu , phải gán giá trị ban đầu cho biến điều khiển ở ngoài lệnh for.

2 Nếu trong lệnh for thiếu , trong thân vòng lặp phải có lệnh break hoặc goto để thoát khỏi vòng lặp.

3 Nếu trong lệnh for thiếu , trong dãy lệnh biểu_thức_2 phải có lệnh làm thay đổi biến điều khiển.

Vớ duù1: Tớnh toồng s = 1+2+…+n int i , s = 0; for (i = 1; i = 7.0 : Khá 7.0 > DTB >= 5.0 : Trung bình

Chương trình cần nhập hai bán kính r1 và r2 của hai đường tròn, cùng với khoảng cách d giữa hai tâm Dựa vào các giá trị này, chương trình sẽ xác định mối quan hệ giữa hai đường tròn: chúng có thể tách rời, tiếp xúc ngoài, tiếp xúc trong, cắt nhau, bao nhau hoặc trùng nhau.

Câu 5: Viết chương trình nhập vào 2 số và một ký tự.

Nếu ký tự là dấu ‘+’ thì tính tổng 2 số đó Nếu ký tự là dấu ‘-’ thì tính hiệu.

Nếu ký tự là dấu ‘*’ hoặc ‘x’ hoặc ‘X’ thì tính tích.

Nếu ký tự là dấu ‘:’ hoặc ‘/’thì tính thương.

Câu 6: Viết chương trình dưới dạng menu Tính chu vi và diện tích:

Câu 7: Viết chương trình nhập vào 1 số In ra màn hình các số chính phương nhỏ hơn số đó.

Câu 8: Viết chương trình phân tích một số thành các thừa soá nguyeân toá.

Câu 9: Tìm Ước số chung lớn nhất của 3 số.

Câu 10: Tìm Bội số chung nhỏ nhất của 3 số.

Câu 11: Viết chương trình nhập vào 1 số n Tính tổng giá trị tuyệt đối của các số nhỏ hơn hoặc bằng n.

Câu 12: Viết chương trình tính:

Câu 13: Viết chương trình tính:

Caõu 14: Vieỏt chửụng trỡnh nhập số nguyờn n Cho biết:

+ n có bao nhiêu chữ số.

+ Tổng các chữ số của n.

+ Chữ số có giá trị lớn nhất.

Caõu 15: Vieỏt chửụng trỡnh nhập vào một dóy số Hóy đếm cú bao nhiờu chữ số.

Câu 16: Viết chương trình vẽ hình chữ nhật đặc.

KHÁI NIỆM

Trong ngôn ngữ lập trình C, các chương trình con được gọi chung là hàm (function), không phân biệt giữa thủ tục và hàm Đặc biệt, những hàm không trả về giá trị sẽ được khai báo với kiểu dữ liệu void.

Hàm là đơn vị cơ bản và độc lập trong chương trình, với các hàm có vai trò tương đương nhau Trong ngôn ngữ C, không cho phép khai báo hàm bên trong một hàm khác Hàm main() là hàm chính của chương trình, và mỗi chương trình chỉ có một hàm main duy nhất.

2 Tại sao phải xây dựng hàm, sử dụng hàm:

- Hàm là đoạn chương trình thực hiện trọn vẹn một công việc nhất định.

- Hàm chia cắt việc lớn bằng nhiều việc nhỏ Nó giúp cho chương trình sáng sủa, dễ sửa, nhất là đối với các chương trình lớn.

HÀM

1 Nguyên tắc xây dựng hàm :

- Mỗi hàm phải có một tên theo quy tắc đặt tên Trong một chương trình không được phép có hai hàm trùng tên nhau.

Mỗi hàm thường có giá trị đầu vào và đầu ra Giá trị đầu vào được truyền qua danh sách tham số hoặc biến toàn cục, trong khi giá trị đầu ra được trả về thông qua câu lệnh return khi hàm kết thúc Nếu hàm không có đối số hoặc giá trị trả về, nó sẽ được khai báo với kiểu void.

- Các hàm có vai trò ngang nhau trong chương trình.

- Mỗi hàm trong ngôn ngữ lâp trình C, về nguyên tắc bao gồm hai phần, một phần gọi là nguyên mẫu của hàm

(prototype) được khai báo trước khi hàm được sử dụng và phần còn lại gọi là phần định nghĩa của hàm.

()

+ Tên hàm : bắt buộc phải có.

+ Danh sách các đối số : không bắt buộc

+ Khai báo biến : Nếu danh sách các đối số mà có thì phần này buộc phải có Còn nếu không thì ngược lại có thể bỏ qua.

+ Phần trong { } : là thân hàm Dấu { } là bắt buộc đối với mọi hàm.

+ Khai báo tham biến : ngay sau { và gọi là biến cục bộ dành riêng cho hàm sử dụng.

+ Đối số luôn luôn truyền theo giá trị (không thay đổi giá trị).

Ví dụ : Hàm tính giai thừa

#include float giaithua (int n)

{ int i ; float KQ ; for ( KQ=1,i =1; i

Ngày đăng: 05/05/2022, 21:37

HÌNH ẢNH LIÊN QUAN

Ví dụ1: Viết chương trình xuất ra màn hình bình phương của các số từ 1 đến 50. - LAP TRINH CAN BAN  TRUNG CẤP
d ụ1: Viết chương trình xuất ra màn hình bình phương của các số từ 1 đến 50 (Trang 17)

TỪ KHÓA LIÊN QUAN

w