Khóa luận Xây dựng website dạy ngôn ngữ lập trình c# dành cho ngƣời mới bắt đầu học kin

Câu 1. Phát biểu nào sau đây đúng về kiểu liệt kê (enum) trong C#? a. Kiểu liệt kê là một tập hợp các hằng số nguyên được đặt tên. b. Kiểu liệt kê là một tập hợp liên tục có thứ tự các thành phần dữ liệu cùng kiểu được tham chiếu bằng cùng một tên định danh và một chỉ số. c. Kiểu liệt kê là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: a. - Giải thích: Kiểu liệt kê là một tập những hằng số nguyên được đặt tên. h tế Huế

pdf113 trang | Chia sẻ: phamthachthat | Lượt xem: 1592 | Lượt tải: 3download
Bạn đang xem trước 20 trang tài liệu Khóa luận Xây dựng website dạy ngôn ngữ lập trình c# dành cho ngƣời mới bắt đầu học kin, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
int j = 123; int k = 124; Console.Write(j); } a. 88 b. 123 c. 124 d. Đáp án khác - Đáp án đúng: b - Giải thích: Bạn vừa thực thi lệnh in giá trị của j. Câu 9. Cho biết kết quả của đoạn chương trình sau: static void Main(string[] args) { int namSinh = 1994; namSinh++; Console.Write(namSinh); } a. 1994; b. 1995; c. 3988 d. Đáp án khác - Đáp án đúng: b - Giải thích: Bạn vừa tăng giá trị của biến namsinh lên một đơn vị bằng toán tử tăng ++. Phần 4: Kiểu logic Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 72 01. True hoặc False Kiểu logic (bool) trong C# cho phép một biến lưu trữ giá trị đúng (True) hoặc sai (False). - Mã nguồn: static void Main(string[] args) { bool b; b = true; Console.WriteLine(b); } - Kết quả: True - Giải thích: Kiểu bool trong C# cho phép một biến lưu trữ giá trị đúng (True) hoặc sai (False). 02. So sánh hơn: >, < Biến sẽ nhận giá trị True nếu biểu thức điều kiện đúng và ngược lại. - Mã nguồn: o static void Main(string[] args) { bool b = 5 > 3; Console.WriteLine(b); } o static void Main(string[] args) { bool b = 5 < 3; Console.WriteLine(b); } - Kết quả: o True o False - Giải thích: o Biểu thức 5>3 là đúng nên kết quả trả về là True. o Biểu thức 5<3 là sai nên kết quả trả về là False. 03. So sánh hoặc bằng: >=, <= Biến sẽ nhận giá trị True nếu biểu thức đúng và ngược lại. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 73 - Mã nguồn: static void Main(string[] args) { int s = 6; bool b = 5 >= s; Console.WriteLine(b); } - Kết quả: False - Giải thích: b=5>=s; nghĩa là b=5>=6 là sai nên kết quả trả về là False. Tương tự, nếu b=5<=s; nghĩa là b=5<=6 là đúng thì kết quả trả về là True. 04. So sánh bằng: = Biến sẽ nhận giá trị True nếu biểu thức đúng và ngược lại. Phép bằng được quy định bởi dấu „==‟. - Mã nguồn: static void Main(string[] args) { int s = 6; bool b = 5 == s; Console.WriteLine(b); } - Kết quả: True - Giải thích: b=s==6 là đúng nên giá trị trả về là True. 05. So sánh khác: != Biến sẽ nhận giá trị True nếu biểu thức đúng và ngược lại. Phép so sánh khác được quy định bởi dấu „!=‟. - Mã nguồn: static void Main(string[] args) { bool b = 5 != 6; Console.WriteLine(b); } - Kết quả: True - Giải thích: b=5 != 6; là đúng vì 5 khác 6 nên kết quả trả về là True. Tương tự, b= 6 !=6; là sai thì kết quả trả về là False. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 74 06. Toán tử Not: ! Toán tử Not (phủ định) sử dụng để đảo ngược lại trạng thái logic của toán hạng đó. Nếu điều kiện toán hạng là true thì phủ định nó sẽ là false. - Mã: static void Main(string[] args) { bool b1 = false; bool b2; b2 = !b1; Console.WriteLine(b2); } - Kết quả: True - Giải thích: b2 = !b1; sẽ cho kết quả là giá trị ngược lại của b1 (b1 = false;). Do đó, b2 nhận kết quả trả về là True. 07. Toán tử And: && Toán tử And được gọi là toán tử logic AND (và). Nếu cả hai toán tử đều có giá trị khác 0 thì điều kiện trở lên true. - Mã: static void Main(string[] args) { bool b1 = false; bool b2 = 3 < 127; bool ketqua = b1 && b2; Console.WriteLine(ketqua); } - Kết quả: False - Giải thích: Phép And trả về giá trị True nếu cả 2 toán hạng đều true, trả về giá trị False nếu cả 2 toán hạng đều false hoặc 1 trong 2 toán hạng là false. 08. Toán tử Or: || Toán tử OR được gọi là toán tử logic OR (hoặc). Nếu một trong hai toán tử khác 0, thì điều kiện là true. - Mã: o static void Main(string[] args) { bool b1 = false; Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 75 bool b2 = true; bool ketqua = b1 || b2; Console.WriteLine(ketqua); } o static void Main(string[] args) { bool b1 = false; bool b2 = false; bool ketqua = b1 || b2; Console.WriteLine(ketqua); } - Kết quả: o True o False - Giải thích: Toán tử Or trả về true khi 1 trong 2 toán tử hoặc cả 2 toán tử có giá trị là true; trả về false khi 1 trong 2 toán tử hoặc cả 2 toán tử có giá trị là false. 09. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây đúng? a. Kiểu bool cho phép một biến lưu trữ giá trị True hoặc Sai. b. Giá trị mặc định của biến có kiểu bool là false. c. Kiểu bool thuộc lớp System.Boolean. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: d Câu 2. Phát biểu nào sau đây là đúng? a. Phép so sánh như „‟ trả về kiểu bool. b. Các “giá trị băm” (hash values) của true và false là 1 và 0. c. Các toán tử như „+‟ và „–‟ trả về kiểu bool. d. Bool chỉ thể là true hoặc false. - Đáp án đúng: a, b, d. - Giải thích: bool chỉ có thể là true hay false và được trả về bởi so sánh. Các "giá trị băm" của true và false là 1 và 0. Câu 3. Làm cách nào để kiểm tra một biến tên a có giá trị bằng 10? a. a = 10; Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 76 b. a == 10; c. a = 11; d. Không có cách nào - Đáp án đúng: b - Giải thích: chúng ta có thể so sánh giá trị sử dụng dấu „==‟. Dấu „=‟ được dùng để gán giá trị cho biến. Câu 4. Làm cách nào để đảo ngược giá trị của biến b? a. b != b; b. b = !b; c. b = false; d. b = !true; - Đáp án đúng: b - Giải thích: Chúng ta có thể đảo ngược giá trị của biến b bằng cách gán cho chính nó với một “dấu chấm than” ở phía trước nó. “!” được sử dụng để kiểm tra các giá trị không bằng nhau. Câu 5. Hãy chọn kết quả đúng của đoạn chương trình sau: static void Main(string[] args) { bool b1 = 5 > 3; bool b2 = 5 < 4; Console.Write(b1 + ", " + b2); } a. True, False b. True, True c. False, True d. False, False - Đáp án đúng: a Câu 6. Hãy chọn kết quả đúng của đoạn chương trình sau: static void Main(string[] args) { int a = 3, b = 4; string s = (a >= b) ? "a lớn hơn b" : "a nhỏ hơn b"; Console.Write(s); Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 77 } a. a lớn hơn b b. a nhỏ hơn b c. True d. False - Đáp án đúng: b Câu 7. Hãy chọn kết quả đúng của đoạn chương trình sau: static void Main(string[] args) { bool a = true; bool b = false; Console.Write("{0}\t{1}\t{2}\t{3}", a, b, a && b, a || b); } a. True True True True b. True False True False c. True False False True d. False False True True - Đáp án đúng: c Câu 8. Dòng lệnh nào sau đây in ra kết quả true? a. Console.Write(10 < 100); b. Console.Write(true && false); c. Console.Write(“false”); d. Console.Write(true || false); - Đáp án đúng: a và d. - Giải thích: (true || false) là true vì một trong các toán hạng là true, tất nhiên là 10 <100. (true && false) là false vì một trong các toán hạng là false. Câu 9. Phát biểu nào sau đây sai? a. Dấu == là phép gán, dấu = là toán tử quan hệ. b. Dấu && là phép AND logic, dấu & là toán tử AND trên bit. c. Dấu || là phép OR logic, dấu | là toán tử OR trên bit. d. Không có đáp án sai. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 78 - Đáp án đúng: a - Giải thích: dấu = là phép gán, dấu == là toán tử quan hệ. Phần 5: Lệnh if else 01. If? Bất cứ khi nào chúng ta muốn biết nếu có điều gì là đúng hay sai, chúng ta có thể kiểm tra bằng câu lệnh if, theo sau là một giá trị logic trong dấu ngoặc đơn. - Mã nguồn: static void Main(string[] args) { int s = 6; bool b = s == 6; if (b) Console.WriteLine("Yes!"); } - Kết quả: Yes! - Giải thích: b=s==6 là đúng nên b sẽ nhận giá trị true. Lệnh if(b) (nghĩa là nếu b là true) là đúng nên câu lệnh trong mệnh đề if này được thực thi. 02. Else? Mệnh đề else được thực hiện chỉ khi mệnh đề trước đó false và điều kiện riêng của nó là true. - Mã nguồn: static void Main(string[] args) { bool b = 5 > 6; if (b) Console.WriteLine("Đúng"); else Console.WriteLine("Sai"); } - Kết quả: Sai - Giải thích: Biểu thức b=5>6; có giá trị false. Lệnh if (b) sai nên chương trình xét mệnh đề else. 03. Không cần logic Chúng ta có thể so sánh trong một mệnh đề if mà không cần phải khai báo biến. Nếu biểu thức trong dấu ngoặc đúng thì các câu lệnh trong cặp dấu { } sẽ được thực Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 79 hiện. Ngược lại, nếu biểu thức trong dấu ngoặc sai thì các câu lệnh trong cặp dấu { } sẽ không được thực hiện. - Mã nguồn: static void Main(string[] args) { double pi = 3.14159; if (pi != 3.0) { Console.WriteLine("Pi = 3.14159"); } } - Kết quả: Pi = 3.14159 - Giải thích: Biểu thức trong mệnh đề if đúng nên chương trình sẽ thực hiện câu lệnh của mệnh đề if và bỏ qua các câu lệnh sau đó. 04. If else Mệnh đề else được thực hiện chỉ khi mệnh đề trước đó false và điều kiện riêng của nó là true. - Mã nguồn: o static void Main(string[] args) { int x = 4; if (x == 4) Console.WriteLine("X bằng 4"); else if (x == 5) Console.WriteLine("X bằng 5"); else Console.WriteLine("X bằng 6"); } o static void Main(string[] args) { int x = 5; if (x == 4) Console.WriteLine("X bằng 4"); else if (x == 5) Console.WriteLine("X bằng 5"); else Console.WriteLine("X bằng 6"); o static void Main(string[] args) { int x = 6; if (x == 4) Console.WriteLine("X bằng 4"); else if (x == 5) Console.WriteLine("X bằng 5"); else Console.WriteLine("X bằng 6"); } - Kết quả: o X bằng 4 Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 80 o X bẳng 5 o X bằng 6 - Giải thích: Mệnh đề else được thực thi chỉ khi mệnh đề trước đó false và điều kiện riêng của nó là true. 05. So sánh bằng: Ở bài này chúng ta xét một mệnh đề if trong một mệnh đề if. - Mã nguồn: static void Main(string[] args) { int x = -3; if (x < 5) { if (x > -5) Console.WriteLine("X"); } } - Kết quả: X - Giải thích: Mệnh đề if bên trong được thực thi chỉ khi mệnh đề if trước đó true và điều kiện riêng của nó true. 06. So sánh chuỗi Chuỗi không phải dễ dàng so sánh các loại như kiểu số. Chúng ta cần phải sử dụng một phương pháp chuỗi là Equals để kiểm tra xem nó bằng một chuỗi khác. - Mã nguồn: o static void Main(string[] args) { string a = "Quả cam"; string b = "Quả cam"; bool sosanh = a.Equals(b); Console.WriteLine(sosanh); } o static void Main(string[] args) { string a = "Quả cam"; string b = "Quả táo"; bool sosanh = a.Equals(b); Console.WriteLine(sosanh); } - Kết quả: Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 81 o True o False - Giải thích: hàm a.Equals(b); cho kết quả là True nếu b bằng a và ngược lại. 07. Null Một biến kiểu chuỗi có thể có một giá trị hoặc không (null). Đôi khi chúng ta muốn chắc chắn rằng một chuỗi không phải là null trước khi chúng ta cố gắng sử dụng nó. - Mã nguồn: o static void Main(string[] args) { string a = "Quả cam"; string b = "Quả cam"; if (a == null) Console.WriteLine("Stay back!"); else Console.WriteLine(a.Equals(b)); } o static void Main(string[] args) { string a = null; string b = "Quả cam"; if (a == null) Console.WriteLine("Stay back!"); else Console.WriteLine(a.Equals(b)); } - Kết quả: o True o Stay back! - Giải thích: a.Equals(b) cho kết quả là True nếu b bằng a và ngược lại. 08. Các toán tử logic - Mã nguồn: static void Main(string[] args) { int x = -3; if (x -5) Console.WriteLine("X"); } - Kết quả: X - Giải thích: biểu thức (x-5) đúng nên câu lệnh sau nó Console.WriteLine("X"); được thực thi. 09. Toán tử điều kiện Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 82 Biểu thức: (exp_1) ? (exp_2) : (exp_3) Nếu exp_1 là true, giá trị trả về sẽ là kết quả của exp_2. Nếu exp_1 là false, giá trị trả về sẽ là kết quả của exp_3. - Mã nguồn: static void Main(string[] args) { int e1 = 2; int e2 = 3; int max = (e1 > e2) ? e1 : e2; int min = (e1 < e2) ? e1 : e2; Console.WriteLine(max + ", " + min); } - Kết quả: 3, 2 - Giải thích: (e1 > e2) ? e1 : e2 nghĩa là nếu (e1>e2) là true, giá trị trả về là kết quả của e1. Ngược lại, nếu (e1>e2) là sai, giá trị trả về là kết quả của e2. 10. Trắc nghiệm vui: Câu 1. Chúng ta có thể dùng bao nhiêu khối lệnh if else? a. 2 b. 0 c. 1 d. Nhiều khối như chúng ta muốn. - Đáp án đúng: a, b, c, d. - Giải thích: Miễn là mỗi mệnh đề if else theo sau là một biểu thức logic, chúng ta có thể sử dụng nhiều khối theo ý muốn. Câu 2. Có phải khối lệnh if else yêu cầu có một biểu thức logic? a. Đúng b. Sai - Đáp án đúng: a. - Giải thích: Mỗi khối lệnh if else cần phải có một biểu thức logic; chỉ có khối else là không cần có điều kiện logic. Nếu chúng ta muốn sử dụng khối else, chúng ta cần đặt nó ở cuối câu lệnh if. Đại học Kin h t Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 83 Câu 3. Đoạn chương trình sau in ra gì? static void Main(string[] args) { int a = 5; if (a != 5) Console.Write("a"); else if (a <= 4) Console.Write("b"); else Console.Write("c"); } a. a b. b c. c d. Đáp án khác - Đáp án đúng: c - Giải thích: Vì a bằng 5, (a != 5) và (a <= 5) đều sai (fasle) nên mệnh đề else được thực hiện. Câu 4. Câu lệnh nào dưới đây trả về kết quả true? a. (true && true) == fasle; b. (true && true) == true; c. true && true; d. true && false; - Đáp án đúng: b, c - Giải thích: Phép logic AND trả về true khi và chỉ khi các toán hạng đều true. Ngược lại, kết quả là false. Câu 5. Câu lệnh nào dưới đây trả về kết quả true? a. (true || true) == fasle; b. false || false; c. (true || false) == true; d. true || false; - Đáp án đúng: c, d - Giải thích: Phép logic OR trả về true trừ khi các giá trị đều là false. Phần 6: Mảng Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 84 01. Khai báo mảng Mảng là một tập liên tục có thứ tự các thành phần dữ liệu cùng kiểu được tham chiếu bằng cùng một tên định danh và một chỉ số. Cách khai báo mảng bao gồm kiểu dữ liệu, các cặp dấu ngoặc vuông và tên mảng. - Mã nguồn: static void Main(string[] args) { string[] hoten; int[,] matran; } - Giải thích: Bạn vừa khai báo mảng một chiều hoten có kiểu string và mảng hai chiều matran kiểu int. 02. Khởi tạo Cũng tương tự như biến, để sử dụng mảng, chúng ta cần khai báo và khởi tạo nó. Sử dụng từ khoá new. - Mã nguồn: static void Main(string[] args) { string[] hoten; hoten = new string[10]; } - Giải thích: Bạn vừa khai báo một mảng hoten có kiểu string và khởi tạo mảng gồm 10 phần tử. 03. Rút gọn Có một cách để khai báo, khởi tạo và khởi gán mảng của bạn chỉ trong một câu lệnh. - Mã nguồn: static void Main(string[] args) { string[] ten = new string[3] { "Hoa", "Lan", "Nam" }; } - Giải thích: Bạn vừa kết hợp khai báo và khởi tạo mảng một chiều ten gồm 3 phần tử Hoa, Lan, Nam. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 85 04. Kích thƣớc mảng Xác định kích thước mảng bằng thuộc tính Length. - Mã nguồn: static void Main(string[] args) { string[] hoten = { "Hoa", "Lan" }; Console.WriteLine(hoten.Length); } - Kết quả: 2 - Giải thích: hoten.Length có nghĩa là lấy độ dài, kích thước của mảng hoten. 05. Truy cập vào các phần tử của mảng Công thức chung: [chỉ_số] Trong đó, chỉ_số chỉ vị trí của phần tử trong mảng cần truy xuất, có thể là giá trị, biến hay biểu thức và có giá trị từ 0 đến . - Mã nguồn: static void Main(string[] args) { string[] hoten = { "Hoa", "Lan" }; string ten = hoten[0]; Console.WriteLine(ten); } - Kết quả: Hoa - Giải thích: Bạn vừa truy cập vào phần tử đầu tiên của mảng. 06. Mảng rỗng Một mảng là rỗng khi nó không chứa phần tử nào. - Mã nguồn: static void Main(string[] args) { int[] a = { }; bool r; r = a.Length == 0; if (r) Console.WriteLine("A:0"); } - Kết quả: A:0 - Giải thích: Mảng a là mảng rỗng vì nó không chứa phần tử nào. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 86 07. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây sai về mảng trong C#? a. Mảng lưu giữ tập hợp các phần tử có kích cỡ cố định trong cùng kiểu. b. Mảng lưu giữ tập hợp các phần tử có kích cỡ cố định trong nhiều kiểu khác nhau. c. Mảng được sử dụng để lưu giữ một tập hợp dữ liệu. d. Một mảng là tập hợp các biến cùng kiểu được lưu giữ tại các vị trí bộ nhớ kề nhau. - Đáp án đúng: b. - Giải thích: Mảng lưu giữ tập hợp các phần tử có cùng kích thước cố định trong cùng kiểu. Nói cách khác, một mảng là tập hợp các biến cùng kiểu được lưu giữ tại các vị trí bộ nhớ kề nhau. Câu 2. Phát biểu nào sau đây sai về mảng trong C#? a. C# hỗ trợ mảng đa chiều. Mẫu đơn giản nhất của mảng đa chiều là mảng hai chiều. b. Bạn có thể truyền cho hàm một con trỏ tới một mảng bằng việc xác định tên mảng mà không cần chỉ số của mảng. c. Mảng tham số được sử dụng để truyền một số lượng cho trước của các tham số tới một hàm. d. Lớp Array trong C# được định nghĩa trong System namespace, nó là lớp cơ sở cho tất cả các mảng và cung cấp các thuộc tính và phương thức để làm việc với mảng. - Đáp án đúng: c. - Giải thích: Mảng tham số được sử dụng để truyền một số lượng chưa biết của các tham số tới một hàm. Câu 3. Cách khai báo mảng nào sau đây sai? a. float[] diemThi; b. int[] s = new int[30]; Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 87 c. string[] thu = { “Hai”, “Ba”, “Tư”, “Năm”, “Sáu”, “Bảy”, “Chủ nhật” }; d. char[] kt = new char; - Đáp án đúng: d. Câu 4. Phát biểu nào sau đây là đúng về chỉ số của mảng? a. Chỉ số của mảng thường là một giá trị thuộc kiểu số nguyên mô tả cho thứ tự của phẩn tử trong mảng chứa nó, phần tử đầu tiên của mảng có chỉ số là 0, phần tử thứ hai có chỉ số là 1, cho đến phần tử thứ n có chỉ số là n-1. b. Chỉ số của mảng thường là một giá trị thuộc kiểu số nguyên mô tả cho thứ tự của phẩn tử trong mảng chứa nó, phần tử đầu tiên của mảng có chỉ số là 1, phần tử thứ hai có chỉ số là 2, cho đến phần tử thứ n có chỉ số là n. - Đáp án đúng: a. - Giải thích: Chỉ số của mảng thường là một giá trị thuộc kiểu số nguyên mô tả cho thứ tự trong mảng chứa nó, phần tử đầu tiên của mảng có chỉ số là 0, phần tử thứ hai có chỉ số là 1, cho đến phần tử thứ n có chỉ số là n-1. Câu 5. Chương trình sau đây in ra kết quả gì? static void Main(string[] args) { int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; for (int i = 0; i < a.Length; i++) { if (a[i] % 2 == 0) Console.Write(a[i] + " "); } } a. 0 1 2 3 4 5 6 7 8 9 b. 1 2 3 4 5 6 7 8 9 10 c. 2 4 6 8 10 d. 1 3 5 7 9 - Đáp án đúng: c. Phần 7: Chuỗi (string) 01. Khai báo chuỗi Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 88 Sử dụng từ khoá string để khai báo một chuỗi ký tự. Tất cả các chuỗi đều dẫn xuất từ lớp System.String. - Mã nguồn: static void Main(string[] args) { string st = "Chuỗi ký tự ban đầu"; st = "Chuỗi ký tự mới"; Console.WriteLine(st); } - Kết quả: Chuỗi ký tự mới - Giải thích: Bạn vừa tạo ra chuỗi st với nội dung là Chuỗi ký tự mới. 02. Độ dài chuỗi Để in ra độ dài chuỗi, chúng ta sử dụng thuộc tính Length của lớp System.String. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình"; Console.Write(st1.Length); } - Kết quả: 12 - Giải thích: Thuộc tính length trả về độ dài của chuỗi st. Chuỗi st gồm 12 ký tự. 03. Truy xuất vào phần tử của chuỗi Chúng ta sử dụng cú pháp [chỉ_số] để truy xuất một ký tự trong chuỗi tại vị trí chỉ_số trong chuỗi. chỉ_số có giá trị từ 0 đến size – 1. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình"; Console.Write(st1[0]); } - Kết quả: C - Giải thích: Bạn vừa truy xuất đến vị trí đầu tiên của chuỗi. 04. Nối chuỗi Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 89 Để nối chuỗi, chúng ta dùng toán tử cộng (+) như trong tính toán hoặc dùng hàm ConCat() của lớp System.String. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình "; string st2 = "C#"; string st3 = st1 + st2; string st4 = string.Concat(st1, st2); } - Giải thích: Bạn vừa nối chuỗi st1 và st2 với nhau bằng cách sử dụng toán tử cộng và hàm Concat(). 05. So sánh bằng Để so sánh hai chuỗi có bằng nhau không, chúng ta có thể sử dụng phép so sánh bằng (==) hoặc hàm Equals(). - Mã nguồn: static void Main(string[] args) { string st1 = "C#"; string st2 = "C#"; if (st1 == st2) Console.WriteLine("Bằng nhau"); if (st1.Equals(st2)) Console.WriteLine("Bằng nhau"); if (string.Equals(st1, st2)) Console.WriteLine("Bằng nhau"); } - Kết quả: Bằng nhau - Giải thích: Bạn vừa dùng toán tử so sánh bằng và hàm Equals() để so sánh chuỗi st1 và st2. 06. Sao chép chuỗi Để sao chép chuỗi, chúng ta sử dụng phép gán trực tiếp hoặc sử dụng hàm Copy(). - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình"; string st5 = st1; string st6 = string.Copy(st1); Console.Write(st5 + ", " + st6); Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 90 } - Kết quả: Chương trình, Chương trình - Giải thích: Bạn vừa gán nội dung chuỗi st1 cho chuỗi st5 và sao chép nội dung chuỗi st1 cho chuỗi st6. 07. Chèn Chúng ta sử dụng hàm Insert() để chèn một chuỗi vào chuỗi đã cho. - Mã nguồn: static void Main(string[] args) { string st1 = "Chương trình "; string st2 = "C#"; string st3 = st1 + st2; string st7 = st3.Insert(15, " cho người mới bắt đầu"); Console.Write(st7); } - Kết quả: Chương trình C# cho người mới bắt đầu - Giải thích: Bạn vừa chèn chuỗi “ cho người mới bắt đầu” vào chuỗi st3 tại vị trí 15. 08. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây đúng về kiểu chuỗi (string) trong C#? a. Kiểu chuỗi (string) được dẫn xuất từ lớp System.String b. Chuỗi chứa chuỗi các ký tự, là kiểu tham chiếu c. Giá trị khởi tạo của kiểu string là null. d. Cả 3 đáp án trên đều đúng - Đáp án đúng: d Câu 2. Hàm Contains() trong lớp System.String có chức năng gì? Chọn đáp án đúng. a. Là hàm tĩnh so sánh hai chuỗi. b. Là hàm xác định một chuỗi có chứa một chuỗi con được chỉ định. c. Là hàm tĩnh định dạng một chuỗi sử dụng các thành tố cơ sở và các token giữ chỗ. d. Đáp án khác. - Đáp án đúng: b Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 91 Câu 3. Làm cách nào để thêm một biến a vào chuỗi? a. “Câu hỏi số \(a)!”; b. “Câu hỏi số” + a + “!”; c. “Câu hỏi số $a!”; d. “Câu hỏi số $(a)!”; - Đáp án đúng: b - Giải thích: Chuỗi nội suy khá đơn giản: thêm các biến bằng cách sử dụng '+'. Câu 4. Câu lệnh nào sau đây dùng để tạo biến c có kiểu dữ liệu char? a. string c; b. char c = “a”; c. char c = „c‟; d. char c = „a‟; - Đáp án đúng: c, d. - Giải thích: Kiểu ký tự char chỉ có thể giữ một ký tự đơn. Câu 5. Làm cách nào để lấy độ dài một chuỗi st? a. st.Count; b. st.Size; c. st.Length(); d. st.Length; - Đáp án đúng: d. - Giải thích: Chúng ta có thể lấy độ dài của chuỗi hay đếm số lượng ký tự trong chuỗi bằng cách sử dụng thuộc tính Length. Câu 6. Đoạn chương trình sau in ra kết quả gì? static void Main(string[] args) { string s1 = "Bao giờ"; string s2 = "cho tới tháng 10?"; string s3 = s1.Insert(7, " "); Console.Write(string.Concat(s3, s2)); } a. cho tới tháng 10?Bao giờ Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 92 b. Bao giờcho tới tháng 10? c. Bao giờ cho tới tháng 10? d. Đáp án khác - Đáp án đúng: c - Giải thích: Chúng ta dùng hàm Insert() để chèn chuỗi “ “ vào s1 tại vị trí 7. Dùng hàm Concat() để cộng chuỗi s3 và s2. Phần 8: Hàm 01. Write Một phương thức là một nhóm lệnh cùng nhau thực hiện một tác vụ. System.Console.Write() là một phương thức được dùng khá thường xuyên. - Mã nguồn: static void Main(string[] args) { string st = "Sử dụng hàm in dữ liệu"; Console.Write(st); } - Kết quả: Sử dụng hàm in dữ liệu - Giải thích: Bạn vừa in chuỗi st ra màn hình. 02. Định nghĩa phƣơng thức Đôi lúc chúng ta muốn giảm những đoạn mã nguồn lặp lại hay sử dụng lại mã nguồn trong nhiều chương trình, chúng ta sử dụng hàm. - Mã nguồn: static void loiChao() { string ten = "Hoa"; Console.Write("Xin chào " + ten); } static void Main(string[] args) { loiChao(); } - Kết quả: Xin chào Hoa - Giải thích: Một hàm bắt đầu với kiểu trả về (đối với void thì không có kiểu trả về) và một tên, tiếp theo là dấu ngoặc đơn. Các đoạn mã giữa '{}' được thực hiện khi Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 93 chúng ta gọi phương thức. Lưu ý rằng các phương pháp này đòi hỏi các đối tượng để làm việc. 03. Tại sao sử dụng hàm? Nếu chúng ta muốn sử dụng một khối mã thường xuyên hơn, đó là một ý tưởng tốt để đặt nó trong một hàm. Một khi nó được viết, chúng ta có thể sử dụng lại bất cứ khi nào chúng ta muốn. - Mã nguồn: static void phepToan(int so) { Console.Write(so * 2); } static void Main(string[] args) { phepToan(4); } - Kết quả: 8 - Giải thích: Đối số của hàm được đặt trong dấu ngoặc đơn sau tên hàm. Trong trường hợp này, chúng ta có thể sử dụng chúng như các biến thông thường. 04. Hàm nhiều tham số Chúng ta có thể sử dụng hàm có nhiều hơn một đối số. - Mã nguồn: static void Chao(string s1, string s2) { string s = "Chào " + s1 + "! Chào " + s2 + "!"; Console.Write(s); } static void Main(string[] args) { Chao("Hoa", "Lan"); } - Kết quả: Chào Hoa! Chào Lan! - Giải thích: nếu chúng ta muốn sử dụng nhiều đối số (hay còn gọi là tham số), chúng ta cần phải tách chúng bằng dấu phẩy. 05. Kết quả trả về Đôi khi, hàm cần có kết quả trả về. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 94 - Mã nguồn: static int phepToan(int so) { int s1 = so * 2; return s1; } static void Main(string[] args) { int s2 = phepToan(20); Console.Write(s2); } - Kết quả: 40 - Giải thích: Nếu chúng ta muốn trả về một giá trị nào đó, chúng ta cần phải xác định kiểu trả về của nó. Chúng ta có thể gán giá trị trả về một biến. 06. Truyền giá trị Nhận biết rằng một phương pháp không thay đổi các biến mà nó nhận được là các đối số. - Mã: static void cong5(int so) { so += 5; Console.Write(so); } static void Main(string[] args) { int s = 6; cong5(s); Console.Write(" " + s); } - Kết quả: 11 6 - Giải thích: Khi chúng ta truyền s vào hàm cong5() như là một đối số, so sẽ mang giá trị của s. Nhưng so chỉ tồn tại trong hàm cong5(): bất cứ điều gì chúng ta làm gì với nó, s sẽ không thay đổi. 07. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây sai về hàm/ phương thức trong C#? a. Một phương thức là một nhóm lệnh cùng nhau thực hiện một tác vụ. b. Mỗi chương trình C# có ít nhất một lớp với một phương thức là Main. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 95 c. Hàm là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ. d. Cả 3 đáp án trên đều sai. - Đáp án đúng: d. - Giải thích: Hàm là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ, cùng thực hiện một tác vụ. Mỗi chương trình C# có ít nhất một lớp với một phương thức là Main. Câu 2. Phát biểu nào sau đây sai khi nói về lợi ích của hàm/ phương thức trong C#? a. Giảm nhẹ công việc cho người lập trình. b. Một chương trình càng có nhiều hàm càng tốt. c. Giảm những đoạn mã nguồn lặp lại. d. Sử dụng lại mã nguồn trong nhiều chương trình. - Đáp án đúng: b. - Giải thích: Hàm và việc sử dụng lại hàm trong nhiều chương trình giúp giảm những đoạn mã nguồn lặp đi lặp lại, do đó tiết kiệm thời gian và công sức hơn. Câu 3. Hàm có thể thuộc vào các dạng nào? Chọn đáp án đúng nhất. a. Tính toán và trả ra một giá trị (kết quả) dựa trên các tham số đầu vào. b. Thay đổi giá trị của các tham số đầu vào và trả ra một giá trị (thông báo tình trạng). c. Không trả ra giá trị nào: thay đổi các tham số đầu vào, thay đổi giá trị toàn cục hay thực hiện một vài hành vi nào đó (in dữ liệu ra màn hình). d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: d. Câu 4. Phát biểu nào sau đây đúng về tham số mặc định của hàm/ phương thức trong C#? a. Các giá trị mặc định được sử dụng khi người sử dụng cung cấp một giá trị cho tham số của hàm. Đại học K n h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 96 b. Phải được đặt sau các tham số được xác định giá trị mặc định. c. Các giá trị mặc định được sử dụng khi người sử dụng không cung cấp một giá tị cho tham số của hàm. d. Phải được đặt sau các tham số không được xác định giá trị mặc định. - Đáp án đúng: c, d. - Giải thích: Các giá trị mặc định được sử dụng khi người sử dụng không cung cấp một giá trị cho tham số của hàm; phải được đặt sau các tham số không được xác định giá trị mặc định. Câu 5. Chương trình sau đây in ra kết quả gì? class Program { static int pheptoan(int so) { return so * 2; } static void Main(string[] args) { Console.Write(pheptoan(10 % 2 + 5)); } } a. 2 b. 5 c. 20 d. 10 - Đáp án đúng: d. Phần 9: Vòng lặp 01. While Vòng lặp là một cấu trúc hoạt động cùng nguyên lý với điều kiện (if else). Một vòng lặp cho phép thực hiện các dòng lệnh (hay các instruction) nhiều lần. Vòng lặp while được thực hiện khi biểu thức điều kiện được đưa ra là đúng (true). - Mã nguồn: static void Main(string[] args) Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 97 { int dem = 0; while (dem < 2) Console.Write(dem); } - Kết quả: 2 - Giải thích: Bạn phải đảm bảo rằng biểu thức điều kiện phải sai (false) tại một thời điểm nào đó. Nếu không chương trình sẽ chạy vòng lặp mãi mãi, hoặc xảy ra lỗi. 02. Do while Vòng lặp do while làm việc trong cùng một cách thức, ngoại trừ các khối lệnh được thực hiện ít nhất một lần trước khi điều kiện được kiểm tra. - Mã nguồn: static void Main(string[] args) { int dem = 5; do { dem++; } while (dem < 5); Console.Write(dem); } - Kết quả: 6 - Giải thích: Chương trình sẽ thực hiện vòng lặp 1 lần vì biểu thức điều kiện (dem<5) là false. Vòng lặp do while thực sự rất hữu ích trong một số trường hợp. 03. For tăng Vòng lặp for trong C# có dạng: for (statement_1; condition; statement_2) { statement_3; } Trong đó:  statement_1: được dùng để khởi tạo và chỉ được thực hiện 1 lần.  condition: là biểu thức kiểm tra điều kiện lặp lại.  statement_2: được dùng để cập nhật/ thay đổi giá trị của condition.  statement_3: là lệnh đơn hoặc lệnh kép mà ta muốn được thực hiện nhiều lần. - Mã: Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 98 static void Main(string[] args) { for (int i = 1; i <= 3; i++) Console.Write(i); } - Kết quả: 123 - Giải thích: Mỗi lần vòng lặp for được thực hiện, chương trình sẽ kiểm soát sự thay đổi giá trị của i: từ 1 đến 2, đến 3 và như vậy, cho đến khi điều kiện chạy trở thành false. 04. For giảm - Mã nguồn: static void Main(string[] args) { for (int i = 5; i > 0; i--) Console.Write(i); } - Kết quả: 54321 05. For - Mã nguồn: static void Main(string[] args) { int tong = 0; string s = "0"; for (int i = 1; i < 3; i++) { tong += i; s += "+" + i; } Console.Write(s + "=" + tong); } - Kết quả: 0+1+2=3 - Giải thích: Mỗi lần vòng lặp được thực thi, các biến điều khiển i được cộng thêm vào tong. s được dùng để ghi lại giá trị đó. 06. Fibonacci Đã bao giờ bạn nghe nói về dãy số fibonacci? Đó là một dãy số mà mỗi số là tổng của 2 số đứng trước. - Mã nguồn: Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 99 static void Main(string[] args) { int a = 1; int b = 1; Console.Write(a + "–" + b); for (int i = 1; i < 5; i++) { int c = a + b; a = b; b = c; Console.Write("–" + c); } } - Kết quả: 1 – 1 – 2 – 3 – 5 – 8 07. Vòng lặp lồng nhau - Mã nguồn: static void Main(string[] args) { for (int x = 1; x < 5; x++) { Console.Write(x + ": "); int y = x; while (y <= 4) { Console.Write(y); y++; } Console.Write("; "); } } - Kết quả: 1: 1234; 2: 234; 3: 34; 4: 4; - Giải thích: Vòng lặp for chạy một lần từ 1 đến 4. Vòng lặp while chạy 4 lần từ x tới 4. 08. Biến điều khiển - Mã nguồn: static void Main(string[] args) { int dem = 1; while (dem <= 3) { Console.Write(dem); dem++; } Console.Write(" & "); Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 100 for (int i = 3; i >= 1; i--) { Console.Write(i); } } - Kết quả: 123 & 321 - Giải thích: Biến điều khiển như dem và i được sử dụng để điều chỉnh số lần lặp được thực hiện; chúng đang tăng hoặc giảm ở mỗi lần chạy. 09. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây là đúng về vòng lặp trong C#? a. Các vòng lặp khác nhau dùng cho những trường hợp khác nhau. b. Vòng lặp chạy mãi mãi, vô hạn. c. Vòng lặp giúp tiết kiệm thời gian và công sức. d. Vòng lặp tự động hóa các công việc lặp đi lặp lại. - Đáp án đúng: a, c, d. - Giải thích: Vòng lặp tự động hóa các công việc lặp đi lặp lại, do đó, tiết kiệm thời gian và công sức. Có nhiều loại vòng lặp khác nhau nhưng không có loại nào chạy vô hạn. Câu 2. Phát biểu nào sau đây đúng về vòng lặp while trong C#? a. While lặp lại một hoặc một nhóm các lệnh trong khi điều kiện đã cho là đúng (true). b. While lặp lại một hoặc một nhóm các lệnh trong khi điều kiện đã cho là sai (false). c. While kiểm tra điều kiện trước khi thực hiện thân vòng lặp. d. While kiểm tra điều kiện sau khi thực hiện thân vòng lặp. - Đáp án đúng: a, c. - Giải thích: Vòng lặp while kiểm tra điều kiện đúng trước khi thực hiện lặp đi lặp lại một hoặc một nhóm các lệnh. Câu 3. Phát biểu nào sau đây là đúng về vòng lặp do while trong C#? a. Giống vòng lặp while nhưng kiểm tra điều kiện ở cuối thân vòng lặp. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 101 b. Thực thi câu lệnh ít nhất 1 lần đến khi điều kiện không được thỏa mãn. c. Luôn luôn là vòng lặp vô hạn. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: a, b. - Giải thích: Vòng lặp do while tương tự vòng lặp while, ngoại trừ kiểm tra điều kiện ở cuối thân vòng lặp. Do đó, do while thực hiện câu lệnh ít nhất 1 lần đến khi điều kiện không được thỏa mãn. Câu 4. Tại sao việc đảm bảo rằng điều kiện chạy phải trở thành false sau một số lần lặp hữu hạn là quan trọng? a. Nếu không đảm bảo điều đó, các vòng lặp sẽ chạy vô hạn. b. Điều này không quan trọng. c. Nếu không đảm bảo điều đó, mã nguồn sẽ không được biên dịch. d. Nó quyết định khi nào thoát khỏi vòng lặp. - Đáp án đúng: a, d. - Giải thích: Nếu điều kiện chạy sai thì chương trình sẽ thoát khỏi vòng lặp, vì thế vòng lặp sẽ không chạy vô hạn. Câu 5. Chương trình sau in ra kết quả gì? static void Main(string[] args) { int x = 0; while (x < 10) { Console.Write(x + " "); x++; } } a. 0 b. 0 1 2 3 4 5 6 7 8 9 10 c. 1 2 3 4 5 6 7 8 9 10 d. 0 1 2 3 4 5 6 7 8 9 - Đáp án đúng: d. - Giải thích: Vòng lặp while sẽ chạy từ 0 đến 9 và dừng lại khi x tăng lên đến 10. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 102 Phần 10: Cấu trúc 01. Cấu trúc là gì? Trong C#, một cấu trúc (structure) là một kiểu dữ liệu. Nó giúp bạn tạo một biến đơn mà giữ dữ liệu liên quan của các kiểu dữ liệu đa dạng. Sử dụng từ khóa struct để tạo một cấu trúc. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { } } - Giải thích: Chương trình vừa tạo một kiểu dữ liệu mới ToaDo, nó cũng tương tự như các kiểu bình thường (int, string, float, ). Các cấu trúc được khai báo trong class Program và ngoài các hàm. Dễ thấy rằng khai báo một cấu trúc chỉ như một cái “khuôn” (không được cấp phát bộ nhớ). 02. Tạo cấu trúc Sau khi đã tạo một cấu trúc, chúng ta cần khai báo các biến. Mỗi biến được gọi là một thành viên hay trường. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; public float p; }; static void Main(string[] args) { } } Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 103 - Giải thích: Các khai báo biến có thể có bất kỳ kiểu gì ngoại trừ kiểu struct đang được khai báo. 03. Truy xuất cấu trúc Để truy xuất thành phần của cấu trúc, chúng ta sử dụng toán tử chấm (.). Cú pháp: tên_cấu_trúc. tên_thành_phần; - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { ToaDo toaDo; toaDo.X = 10; toaDo.Y = 12; } } - Giải thích: Khi khai báo biến, các biến (thành phần) không được khởi gán giá trị và chúng chỉ có thể được truy xuất một khi đã được gán dữ liệu. 04. Gán Sử dụng toán tử gán “=” để gán các biến có cùng kiểu cấu trúc. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { ToaDo toaDo; toaDo.X = 10; toaDo.Y = 12; ToaDo td = toaDo; Console.Write(td.X + ", " + td.Y); } } Đại học Ki h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 104 - Kết quả: 10, 12 - Giải thích: Chương trình vừa gán thông tin của toaDo cho td bằng câu lệnh gán ToaDo td=toaDo; 05. Gán từng thành phần Đôi khi chúng ta chỉ muốn gán (sao chép) một số thành phần nhất định của struct. - Mã nguồn: class Program { public struct ToaDo { public int X; public int Y; }; static void Main(string[] args) { ToaDo toaDo; toaDo.X = 10; toaDo.Y = 12; ToaDo td; td.X = toaDo.X; Console.Write(td.X); } } - Kết quả: 10 - Giải thích: Chương trình vừa gán thông tin của td.X cho toaDo.X bằng câu lệnh td.X = toaDo.X; 06. Mảng kiểu struct Bây giờ chúng ta tìm hiểu cách biểu diễn mảng cấu trúc Ngày tháng gồm 3 phần tử. Hãy in ra màn hình 3 bộ giá trị sau: 1/1/2016 – 2/2/2016 – 3/3/2016 - Mã nguồn: class Program { struct NgayThang { public int ngay; public int thang; public int nam; }; Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 105 static void Main(string[] args) { NgayThang[] nt = new NgayThang[3]; nt[0].ngay = 1; nt[0].thang = 1; nt[0].nam = 2016; nt[1].ngay = 2; for (int i = 0; i < 3; i++) Console.Write(nt[i].ngay + "/ " + nt[i].thang + "/ " + nt[i].nam + " – "); } } - Kết quả: 1/1/2016 – 2/2/2016 – 3/3/2016 07. Cấu trúc lồng nhau Cấu trúc có thể chứa cấu trúc. Điều này đúng không? - Mã nguồn: class Program { struct NgayThang { public int ngay; public int thang; }; struct Lich { public NgayThang ngay; }; static void Main(string[] args) { } } - Giải thích: Tương tự lệnh điều kiện if else hay vòng lặp for, cấu trúc có thể chứa cấu trúc, hay còn gọi là cấu trúc lồng nhau. Lưu ý, cấu trúc có thể chứa cấu trúc nhưng không thể chứa chính nó. 08. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây sai về kiểu cấu trúc (struct) trong C#? a. struct cho phép lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau vào một nơi, chỉ đại diện bằng một tên duy nhất. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 106 b. struct cho phép lưu trữ thông tin của một kiểu dữ liệu duy nhất vào nhiều nơi khác nhau. c. struct là kiểu dữ liệu do người dùng định nghĩa. d. Kiểu struct có bản chất giống như các kiểu dữ liệu thông thường như int, char, float, - Đáp án đúng: b. - Giải thích: struct là kiểu dữ liệu do người dùng định nghĩa, cho phép lưu trữ thông tin của nhiều kiểu dữ liệu khác nhau vào một nơi. Về bản chất, struct cũng giống như các kiểu dữ liệu thông thường khác. Câu 2. Phát biểu nào sau đây đúng về struct trong C#? a. struct không được cấp phát bộ nhớ khi khai báo. b. struct luôn được cấp phát bộ nhớ khi khai báo. c. Các struct được khai báo ngoài class Program. d. Các khai báo biến (variable declarations) có thể có bất kỳ kiểu gì ngoại trừ kiểu struct đang được khai báo. - Đáp án đúng: a, d. Câu 3. Phát biểu nào sau đây là sai về struct trong C#? a. Bộ nhớ không được cấp phát cho khai báo struct, mà chỉ cấp phát cho các khai báo biến. b. Khi khai báo biến, các thành phần không được khởi gán giá trị. c. Các thành phần chỉ có thể được truy xuất một khi đã được gán dữ liệu. d. Cả 3 đáp án trên đều sai. - Đáp án đúng: d. - Giải thích: Khi khai báo struct, bộ nhớ sẽ không được cấp phát cho khai báo struct mà chỉ cho khai báo biến. Các thành phần không được khởi gán giá trị khi khai báo biến và chúng chỉ có thể được truy xuất khi đã gán dữ liệu. Câu 4. Toán tử nào được dùng để truy xuất thành phần của struct? a. Dấu hai chấm (:) Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 107 b. Dấu chấm (.) c. Dấu chấm hỏi (?) d. Dấu chấm than (!) - Đáp án đúng: b - Giải thích: Toán tử dấu chấm được dùng để truy xuất thành phần của struct. Câu 5. struct nào sau đây được khai báo đúng? a. struct A { }; b. struct B ( ) { }; c. struct C [ ] { }; d. struct D { int x; }; - Đáp án đúng: a, d. Phần 11: Kiểu liệt kê 01. Enum là gì? Kiểu liệt kê (enumeration) là một tập những hằng số nguyên được đặt tên. Cú pháp khai báo: enum identifier[:base-type] { enumeration_list }; Trong đó:  base-type: là kiểu dữ liệu của mỗi thành phần (mặc định là int).  enumeration_list: sử dụng dấu phẩy để phân cách các định danh. o Định danh đầu tiên được gán giá trị 0, sau đó tăng lên một cho những định danh sau. o Có thể xác định giá trị cho các định danh này. - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; enum Month { January = 1, February = 2, March = 3, April = 4, May = 5, June = 6, July = 7, August = 8, September = 9, October = 10, November = 11, December = 12 }; static void Main(string[] args) { } } Đại học Ki h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 108 - Giải thích: Chúng ta có thể tạo ra một kiểu liệt kê với từ khóa enum. Không có vấn đề gì nếu chúng ta tạo ra một lớp (class), một cấu trúc (struct) hoặc một liệt kê (enum) với cú pháp như nhau. 02. Khai báo enum - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { } } - Giải thích: enum được khai báo trong lớp class Program và ngoài các hàm. Nói cách khác, enum là thành phần của lớp. 03. Nhập liệu số kiểu enum - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { Weekday day; Console.Write("Nhập vào thứ dạng số : "); day = (Weekday)Convert.ToInt32(Console.ReadLine()); } } - Giải thích: Định danh đầu tiên được gán giá trị 0. Trong trường hợp này, Sunday = 0, Monday = 1, 04. Nhập liệu chuỗi kiểu enum - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { Weekday day; Console.Write("Nhập vào thứ dạng chuỗi: "); Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 109 day = (Weekday)Enum.Parse(typeof(Weekday), Console.ReadLine()); } } - Giải thích: Định danh đầu tiên được gán giá trị 0. Trong trường hợp này, Sunday = 0, Monday = 1, 05. Lệnh lựa chọn switch switch hoạt động giống câu lệnh if. - Mã nguồn: static void Main(string[] args) { int x = 0; switch (x) { case 0: Console.Write("x=0"); break; case 1: Console.Write("x=1"); break; default: Console.Write("x không bằng 0, cũng không bằng 1"); break; } } - Kết quả: x=0 - Giải thích: switch lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến hay một biểu thức. 06. Switch case - Mã nguồn: class Program { enum Weekday { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; static void Main(string[] args) { Weekday d = Weekday.Sunday; switch (d) { case Weekday.Sunday: Console.Write("Chủ nhật"); break; case Weekday.Monday: Console.Write("Thứ hai"); break; case Weekday.Tuesday: Console.Write("Thứ ba"); break; case Weekday.Wednesday: Console.Write("Thứ tư"); break; case Weekday.Thursday: Console.Write("Thứ năm"); break; case Weekday.Friday: Console.Write("Thứ sáu"); break; default: Console.Write("Thứ bảy"); break; } } Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 110 } - Kết quả: Chủ nhật 07. Trắc nghiệm vui Câu 1. Phát biểu nào sau đây đúng về kiểu liệt kê (enum) trong C#? a. Kiểu liệt kê là một tập hợp các hằng số nguyên được đặt tên. b. Kiểu liệt kê là một tập hợp liên tục có thứ tự các thành phần dữ liệu cùng kiểu được tham chiếu bằng cùng một tên định danh và một chỉ số. c. Kiểu liệt kê là kỹ thuật cho phép chia nhỏ một chương trình lớn ra nhiều chương trình nhỏ. d. Cả 3 đáp án trên đều đúng. - Đáp án đúng: a. - Giải thích: Kiểu liệt kê là một tập những hằng số nguyên được đặt tên. Câu 2. Sử dụng dấu gì để phân cách các định danh của enum trong C#? a. Dấu gạch chéo (/) b. Dấu chấm (.) c. Dấu phẩy (,) d. Dấu chấm phẩy (;) - Đáp án đúng: c. - Giải thích: Sử dụng dấu phẩy để phân cách các định danh trong kiểu enum. Câu 3. Phát biểu nào sau đây là đúng về enum trong C#? a. Một biến được khai báo kiểu liệt kê luôn nhận giá trị đầu tiên trong tập các giá trị của kiểu đó. b. Một biến được khai báo kiểu liệt kê có thể nhận giá trị bất kỳ trong tập các giá trị của kiểu đó. c. Định danh đầu tiên được gán giá trị 0, sau đó tăng lên một cho những định danh sau, có thể xác định giá trị cho các định danh này. d. Định danh đầu tiên được gán giá trị 1, sau đó tăng lên một cho những định danh sau, có thể xác định giá trị cho các định danh này. - Đáp án đúng: b, c. Đại học Kin h tế Hu ế Khóa luận tốt nghiệp GVHD: ThS. Lê Viết Mẫn Sinh viên thực hiện: Trương Thị Hồng Nhung 111 - Giải thích: Một biến kiểu enum có thể nhận một giá trị bất kỳ trong tập hợp các giá trị của kiểu đó. Định danh đầu tiên được gán giá trị 0 và tăng dần lên 1 đơn vị cho những định danh tiếp theo. Giá trị của các định danh có thể thay đổi được. Câu 4. Khai báo nào sau đây sai? a. enum A { }; b. enum B { mot, hai, ba }; c. enum C { mot = 1; hai = 2; ba = 3 }; d. enum D { x = 5, y = 10, z = 11 }; - Đáp án đúng: c - Giải thích: Hãy nhớ rằng các định danh trong enum được phân cách nhau bởi dấu phẩy (,). Câu 5. Phát biểu nào sau đây đúng về lệnh lựa chọn switch trong C#? a. switch lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến hay một biểu thức. b. Một lệnh switch trong C# cho một biến được kiểm tra một cách bình đẳng trong danh sách các giá trị. c. Mỗi giá trị được gọi là một case – trường hợp và biến được chuyển tới được kiểm tra cho mỗi trường hơp switch. d. Cả 3 đáp án trên đều sai. - Đáp án đúng: a, b, c. - Giải thích: switch lựa chọn dựa trên giá trị nguyên, chuỗi, ký tự hoặc bool của một biến hay một biểu thức.Mỗi giá trị được gọi là một case - trường hợp và biến được chuyển tới được kiểm tra cho mỗi trường hợp switch. Đại học K n h tế Hu ế

Các file đính kèm theo tài liệu này:

  • pdftruonghongnhung_3147.pdf
Luận văn liên quan