Bài giảng Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc (Struct) - Nguyễn Thanh Hùng
Trong C, structure (gọi tắt là struct) ~ kiểu dữ liệu bản ghi (record) trong Pascal.
Kiểu dữ liệu cấu trúc (struct) là kiểu dữ liệu phức hợp bao gồm nhiều thành phần, mỗi thành phần có thể thuộc những kiểu dữ liệu khác nhau.
Các thành phần dữ liệu trong cấu trúc được gọi là các trường dữ liệu (field).
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 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc (Struct) - Nguyễn Thanh Hùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Tin học đại cương - Phần 2: Lập trình bằng ngôn ngữ C - Bài 7: Cấu trúc (Struct) - Nguyễn Thanh Hùng
1 TIN HỌC ĐẠI CƯƠNG PHẦN 2: LẬP TRÌNH BẰNG NGÔN NGỮ C BÀI 7: CẤU TRÚC (struct) KHOA C¤NG NGHÖ TH¤NG TIN FACULTY OF INFORMATION TECHNOLOGY 2 Bài 7: Cấu trúc (struct) 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc 7.5. Bài tập 3 Bài 7: Cấu trúc (struct) 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc 7.5. Bài tập 4 7.1. Khái niệm cấu trúc Trong C, structure (gọi tắt là struct) ~ kiểu dữ liệu bản ghi (record) trong Pascal. Kiểu dữ liệu cấu trúc ( struct ) là kiểu dữ liệu phức hợp bao gồm nhiều thành phần, mỗi thành phần có thể thuộc những kiểu dữ liệu khác nhau. Các thành phần dữ liệu trong cấu trúc được gọi là các trường dữ liệu ( field ). 5 7.1. Khái niệm cấu trúc (tiếp) “Mô tả” đối tượng có nhiều phần thông tin, ví dụ quản lý hồ sơ cán bộ, sinh viên Ví dụ: Cấu trúc mô tả sinh viên: Cần lưu giữ các thông tin liên quan đến sinh viên như họ tên, tuổi, kết quả học tập Mỗi thông tin thành phần lại có kiểu dữ liệu khác nhau Họ tên có kiểu dữ liệu là xâu kí tự Tuổi có kiểu dữ liệu là số nguyên Kết quả học tập có kiểu dữ liệu là số thực. 6 Bài 7: Cấu trúc (struct) 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử lí dữ liệu cấu trúc 7.4. Mảng cấu trúc 7.5. Bài tập 7 7.2.1. Khai báo kiểu dữ liệu cấu trúc Cú pháp: struct ten_cau_truc { ; }; Ví dụ: struct Sinh_Vien { char ma_so_sinh_vien[10]; char ho_va_ten[30]; float diem_TinDC; }; 8 7.2.2. Khai báo biến cấu trúc Cú pháp: ten_cau_truc ten_bien_cau_truc; Hoặc: struct ten_cau_truc ten_bien_cau_truc; Ví dụ: Sinh_Vien a, b, c; Hoặc: struct Sinh_Vien a, b, c; 9 7.2.3. Khai báo kết hợp Có thể kết hợp vừa khai báo kiểu dữ liệu cấu trúc vừa khai báo biến cấu trúc: struct [ten_cau_truc] { //khai_bao_cac_truong; } ten_bien_cau_truc; Ví dụ: struct Thi_Sinh { char SBD[10]; // so bao danh char ho_va_ten[30]; float ket_qua; } ts1, ts2; 10 Struct lồng nhau Struct có thể lồng nhau. Ví dụ: struct Dia_Chi{//địa chỉ int so_nha; char ten_pho[20]; char thanh_pho[20]; }; struct Nhan_Su{ //nhân sự char ho_ten[20]; Dia_Chi address; //trường address có kiểu địa chỉ float he_so_luong; }; 11 7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef Đặt tên mới cho kiểu dữ liệu cấu trúc cú pháp: typedef struct tên_cũ ten_moi; Hoặc có thể định nghĩa kiểu dữ liệu cấu trúc ngay khi khai báo bằng cú pháp typedef struct [tên_cũ] { //khai_bao_cac_truong; }danh_sach_cac_tên_mới; Lưu ý : Được ph é p đặt t ê n_mới tr ù ng với t ê n_cũ. 12 7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef (tiếp) Ví dụ: struct point_3D { float x, y, z; } P; struct point_3D M; typedef struct point_3D p_ 3D; p_ 3D N; 13 7.2.4. Định nghĩa kiểu dữ liệu cấu trúc với typedef (tiếp) Ví dụ (tiếp): typedef struct hocsinh { char hoten[35]; char lop[7]; float diemtoan, diemly, diemhoa; } HOCSINH; HOCSINH hs1, hs2; 14 Bài 7: Cấu trúc (struct) 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử l ý dữ liệu cấu trúc 7.4. Mảng cấu trúc 7.5. Bài tập 15 7.3. Xử l ý dữ liệu cấu trúc Truy nhập các trường dữ liệu của cấu trúc Phép gán giữa c á c biến cấu trúc Con trỏ cấu trúc 16 7.3.1. Truy nhập các trường dữ liệu của cấu trúc Cú pháp : t e n_bi e n_c a u_tr u c.t e n_tr uo ng V í dụ: struct point_2D { char ten_diem; float x, y; } p; Truy cập tên của 1 điểm: p.ten_diem 17 Vấn đề vào ra dữ liệu cho các biến struct Cũng như dữ liệu kiểu mảng, không thể nhập/xuất dữ liệu trực tiếp cho struct mà cần phải nhập/xuất dữ liệu lần lượt cho từng trường của struct. Ví dụ, để nhập dữ liệu cho biến sv1 , có thể viết như sau: printf(“Nhap SBD:”); scanf(“%d”,&sv1.sbd); printf(“Nhap ho ten:”); fflush(stdin); //xoá bộ đệm, nếu không sv1.sbd sẽ nhận giá trị “3” !!! gets(sv1.ho_ten); printf(“Nhap diem thi:”); scanf(“%f”,&sv1.diem_thi); //In kết quả ra màn hình: printf(“SBD:%d\nHo ten:%s\nDiem:%d”,sv1.sbd,sv1.ho_ten,sv1.diem_thi); 18 7.3.2. Phép gán giữa các biến cấu trúc Giả sử ta c ó 2 biến cấu tr ú c l à a v à b c ó c ù ng kiểu dữ liệu l à một cấu tr ú c n à o đ ó . Ph é p g á n cấu tr ú c c ó c ú ph á p tương tự như ph é p g á n th ô ng thường: bien_cau_truc_1 = bien_cau_truc_2; 19 7.3.3. Con trỏ cấu trúc Cú pháp: struct t en_cau_truc * ten_bien_con_tro_ctruc ; Có 2 cách truy nhập vào trường dữ liệu của cấu trúc từ biến con trỏ cấu trúc là (* ten_bien_con_tro_ctruc ). ten_truong_du_lieu Hoặc: ten_bien_con_tro_ctruc -> ten_truong_du_lieu 20 Con trỏ struct Ví dụ: struct SinhVien *p; //hoac SinhVien *p; struct SinhVien sv, *psv;//psv là con trỏ printf(“Nhap SBD: ”);scanf(“%d”,&sv.sbd); psv = &sv;//lấy địa chỉ của biến sv printf(“SBD vua nhap:%d”, psv->sbd); printf(“Nhap lai SBD:”); scanf(“%d”,&(psv->sbd)); printf(“SBD vua nhap:%d”, (*psv).sbd); 21 Chú ý Trong ví dụ trước, chúng ta rút ra một số nhận xét: &sv cho ta địa chỉ của struct sv *psv là nội dung của bản ghi có địa chỉ là psvpsv->sbd và (*psv).sbd là tương đương. 22 Bài 7: Cấu trúc (struct) 7.1. Khái niệm cấu trúc 7.2. Khai báo và sử dụng cấu trúc 7.3. Xử l ý dữ liệu cấu trúc 7.4. Mảng cấu trúc 7.5. Bài tập 23 7.4. Mảng cấu trúc Cú pháp: struct ten_cau_truc ten_mang_ctruc [s o_ptu ]; Ví dụ: struct sinh_vien { char ho_ten[20]; float diem_thi; }; struct sinh_vien lop_Tin5[80]; 24 Truyền tham số struct cho hàm Hàm trong C cho phép truyền tham số là struct. Hãy xem ví dụ sau đây (hàm viết thông tin một sinh viên ra màn hình): void in_sinh_vien(sinh_vien sv){ printf(“\nHo ten: %s\nDiem thi: %4.1f, sv.ho_ten, sv.diem_thi); } Trong ví dụ trên, sv được truyền theo kiểu “tham trị”. Muốn truyền “tham biến”, hãy sử dụng con trỏ struct. 25 Ví dụ #include #include #include void main() { struct sinh_vien { char ma_sv[10]; char ho_ten[20]; float diem_thi; }; struct sinh_vien sv[3]; int i; clrscr(); 26 Ví dụ (tiếp) for(i=0;i<3;i++) { char str[20]; float diem; printf(“\nNhap thong tin cho sinh vien %d”,i+1); printf(“\nMa so sinh vien:”); fflush(stdin); gets(str); strcpy(sv[i].ma_sv,str); printf(“\n Ho va ten: “); fflush(stdin); gets(str); strcp(sv[i].ho_ten,str); printf(“\n Diem thi: “); scanf(“%f”,&diem); sv[i].diem_thi = diem; } 27 Ví dụ (tiếp) printf(“\n Thong tin ve cac sinh vien”); for(i=0;i<3;i++) { printf(“\n Sinh vien thu %d ”,i+1); printf(“%-10s %-20s %3.1f”, sv[i].ma_sv, sv[i].ho_ten, sv[i].diem_thi); } getch(); } 28 Ví dụ - Kết quả Nhap thong tin cho sinh vien thu 1 Ma so sinh vien: SV0032 Ho va ten: Nguyen Thanh Binh Diem thi: 8.5 Nhap thong tin cho sinh vien thu 2 Ma so sinh vien: SV0002 Ho va ten: Pham Hong Phuc Diem thi: 9 Nhap thong tin cho sinh vien thu 3 Ma so sinh vien: SV0046 Ho va ten: Le Minh Hoa Diem thi: 10 Thong tin ve cac sinh vien Sinh vien thu 1: SV0032 Nguyen Thanh Binh 8.5 Sinh vien thu 2: SV0002 Pham Hong Phuc 9.0 Sinh vien thu 3: SV0046 Le Minh Hoa 10.0 29 Bài tập Viết 1 chương tr ì nh thực hiện những c ô ng việc sau: Y ê u cầu người d ù ng nhập v à o một số nguy ê n dương n với 5 n 20 (c ó kiểm tra t í nh hợp lệ của gi á trị được nhập v à o, nếu gi á trị n nhập v à o kh ô ng thỏa m ã n điều kiện th ì y ê u cầu nhập lại) Y ê u cầu người d ù ng nhập v à o th ô ng tin của n sinh vi ê n gồm những mục sau Họ v à t ê n: c ó kiểu dữ liệu l à x â u k í tự gồm kh ô ng qu á 30 k í tự Lớp: x â u k í tự c ó độ d à i kh ô ng qu á 5 k í tự Điểm thi Tin đại cương: l à một số nguy ê n c ó gi á trị từ 0 đến 10 Đưa ra m à n h ì nh danh s á ch c á c sinh vi ê n c ù ng th ô ng tin của họ m à người d ù ng vừa nhập v à o. 30 Bài tập Viết 1 chương tr ì nh thực hiện những c ô ng việc sau (tiếp): Y ê u cầu người d ù ng nhập v à o từ b à n ph í m một số thực. Đưa ra m à n h ì nh danh s á ch c á c sinh vi ê n c ó điểm thi Tin đại cương nhỏ hơn gi á trị số thực vừa nhập v à o. Đưa ra m à n h ì nh danh s á ch sinh vi ê n được sắp xếp theo chiều giảm dần của điểm thi Tin đại cương. Đưa ra m à n h ì nh danh s á ch sinh vi ê n với họ v à t ê n được sắp xếp theo chiều của bảng chữ c á i. 31 Câu hỏi ?
File đính kèm:
- bai_giang_tin_hoc_dai_cuong_phan_2_lap_trinh_bang_ngon_ngu_c.ppt