Bài giảng Kiến trúc máy tính - Chương 4: Mảng và chuỗi cung cấp cho người học các kiến thức: Mảng, mảng một chiều, mảng hai chiều, mãng chuỗi, chuỗi. Cuối bài giảng có phần bài tập để người học ôn tập và củng cố kiến thức đã học.
Trang 2Mả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ác phần tử của mảng được lưu trữ trong một khối gồm
các ô nhớ liên tục nhau, có cùng tên (cũng là tên của mảng)
nhưng phân biệt với nhau ở chỉ số Chỉ số này xác định vị trícủa nó trong mảng
Mảng được chia ra làm 2 loại: mảng một chiều và mảngnhiều chiều (mảng 2 chiều trở lên)
Mảng
Trang 34.1.1 Mảng một chiều
A) Khai báo mảng:
ngay tại thời điểm khai báo và phải là hằng số
Ví dụ:
int A[100]; //khai báo mảng số nguyên A gồm 100 phần tử.
Trang 4B) Truy xuất dữ liệu trong mảng:
Truy xuất các phần tử của mảng theo cú pháp:
Trong đó chỉ_số là số nguyên bắt đầu từ 0 đến n-1, với n là kích thước của mảng
Trang 54.1.1 Mảng một chiều
C) Khởi tạo giá trị cho mảng một chiều khi khai báo:
Ví dụ 1: Khởi tạo giá trị cho tất cả các phần tử của mảng:
Kiểu_dữ_liệu Tên_mảng [số_phần_tử] = { giá_tri_1, giá_trị_2,…};
Trong đó, giá_trị_1, giá_trị_2,… là các giá trị tương ứngđược khởi tạo cho từng phần tử của mảng theo đúng thứ tự Sốlượng các giá trị không được vượt quá kích thước của mảng
Trang 6D) Dùng mảng một chiều làm tham số hàm:
Việc truyền một phần tử đơn lẻ vào hàm thì hoàn toàngiống với truyền một biến vào hàm
Đối với trường hợp muốn truyền toàn bộ mảng cho hàm thì
ta cần phải khai báo mảng là tham số hình thước của hàm
Ví dụ: int Max(int A[12], int kich_thuoc);
Lưu ý:
- Có thể không cần ghi kích thước mảng trong phần khaibáo tham số hàm, ví dụ: int Max(int A[], int kich_thuoc); ).
truyền tham số là mảng int B[12] , kích_thước là 12 như sau:Max( B, 12) ;
Trang 7Ví dụ: Dùng mảng một chiều làm tham số hàm
Kết quả khi chạy chương trình :
-
Trang 8-Dạng đơn giản nhất và thông dụng nhất của mảng nhiều
chiều là mảng hai chiều Một mảng hai chiều là mảng chứa các
mảng một chiều
Để cho dễ hiểu người ta thường biểu diễn mảng hai chiều
dưới dạng một ma trận gồm các hàng và các cột Tuy nhiên, về
mặt vật lý thì các phần tử của mảng hai chiều vẫn được lưu
trong một khối nhớ liên tục nhau
A) Khai báo mảng hai chiều:
Trang 10… i-1
Trang 11Ví dụ 5: Khởi tạo giá trị cho mảng mà không bao gồm khai báo
chiều thứ nhất hay số hàng ( chiều thứ hai hay số cột bắt buộcphải có):
Trang 12Tương tự như mảng một chiều, mảng hai chiều cũng có
thể được dùng làm tham số cho hàm
Khi khai báo một tham số là mảng hai chiều, cần phải chỉ
rõ số phần tử của các chiều, tuy nhiên số phần tử của chiều đầu
tiên có thể vắng
Trang 13Ví dụ về mảng hai chiều
Kết quả chạy chương trình:
Trang 15
4.2 Chuỗi
B) Khai báo chuỗi
Ý nghĩa: Khai báo chuỗi “ten” có chiều dài 25 kí tự Do chuỗi
kết thúc bằng kí tự ‘\0’ nên chuỗi trên chỉ có thể chứa 24 kí tự
C) Khởi tạo chuỗi
Hoặc
khi này bằng số kí tự +1 ( thêm kí tự ‘\0’ ), ở đây độ dài chuỗi
sinh_vien là 11 */
Trang 16một chuỗi.
Cú pháp khai báo :
Trong đó : số_lượng_chuỗi là số lượng phần tử tối đa của
mảng, độ_dài_chuỗi là kích thước của các phần tử
Trang 17Ví dụ về mảng chuỗi
Kết quả chạy chương trình:
Trang 18-tử ( n<=100) Tìm và in ra chỉ số của các phần -tử có giá trị nhỏnhất trong dãy.
Bài 2: Nhập một dãy n số nguyên (n < 50) và một số nguyên x.
Loại khỏi dãy những phần tử có giá trị bằng x
Bài 3: Tính tổng bình phương các phần tử của dãy số nguyên gồm
n phần tử (n<=20)
Bài 4: Sắp xếp một dãy số nguyên gồm n phần tử (n<=40) theo thứ
tự tăng dần Chèn thêm một số nguyên x nhập từ bàn phím vào dãysao cho dãy vẫn tăng dần Xuất dãy mới ra màn hình
Trang 20Bài 6: Cho hai ma trận số nguyên A và B có kích thước m hàng, n
f) Xuất ra màn hình ma trận chuyển vị của B
g) Tìm phần tử nhỏ nhất trong tất cả các phần tử của hai ma trận
Trang 21Bài tập luyện tập
Bài 7: Cho ma trận A vuông cấp n (n<=8) với các phần tử là số
nguyên Viết chương trình theo các yêu cầu sau:
a) Nhập/xuất A
b) Tính tổng các phần tử nằm ngoài đường chéo chính ?
c) Tìm giá trị lớn nhất trên đường chéo chính ?
d) Có bao nhiêu phần tử là số âm nằm trên đường chéo phụ ?
e) Ma trận A có đối xứng hoặc phản đối xứng hay không ?
Trang 22Bài 8:Viết chương trình nhập vào một chuỗi
a) Xuất chuỗi ra màn hình theo chiều ngược lại;
b) Xuất ra màn hình mỗi dòng một từ của chuỗi;
c) Đếm xem chuỗi có bao nhiêu kí tự ‘a’;
d) Thay thế các khoảng trống trong chuỗi (nếu có) bằng dấu ‘*’;
e) Chuyển các chữ cái trong chuỗi sang chữ in hoa (Hướng dẫn:
trong bảng mã ASCII các chữ cái in hoa có giá trị nguyên từ
65 đến 90, các chữ cái thường có giá trị nguyên từ 97 đến122)
Trang 23Bài tập luyện tập
Bài 9: Viết chương trình nhập vào 1 chuỗi, sau đó chép sang
chuỗi khác một chuỗi con từ chuỗi ban đầu có số kí tự chỉ định
Ví dụ: Chuỗi ban đầu "Le Thi Diem My" Nếu số kí tự chỉ định là
2 thì chuỗi đích sẽ là "Le"
Bài 10: Viết chương thực hiện các yêu cầu sau:
- Nhập vào 1 chuỗi bất kỳ, ví dụ : "Nguyen Minh Long
- Muốn xóa từ vị trí nào, ví dụ : 8
- Muốn xóa bao nhieu kí tự, ví dụ : 5
Kết quả in ra màn hình:
- Chuoi nguon la : Nguyen Minh Long
- Chuoi sau khi xoa : Nguyen Long
Trang 24Bài 11: Sử dụng mảng chuỗi viết chương thống kê xem có bao
nhiêu người họ "Ly", "Tran"… trong 1 danh sách cho trước Nếukhông có thì thông báo "Không có nguoi nao thuoc ho …."