Các kiểu dữ liệu có cấu trúc2 Kiểu liệt kê: enum Kiểu bản ghi: struct Kiểu hợp: union Kiểu bản ghi có trường ở mức bit: bit field struct... Kiểu enum – Định nghĩa4 Cách định ng
Trang 1Trường Đại Học Bách Khoa Hà Nội
Viện: Điện Tử - Viễn Thông
Bộ Môn: Điện tử - Kỹ thuật máy tính
Ngôn ngữ lập trình C/C++
Chương 1: Ôn tập ngôn ngữ C
Các kiểu dữ liệu có cấu trúc
Trang 2Các kiểu dữ liệu có cấu trúc
2
Kiểu liệt kê: enum
Kiểu bản ghi: struct
Kiểu hợp: union
Kiểu bản ghi có trường ở mức bit: bit field struct
Trang 4Kiểu enum – Định nghĩa
4
Cách định nghĩa: Kiểu liệt kê được định nghĩa với
từ khóa enum, và có hai cách có thể được dùng để định nghĩa:
Cách 1: không cần dùng từ khóa typedef và
Cách 2: có sử dụng từ khóa typedef này
Trang 5Kiểu enum – Định nghĩa
Cách 1: không dùng từ khóa typedef.
Trang 6Kiểu enum – Định nghĩa
6
Cách 2: sử dụng từ khóa typedef.
typedef enum { phần_tử_1, phần_tử_2, …, phần_tử_N } tên_kiểu ;
VD:
typedef enum {True, False} boolean;
Trang 7Kiểu enum – Khai báo
Khai báo biến kiểu enum tương tự như cách khai báo các biến thông thường:
Cú pháp:
tên_kiểu v;
tên_kiểu v1,v2;
VD:
ngayTrongTuan d1, d2; //Khai báo 2 biến
enum gioitinh gt = Nam; //Khai báo và khởi tạo giá trị
Trang 8Kiểu enum – Khai báo
8
Trang 9Kiểu enum – Gán giá trị
Bản chất giá trị liệt kê của kiểu enum là các hằng số nguyên, với phần tử liệt kê đầu tiên có giá trị là 0, phần tử thứ hai có giá trị là 1, v.v
Các giá trị này có thể được đặt tường minh khi định nghĩa hay khai báo.
VD:
typedef enum {True=1, False=0} boolean;
enum Colors {BLUE=1,RED=3,GREEN=2} c;
Trang 10Ví dụ
10
Viết một chương trình nhập một giá trị nguyên biểu một trong các ngày trong một tuần Chương trình sẽ kiểm tra giá trị đó để in ra ngày tương ứng Việc làm trên sẽ lặp lại cho đến khi giá trị nhập vào là -1 thì kết thúc chương trình.
Trang 11Ví dụ
#include <stdio.h>
#include <conio.h>
main(){
enum day {monday, tuesday, wednesday,
thursday, friday, saturday, sunday};
Trang 12 Khai báo biến
Truy nhập vào các trường
Gán giá trị
Trang 13Kiểu struct – Định nghĩa
Có hai cách để định nghĩa kiểu struct:
Cách 1: không sử dụng từ khóa typedef
Cách 2: sử dụng từ khóa typedef
Trang 14Kiểu struct – Định nghĩa
Trang 15Kiểu struct – Định nghĩa
Trang 16Kiểu struct – Khai báo
16
Tương tự kiểu enum, việc khai báo biến kiểu struct cũng có thể theo 1 trong 2 cách:
Cách 1: khai báo sau khi định nghĩa kiểu struct
Cách 2: kết hợp khai báo và định nghĩa kiểu
Trang 17Kiểu struct – Khai báo
int thang;
int nam;
Trang 18Truy nhập vào các trường
int soluong;
} lophoc ; lophoc lh;
lophoc * p = & lh;
scanf(“%s”, lh.sohieu);
scanf(“%c”, &p->chuyennganh); scanf(“%d”, &p->soluong);
Trang 19Kiểu struct - Gán giá trị
Hai biến cùng một kiểu struct có thể được gán cho
nhau Việc gán này sẽ cho thay cho việc gán lần lượt tất cả các trường của hai biến này cho nhau
VD:
lh1.sohieu = lh2.sohieu;
lh1.chuyennganh= lh2.chuyennganh; lh1.soluong = lh2.soluong;
lophoc lh1, lh2;
lh1=lh2;
Trang 20Ví dụ
20
Viết chương trình quản lý một danh sách
nhân viên với các chức năng:
Nhập vào một danh sách N nhân viên (N là hằng số cho trước)
In ra nội dung danh sách đó
Trang 21char sex; //'M' for male
//and 'F' for female
} //end for
//In danh sách ra màn hình printf("Ho ten Tuoi Gioi tinh\n");
for (i=0;i<N;i++){
printf("%s%d",pList[i].name, pList[i].age);
if (pList[i].sex=='M')
Trang 22Các cấu trúc tiết kiệm kích thước
lưu trữ
22
Cấu trúc union: về ý nghĩa sử dụng thì tương tự như cấu trúc struct Tuy nhiên, ở mỗi thời điểm trong
chương trình thì chỉ dùng đến một trường trong số tất
cả các trường, vì kích thước lưu trữ chỉ đủ để lưu trữ cho một trường
Cấu trúc bit field: chính là cấu trúc struct, nhưng các trường có thể khai báo kích thước lưu trữ đến mức bit (1 hoặc nhiều bit).
Trang 24Bài tập
24
Bài 1: Viết chương trình giải một phương trình bậc
2, với các thông số của phương trình (gồm các hệ
số, số nghiệm và giá trị mỗi nghiệm) được đưa vào trong cấu trúc struct Yêu cầu chương trình:
Nhập ba hệ số a,b,c từ bàn phím (với a ≠ 0)
In ra màn hình số nghiệm và giá trị mỗi nghiệm
Bài 2: Mở rộng bài 1 thêm khả năng kiểm tra sự
hợp lệ của dữ liệu nhập vào (với a phải ≠ 0), và cho phép giải nhiều PTB 2.
Trang 25Bài tập
Bài 3: Viết chương trình xây dựng kiểu số phức
dùng cấu trúc struct, và cho phép thực hiện các
thao tác cơ bản +,-,*,/ hai số phức Yêu cầu chương trình:
Nhập 2 số phức a và b từ bàn phím
In ra nội dung của a và b, đồng thời a+b,a-b,a*b và a/b.
Bài 4: Viết chương trình tính tổng một dãy N số
phức có giá trị được nhập từ bàn phím.