2. 2
Nội dung:
1. Khai báo và tạo mảng 1 chiều
2. Truy xuất các phần tử trong mảng 1 chiều
3. Nhập DL vào mảng và xuất DL từ mảng
4. Xử lý mảng 1 chiều dùng for và foreach
5. Mảng 2 chiều và mảng nhiều chiều
6. Sao chép mảng
4. 4
Mảng là gì?
Mảng là dãy các phần tử có cùng tên, cùng
kiểu.
Thứ tự của các phần tử là cố định
Kích thước/số phần tử của mảng là cố định.
0 1 2 3 4
mảng có
5 phần
tử
Chỉ số
Phần tử
… … … … …
5. 5
Khai báo mảng 1 chiều
<kiểu DL> [ ] <tên mảng>;
Ngoặc vuông [] nghĩa là mảng
Ví dụ:
Khai báo mảng số nguyên:
Khai báo mảng chuỗi:
Khai báo mảng số thực:
int [] A;
string [] ten;
float [] luong;
6. 6
Tạo mảng
<tên mảng> = new <kiểu DL> [số p.tử]
Ví dụ tạo mảng A có 5 phần tử nguyên:
A = new int[5];
A
0 1 2 3 4
… … … … …
7. 7
Tạo và gán giá trị cho mảng
Tạo và gán giá trị cho mảng có thể làm đồng
thời:
Toán tử new không cần thiết khi sử dụng dấu
ngoặc nhọn khởi tạo mảng.
A = {2, 4, 6, 8, 10};
A
0 1 2 3 4
2 4 6 8 10
8. 8
Ví dụ: Tạo mảng
Tạo mảng chứa tên của các thứ trong
tuần
string[] daysOfWeek =
{"Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday","Sunday"};
10. 10
Làm thế nào để truy xuất phần tử mảng?
Các phần tử trong mảng được truy xuất thông
qua các chỉ số được đặt trong cặp dấu ngoặc
vuông [] (indexer)
Mảng A có n phần tử thì khi truy xuất ta có thể viết
A[i] với i = 0 --> n-1
Chiều dài/số phần tử của mảng A là A.Length
Phần tử đầu tiên có chỉ số là 0
Phần tử cuối cùng có chỉ số A.Length-1
11. 11
Ví dụ
Tạo mảng b là đảo ngược nội dung mảng a
int[] a = new int[] {1,2,3,4,5,6,7,8,9,10};
int n = a.Length; //n là chiều dài của mảng a
// Khai báo mảng b
int[] b = new int[n];
// Gán giá trị cho mảng b và in ra
for (int i = 0; i < n; i++)
{
b[i] = a[n-i-1];
Console.Write(b[i]+ " ");
}
13. 13
Đọc dữ liệu từ bàn phím vào mảng
Đầu tiên nhập từ bàn phím chiều dài của mảng
Kế tiếp, khai báo mảng có kích thước đã nhập và
nhập số liệu cho các phần tử của mảng
Console.Write("Nhap so phan tu cua mang: ");
int n = int.Parse(Console.ReadLine());
int[] a = new int[n];
for (int i=0; i<n; i++)
{
a[i] = int.Parse(Console.ReadLine());
}
14. 14
Ví dụ:
Đọc mảng nguyên có n phần tử từ bàn phím và
kiểm tra nó có đối xứng không?
bool dx = true;
for (int i=0; i<(a.Length+1)/2; i++)
{ if (a[i] != a[n-i-1])
{
dx = false;
}
}
1 2 3 2 1
1 2 2 1 1 2 3 3 2 1
15. 15
In mảng ra màn hình
Xử lý các phần tử của mảng
In các phần tử ra màn hình
Tách các phần tử bằng khoảng trắng
hoặc in xuống dòng
string[] a = {"one", "two", "three", "four", "five"};
for (int i = 0; i < a.Length; i++)
{
// In mỗi phần tử mảng a trên mỗi dòng riêng biệt
Console.WriteLine("a[{0}] = {1}", i, a[i]);
}
17. 17
Xử lý mảng: lệnh for
Dùng vòng lặp for để xử lý mảng khi:
Cần theo dõi các chỉ số
Xử lý không nhất thiết theo trình tự từ phần đầu đến
phần cuối
Trong thân vòng sử dụng phần tử của mảng thông
qua chỉ số vòng lặp (<tên mảng>[<chỉ số>]):
for (int i = 0; i < a.Length; i++)
{
b[i] = a[i] * a[i];
}
18. 18
Ví dụ:
In mảng số nguyên đảo ngược thứ tự
Tạo các phần tử của mảng bằng các chỉ số nhân với 5.
Console.WriteLine("Mang dao nguoc: ");
for (int i = a.Length-1; i >= 0; i--)
{
Console.Write(a[i] + " ");
}
// Kết quả: 10 9 8 7 6 5 4 3 2 1
for (int i = 0; i < a.Length-1; i++)
{
a[i] = i * 5;
}
19. 19
Xử lý mảng: lệnh foreach
Cú pháp:
Sử dụng khi không dùng chỉ mục
Tất cả các phần tử được truy xuất cùng một cách
Các phần tử không thể được cập nhật (read only)
foreach (<kiểu DL> <tên biến> in <tên mảng>)
{
<lệnh>;
}
20. 20
Ví dụ:
In tất cả các phần tử của mảng chuỗi:
string[] thudo =
{
"Ha Noi",
"Washington",
"London",
"Paris",
"Moscow"
};
foreach (string td in thudo)
{
Console.WriteLine(td);
}
21. 21
Ví dụ:
In các hàng dấu * tương ứng với các giá trị của
mảng:
22. 22
Tóm tắt
Mảng là một dãy các phần tử cùng kiểu, có độ
dài cố định.
Các phần tử của mảng có thể được truy xuất
thông qua chỉ số
Có thể đọc và cập nhật
Việc xử lý các phần tử trong mảng có thể được
thực hiện với các vòng lặp for và foreach
23. 23
Bài tập ở lớp (1)
1. Viết một chương khai báo mảng gồm 20 số
nguyên và khởi tạo mỗi phần tử bằng chỉ số
của nó nhân với 10. In mảng ra màn hình
2. Viết chương trình tìm số lớn nhất, nhỏ nhất
trong mảng
24. 24
Bài tập ở lớp (2)
3. Viết chương trình sắp xếp một mảng các số
nguyên sử dụng thuật toán merge sort
(Wikipedia).
4. Viết một chương trình tìm tất cả các số nguyên
tố trong khoảng [1 ... 10 000 000]. Sử dụng
thuật toán sàng Eratosthenes (tìm trong
Wikipedia).
25. 25
Bài tập ở lớp (3)
5. Viết chương trình đọc hai số N và K và tạo ra tất
cả các kết hợp của các phần tử K từ tập [1..N].
Ví dụ: N = 3, K = 2 {1, 1}, {1, 2}, {1, 3}, {2, 1},
{2, 2}, {2, 3}, {3, 1}, {3, 2}, {3, 3}
6. Viết chương trình đọc hai số N và K và tạo ra tất
cả các kết hợp của các phần tử K khác biệt từ tập
[1..N]. Ví dụ:
N = 5, K = 2 {1, 2}, {1, 3}, {1, 4}, {1, 5}, {2, 3},
{2, 4}, {2, 5}, {3, 4}, {3, 5}, {4, 5}
26. 26
Bài tập về nhà
Làm các bài tập trong file BaiTapMang.docx
trừ các bài đã sửa trên lớp
Editor's Notes
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*
(c) 2007 National Academy for Software Development - http://academy.devbg.org. All rights reserved. Unauthorized copying or re-distribution is strictly prohibited.*