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

Kiểu Mảng trong ngôn ngữ C

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 (496.06 KB, 22 trang )

LẬP TRÌNH CĂN BẢN

KIỂU MẢNG

Giảng viên: TS. Trương Quốc Bảo

NỘI DUNG CỦA CHƯƠNG

 Giới thiệu kiểu mảng trong C.
 Mảng 1 chiều.
 Mảng nhiều chiều.

Thursday, January 15, 2015 Lập trình căn bản 2

GIỚI THIỆU KIỂU MẢNG
TRONG C (1)

 Ví dụ: khai báo một mảng a gồm 10 phần tử là
số nguyên:

int a[10];

=> Hình ảnh của a trong bộ nhớ như sau:

Thursday, January 15, 2015 Lập trình căn bản

GIỚI THIỆU KIỂU MẢNG
TRONG C (2)

 “Mảng là một tập hợp các phần tử cố định có
cùng một kiểu, gọi là kiểu phần tử”.



 Kiểu phần tử có thể là có kiểu bất kỳ:

 ký tự

 số

 1 cấu trúc (struct).

 1 mảng khác (mảng của mảng hay mảng nhiều chiều)

…

 Có 2 loại mảng: mảng 1 chiều và mảng nhiều

chiều. Lập trình căn bản

Thursday, January 15, 2015

MẢNG MỘT CHIỀU

 Xét dưới góc độ tốn học, mảng 1 chiều giống như
một vector.

 Mỗi phần tử của mảng 1 chiều có giá trị khơng phải
là một mảng khác.

 Ví dụ:

Thursday, January 15, 2015 Lập trình căn bản


KHAI BÁO MẢNG MỘT CHIỀU (1)

 Có một số cách khai báo mảng 1 chiều trong C:

 Cách 1: Khai báo mảng với số phần tử xác định

 Cú pháp: <Kiểu> <Tên mảng ><[số phần tử]>;
 Ví dụ: float a[100];

 Cách 2: Khai báo mảng với số phần tử không xác
định

 Cú pháp: <Kiểu> <Tên mảng> <[]> ;
 Ví dụ: float a[];

Thursday, January 15, 2015 Lập trình căn bản

KHAI BÁO MẢNG MỘT CHIỀU (2)

 Cách 3: Vừa khai báo vừa gán giá trị

Cú pháp: <Kiểu> <Tên mảng> []= {Các giá trị cách
nhau bởi dấu phẩy} ;
Ví dụ: int primes[] = {2,3,5,7,11,13};  int primes[6];
Số phần tử có thể được xác định bằng sizeof()

Số phần tử=sizeof(tên mảng)/sizeof(kiểu)
=>trong ví dụ trên số phần tử là:


sizeof (primes)/sizeof(int)=6
Ta có: primes[0] = 2; primes[1] = 3; primes[2] = 5;

primes[3] = 7; primes[4] = 11; primes[5] = 13;

Thursday, January 15, 2015 Lập trình căn bản

KHAI BÁO MẢNG MỘT CHIỀU (3)

 Khai báo mảng là tham số hình thức của hàm

 Khơng cần chỉ định số phần tử của mảng là bao
nhiêu (không cần khai báo tường minh chỉ số mảng).

 Ví dụ:

void Nhap(int a[],int N) {

int i;

for(i=0; i< N; i++) {

printf("Phan tu thu %d: ",i);scanf("%d",&a[i]);

}

} Lập trình căn bản

Thursday, January 15, 2015


TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (1)

 Cú pháp:
Tên biến mảng[Chỉ số]

 Ví dụ:

int a[10];
a[0]=5; a[1]=5; a[2]=33; a[3]=33; a[4]=15;
printf(“%d %d %d %d %d”, a[0], a[1], a[2], a[3], a[4]);

Thursday, January 15, 2015 Lập trình căn bản

TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (2)

 Viết đoạn chương trình đổi một số nguyên dương

thập phân thành số nhị phân.

 Thuật toán: Lấy số nguyên thập phân N(10) lần lượt chia
cho 2 cho đến khi thương số bằng 0. Kết quả số chuyển đổi
N(2) là các dư số trong phép chia viết theo thứ tự ngược lại.

 Ví dụ: Số 12(10) = ?(2).

12 2
06 2


03 2

11

1

Kết quả: 12(10) = 1100(2) .

Thursday, January 15, 2015 Lập trình căn bản

TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (3)

 Thuật toán đổi nhị phân: SoBit = 0

 Bước 1: Gán Số bits = 0;

SoDu = N%2

 Bước 2: Số dư = N % 2;

 Bước 3: Lưu số dư vào mảng: Nhiphan[Sobit] = SoDu

Nhiphan[Số bit] = Số dư;

 Bước 4: Cập nhật số bị chia: N= N/2

N = [N/2]; SoBit = SoBit+1

 Bước 5: Số bit = Số bit + 1;


 Bước 6: Nếu N >0, quay lại Đúng
bước 2. Ngược lại sang bước 7.
N>0
 Bước 7: In dãy bits nhị phân. Sai

Thursday, January 15, 2015 Lập trình căn bản In dãy bits
nhị phân

TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (4)

 Chương trình đổi nhị phân

Thursday, January 15, 2015 Lập trình căn bản

 Viết đoạn chương trình nhập vào một dãy n số
nguyên và sắp xếp các số theo thứ tự tăng.

 Thuật toán: Xét hai phần tử liên tiếp i và j nếu

khơng đúng thứ tự thì đổi chỗ 2 phần tử này.

j = i+1 j = 7 = N-1

Khóa a[0] a[1] a[2] a[3] a[4] A[5] a[6] a[7]

Bước

Ban đầu 5 6 2 2 10 12 9 10

Bước 0
i = 0

2 6 5 2 10 12 9 10

Bước 1 2 5 6 10 12 9 10

Bước 2 5 6 10 12 9 10

Bước 3 6 10 12 9 10
Bước 4
i = 6 Bước 5 9 12 10 10
= N-2

10 12 10

Bước 6 10 12

Kết quả 2 2 3 5 6 9 9 10

Thursday, January 15, 2015 Lập trình căn bản

TRUY XUẤT PHẦN TỬ CỦA
MẢNG MỘT CHIỀU (5)

 Chương trình

Thursday, January 15, 2015 Lập trình căn bản

TRUY XUẤT PHẦN TỬ CỦA

MẢNG MỘT CHIỀU (6)

 Ví dụ: Chương trình sau sẽ hiển thị kết quả gì?

Các phần tử của
mảng a[0], …, a[11].
Việc truy cập a[12]
sẽ vượt ra bên
ngoài biên của
mảng.

Sửa lỗi này thế
nào??

Thursday, January 15, 2015 Lập trình căn bản

MẢNG NHIỀU CHIỀU

 Mảng nhiều chiều là mảng có từ 2 chiều trở lên.
 Điều đó có nghĩa là mỗi phần tử của mảng là một

mảng khác.
 Người ta thường sử dụng mảng nhiều chiều để lưu

các ma trận, các tọa độ 2 chiều, 3 chiều…

Thursday, January 15, 2015 Lập trình căn bản

KHAI BÁO MẢNG NHIỀU CHIỀU (1)


 Có 2 cách khai báo mảng nhiều chiều:

 Khai báo tường minh

 Khai báo không tường minh

 Chúng ta sẽ xét các cú pháp và ví dụ trên mảng 2
chiều. Mảng nhiều chiều hơn hoàn toàn tương tự.

 Khai báo mảng 2 chiều tường minh

 Cú pháp:

<Kiểu> <Tên mảng><[Số phần tử chiều 1]><[Số phần
tử chiều 2]> ;

 Ví dụ: float m[8][9]; // mảng có 8*9 phần tử là số thực.

Thursday, January 15, 2015 Lập trình căn bản

KHAI BÁO MẢNG NHIỀU CHIỀU (2)

 Khai báo mảng 2 chiều không tường minh

 Để khai báo mảng 2 chiều không tường minh, ta chỉ
cần phải chỉ ra số phần tử của chiều thứ hai.

 Cú pháp:

<Kiểu> <Tên mảng> <[]><[Số phần tử chiều 2]>;


 Ví dụ: float m[][9];

 Cách khai báo này cũng được áp dụng trong
trường hợp:

 Vừa khai báo vừa gán trị

 Mảng 2 chiều là tham số hình thức của 1 hàm.

Thursday, January 15, 2015 Lập trình căn bản

TRUY XUẤT PHẦN TỬ CỦA MẢNG
NHIỀU CHIỀU

 Cú pháp: Tên mảng[Chỉ số 1][Chỉ số 2]
 Ví dụ: matran[3][5];

 Viết chương trình cho phép nhập 2 ma trận a, b có m
dịng n cột, thực hiện phép tốn cộng hai ma trận a,b
và in ma trận kết quả lên màn hình.

Thursday, January 15, 2015 Lập trình căn bản

Thursday, January 15, 2015 Lập trình căn bản


×