Download presentation
Presentation is loading. Please wait.
1
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
2
Các kiểu dữ liệu có cấu trúc
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
3
Kiểu enum Ý nghĩa: là kiểu dữ liệu mà miền giá trị của nó là một số giá trị mà ta muốn và có thể liệt kê ra. VD: các giá trị logic (true, false), các ngày trong một tuần, các mức tính thuế thu nhập,v.v Các thao tác cơ bản: Định nghĩa: tạo ra một kiểu dữ liệu mới trước khi khai báo sử dụng Khai báo: khai báo các biến kiểu enum đã được định nghĩa ở trên Gán giá trị: cập nhật giá trị cho biến kiểu enum
4
Kiểu enum – Định nghĩa 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.
5
Kiểu enum – Định nghĩa Cách 1: không dùng từ khóa typedef.
enum tên_kiểu {phần_tử_1, phần_tử_2, …, phần_tử_N}; VD: enum ngayTrongTuan {ThuHai, ThuBa, ThuTu, ThuNam, ThuSau, ThuBay, ChuNhat}; enum gioitinh {Nam, Nu};
6
Kiểu enum – Định nghĩa 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;
7
Kiể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ị
8
enum [tên_kiểu] {phần_tử_1, phần_tử_2, …, phần_tử_N} biến1, biến2;
Kiểu enum – Khai báo Ngoài ra, các biến có thể được khai báo ngay khi định nghĩa kiểu với cách định nghĩa không sử dụng từ khóa typedef Cú pháp: enum [tên_kiểu] {phần_tử_1, phần_tử_2, …, phần_tử_N} biến1, biến2; VD: enum ngayTrongTuan {ThuHai, ThuBa, ThuTu, ThuNam, ThuSau, ThuBay, ChuNhat} d; //vừa định nghĩa kiểu, vừa khai báo biến enum gioitinh {Nam, Nu} gt; //khai báo biến ngầm định kiểu
9
Kiểu enum – Gán giá trị enum Colors {BLUE=1,RED=3,GREEN=2} c;
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;
10
Ví dụ 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.
11
Ví dụ #include <stdio.h> #include <conio.h> main(){ enum day {monday, tuesday, wednesday, thursday, friday, saturday, sunday}; enum day d; do { printf("Nhap ngay hom nay:(nhap -1 de thoat)"); scanf("%d",&d); switch (d) { case monday: printf("Hom nay la thu hai\n");break; case tuesday: printf("Hom nay la thu ba\n");break; case wednesday: printf("Hom nay la thu tu\n");break; case thursday: printf("Hom nay la thu nam\n");break; case friday: printf("Hom nay la thu sau\n");break; case saturday: printf("Hom nay la thu bay\n");break; case sunday: printf("Hom nay la chu nhat\n");break; default: if (d !=-1) printf("Du lieu khong hop le\n"); } } while (d != -1); getch(); }// end main
12
Kiểu struct Ý nghĩa: là cấu trúc cho phép bên trong chứa các trường dữ liệu mà có kiểu dữ liệu có thể khác nhau Các thao tác cơ bản: Định nghĩa Khai báo biến Truy nhập vào các trường Gán giá trị
13
Kiể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
14
Kiểu struct – Định nghĩa
Cách 1: không sử dụng từ khóa typedef struct tên_kiểu { Khai báo các trường; }; VD: struct ngaysinh { int ngay; int thang; int nam; struct nguoi { char ten[30]; int tuoi; char gioitinh; // ‘M’ cho nam, ‘F’ cho nữ struct ngaysinh sinhngay; };
15
Kiểu struct – Định nghĩa
Cách 2: sử dụng từ khóa typedef typedef struct { Khai báo các trường; } tên_kiểu ; VD: char sohieu[30] ; char chuyennganh; int soluong; } lophoc ;
16
Kiểu struct – Khai báo 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
17
Kiểu struct – Khai báo Cách 1: Cách 2: [struct] tên_kiểu v;
[struct] tên_kiểu v1,v2; Cách 2: struct tên_kiểu { Khai báo các trường; } v1, v2; lophoc lh1, lh2; struct ngaysinh ns; struct ngaysinh { int ngay; int thang; int nam; } ns1, ns2;
18
Truy nhập vào các trường
Có 2 cách truy nhập: Cách 1: dùng biến thông thường, sử dụng cú pháp “tên_biến.tên_trường” Cách 2: dùng biến con trỏ, sử dụng cú pháp “tên_biến->tên_trường” typedef struct { char sohieu[30] ; char chuyennganh; int soluong; } lophoc ; lophoc lh; lophoc * p = & lh; scanf(“%s”, lh.sohieu); scanf(“%c”, &p->chuyennganh); scanf(“%d”, &p->soluong);
19
Kiể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;
20
Ví dụ 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 đó
21
Ví dụ: #include <stdio.h> #define N 3 int main(){ struct person { char name[30]; int age; char sex; //'M' for male //and 'F' for female } ; //end struct struct person pList[N]; int i; printf("Nhap danh sach nhan vien\n"); for (i=0;i<N;i++) { printf("Nhan vien thu %d\n",i+1); printf("Ten:"); scanf("%s",pList[i].name); printf("Tuoi:"); scanf("%d",&pList[i].age); printf("Gioi tinh (M hoac F):"); scanf("%c",&pList[i].sex); } //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') printf("Nam\n"); else printf("Nu\n"); } //end main
22
Các cấu trúc tiết kiệm kích thước lưu trữ
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).
23
Tóm tắt Cảm ơn! Các kiểu dữ liệu có cấu trúc trong C enum struct union
bit field Cảm ơn!
24
Bài tập 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.
25
Bà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.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.