bai giang 7

18

Click here to load reader

Upload: nbb3i

Post on 17-Jun-2015

1.429 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Bai Giang 7

Nội dung trình bày

• Khái niệm mảng• Truy cập mảng• Khởi gán giá trị cho mảng• Duyệt mảng• Mảng một phần• Tìm kiếm trên mảng

Page 2: Bai Giang 7

Khái niệm mảng

• Mảng là một dãy các ô nhớ liên tiếp nhauvà có cùng kiểu dữ liệu.

• Ví dụ: – Một mảng các số nguyên– Một mảng lưu giữ điểm của các sinh viên

Hình ảnh mảng Hình ảnh một biến

Page 3: Bai Giang 7

Khai báo mảng

• Cú pháp:<kiểu dữ liệu> <tên mảng>[số lượng phần tử];

• Ví dụ:– float x[8];

Khai báo mảng x có 8 phần tử có cùng kiểu float, trong bộ nhớsẽ cấp phát 8 ô nhớ liền nhau và có kiểu float

– int diem[20]; // khai báo mảng diem có 20 phần tử kiểu int– char kt[15]; // khai báo mảng kt có 15 phần tử kiểu char

x

Page 4: Bai Giang 7

Truy cập đến phần tử của mảng

• Để có thể truy cập đến một phần tử nào đó củamảng ta cần cung cấp tên mảng và chỉ số củaphần tử. Chỉ số của mảng bắt đầu được đánh sốtừ 0.

– Ví dụ: Khi ta viết x[4] tức là ta đang truy cập đến phầntử thứ 5 của mảng.

• Về mặt bản chất, một phần tử của mảng có thểđược sử dụng như một biến bình thường.

x76543210

Page 5: Bai Giang 7

Ví dụ truy nhập mảng• Giả sử mảng x có giá trị như sau

• Các câu lệnh truy nhập mảng– cout<<x[0]; // Hiển thị giá trị x[0]– x[3] = 25.5; // Gán giá trị cho x[3]– tong = x[0] + x[1]; // Tính tổng của x[0] và x[1]– tong += x[2]; // Cộng thêm x[2] vào biến tong– x[3] += 1.0; // Cộng x[3] thêm 1.0 – x[2] = x[0] + x[1]; // Lấy giá trị tổng của x[0], x[1] và gán vào x[2]

54.714.012.0-2.526.028.012.016.0x

Page 6: Bai Giang 7

Ví dụ truy nhập mảng• Chỉ số mảng có thể là một biểu thức có giá trị nguyên. • Ví dụ: cho i = 5 và mảng

• Các câu lệnh– cout<<x[i] + 1; – cout<<x[i+1]; – cout<<x[2*i]; – cout<<x[2*i - 3]; – cout<<x[floor(x[4])]; – x[i] = x[i+1];

– x[i-1] = x[i];

54.714.012.0-2.526.028.012.016.0x

Page 7: Bai Giang 7

Khai báo và khởi tạo mảng

• Cũng giống như biến thông thường, mảng cóthể được khởi tạo giá trị ngay khi khai báo– int diem[7] = {100, 73, 88, 84, 40, 97};

– char xep_loai[] = {‘A’, ‘C’, ‘B’, ‘B’, ‘F’, ‘A’};

– char ten[7] = {‘M’, ‘I’, ‘N’, ‘H’};

?9740848873100diem

? ??HNIMten

AFBBCAXep_loai

Page 8: Bai Giang 7

Duyệt mảng

• Duyệt ngẫu nhiên: Các phần tử được truy cậptheo một thứ tự bất kỳ.– Ví dụ: cin>>x[2]; cin>>x[5]; cin>>x[0];

• Duyệt tuần tự (hay dùng): Duyệt từ phần tử đầumảng đến phần tử cuối.– Thường sử dụng vòng lặp theo chỉ số mảng (for).

truycập

truycập

truycập

x

x

Page 9: Bai Giang 7

Ví dụ duyệt mảng• Nhập giá trị cho các một mảng số nguyên gồm

10 phần tử:

int songuyen[10];

for (int i = 0; i < 10; i++){

cout << “Nhap gia tri thu “ << i << “: “;cin >> songuyen[i];

}

Page 10: Bai Giang 7

Ví dụ duyệt mảng

• Tính tổng các phần tử của một mảng số thực:

double x[5] = {5.6, 4.5, 2.3, 9.1, 4.2};double tong = 0;

for (int i = 0; i < 5; i++)tong = tong + x[i];

cout << “Tong la: “ << tong << endl;

Page 11: Bai Giang 7

Mảng một phần

• Sẽ có những bài toán với số lượng phầntử không cố định làm cho người lập trìnhkhó xác định được ngay số phần tử củamảng.

• Với những bài toán này ta cần phải ướclượng và khai báo số phần tử tối đa có thểcó. Sau đó sử dụng một phần số lượngphần tử của mảng. Đây chính là mảng mộtphần.

Page 12: Bai Giang 7

Mảng một phần

• Nhược điểm của mảng một phần là sẽ có mộtsố vùng nhớ không dùng đến nhưng vấn chiếmtài nguyên của hệ thống.

• Ví dụ: Bài toán quản lý điểm sinh viên trong mộtlớp. Ta không xác định trước được một lớp cóbao nhiêu sinh viên, nhưng ta biết rằng một lớphọc chỉ có thể có tối đa 100 sinh viên. Vậy tacần phải khai báo một mảng điểm gồm 100 phần tử.

Page 13: Bai Giang 7

Mảng một phần

• Với bài toán phải sử dụng đến mảng mộtphần ta cần chú ý phải thêm 1 biến làmnhiệm vụ đến số phần tử thực tế đangđược sử dụng trong mảng.

• Chú ý: Ta không được phép viết như sau:int n;cin>>n;float a[n];

Page 14: Bai Giang 7

Nhập dữ liệu cho mảng một phần

• Ví dụ:int n;float diem[100];

cout << “Nhap so luong phan tu: “; cin >> n;

for (int i = 0; i < n; i++){

cout << “Nhap diem[“ << i << “]: “; cin >> diem[i];

}

Page 15: Bai Giang 7

Tìm kiếm trên mảng

• Thực tế bài toán tìm kiếm trên mảng cũngsử dụng phương pháp duyệt mảng. Tuynhiên trong lúc duyệt ta sẽ trích rút ranhững thông tin cần tìm kiếm.

• Ví dụ: – Bài toán tìm vị trí của phần tử đầu tiên mang

giá trị 5 trong một mảng số nguyên.– Bài toán tìm số lớn nhất trong mảng.

Page 16: Bai Giang 7

Ví dụ tìm kiếm trên mảng

• Bài toán tìm vị trí của phần tử đầu tiên mang giátrị 5 trong một mảng số nguyên.

for (int i = 0; i < n; i++)if (x[i] == 5){

cout << “Vi tri cua phan tu la: “ << i << endl;break;

}

Page 17: Bai Giang 7

Ví dụ tìm kiếm trên mảng

• Bài toán tìm số lớn nhất trong mảng sốnguyên

int max = x[0];

for (int i = 1; i < n; i++)if (max < x[i])

max = x[i];

cout << “Gia tri lon nhat la: “ << max << endl;

Page 18: Bai Giang 7

Làm bài tập• Các bài tập về duyệt mảng

– Tính tổng các phần tử của mảng.– Đếm xem trong mảng có bao nhiêu số lẻ, bao nhiêu

số chẵn• Các bài tập về tìm kiếm trên mảng

– Đưa ra màn hình phần tử lớn nhất và nhỏ nhất củamảng.

– Tìm trong mảng số nguyên có những số nào là sốnguyên tố thì hiện lên màn hình.

• Chú ý: Các bài tập trên nên sử dụng mảng mộtphần.