Trong ngôn ngữ lập trình C, mảng là một tập hợp các biến cùng kiểu dữ liệu được đánh dấu bởi cùng một tên. Mảng cho phép lưu trữ nhiều giá trị cùng loại trong một cấu trúc dữ liệu đơn giản và có thứ tự. Dưới đây là một số điểm quan trọng về kiểu mảng trong C
Trang 1LẬP TRÌNH CĂN BẢN
KIỂU MẢNG
Giảng viên: TS Trương Quốc Bảo
Trang 2 Giới thiệu kiểu mảng trong C.
Mảng 1 chiều.
Mảng nhiều chiều.
NỘI DUNG CỦA CHƯƠNG
Trang 3 Ví dụ: khai báo một mảng a gồm 10 phần tử là
số nguyên:
int a[10];
=> Hình ảnh của a trong bộ nhớ như sau:
GIỚI THIỆU KIỂU MẢNG
TRONG C (1)
Trang 4 “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ử”
Trang 5 Xét dưới góc độ toán học, mảng 1 chiều giống như một vector
Mỗi phần tử của mảng 1 chiều có giá trị không phải
là một mảng khác.
Ví dụ:
MẢNG MỘT CHIỀU
Trang 6 Có một số cách khai báo mảng 1 chiều trong C:
Trang 7 Cách 3: Vừa khai báo vừa gán giá trị
Cú pháp: <Kiểu> <Tên mảng> []= {Các giá trị cách nhau bởi dấu phẩy} ;
Ví dụ: int primes[] = {2,3,5,7,11,13}; int primes[6];
Số phần tử có thể được xác định bằng sizeof()
Số phần tử=sizeof(tên mảng)/sizeof(kiểu)
=>trong ví dụ trên số phần tử là:
sizeof (primes)/sizeof(int)=6
Ta có: primes[0] = 2; primes[1] = 3; primes[2] = 5;
primes[3] = 7; primes[4] = 11; primes[5] = 13;KHAI BÁO MẢNG MỘT CHIỀU (2)
Trang 8 Khai báo mảng là tham số hình thức của hàm
nhiêu (không cần khai báo tường minh chỉ số mảng).
KHAI BÁO MẢNG MỘT CHIỀU (3)
Trang 9 Cú pháp:
Tên biến mảng[Chỉ số]
Ví dụ :
int a[10];
a[0]=5; a[1]=5; a[2]=33; a[3]=33; a[4]=15;
printf(“%d %d %d %d %d”, a[0], a[1], a[2], a[3], a[4]);TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (1)
Trang 10 Viết đoạn chương trình đổi một số nguyên dương
thập phân thành số nhị phân
Thuật toán: Lấy số nguyên thập phân N(10) lần lượt chiacho 2 cho đến khi thương số bằng 0 Kết quả số chuyển đổiN(2) là các dư số trong phép chia viết theo thứ tự ngược lại
Trang 11TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (3)
Thuật toán đổi nhị phân:
Bước 1: Gán Số bits = 0;
Bước 2: Số dư = N % 2;
Bước 3: Lưu số dư vào mảng:
Nhiphan[Số bit] = Số dư;
Bước 4: Cập nhật số bị chia:
N = [N/2];
Bước 5: Số bit = Số bit + 1;
Bước 6: Nếu N >0, quay lại
bước 2 Ngược lại sang bước 7
Bước 7: In dãy bits nhị phân
SoBit = 0 SoDu = N%2 Nhiphan[Sobit] = SoDu
N= N/2 SoBit = SoBit+1
N>0
Sai
In dãy bits
Đúng
Trang 12TRUY XUẤT PHẦN TỬ CỦA MẢNG MỘT CHIỀU (4)
Chương trình đổi nhị phân
Trang 13 Viết đoạn chương trình nhập vào một dãy n số
nguyên và sắp xếp các số theo thứ tự tăng.
Thuật toán: Xét hai phần tử liên tiếp i và j nếu
không đúng thứ tự thì đổi chỗ 2 phần tử này.
Khóa Bước a[0] a[1] a[2] a[3] a[4] A[5] a[6] a[7]
Trang 14 Chương trình
TRUY XUẤT PHẦN TỬ CỦA MẢNG MỘT CHIỀU (5)
Trang 15 Ví dụ: Chương trình sau sẽ hiển thị kết quả gì?
Các phần tử của mảng a[0], …, a[11] Việc truy cập a[12]
Trang 16 Mảng nhiều 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
Người ta thường sử dụng mảng nhiều chiều để lưu
các ma trận, các tọa độ 2 chiều, 3 chiều…
MẢNG NHIỀU CHIỀU
Trang 17 Có 2 cách khai báo mảng nhiều chiều:
Khai báo tường minh
Khai báo không tường minh
Chúng ta sẽ xét các cú pháp và ví dụ trên mảng 2 chiều Mảng nhiều chiều hơn hoàn toàn tương tự.
Khai báo mảng 2 chiều tường minh
Trang 18 Khai báo mảng 2 chiều không tường minh
Để khai báo mảng 2 chiều không tường minh, ta chỉ
cần phải chỉ ra số phần tử của chiều thứ hai.
Vừa khai báo vừa gán trị
Mảng 2 chiều là tham số hình thức của 1 hàm.
KHAI BÁO MẢNG NHIỀU CHIỀU (2)