Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy

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á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ảng

nhiều chiều (mảng 2 chiều trở lên).

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 1

Trang 1

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 2

Trang 2

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 3

Trang 3

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 4

Trang 4

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 5

Trang 5

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 6

Trang 6

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 7

Trang 7

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 8

Trang 8

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 9

Trang 9

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 24 trang xuanhieu 5220
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy

Bài giảng Kiến trúc máy tính (Phần 2) - Chương 4: Mảng và chuỗi - Nguyễn Văn Huy
4.1. Mảng 
 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á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
 Mảng được chia ra làm 2 loại: mảng một chiều và mảng
nhiều chiều (mảng 2 chiều trở lên).
 2 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.1 Mảng một chiều 
A) Khai báo mảng:
 Kiểu_dữ_liệu Tên_mảng [số_phần_tử] ;
Lưu ý: số_phần_tử ( kích thước của mảng) phải được xác định 
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ử.
 3 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.1 Mảng một chiều 
B) 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:
 Tên_mảng[chỉ_số]
 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.
Ví dụ: Mảng A có 4 phần tử, phần tử thứ 2 là A[1]= - 7
 Chỉ số 0 1 2 3
 Mảng A 4 -7 3 2
 Phần tử A[0] A[1] A[2] A[3]
 4 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.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: 
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.
Ví dụ 1: Khởi tạo giá trị cho tất cả các phần tử của mảng:
 int A[5]={1,5,-8,7,0};
Ví dụ 2: Khởi tạo vài giá trị đầu của mảng, các phần tử sau mặc 
định bằng 0: int A[5]={2,4,1};
Ví dụ 3: Khởi tạo giá trị 0 cho tất cả các phần tử:
 int A[5]={0};
Ví dụ 4: Khởi tạo mảng mà không khai báo kích thước:
 int A[]={1,5,-8}; 
Khi đó mảng A sẽ có kích thước bằng 3 vì nó có 3 phần tử.
 5 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.1 Mảng một chiều 
D) 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àn
giố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 khai
 báo tham số hàm, ví dụ: int Max(int A[], int kich_thuoc); ).
 - Khi gọi hàm và truyền mảng thì ta chỉ ghi tên mảng mà
 không có cặp ngoặc [] ,ví dụ: Gọi hàm Max ở ví dụ trên,
 truyền tham số là mảng int B[12] , kích_thước là 12 như sau:
 Max( B, 12) ;
 6 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Ví 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 :
--------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------
 7 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.2 Mảng hai chiều 
 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:
 Kiểu_dữ_liệu Tên_mảng[số_hàng][số_cột] ;
 Khi đó kích thước mảng sẽ là tích (số_hàng*số_cột)
Ví dụ: 
 float A[3][4]; /*Mảng số thực A gồm 12 phần tử được chia
thành 3 hàng, 4 cột*/
 8 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.2 Mảng hai chiều 
B) Truy xuất các phần tử của mảng:
Mỗi phần tử của mảng có dạng:
 Tên_mảng[chỉ_số_hàng][chỉ_số_cột]
 Trong đó, chỉ_số_hàng có giá trị từ 0 đến (số_hàng -1)và
chỉ_số_cột có giá trị từ 0 đến (số_cột - 1).
 Ví dụ: Mảng int A[3][2] được minh họa như hình dưới:
 Chỉ số (0, 0) (0, 1) (1, 0) (1, 1) (2, 0) (2, 1)
 Mảng A
 Phần tử A[0][0] A[0][1] A[1][0] A[1][1] A[2][0] A[2][1]
 0 1
 0 6 2
 1 -9 0
 2 1 5
 9 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.2 Mảng hai chiều 
C) Khởi tạo giá trị cho mảng hai chiều khi khai báo:
 Thứ tự các phần tử của mảng A[i][j] sẽ được khởi tạo theo
thứ tự như sau:
 0 1  j-1
 0
 1
 i-1
Ví dụ 1: Khởi tạo mảng số nguyên A[3][2] giống mảng 1 chiều:
 int A[63][2] = 2{2, 7, 9, 0, 4, -3};
 -9 0
 1 5
 10 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.2 Mảng hai chiều 
Ví dụ 2: Khởi tạo theo từng dòng (hàng), các phần tử của mỗi
dòng sẽ nằm trong một cặp dấu {}:
 int A[3][2]={{2, 7}, {9, 0}, {4,-3}};
Ví dụ 3: Khởi tạo giá trị cho vài phần tử ở đầu mảng, các phần tử
còn lại sẽ tự động nhận giá trị 0:
 int A[3][2]={{2, 7}, {9}, {4,-3}};
Ví dụ 4: Khởi tạo giá trị 0 cho tất cả các phần tử của mảng:
 int A[3][2]={0};
Ví 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ộc
phải có):
 int A[][2]={{2, 7}, {9, 0}, {4,-3}};
 11 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.1.2 Mảng hai chiều 
D) Mảng hai chiều làm tham số cho hàm:
 Tươ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.
 11 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Ví dụ về mảng hai chiều 
Kết quả chạy chương trình:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 13 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.2 Chuỗi 
A) Khái niệm
 Chuỗi hay xâu kí tự được xem như là một mảng một chiều
gồm các phần tử có kiểu char .
 Theo quy ước, một chuỗi sẽ được kết thúc bởi ký tự null
('\0' : kí tự rỗng).
Ví dụ: Chuỗi “Lap Trinh C” được lưu trữ như sau:
 L a p T r i n h C \0
 14 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.2 Chuỗi 
B) Khai báo chuỗi
 char tên_chuỗi[kích_thước_chuỗi];
Ví dụ: char ten[25];
Ý 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
 char tên_chuỗi[kích_thước_chuỗi] = “ Chuỗi ”;
Hoặc
 char tên_chuỗi[] = “ Chuỗi” ;
Ví dụ: char sinh_vien[] = “Cao Van To”; /*Độ dài của chuỗi
khi này bằng số kí tự +1 ( thêm kí tự ‘\0’ ), ở đây độ dài chuỗi
sinh_vien là 11 */
 15 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
4.3. Mảng Chuỗi 
 Mảng chuỗi là mảng trong đó mỗi phần tử của mảng là
một chuỗi.
Cú pháp khai báo :
 char Tên_mảng[số_lượng_chuỗi][độ_dài_chuỗi];
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ử.
 16 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Ví dụ về mảng chuỗi
Kết quả chạy chương trình:
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
 17 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
 Bài tập luyện tập
Bài 1: Viết chương trình nhập giá trị cho dãy số thực gồm n phần
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ãy
sao cho dãy vẫn tăng dần. Xuất dãy mới ra màn hình.
 18 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
 Bài tập luyện tập
Bài 5: Viết chương trình nhập dữ liệu cho mảng int A[m][n] với
m, n <= 10.
a) Xuất mảng A ra màn hình.
b) Tìm giá trị lớn nhất trong A.
c) Dòng nào của A có tổng các phần tử là lớn nhất.
d) Sắp xếp từng dòng của A theo thứ tự tăng dần.
e) Sắp xếp mảng A theo thứ tự giảm dần.
 19 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Bài tập luyện tập
Bài 6: Cho hai ma trận số nguyên A và B có kích thước m hàng, n 
cột (m, n<=100). Viết chương trình:
a) Nhập/xuất dữ liệu cho hai ma trận.
b) Tính tổng của hai ma trận.
c) Tìm phần tử lớn nhất và nhỏ nhất của ma trận A.
d) Có bao nhiêu phần tử là số âm trong ma trận B.
e) Sắp xếp ma trận A theo thứ tự tăng dầ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
 20 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Bà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 ?
 21 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Bài tập luyện tập
Bà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 đến
 122).
 22 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Bà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
 23 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật
Bài tập luyện tập
Bà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ếu
không có thì thông báo "Không có nguoi nao thuoc ho .".
 24 Khoa CNTT - Bài giảng THĐC - Khối ngành kỹ thuật

File đính kèm:

  • pdfbai_giang_kien_truc_may_tinh_phan_2_chuong_4_mang_va_chuoi_n.pdf