Bài giảng Kỹ thuật lập trình C: Bài 6 Kiểu dữ liệu mảng, liệt kê và cấu trúc, cung cấp cho người học những kiến thức như: Kiểu dữ liệu Mảng (Array); Kiểu dữ liệu liệt kê (Enum); Kiểu dữ liệu cấu trúc (Struct). Mời các bạn cùng tham khảo!
Trang 1KỸ THUẬT LẬP TRÌNH C
BÀI 6: KIỂU DỮ LIỆU MẢNG, LIỆT KÊ VÀ CẤU TRÚC
Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com
Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com
Trang 2Nội dung
Kiểu dữ liệu Mảng (Array)
Kiểu dữ liệu Liệt Kê (Enum)
Kiểu dữ liệu Cấu Trúc (Struct)
Kiểu dữ liệu Mảng (Array)
Kiểu dữ liệu Liệt Kê (Enum)
Kiểu dữ liệu Cấu Trúc (Struct)
2
Trang 3I – Kiểu dữ liệu Mảng (Array)
Trang 41 Khái niệm Mảng
Mảng là một tập hợp nhiều biến có cùng
kiểu dữ liệu và cùng tên.
Mỗi phần tử của mảng được truy xuất thông qua chỉ số.
4
Trang 52 Cách khai báo Mảng
Cú pháp:
< kiểu_dữ_liệu > <tên_mảng>< danh_sách_các_chiều >;
Ví dụ:
int a[ 10 ]; // Khai báo mảng a gồm tối đa10 số nguyên
float b[ 100 ]; // Khai báo mảng b gồm tối đa 100 số thực
int c[ 3][2 ]; // Khai báo mảng c hai chiều kiểu số nguyên
float d[ 5 , 7 ]; // Khai báo mảng d hai chiều kiểu số thực
Trang 63 Chỉ số của Mảng
Kiểu dữ liệu của chỉ số:
Chỉ số của mảng phải là một giá trị kiểu int
Chỉ số của mảng được bắt đầu từ 0
Chỉ số của mảng không được vượt quá kích thước của mảng
Ví dụ:
int a [ 5 ]; /* Mảng các số nguyên a sẽ bao gồm 5
phần tử là a[0], a[1], a[2], a[3], a[4] */
6
Trang 74 Lấy địa chỉ của phần tử mảng
Chỉ lấy được địa chỉ của các phần tử thuộc
mảng một chiều thông qua toán tử & theo cú pháp:
&tên_biến [ i ] với i là chỉ số của mảng
Tên của mảng chứa địa chỉ đầu của mảng.
Ví dụ: có mảng int a [ 10 ] thì a = &a [ 0 ]
Trang 85 Nhập, xuất dữ liệu cho các phần tử Mảng
Nhập xuất trực tiếp
Nhập, xuất trực tiếp chỉ sử dụng được với mảng
có kiểu dữ liệu int
Nhập trực tiếp giá trị vào địa chỉ của phần tử
8
Trang 105 Nhập, xuất dữ liệu cho các phần tử Mảng
Nhập xuất gián tiếp
Nhập, xuất gián tiếp sử dụng được cho tất cả các mảng
Nhập giá trị vào một biến tạm, rồi sau đó gán giá trị của biến tạm đó cho phần tử của mảng
10
Trang 11getch ();
Trang 126 Ví dụ minh họa Mảng
Bài 1: Viết chương trình nhập vào một
mảng nguyên gồm có 5 phần tử Tính tổng của tất cả các phần tử, và xuất kết quả.
12
Trang 16II – Kiểu Liệt kê (Enum)
Khái niệm:
Kiểu enum là kiểu liệt kê
Khi định nghĩa enum là ta có được một kiểu dữ liệu mới.
Một phần tử liệt kê tương ứng là một số nguyên và cách
nhau bởi dấu phẩy.
Ta có thể gán lại giá trị số cho phần tử liệt kê Giá trị của
một phần tử nếu không ghi rõ thì sẽ bằng giá trị phần tử
trước đó tăng thêm 1.
Cú pháp:
enum <tên_kiểu> { <danh_sách_các_phần_tử> };
16
Trang 17II – Kiểu Liệt kê (Enum)
VD:
enum weekday
{
SUNDAY , MONDAY , TUESDAY = 4 , WEDSDAY ,
THURSDAY , FRIDAY = 9 , SATURDAY
Trang 18III – Kiểu Cấu trúc (Struct)
Khái niệm và định nghĩa
Khai báo kiểu cấu trúc
Định nghĩa kiểu bằng typedef
Truy cập đến các thành phần của cấu trúc
Bài tập minh họa
18
Trang 191 Khái niệm kiểu cấu trúc
Kiểu cấu trúc là một kiểu dữ liệu gồm nhiều thành phần, các thành phần có thể thuộc nhiều kiểu khác nhau
Các thành phần của cấu trúc được truy cập thông qua tên của thành phần
Khi khai báo một cấu trúc là ta có thêm một kiểu
dữ liệu mới, kiểu này có tên là tên của kiểu cấu
trúc và trước nó có từ struct
Trang 202 Khai báo kiểu cấu trúc
Trang 212 Khai báo kiểu cấu trúc
Trang 223 Định nghĩa kiểu bằng typedef
Ngôn ngữ C cho phép ta đặt lại tên kiểu cho
riêng mình bằng câu lệnh typedef.
Khi đặt lại tên cho kiểu, ta có được tên kiểu
mới; đồng thời, tên kiểu cũ vẫn còn có tác dụng.
Cú pháp:
typedef <kiễu_đã_có> <kiểu_mới> ;
Ví dụ:
typedef int so_nguyen ;
typedef struct hoc_sinh HOC_SINH ;
22
Trang 234 Truy cập đến các thành phần của cấu trúc
Các thành phần của kiểu dữ liệu cấu trúc được
truy cập thông qua tên biến kiểu cấu trúc và tên
Trang 245 Bài tập minh họa
Viết chương trình cho theo mô tả sau:
Thông tin cho một học sinh gồm có họ tên,
điểm toán, điểm văn và điểm trung bình Hãy nhập vào n học sinh và xuất ra thông tin của học sinh có điểm trung bình cao nhất, với n là một một số nguyên nhập từ bàn phím, n <=
100.
24
Trang 26printf ( “\nNhap vao thong tin hoc sinh thu %d” , i + 1 );
printf ( “\n\tHo ten” );
gets ( ten );
strcpy ( mang_hs [ i ] ho_ten , ten );
printf ( “\n\tToan: ” );
scanf ( “%f” , & diem );
mang_hs [ i ] diem_toan = diem ;
printf ( “\n\tVan: ” );
scanf ( “%f” , & diem );
mang_hs [ i ] diem_van = diem ; mang_hs [ i ] diem_tb = ( mang_hs [ i ] diem_toan +
mang_hs [ i ] diem_van ) / 2.0 ;
}
Trang 27// tim diem trung binh cao nhat
float max = mang_hs [ 0 ] diem_tb ;
// xuat thong tin cac hoc sinh co diem cao nhat
printf ( “%s ” , mang_hs [ i ] ho_ten );
printf ( “%f ” , mang_hs [ i ] diem_toan );
printf ( “%f ” , mang_hs [ i ] diem_van );
printf ( “%f ” , mang_hs [ i ] diem_tb );
} }
Trang 28Hỏi - Đáp
28
Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com
Hoàng Quốc Tuấn tuanhq@fpt.edu.vn http://hoangquoctuanpro.wordpress.com