5.1. Khái niệm mảng
- Mảng là một tập hợp các phần tử cố định có cùng
một kiểu, gọi là kiểu phần tử. Kiểu phần tử có thể là có các kiểu bất kỳ: ký
tự, số, chuỗi ký tự…;
- Mảng có 2 loại: mảng 1 chiều và mảng đa chiều.
+ Mảng 1
chiều là một nhóm các phần tử có cùng kích thước, cùng kiểu dữ liệu. Những phần
tử này được lưu liên tiếp với nhau trong bộ nhớ. Số phần tử của mảng gọi là
kích thước của mảng.
+ Mảng đa chiều là mảng có từ 2 chiều trở lên. Điều đó có nghĩa là mỗi phần tử của mảng là một mảng khác.
5.2.
Khai báo mảng
5.2.1.
Khai báo mảng 1 chiều
Cú pháp : <Tên kiểu dữ liệu> <Tên mảng> [ <số phần tử>];
Trong
đó:
- Tên kiểu dữ liệu: là kiểu
dữ liệu của mỗi phần tử trong mảng.
- Tên mảng: là tên được đặt
theo qui tắc đặt tên trong C
- Số phần tử: là 1 hằng số
nguyên, cho biết số lượng phần tử tối đa trong mảng.
Ví
dụ 5.1:
//Khai báo mảng 1 chiều tên a
có 20 phần tử kiểu số
nguyên int.
int
a[20];
//Khai báo mảng 1 chiều tên b
có 10 phần tử kiểu ký
tự char.
char
b[10];
- Mỗi phần tử của mảng 1
chiều được truy nhập giá trị thông qua chỉ số (index) của nó.
Ví
dụ 5.2:
int
a[5];
Chỉ số và phần tử của mảng 1
chiều a được biểu diễn như sau:
Phần tử trong mảng |
a[0] |
a[1] |
a[2] |
a[3] |
a[4] |
Chỉ số mảng |
0 |
1 |
2 |
3 |
4 |
Phần
tử và chỉ số của mảng bắt đầu từ 0 cho nên chỉ số để truy xuất phần tử cuối
cùng của mảng là 4. Như vậy, nếu một mảng có n phần tử thì chỉ số cuối cùng của
mảng là (n-1).
-
Khởi tạo giá trị các phần tử mảng ngay khi mảng được khai báo. Các giá trị hằng
được đặt giữa một cặp ngoặc nhọn ({}), các phần tử cách nhau bằng dấu phẩy (,).
Ví dụ 5.7:
int
a[5] = {5, 15, 20, 25, 30};
-
Khởi tạo mảng với kích thước của mảng không cần xác định, chương trình C sẽ đếm
số phần tử được khởi động và lấy đó làm kích thước.
Ví dụ 5.8: Ta khai báo
double b[] = {4.5, 7.5, 8.2, 4.32};
- Nếu ta khai báo :
int a[10] = {2, 5, 6, 1,
0, 6, 7};
5.2.2. Khai
báo mảng 2 chiều
Mảng 2 chiều m dòng n cột được xem như là 1 bảng
hình chữ nhật chứa m*n phần tử cùng kiểu dữ liệu (còn gọi là ma trận m*n). Nó
sự mở rộng trực tiếp của 1 chiều.
Cú pháp:
<tên kiểu dữ liệu> <tên mảng> [<số dòng>] [<số cột>];
Ví dụ 5.3: Ta xét bảng điểm 3 môn
học của các sinh viên như sau:
Tên |
Toán |
Lý |
Hóa |
Minh |
7 |
8 |
10 |
Lan |
4 |
6 |
8 |
Nhật |
9 |
10 |
10 |
Ngọc |
3 |
5 |
7 |
Chúng ta có thể khai báo mảng hai chiều diem để
lưu trữ bảng thông tin về điểm các sinh viên như sau: int
diem[4][3];
Khởi tạo
mảng 2 chiều của ví dụ 5.3:
int diem[4][3]=
{{7,8,10},{4,6,8},{9,10,10}, {3,5,7}};
v
Bài tập:
Câu 1. Nêu cú pháp khia bao mảng 1 chiều. Cho ví dụ?
Câu 2. Hãy khởi tạo mảng số nguyên gồm 10
phần tử?
5.3. Truy xuất mảng
5.3.1. Truy xuất mảng 1 chiều
- Khi muốn lấy giá trị một phần tử trong mảng ta tại vị trí chỉ số phần
tử có cú pháp như sau:
<tên mảng>[<chỉ số
phần tử>]
Ví dụ 5.4: Muốn truy xuất phần tử thứ i trong mảng a, ta ghi là
a[i]
Ví dụ 5.5: Giả
sử có mảng 1 chiều a có 5 phần tử là số nguyên như sau:
Giá trị phần tử trong mảng |
20 |
30 |
10 |
4 |
6 |
Chỉ số mảng |
0 |
1 |
2 |
3 |
4 |
i =
a[4]; // i nhận giá trị 6
Lệnh trên sẽ lấy giá trị của
phần tử thứ 5 của mảng, và giá trị này sẽ được chứa trong biến i.
5.3.2. Truy xuất mảng 2 chiều
Cú pháp:
<Tên mảng> [<chỉ số dòng phần tử>]
[<chỉ số cột phần tử>]
Chẳng hạn muốn truy xuất một
phần tử tại dòng thứ i, cột thứ j của mảng a, ta ghi là a[i][j]. Giá trị i, j
được tính từ 0 trở đi.
Ví dụ 5.6: Muốn truy xuất điểm môn Toán của bạn Lan ở Ví dụ 5.3 ta ghi diem[1][0].
v
Bài tập:
Câu 1. Nêu cú pháp truy xuất
mảng 1 chiều. Cho ví dụ?
Câu 2. Nêu cú pháp truy xuất mảng 2 chiều. Cho ví dụ?
for (int i=0;i<4;i++)
{
printf("\nPhan tu thu %d co gia tri: %d",i+1,a[i]);
}
v
Bài tập thực hành:
Bài
1.
Viết chương trình nhập vào mảng a gồm n phần tử nhập từ bàn phím. Sau đó xuất
ra màn hình mảng vừa nhập.
Bài 2. Viết hàm nhập,
xuất một mảng a gồm n số nguyên.
Bài
3.
Cho mảng a gốm có 5 phần tử {5,10,15,20,25}. Viết chương trình tính tổng các
phần tử số lẻ.
Bài
4.
Viết chương trình sắp xếp một mảng n phần tử theo thứ tự tăng dần.
Bài
5.
Viết chương trình nhập vào một mảng, hãy xuất ra màn hình:
- Phần tử lớn nhất của mảng.
- Phần tử nhỏ nhất của mảng.
- Tính tổng của các phần tử
trong mảng .
Bài
6.
Viết chương trình nhập vào một mảng số tự nhiên n phần tử. Hãy xuất ra màn
hình:
- Dòng 1 : gồm các số lẻ,
tổng cộng có bao nhiêu số lẻ.
- Dòng 2 : gồm các số chẵn,
tổng cộng có bao nhiêu số chẵn.
- Dòng 3 : gồm các số nguyên
tố.
- Dòng 4 : gồm các số không
phải là số nguyên tố.
Bài
7.
Viết chương trình tính tổng bình phương của các số âm trong một mảng các số
nguyên.
Bài 8. Nhập vào một mảng, tìm số lớn nhất và nhỏ
nhất trong mảng đã nhập.
Bài 9. Nhập vào một dãy số, in ra các vị trí số lớn
nhất (có thể có nhiều vị trí).
Bài 10. Nhập vào một dãy số là lượng mưa của các
tháng liên tiếp trong năm. Thông báo ra các tháng có lượng mưa lớn hơn lượng
mưa trung bình của các tháng đó.
v
Bài tập:
Bài 1. Nhập vào
một dãy số, sắp xếp và in ra dãy số theo chiều tăng dần.
Bài 2. Nhập vào
một ma trận (mảng 2 chiều). In ra tổng
của mỗi hàng trong ma trận đó.