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ế
113 trang |
Chia sẻ: phamthachthat | Lượt xem: 1592 | Lượt tải: 3
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:
- truonghongnhung_3147.pdf