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

Bài giảng lập trình c chương 4 GV nguyễn văn hùng

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 (777.44 KB, 49 trang )

LẬP TRÌNH C++
(3 Tín chỉ)
Gv: Nguyễn Văn Hùng
Khoa: Khoa học máy tính
Ngôn ngữ lập trình C++

1/54
1/41


CHƯƠNG 4: MẢNG VÀ CHUỖI KÝ TỰ




Mục tiêu
 Giới thiệu các kiến thức về Mảng và Chuỗi ký tự như:
khái niệm, cách khai báo, cách truy xuất tới từng phần
tử mảng.
Nội dung
 Khái niệm mảng
 Mảng một chiều
 Mảng hai chiều
 Chuỗi ký tự

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 2/44


4.1 Kiểu mảng


 Khái niệm
- Mảng là tập hợp hữu hạn các phần tử liên tiếp nhau có cùng
kiểu dữ liệu, cùng tên và được truy cập thông qua chỉ số
mảng.
- Trong đó kiểu dữ liệu có thể là các kiểu dữ liệu cơ bản: int,
char, float, … hoặc các kiểu dữ liệu có cấu trúc như: kiểu
mảng, kiểu cấu trúc, kiểu con trỏ, …
 Phân loại mảng
- Mảng một chiều
- Mảng nhiều chiều
Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 3/44


4.2 Mảng một chiều
1. Khai báo
 Truy
Khai báo
vớitử
số mảng
phần tử xác định
2.
cậpmảng
phần

 Khai
pháp:báo
mảng với
phần tử không

xác định
Kiểu
Tênsốmảng[Số
phần tử];
Trong

dụ: đó:
int

a[10];

- Kiểu
là kiểu
dữ liệu
của
cácliên
phần
mảng
Lúc
này, máy
sẽ dành
một
dãy
tiếptửcác
ô nhớ, mỗi ô nhớ có
kích thước 2 bytes dùng để lưu một phần tử mảng và được đánh số
- Tên mảng được đặt theo quy tắc đặt tên trong C++
bắt đầu từ 0 đến 9 (Số phần tử - 1).
- Số phần tử là một hằng số nguyên hoặc một biểu thức mà giá
trị của nó là một hằng số nguyên.


a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 4/44


4.2 Mảng một chiều
 Khai báo mảng với số phần tử xác định
Có thể vừa khai báo vừa gán giá trị cho mảng theo cú pháp
sau:
Kiểu Tên mảng[Số phần tử] = {Các giá trị cần gán };
Ví dụ: float Sothuc[5]= {2.3, 1.5, 0.34, 5.04, 7.213};

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 5/44


4.2 Mảng một chiều
 Khai báo mảng với số phần tử xác định
Ví dụ: Kiểm tra tính đúng/sai của các khai báo mảng sau:
1. char

Kytu[4+6];

Trường hợp
2. float
10Sothuc[10];
không biết chính

3. double b[2.3];
xác số phần tử
của
mảng
4. int
c[5] = {3.15, 7, 0.55, 2.75, 9};
?

5. float

d[10] = {2.3, 5, 4.6, 5.5, 7.21};

6. int

e[5] = {1, 2, 3, 4, 5, 6, 7};

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 6/44


4.2 Mảng một chiều
1. Khai báo
 Khai báo mảng với số phần tử không xác định
Kiểu khai báo này được sử dụng khi ta không biết chính
xác số phần tử của mảng. Và được áp dụng trong các
trường hợp:
• Vừa khai báo vừa gán giá trị cho mảng
• Khai báo mảng là tham số hình thức của hàm


Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 7/44


4.2 Mảng một chiều
 Khai báo mảng với số phần tử không xác định
• Vừa khai báo vừa gán giá trị cho mảng
Cú pháp:
Ví dụ: int

Kiểu Tên mảng[] ={Các giá trị cần gán };
b[] = {2, 5, 3, -4, 7, 6};

char Ten[] = "Lap trinh";
char Kytu[] = {'H', 'E', 'L','L', 'O'};

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 8/44


4.2 Mảng một chiều
 Khai báo mảng với số phần tử không xác định
• Khai báo mảng là tham số hình thức của hàm
Ví dụ: Định nghĩa hàm sắp xếp mảng số nguyên a:
int

Sapxep(int a[], int n)


{
thân hàm
}

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 9/44


4.2 Mảng một chiều
 Khai báo mảng với số phần tử không xác định
Ví dụ: Xét 2 cách khai báo sau:
int a[5] = {1, 2, 3, 4, 5};
int b[] = {1, 2, 3, 4, 5};
Làm thế nào để xác định số phần tử của mảng?
=> Có thể sử dụng hàm sizeof() để lấy số phần tử mảng
sizeof(Tên mảng)/ sizeof(Kiểu)

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 10/44


4.2 Mảng một chiều
2. Truy cập phần tử mảng
Mỗi phần tử mảng được truy cập thông qua

- Tên mảng
- Chỉ số đặt trong
cặp dấu [ ]


Ten_mang [Chi_so]
Ví dụ 4.7: Ta có khai báo
int a[50];
Chỉ số (vị trí)

0

1

2

49

…………..

Tên mảng: a

a[0] a[1] a[2]
Phần tử: Thứ nhất
Ngôn ngữ lập trình C++

..…………

Thứ hai

Thứ ba

a[49]
Cuối cùng

Chương 4: Mảng và chuỗi ký tự 11/44


4.2 Mảng một chiều
2. Truy cập phần tử mảng
Với cách truy cập này, Tên mảng[Chỉ số] giống như một
biến có kiểu dữ liệu là kiểu dữ liệu của mảng.
=> Thao tác nhập/xuất với từng phần tử mảng cũng giống
như với một biến
Ví dụ 1: Ta có khai báo mảng và gán giá trị như sau:
int

a[3];

a[0] = 4; a[1] = 45; a[2] = 65;
cout<Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 12/44


4.2 Mảng một chiều
2. Truy cập phần tử mảng
Ví dụ 2: Khai báo mảng số thực gồm 10 phần tử. Nhập các
giá trị vào cho các phần tử mảng sau đó hiển thị ra màn hình
các giá trị vừa nhập.
float a[10];
cout<<“a[0]= ”; cin>>a[0];
cout<<“a[1]= ”; cin>>a[1];
cout<<“a[2]= ”; cin>>a[2];

….
Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 13/44


4.2 Mảng một chiều
2. Truy cập phần tử mảng
float a[10];
cout<<"Nhap gia tri vao: ";
for (int i=0;i<=9;i++)
cout<<"a["<cout<<"Cac gia tri vua nhap la: "<for (i=0;i<10;i++)
cout<Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 14/44


4.2 Mảng một chiều
Lưu ý:
- C++ là ngôn ngữ không hỗ trợ cơ chế kiểm tra biên; có
nghĩa là nếu truy cập vào phần tử mảng mà chỉ số mảng nhỏ
hơn 0 hoặc lớn hơn so_phan_tu – 1 thì chương trình vẫn
không bị lỗi.
Ví dụ: đoạn chương trình sau không bị lỗi
int a[10], i;
for (i=0; i<100; i++)
a[i] = i;

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 15/44


4.2 Mảng một chiều
Bài tập 1: Khai báo mảng số nguyên gồm 20 phần tử. Nhập
giá trị vào cho các phần tử mảng sau đó in ra các giá trị vừa
nhập.
Bài tập 2: Viết chương trình nhập giá trị vào cho các phần tử
mảng số thực gồm n phần tử (với n nguyên dương được nhập
vào từ bàn phím). Sau đó, tính và in ra tổng giá trị của các
phần tử mảng.

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 16/44


4.3 Mảng hai chiều
1. Khái niệm
Mảng hai chiều là mảng trong đó kiểu phần tử của mảng là
kiểu mảng.
2. Khai báo
- Khai báo mảng với số phần tử xác định
- Khai báo mảng với số phần tử không xác
định

Ngôn ngữ lập trình C++


Chương 4: Mảng và chuỗi ký tự 17/44


4.3 Mảng hai chiều
- Khai báo mảng với số phần tử xác định
Cú pháp:
Kiểu_dl Tên_mảng[số_ptử_chiều_1] [số_ptử_chiều_2];
Trong đó:
Kiểu_dl: có thể là các kiểu dữ liệu cơ bản hoặc kiểu dữ liệu
có cấu trúc
Số_ptử_chiều_1, Số_ptử_chiều_2: là hằng số nguyên hoặc
biểu thức mà kết quả trả về là hằng số nguyên.
Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 18/44


4.3 Mảng hai chiều
- Khai báo mảng với số phần tử xác định
Ví dụ: Ta có khai báo mảng 2 chiều gồm 3 hàng, 4 cột lưu trữ
các số nguyên như sau:
int SoNguyen[3][4];
Lúc này, mày sẽ cấp phát vùng nhớ để lưu trữ mảng như sau:
Cột 1

Cột 4

Hàng 1,chỉ số 0
Ngôn ngữ lập trình C++


Hàng 2, chỉ số 1

Hàng 3,chỉ số 2
Chương 4: Mảng và chuỗi ký tự 19/44


4.3 Mảng hai chiều
- Khai báo mảng với số phần tử xác định
Ta có thể vừa khai báo vừa gán giá trị cho phần tử mảng.
Cú pháp:
Kiểu_dl Tên_mảng[số_pt_chiều_1][số_pt_chiều_2]
= {các giá trị cần gán};
Ví dụ: Ta có khai báo
double A[2][3] = {{2.45, 3.33, 1.07},{9.0, 6.57, -4.03}};

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 20/44


4.3 Mảng hai chiều
- Khai báo mảng với số phần tử không xác định
Tuy khai báo mảng với số phần tử không xác định nhưng vẫn
phải chỉ ra số phần tử của chiều thứ 2.
Cách khai báo này được áp dụng trong hai trường hợp:
+ Vừa khai báo vừa gán giá trị cho mảng
+ Khai báo mảng là tham số hình thức của hàm

Ngôn ngữ lập trình C++


Chương 4: Mảng và chuỗi ký tự 21/44


4.3 Mảng hai chiều
- Khai báo mảng với số phần tử không xác định
+ Vừa khai báo vừa gán giá trị cho mảng
Cú pháp:
Kiểu_dl Tên_mảng[][số_pt_chiều_2]={các giá trị cần gán};
Ví dụ: Ta có khai báo
float A[][3] = {{2.45, 3.33, 1.07},{9.0, 6.57, -4.03}};

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 22/44


4.3 Mảng hai chiều
- Khai báo mảng với số phần tử không xác định
+ Khai báo mảng là tham số hình thức của hàm
Cú pháp:
Kiểu_dl Tên_hàm(kiểu_dl Tên_mảng[][số_pt_chiều2],…);
Ví dụ: Ta có khai báo hàm tính tổng các phần tử của mảng:
int

Tong(int A[][10], int m, int n);

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 23/44



4.3 Mảng hai chiều
3. Truy cập phần tử mảng
- Phần tử mảng được truy cập thông qua tên mảng theo sau là
các chỉ số hàng, cột và được đặt trong cặp dấu ngoặc vuông []
Cú pháp: Tên_mảng[chỉ_số_1][chỉ_số_2];
Ví dụ: Để truy cập đến phần tử đầu tiên của mảng 2 chiều A
ta viết: A[0][0]
- Lúc này Tên_mảng[chỉ_số_1][chỉ_số_2] được xem như là
một biến độc lập có kiểu dữ liệu là kiểu dữ liệu của mảng. Do
đó, các thao tác trên phần tử mảng cũng giống như với biến
Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 24/44


4.3 Mảng hai chiều
Bài tập 3: Viết chương trình khai báo và gán giá trị cho
mảng 2 chiều gồm 2 hàng, 3 cột các số thực. Sau đó, hiển thị
ra màn hình theo dạng ma trận.
Bài tập 4: Viết chương trình nhập các giá trị vào cho ma trận
A gồm m hàng, n cột. Với m, n nguyên dương được nhập
vào từ bàn phím. Sau đó hiển thị mảng ra màn hình theo
dạng ma trận.

Ngôn ngữ lập trình C++

Chương 4: Mảng và chuỗi ký tự 25/44



×