Bài giảng Tin học đại cương - Phần 3: Lập trình C - Chương 5: Mảng, con trỏ và xâu ký tự
Phần 3: Lập trì nh C
Nội dung chí nh
• Chương 1: Tổng quan về ngôn ngữ C
• Chương 2: Kiểu dữ liệu và biểu thức trong C
• Chương 3: Vào ra dữ liệu
• Chương 4: Cấu trúc điều khiển
• Chương 5: Mảng, con trỏ và xâu ký tự
• Chương 6: Cấu trúc
• Chương 7: Hàm
• Chương 8: Tệp dữ liệu
01-Jan-16
239
Chương 5: Mảng, con trỏ và xâ u ký tự
Nội dung chí nh
1. Mảng
• Khá i niệm
• Khai báo và sử dụng
• Cá c thao tác thường gặp
2. Con trỏ
• Khái niệm và cách khai bá o
• Toá n tử địa chỉ (&), toá n tử nội dung (*)
• Phé p toá n trên con trỏ
• Con trỏ và mảng
3. Xâ u ký tự
• Khái niệm, khai báo và sử dụng
• Cá c hàm xử lý ký tự và xâ u ký tự
• Mảng xâu ký tự
01-Jan-16
240
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Giới thiệu
Bài toá n:
• Nhập điểm thi (số nguyên) mô n Tin đại cương cho lớp gồm
50 sinh viên rồi đưa ra số lượng sinh viên phải học lại
Phương pháp: Điểm của mỗi sinh viên là 1 biến
• Tên biến là tên sinh viên
Ví dụ: int An, Anh, Binh1, Binh2, Cuong,….. Van, Viet;
• Tên biến dạng “dx” với x là chỉ số thứ tự của SV trong lớp
Ví dụ: int d1, d2, d3,……,d50;
Nhận xé t 1: Khô ng hợp lý
• Có quá nhiều biến (Điểm thi cho toàn trường.. !?)
• Khó khăn cho các thao tá c duyệt toàn bộ danh sá ch
– Số SV học lại: if(d1 <5) d++; if(d2 <5) d++; ……if(d50 <5)d++;
Nhận xé t 2: Các biến có chung ý nghĩa, tính chất
01-Jan-16
241
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Giới thiệu
• Trong thực tế, thường gặp cá c đối tượng có
tính chất chung
– Thá ng trong năm
– Điểm trung bình của sinh viên trong lớp
• Cá c đối tượng được nhóm lại dưới một tên
• Đối tượng được đặc trưng bởi tên nhó m và
thứ tự trong nhó m
– Tháng thứ 3 trong năm: Tháng 3
– Sinh viên thứ 17 trong lớp:…
• Số thứ tự của đối tương trong nhó m là chỉ
phần tử
01-Jasn-1ố6
242
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Khái niệm mảng
• Kiểu mảng là một kiểu dữ liệu gồm
– Một số hữu hạn thành phần.
– Cá c thành phần có cùng một kiểu: kiểu cơ sở
hay là kiểu thành phần.
• Mỗi phần tử của mảng được tham khảo
thô ng qua
– Tên mảng và
–Chỉ số của phần tử trong mảng
Ví dụ:
– <d7>: Điểm thi tin của sinh viên thứ tự 7 trong lớp
01-Jan-16
243
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Khai bá o mảng
Kiểu_dữ_liệu Tên_Mảng[Kích thước];
• Kiểu_dữ_liệu: kiểu của các phần tử trong
mảng (nguyên, thực, ký tự, chuỗi, mảng,…)
• Tên_mảng: tên của mảng
• Kích_thước_mảng: số phần tử trong mảng
Ví dụ
// khai báo mảng 50 phần tử có kiểu dữ liệu int
int DiemTin[50];
float A[10]; // Mảng 10 phần tử kiểu số thực
01-Jan-16
244
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Cấp phát bộ nhớ cho mảng
• Các phần tử trong mảng được cấp phá t cá c
ô nhớ kế tiếp nhau trong bộ nhớ
• Kích thước của mảng bằng kích thước một
phần tử nhâ n với số phần tử
Ví dụ:
int A[10];//Mảng A gồm 10 phần tửnguyên
A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9]
Kích thước của mảng A: 10 x 2 = 20 bytes
01-Jan-16
245
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Truy nhập đến thành phần của mảng
• Biến mảng lưu trữ địa chỉ ô nhớ đầu tiên
trong vùng nhớ được cấp phá t
• Ngôn ngữ C đánh chỉ số các phần tử trong
mảng bắt đầu từ 0
• Cá c phần tử của mảng được truy nhập
thô ng qua
– Tên mảng và
– Chỉ số của phần tử của phần tử trong mảng
Tên_Mang[Chỉ_số_phần_tử];
01-Jan-16
246
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Truy nhập đến thành phần của mảng→Ví dụ
int A[10];//Mảng A gồm 10 phần tửnguyên
A[2] A[3]
A[5] A[6] A[7] A[8] A[9]
7 5
7
A
A[0]
A[4]
A[9]
A[0] = 7;
A[1] = 5;
A[4] = 7;
int N = A[1] + A[4]; → N = 12
01-Jan-16
247
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Ví dụ
intA[10];
for(int i = 0; i < 10; i++) A[i]= 2* i;
10
16
18
0 2 4 6 8
12
14
0
i : 142 7
15630
9 8
Chú ý: C khô ng kiểm tra vượt quá giới hạn
của mảng khi truy nhâ p
int A[3], B[4], C[3];
A[0] A[1] A[2] B[0] B[1] B[2] B[3] C[0] C[1] C[2]
A[5] B[2] C[-2] nếu c/cấp liên tiếp
01-Jan-16
248
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Mảng nhiều chiều
• Mỗi phần tử của mảng có thể là một mảng
Mảng nhiều chiều
Kiểu Tên[Chiều_1] [Chiều_2]… [Chiều_N];
• Kiểu: Kiểu của mỗi phần tử trong mảng
• Chiều_1, Chiều_2,…Chiều_N: Cá c hằng số
nguyên, cho biết kích thước (số phần tử) của mỗi
chiều
• Mảng gồm: Chiều_1 x Chiều_2 x...x Chiều_N
phần tử được lưu trữ trong vùng nhớ liên tục. Cá c
phần tử thuộc kiểu Kiểu
01-Jan-16
249
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Mảng nhiều chiều
int t[3][4] ;
t[0]
t[1]
t[2]
t[0][0] t[0][1] t[0][2] t[0][3]
t[1][0] t[1][1] t[1][2] t[1][3]
t[2][0] t[2][1] t[2][2] t[2][3]
t[1][0] t[1][1] t[1][2] t[1][3]
01-Jan-16
250
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Mảng nhiều chiều→Ví dụ
int b[3][4][5];
b[2][2][4]
b[0][1][2]
b[2]
b[1]
b[0]
• Mảng b gồm 3 phần tử b[0], b[1], b[2]
• Mỗi phần tử là mảng hai chiều gồm 4 hàng
(hàng 0, 1, 2, 3) và 5 cột (0, 1, 2, 3, 4)
• Mỗi phần tử có kiểu nguyên có dấu, 2 byte
01-Jan-16
251
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Khởi tạo giá trị cho mảng
Các phần tử của mảng có thể được khởi tạo
giá trị ngay khi khai bá o
Ví dụ
int a[4] = {1,4,6,2};
int b[2][3]={ {1,2,3}, {4,5,6} };
int t[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
};
01-Jan-16
252
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Khởi tạo giá trị cho mảng → Chú ý
• Số lượng giá trị khởi tạo khô ng được lớn
hơn số lượng phần tử trong mảng
– Nếu số lượng này nhỏ hơn, các phần tử còn lại
được khởi tạo giá trị 0
int A[3][4] = { {1}, {4,5} };
int A[3][4] = { };Tất cả đều mang giá trị 0
• Có thể xác định kích thước mảng thô ng qua
số giá trị khởi tạo nếu để trống kích thước
mảng
int A1 [8] = {2, 4, 6, 8, 10, 12, 14, 16};
int A2 [] = {2, 4, 6, 8, 10, 12, 14, 16};
01-Jan-16
253
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Cá c thao tá c thường gặp
• Nhập/Xuất dữ liệu cho mảng
– Mảng 1 chiều, ma trận
• Bài toá n đếm
– Đếm số phần tử
– Tí nh toá n trên các phần tử..
• Tìm kiếm phần tử
– Lớn nhất/nhỏ nhất/bất kỳ
• Sắp xếp phần tử trong mảng
– Theo thứ tự, theo nguyên tắc
• Chè n thêm phần tử, xóa phần tử
01-Jan-16
254
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Nhập dữ liệu
Dùng hàm scanf()
Ví dụ:
int Table[10];
• Nhập dữ liệu cho một phần tử
scanf(“%d”,&Table[2]);phần tử thứ 3 của mảng
• Nhập dữ liệu cho cả mảng
– Dùng vòng lặp for
for(i = 0; i < 10; i++)
scanf(“%d”,&Table[i]);
– Nên in ra chỉ số phần tử khi nhập
printf(“Table[%d] : ”,i); scanf(“%d”,&Table[i])
01-Jan-16
255
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Nhập dữ liệu→Ví dụ 1
Nhập vào lượng mưa (mm) trong năm
#include <stdio.h>
#define MONTHS 12
int main(){
int rainfall[MONTHS], i;
for ( i=0; i < MONTHS; i++ ){
printf(“Nhap luong mưa tháng %d: “, i+1);
scanf("%d", &rainfall[i] );
}
return 0;
}
01-Jan-16
256
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Nhập dữ liệu→Lưu ý
• Nếu số phần tử của mảng chỉ được biết tại
thời điểm thực hiện chương trình (nhưng biết
số phần tử tối đa)
– Khai báo mảng với kích thước tối đa
– Sử dụng biến nguyên lưu số phần tử thực sự của
mảng.
Ví dụ:
• Nhập vào mảng không quá 100 số thực
– Khai báo mảng thực Table có tối đa 100 phần tử.
– Nhập số phần tử thực sự của mảng
– Nhập giá trị cho từng phần phần tử (dùng for)
01-Jan-16
257
Chương 5: Mảng, con trỏ và xâ u ký tự
5.1 Mảng
Nhập dữ liệu→Ví dụ 2
#include<stdio.h>
void main(){
floatA[100];
int n, i;
do{
printf(“\n Cho biet so phan tu cua mang: “);
scanf(“%d”,&n);
}while (n>100 || n<=0);
for(i = 0; i < n; i++){
printf(“A[%d] = ", i); scanf("%f",&A[i]);
}
}
01-Jan-16
258
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 Tin học đại cương - Phần 3: Lập trình C - Chương 5: Mảng, con trỏ và xâu ký tự", để 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_tin_hoc_dai_cuong_phan_3_lap_trinh_c_chuong_5_mang.pptx

