Khai báo và sử dụng mảng

Một phần của tài liệu Giáo trình lập trình c (ngành quản trị mạng) (Trang 67 - 69)

- Khai báo, hiển thị mảng 1 chiều, 2 chiều.

Thái độ: Vận dụng tích cực, linh hoạt các kiến thức đã học vào các bài học tiếp theo,

áp dụng viết các chương trình cơ bản.

5.1. Khái niệm và khai báo mảng 5.1.1. Khái niệm về mảng

Một biến (biến đơn) tại một thời điểm chỉ có thể biểu diễn được một giá trị. Vậy

để có thểlưu trữ được một dãy các giá trị cùng kiểu chẳng hạn như các thành phần của vector trong không gian n chiều chúng ta cần n biến a1, a2,..,an. rất cồng kềnh và rất bất tiện nhất là khi n lớn và lại không phải là cốđịnh. Các ngôn ngữ lập trình đưa ra

một khái niệm mảng để giải quyết vấn đề này.

Mảng là một tập hợp hữu hạn các phần tử có cùng kiểu dữ liệu được lưu trữ kế tiếp nhau trong bộ nhớ. Các phần tử trong mảng có cùng tên (và cũng là tên

mảng) nhưng phân biệt với nhau ở chỉ số cho biết vị trí của chúng trong mảng.

• Các thông tin về mảng: Với một mảng phải xác định các thông tin: tên mảng, kiểu các phần tử (kiểu mảng), số phần tử trong mảng (kích thước mảng). Ví dụ như chúng ta nói a là mảng có 20 phần tử, kiểu nguyên. Mảng cũng như các

biến đơn khác trong ngôn ngữ C, trước khi sử dụng nó phải đảm bảo là nó đã được cấp phát trong bộ nhớvà đã sẵn sàng để sử dụng

• Số chiều của mảng: trong ví dụ chúng ta nêu trên về vector, chúng ta có một dãy n các số, nếu như chúng ta dùng một mảng đểlưu trữ các sốđó thì chúng ta

cần mảng có n phần tử và chỉ cần 1 chỉ số để xác định các phần tử - đây là

mảng một chiều. Nếu như chúng ta cần một mảng để biểu diễn một bảng có n dòng, m cột, và để xác định một phần tử trong mảng chúng ta cần 2 chỉ số: chỉ

số dòng và chỉ số cột, như vậy chúng ta có mảng 2 chiều.

5.1.2. Khai báo và sử dụng mảng Khai báo mảng Khai báo mảng

Trong C để khai báo một mảng ta sử dụng cú pháp khai báo sau:

kiểu_dữ_liệu tên_mảng [kích_thước_mảng];

Trong đó kiểu_dữ_liệu là kiểu dữ liệu của các phần tử trong mảng. tên_mảng là tên của mảng. kích_thứớc_mảng cho biết số phần tử trong mảng.

Ví dụ:

int mang_nguyen[10]; // khai báo mảng 10 phần tử có kiểu dữ liệu int

Trang 68

char mang_ki_tu[6]; // khai báo mảng 6 phần tử có kiểu dữ liệu char

Trong ví dụ trên, mảng mang_nguyen được lưu trữ trên 20 ô nhớ (mỗi ô nhớ có

kích thước 1 byte, 2 ô nhớ kích thước là 2 byte lưu trữ được một số nguyên kiểu int) liên tiếp nhau. Do C đánh số các phần tử của mảng bắt đầu từ 0 nên phần tử thứ i của mảng sẽ có chỉ số là i-1 và do vậy sẽ có tên là mang_nguyen[i-1]. Ví dụ: phần tử thứ

nhất của mảng là mang_nguyen[0], phần tử thứ 2 là mang_nguyen[1], phần tử thứ 5 là

mang_nguyen[4]…

mang_nguyen[0] mang_nguyen[1] ... ... mang_nguyen[9]

Kích thước của mảng bằng kích thước một phần tử nhân với số phần tử.

Sử dụng mảng

Đểtruy nhập vào một phần tử của mảng thông qua tên của nó. Tên một phần tử của mảng được tạo thành từ tên mảng và theo sau là chỉ số của phần tử đó trong mảng được đặt trong cặp dấu ngoặc vuông

tên_mảng[chỉ_số_của_phần_tử]

Ví dụ với khai báo

int mang_nguyen[3];

Thì mang_nguyen[0] sẽ là phần tử thứ nhất của mảng mang_nguyen[1] sẽ là phần tử thứ 2 của mảng mang_nguyen[2] sẽ là phần tử thứ 3 của mảng Với mảng nhiều chiều như

int a[6][5];

thì a[0] là phần tử đầu tiên của một mảng, phần tử này bản thân nó lại là một mảng một chiều. Phần tử đầu tiên của mảng một chiều a[0] sẽ là a[0][0]. Phần tử tiếp theo của a[0] sẽ là a[0][1]… Và dễ dàng tính được a[2][3] sẽ là phần tử thứ 4 của phần tử thứ 3 của a.

Một cách tổng quát a[i][j] sẽ là phần tử thứ j+1 của a[i], mà phần tử a[i] lại là phần tử thứ i+1 của a.

5.1.2.1. Khai báo mảng 1 chiều

Cú pháp

Kiểu_mảng tên_mảng [ số_phần_tử];

Trong đó:

- Kiểu_mảng: đây là kiểu của mảng, là tên một kiểu dữ liệu đã tồn tại, có thể là kiểu chuẩn hoặc kiểu dữ liệu do người lập trình định nghĩa .

- tên_mảng : là tên của mảng, do người lập trình đặt, theo quy tắc về tên của C

- số_phần_tử : là hằng (hoặc biểu thức hằng) nguyên, dương là số phần tử của mảng.

Ví dụ:

int vector [15]; // tên mảng: vector, có 15 phần tử, kiểu int

float MT[10], D[20]; // có hai mảng kiểu float: MT có 10 phần tử, D có 20 phần tử

Trang 69

Khi gặp (dòng lệnh) định nghĩa một mảng, chương trình dịch sẽ cấp phát một vùng nhớ (lên tiếp) cho đủ các phần tử liên tiếp của mảng, ví dụ vector[15] sẽ được cấp phát một vùng nhớ có kích thước 15*sizeof(int) =30 byte

5.1.2.2. Khai báo mng 2 chiu

Mảng hai chiều có thể hiểu như bảng gồm các dòng các cột, các phần tử thuộc cùng một kiểu dữ liệu nào đó. Mảng hai chiều được định nghĩa như sau.

Cú pháp

Kiu_mng tên_mng [sd][sc];

Trong đó:

- Kiểu_mảng: đây là kiểu của mảng, là tên một kiểu dữ liệu đã tồn tại, có thể là kiểu chuẩn hoặc kiểu dữ liệu do người lập trình định nghĩa.

- tên_mảng : là tên của mảng, do người lập trình đặt, theo quy tắc về tên của C.

- sd, sc : là hằng (hoặc biểu thức hằng) nguyên, dương tương ứng là số dòng và số cột mảng, số phần tử của mảng sẽ là sd*sc.

Ví dụ:

int a[2][5]; // a là mảng số nguyên có 2 dòng, 5 cột (có 10 phần tử)

float D[3][10]; // D là mảng số thực có 3 dòng, 10 cột (có 30 phần tử)

char DS[5][30]; // DS là mảng kí tự có 5 dòng, 30 cột

Khi gặp một định nghĩa mảng, chương trình dịch sẽ cấp phát một vùng nhớ liên tiếp có kích thước là sd*sc*sizeof (Kiu_mng) cho mảng.

Có thể coi mảng 2 chiều n dòng, m cột là mảng 1 chiểu có n phần tử, mỗi phần tử lại là 1 mảng một chiều có m phần tử (mảng của mảng). Ví dụ với float D[3][10] thể xem D là mảng có 3 phần tử D[0], D[1], D[2], mỗi phần tử này là mảng có 10 phần tử.

5.2. Một số bài toán với mảng 1 chiều 5.2.1. Nhập dữ liệu cho mảng

Một phần của tài liệu Giáo trình lập trình c (ngành quản trị mạng) (Trang 67 - 69)