Lập trình C: Bài 7 – Mảng trong C
Nội dung
Ví dụ mở đầu
Xét ví dụ nhập 5 số nguyên, xuất ra màn hình 5 số và tính tổng 5 số đó.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| #include int main() { int a, b, c, d, e; // 5 bien printf ( "Nhap a = " ); scanf ( "%d" , &a); printf ( "Nhap b = " ); scanf ( "%d" , &b); printf ( "Nhap c = " ); scanf ( "%d" , &c); printf ( "Nhap d = " ); scanf ( "%d" , &d); printf ( "Nhap e = " ); scanf ( "%d" , &e); int tong = a + b + c + d + e; printf ( "Tong cua %d + %d + %d + %d + %d = %d" , a, b, c, d, e, tong); return 0; } |
Mảng Là tập hợp các phần tử có cùng kiểu dữ liệu. Mảng có mảng 1 chiều, 2 chiều,… và mỗi kiểu dữ liệu thì có 1 kiểu mảng tương ứng (mảng nguyên, mảng thực, mảng ký tự (chuỗi)),… Ta chủ yếu xét về mảng 1 chiều và mảng 2 chiều.
Bây giờ chúng ta sẽ giải quyết lại ví dụ trên bằng cách sử dụng mảng 1 chiều.
1. Mảng 1 chiều
Các bạn thử đọc và chạy chương trình này, sau đó hãy xem chi tiết ở dưới.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| #include int main() { // khai bao mang a co n phan tu int n = 5; int a[n], i, s = 0; // thuc hien nhap tung phan tu mang for (i = 0; i < n; i++) { printf ( "Nhap a[%d] = " , i); scanf ( "%d" , &a[i]); } // thuc hien in cac phan tu cua mang ra man hinh printf ( "\nMang da nhap \n" ); for (i = 0; i < n; i++) { printf ( "%d \t" , a[i]); } // tinh tong cac so trong mang for (i = 0; i < n; i++) { s += a[i]; // s = s + a[i] } printf ( "\nTong cac so trong mang: %d\n" , s); return 0; } |
Nhap a[0] = 3
Nhap a[1] = 4
Nhap a[2] = 6
Nhap a[3] = 2
Nhap a[4] = 7
Mang da nhap
3 4 6 2 7
Tong cac so trong mang: 22
a. Cách khai báo mảng 1 chiều
VD: int a[10]; mảng 1 chiều a gồm 10 phần tử thuộc kiểu nguyên. Sau khi khai báo ta có 1 mảng có dạng như sau:
b. Cách truy xuất đến các phần tử trong mảng.
Sau khi mảng được khai báo, mỗi phần tử trong mảng đều có chỉ số để tham chiếu. Chỉ số bắt đầu từ 0 đến n-1 (với n là kích thước mảng). Trong ví dụ trên, ta khai báo mảng 10 phần tử thì chỉ số bắt đầu từ 0 đến 9.Và ta truy xuất qua cú pháp:
c. Cách nhập và xuất các phần tử của mảng
Để nhập dữ liệu cho các phần tử trong mảng ta cần duyệt tới từng phần tử trong mảng và tiến hành nhập bằng một vòng for
1
2
3
4
| for (i = 0; i < n; i++) { printf ( "Nhap a[%d] = " , i); scanf ( "%d" , &a[i]); } |
1
2
3
| for (i = 0; i < n; i++) { printf ( "%d \t" , a[i]); } |
d. Nhập xuất mảng sử dụng hàm
Trong nhiều bài toán, chúng ta phải nhập nhiều mảng, và xuất nhiều lần, khi đó hãy đưa nhập xuất vào hàm cho dễ dùng.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| #include void nhapMang( int a[], int n) { int i; // thuc hien nhap tung phan tu mang for (i = 0; i < n; i++) { printf ( "Nhap a[%d] = " , i); scanf ( "%d" , &a[i]); } } void xuatMang( int a[], int n) { int i; for (i = 0; i < n; i++) { printf ( "%d \t" , a[i]); } } int main() { // khai bao mang a co n phan tu int n = 5; int a[n]; nhapMang(a, n); xuatMang(a, n); return 0; } |
e. Một vài lưu ý khác
Khởi tạo mảng: Chúng ta có thể khởi tạo mảng trong quá trình khai báo ngay. VD: float a [5] = {3.4, 5, 6, 7, 4,2}Với cách khởi tạo này nếu ta khởi tạo vượt quá 5 phần tử máy sẽ báo lỗi, nếu thiếu phần tử nào thì phần tử đó nhận giá trị là 0.
VD: float a [5] = {3.4, 5, 7} => a[4] = a[5] = 0.
VD: float a [5] = {3.4, 5, 7, 1, 2, 3} => máy báo lỗi.
Ngoài ra chúng ta có cách khai báo và khởi tạo mảng chưa biết trước số lượng.
VD: int a[] = {3,6,2,5} => Mảng có 4 phần tử nhận giá trị tương ứng.
Hoặc: int a[]; => Thường sử dụng khi dùng mảng làm tham số hình thức trong hàm.
2. Mảng 2 chiều
Chúng ta có thể coi nó như một ma trận. Các tính chất, cách khai báo, nhập xuất,… cũng tương tự như mảng 1 chiều.Khai báo:
VD khai báo: int a[5][10]; //Mảng a gồm 5 hàng và 10 cột (mỗi hàng có 10 phần tử).
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| #include #define MAX 10 // nhap mang n hang, m cot void nhapMang( int a[MAX][MAX], int n, int m) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf ( "Nhap a[%d][%d] = " , i, j); scanf ( "%d" , &a[i][j]); } } } // xuat mang n hang, m cot void xuatMang( int a[MAX][MAX], int n, int m) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { printf ( "%-3d" , a[i][j]); } printf ( "\n" ); // xuong dong khi het 1 dong } } int main() { // khai bao mang a co n phan tu int n = 2, m = 3; int a[MAX][MAX]; nhapMang(a, n, m); xuatMang(a, n, m); return 0; } |
0 nhận xét:
Đăng nhận xét