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
Ví 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 đủ
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:
- bai_giang_he_thong_may_tinh_va_ngon_ngu_c_chuong_11_mang.pdf