Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 11: Mảng

CHÖÔNG 11  
MAÛNG  
CHÖÔNG 11  
MAÛNG  
11.1 Khaùi nieäm  
11.2 Khai baùo maûng  
11.3 Khôûi ñoäng trò cuûa maûng  
11.4 Maûng laø ñoái soá cuûa haøm maûng laø bieán toaøn cuïc  
11.5 Caùc öùng duïng  
Baøi taäp cuoái chöông  
CHÖÔNG 11  
MAÛNG  
11.1 KHAÙI NIEÄM  
Maûng laø moät bieán caáu truùc trong ñoù coù nhieàu phaàn töû cuøng  
kieåu, moãi phaàn töû laø moät bieán thaønh phaàn cuûa maûng. Moãi  
bieán thaønh phaàn naøy laø moät bieán bình thöôøng vaø coù cöôùc soá  
(subscript) ñeå phaân bieät giöõa phaàn töû naøy vaø phaàn töû kia.  
Nhö vaäy, ñeå truy xuaát moät phaàn töû cuûa maûng, ta caàn bieát  
ñöôïc cöôùc soá cuûa no
Trong boä nhôù, caùc phaàn töû cuûa maûng ñöôïc caáp phaùt oâ nhôù coù  
ñòa chæ lieân tieáp nhau.  
CHÖÔNG 11  
MAÛNG  
11.1 KHAÙI NIEÄM  
C cuõng cho pheùp laäp trình vieân khai baùo vaø laøm vieäc treân  
maûng moät chieàu (singledimensional array) vaø maûng nhieàu  
chieàu (multidimensional array). Soá phaàn töû treân moät chieàu  
ñöôïc goïi laø kích thöôùc cuûa chieàu ñoù.  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
Cuù phaùp khai baùo maûng moät chieàu nhö sau:  
kieåu teân_maûng [kích_thöôùc];  
Vôùi kích_thöôùc laø moät haèng soá nguyeân cuï theå, cho bieát soá  
phaàn töû trong chieàu ñang xeùt.  
Trong C, cöôùc soá cac phan tcumang uoân ñi töø 0 trôû ñi,  
neân maûng moät chieàu coù n phaàn töû thì cöôùc soá caùc phaàn töû  
cuûa maûng laø 0,..., n-1.  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
dụ: Cho khai báo sau:  
int a[10], x;  
Như vậy mảng a có 10 phần  
tử int, các phần tử đó là a[0],  
a[1], , a[9]. Các
được cấp phát vị trí trong bộ  
nhớ như hình 12.1 sau.  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
Lệnh  
a[5] = a[3] + 1;  
có mã LC-3 như sau:  
ADD R0, R5, #-9 ; R0 = &a[0]: địa chỉ của a[0]  
LDR R1
ADD R1, R1, #1 ; tăng 1  
STR R1, R0, #5 ; a[5] = R1, tức a[5] = a[3] + 1.  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
Lệnh  
a[5] = 7;  
có mã LC-3 như sau:  
AND R0, R0, #0  
ADD R0
ADD R1, R5, #-9 ; R1 = &a[0]: địa chỉ của phần tử  
a[0]  
STR R0, R1, #5 ; a[5] = R0  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
Còn lệnh  
a[x+1] = a[x] + 2;  
với x là biến đang chứa trị là chỉ số nào đó cần làm việc, có  
mã LC-3 như sau:  
LDR R0, R5, #-10 ; R0 = x  
ADD R1, R5, #-9 ; R1 = &a[0]  
ADD R1, R0, R1 ; R1 = &a[x]  
LDR R2, R1, #0 ; R2 = a[x]  
ADD R2, R2, #2 ; cộng thêm 2  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
LDR R0, R5, #-10 ; R0 = x  
ADD R0, R0, #1 ; R0 = x+1  
ADD R1, R5, #-9 ; R1 = &a[0]  
ADD R1, 
STR R2, R1, #0 ; a[x+1] = R2  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
1- Maûng moät chieàu  
Ví duï :  
Vieát chöông trình nhp mot day cac soá nguyeân, tìm soá lôùn  
nhaát trong daõy soá ñoù.  
#include <stdio.h>  
#include <conio.h>  
main()  
{
int i, n, max, vtmax;  
int a[100];  
clrscr();  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
printf ("Chuong trinh thu mang \n");  
printf ("Moi ban nhap so phan tu cua mang: ");  
scanf ("%d", &n);  
printf ("Moi ;  
for (i = 0; i < n; i++)  
scanf ("%d", &a[i]);  
max = a[0]; vtmax = 0;  
for (i = 1; i < n; i++)  
if (max < a[i])  
{
max = a[i];  
vtmax = i;  
}
printf ("Phan tu %d co tri lon nhat la %d\n", vtmax, max);  
getch()  
}
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
Cuù phaùp khai baùo maûng nhieàu chieàu nhö sau:  
kieåu teân_maûng [kích_thöôùc_chieàu1]  
[kích_thöôùc_chieàu2] [...];  
Khi dòch C baùo loã
Array size too large ?  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
Ví duï: Khai baùo maûng hai chieàu a  
int a[4][3];  
Nhö vaäy maûng a coù 4x3 phaàn töû int, caùc phaàn töû ñoù laø  
a[0][0] a[0][1] a[0][2]  
a[1][0] a[1][1] a1][2]  
a[2][0] a[2][1] a[2][2]  
a[3][0] a[3][1] a[3][2]  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
Caùc phaàn töû naøy ñöôïc saép trong boä nhôù theo thöù töï a[0][0],  
a[0][1], a[0][2], a[1][0], a[1][1], a[1][2], a[2][0], a[2][1],  
a[2][2],....  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
Ví duï:  
Vieát chöông trình taïo vaø in ra maøn hình ma traän coù daïng  
sau:  
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
#include <stdio.h>  
#include <conio.h>  
#define MAX 20  
main()  
{
int i, j;  
int a[MAX][MAX];  
int n;  
clrscr();  
printf ("Chuong trinh thu mang \n");  
printf ("Moi ban nhap cap cua ma tran: ");  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
scanf ("%d", &n);  
for (i = 0; i < n; i++)  
for (j = 0; j < n; j++)  
if (i == j) a[i][i] = 1;  
else a[i][j] = 0;  
printf ("Ma tran duoc tao la: \n");  
for (i = 0; i < n; i++)  
{
for (j = 0; j < n; j++)  
printf ("%d", a[i][j]);  
printf(\n”);}  
getch ()  
}
}
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
Ví duï : Cho các khai báo sau  
#define MAX 4  
int a[MAX][MAX];  
int n = 3;/* cấp thực sự cần làm việc của ma trận */  
int i, j; 
/* Nhập trị cho mảng*/  
for (i = 0; i < n; i++)  
for (j = 0; j < n; j++) scanf (“%d”, &a[i][j]);  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
Giả sử trị nhập vào là:  
0 1 2  
3 4 5  
6 7 8  
Mảng a[3][3], là một phần của ma trận a[MAX][MAX]  
CHÖÔNG 11  
MAÛNG  
11.2 KHAI BAÙO MAÛNG  
2- Maûng nhieàu chieàu  
a[0][0] a[0][1]  
a[1][0] a[1][1]  
a[2][0] a[2][1]  
a[3][0] a[3][1]  
a[0][2] a[0][3]  
a[1][2] a[1][3]  
a[2][2] a[2][3]  
a[3][2] a[3][3]  
Tải về để xem bản đầy đủ
pdf 60 trang yennguyen 12/04/2022 5080
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống máy tính và ngôn ngữ C - Chương 11: Mảng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_11_mang.pdf