1 / 25

Ngôn ngữ lập trình C/C++

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. 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. Kiểu enum.

tawana
Download Presentation

Ngôn ngữ lập trình C/C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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. typedefenum { 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. 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 enumgioitinh {Nam, Nu} gt; //khai báo biến ngầm định kiểu

  9. Kiể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;

  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: typedef struct { 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: [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 for } //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á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.

More Related