Tải bản đầy đủ (.pdf) (51 trang)

giáo trình C chương 5 phần 1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.13 MB, 51 trang )

Chương 5
Mng, chui ký t
Mục tiêu của bài học
 Đnh ngha mng.
 Mng 1 chiu
 Mng 2 chiu.
 Chui k t.
Phn 1: Mng một chiều
Kiểu dữ liệu mng
Mảng là tập hợp các phần tử có cùng kiểu dữ
liệu, được lưu trữ ở các vị trí kế tiếp nhau trong
bộ nhớ chính
3

2

4

5

1

9

6

7

4

8



Mảng kiểu int, gồm 10 phần tử

Khai báo mng
 Cú pháp:
<Lớp lưu trữ> <Kiểu dữ liệu> <Tên mảng> [số phần tử];
Trong đó:
 Lớp lưu trữ : auto, static, extern, register.
 Kiểu dữ liệu: Các kiểu dữ liệu cơ bn và nâng cao.
 Tên mảng: Đặt theo tên đnh danh.
 Kích thước mảng: Hằng số
 Lớp lưu trữ mặc đnh là auto  Không cần sử dụng từ
khóa này khi khai báo các mng auto.
Ví dụ: int A[10];
Các phần tử và chỉ số của mng
 Mi phần tử được xác đnh bằng một số thứ t (còn gọi
là chỉ số) duy nhất trong mng.
 Số chiu của mng được xác đnh bằng số các chỉ số cần
thiết để đnh danh duy nhất từng phần tử.
 Chỉ số là một số nguyên dương trong [ ] đặt ngay sau tên
mng.
 Chỉ số của mng (trong C) được bắt đầu là 0
Ví dụ: mng A với 10 phần tử:.
A[0],A[1],A[2],…,A[9]
3

2

4


5

1

9

6

7

4

8

0 1 2 3 4 5 6 7 8 9

Qun l mng trong C
 Trong ngôn ngữ C, mng được “đối xử”
không giống hoàn toàn với biến
 Hai mng có cùng kiểu và cùng kích thước
cũng không được xem là tương đương nhau
 Không thể gán trc tiếp một mng cho một
mng khác.
 Không thể gán tr cho toàn bộ mng, mà phi
gán tr cho từng phần tử của mng

Một số thao tác trên mng
 Khởi tạo mng.
 Truy xuất các phần tử mng.
 Nhập giá tr cho các phần tử mng.

 Truyn mng vào hàm.


Khởi tạo mng
 Khởi tạo mng.
 Truy xuất các phần tử mng.
 Nhập giá tr cho các phần tử mng.
 Truyn mng vào hàm.


Khởi tạo mng
 Là thao tác gán giá tr cho các phần tử mng.
 Các mng không được khởi tạo t động.
 Không sử dụng mng khi chưa khởi tạo thích hợp.

 Khởi tạo mảng trong khi khai báo:
Ví dụ:
int A[5] = {1, 2, 3, 4, 5};
hoặc
int A[] = {1, 2, 3, 4, 5};



 Khởi tạo mảng bằng vòng lặp:
for (i=0; i<10; i++)
A[i] = 0;
Khởi tạo mng (tt)




 Trong trường hợp mng extern và static,
các phần tử được t động khởi tạo với
giá tr 0.


Bài tập áp dụng
 Bài tập 1: Viết chương trình:
 Khai báo và khởi tạo giá tr cho 1 mng kiểu int, gồm 10
phần tử.
 Hiển thi ra màn hình giá tr các phần tử mng.
 Kiểm tra trường hợp số giá tr khởi tạo < kích thước mng.

Truy xuất các phần tử mng
 Thc hiện khi muốn xem, hiển th hoặc sử dụng giá tr
của chng để tính toán, kiểm tra…
 Truy xuất phần tử mảng với các chỉ số cụ thể:
Ví dụ:
int A[0] ;
int A[5] ;
 Truy xuất các phần tử mảng sử dụng vòng lặp:
for (int i=0;i<n;i++)
{
printf ( “Phan tu thu %d = %d\n”, i+1, A[i]);
}


Nhập giá tr cho các phần tử mng
 Gán trực tiếp giá trị cho các phần tử:
Ví dụ:
A[0] = 10;

A[1] = 15;
A[2] = 25;
. . .
 Nhập giá trị các phần tử mảng sử dụng vòng lặp:
for (int i=0;i<n;i++)
{
printf ( “A[%d] = “, i ); scanf(“%d”,&A[i])
}


Bài tập áp dụng
 Bài tập 2: Viết chương trình:
 Khai báo và nhập giá tr cho mng kiểu int, gồm n phần tử.
 Hiển th các giá tr đã nhập ra màn hình.

Truyn mng vào hàm
 Khi một mng được truyn vào hàm như một tham số,
chỉ có đa chỉ của mng được truyn vào.
 Tên mng không kèm theo chỉ số là đa chỉ của mng.
Ví dụ:
void main()
{
int A[10];
. . .
func(A);
. . .
}
Mảng A được truyền vào
hàm func()


Truyn mng vào hàm
 Khai báo hàm func():
func (int ary []) /*Số phần tử không được xác đnh trước*/
{
. . .
}
func (int ary [10]) /* Số phần tử được xác đnh trước*/
{
. . .
}
Hoặc:

Bài tập áp dụng
 Bài tập 3: Viết chương trình:
 Khai báo và nhập giá tr cho mng kiểu int, gồm n phần tử.
 Hiển th các giá tr đã nhập ra màn hình.
 Tìm giá tr lớn nhất trong mng.
Yêu cầu: Chương trình được viết ở dạng hàm.

Bài tập v nhà
 Bài 1: Viết chương trình (dạng hàm) thc hiện các yêu
cầu sau:
 Khai báo và nhập giá tr cho một mng n phần tử, kiểu int.
 Hiển th các giá tr đã nhập ra màn hình.
 Tính tổng các phần tử trong mng.
 Tính tổng các phần tử chẵn trong mng.
 Bài 2: Viết chương trình (dạng hàm) thc hiện các yêu
cầu sau:
 Khai báo và nhập giá tr cho một mng n phần tử, kiểu int.
 Hiển th các giá tr đã nhập ra màn hình.

 Liệt kê các số chính phương trong mng.


Phn 2: Mng nhiều chiều
Mng hai chiu
 Mng đa chiu đơn gin nhất và thường được
dùng nhất là mng hai chiu
 Mng hai chiu có thể xem như là một mng
với mi phần tử là mng một chiu
 V logic, một mng hai chiu trông giống như
một bng lch trình xe lửa, gồm các dòng và
các cột
Một mng chui hai chiu được khai báo
theo cách sau:
int Ary[3][4];
Khởi tạo mng đa chiu (tt)
Mảng có kích thước 34 (3 hàng, 4 cột)
A[2,0] A[2,3] A[2,1] A[2,2]
A[1,0] A[1,3] A[1,1] A[1,2]
A[0,0] A[0,3] A[0,1] A[0,2]
Khởi tạo mng đa chiu
int ary[3][4]
={1,2,3,4,5,6,7,8,9,10,11,12};

Kết qu của phép gán trên như sau:
9 12 10 11
5 8 6 7
1 4 2 3
Ary[0,0]=1; Ary[0,1]=2 ; Ary[0,2]=3; Ary[0,3]=4;
Ary[1,0]=5; Ary[1,1]=6 ; Ary[1,2]=7; Ary[1,3]=8;

Ary[2,0]=9; Ary[2,1]=10 ; Ary[2,2]=11; Ary[2,3]=12;

int ary[3][4]
={{1,2,3},{4,5,6},{7,8,3}};

Kết qu của phép gán trên như sau:
Khởi tạo mng đa chiu (tt)
7 0 8 3
4 0 5 6
1 0 2 3
Ary[0,0]=1; Ary[0,1]=2 ; Ary[0,2]=3; Ary[0,3]=0;
Ary[1,0]=4; Ary[1,1]=5 ; Ary[1,2]=6; Ary[1,3]=0;
Ary[2,0]=7; Ary[2,1]=8 ; Ary[2,2]=3; Ary[2,3]=0;

Truy xuất các phần tử mng
 Truy xuất phần tử mng với các chỉ số cụ thể
A[0][0] //Phần tử đầu tiên (hàng 0, cột 0)
A[1][3] //Phần tử ở hàng 2, cột 4
A[m-1][n-1] //Phần tử cuối cùng(hàng m, cột n)
 Sử dụng vòng lặp (for, while, do…while):
for (int i=0;i<m;i++){
for (int j=0; j<n; j++)
{
printf(“Phan tu [%d,%d] = %d\n”, i,j, A[i][j]);
}
}

×