Bài giảng Kỹ thuật lập trình - Chương 03: Tổ chức dữ liệu trong chương trình - Nguyễn Thanh Tùng

nTại sao phải cần đến kiểu dữ liệu?

nMọi chương trình đều cần đến dữ liệu

nVí dụ:

nMột chương trình giải Phương trình bậc 2

nDữ liệu:

nCác hệ số A,B,C của Phương trình bậc 2

nDelta

nCác nghiệm của phương trình

nMột chương trình Quản lý nhân sự

nDữ liệu:

nMã số nhân sự, họ tên, hệ số lương, v.v.

n

pptx 60 trang xuanthi 27/12/2022 1480
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Chương 03: Tổ chức dữ liệu trong chương trình - Nguyễn Thanh Tùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pptxbai_giang_ky_thuat_lap_trinh_chuong_03_to_chuc_du_lieu_trong.pptx

Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 03: Tổ chức dữ liệu trong chương trình - Nguyễn Thanh Tùng

  1. Nội dung ◼ Dữ liệu và Kiểu dữ liệu ◼ Từ khoá ◼ Biến và Khai báo biến ◼ Tầm vực biến ◼ Phép toán và biểu thức ◼ Kiểu enum ◼ Hằng số ◼ Chuyển đổi kiểu dữ liệu ◼ Bài tập Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 2 © 2016
  2. Dữ liệu và Kiểu dữ liệu ◼ Tại sao phải cần đến kiểu dữ liệu? ◼ Mọi chương trình đều cần đến dữ liệu ◼ Ví dụ: ◼ Một chương trình giải Phương trình bậc 2 ◼ Dữ liệu: ◼ Các hệ số A,B,C của Phương trình bậc 2 ◼ Delta ◼ Các nghiệm của phương trình ◼ Một chương trình Quản lý nhân sự ◼ Dữ liệu: ◼ Mã số nhân sự, họ tên, hệ số lương, v.v. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 4 © 2016
  3. Dữ liệu và Kiểu dữ liệu ◼ Các kiểu dữ liệu ◼ Dữ liệu mà chương trình lưu trữ có thể thuộc nhiều dạng (gọi là kiểu hay kiểu dữ liệu, data type) khác nhau ◼ Ký tự (character) ◼ Một trong hai trạng thái: có hay không, đúng hay sai ◼ Các con số ◼ Số nguyên ◼ Số thực ◼ Một chuỗi: “LAP TRINH C/C++” ◼ Một dãy các giá trị ◼ Một tổ hợp các giá trị (struct, class) ◼ Một trong một số giá trị cho trước (enum) ◼ Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 6 © 2016
  4. Dữ liệu và Kiểu dữ liệu ◼ Ngôn ngữ lập trình phân biệt kiểu dữ liệu như thế nào? ◼ Ngôn ngữ C/C++ (các ngôn ngữ khác cũng vậy) gắn ngữ nghĩa (quy ước ngữ nghĩa) với một loạt các tên kiểu mà nó cung cấp sẵn. ◼ Các kiểu này được gọi là kiểu cơ bản (fundamental data types) ◼ Tên các kiểu có sẵn này đã được gắn sẵn ngữ nghĩa nên nó là từ khoá. Người lập trình không được dùng tên này để đặt tên cho các kiểu (hàm, biến, v.v) mà họ tạo ra. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 8 © 2016
  5. Dữ liệu và Kiểu dữ liệu ◼ Các loại kiểu ◼ Kiểu dữ liệu cơ bản (fundamental data type) ◼ Kiểu dữ liệu do người lập trình định nghĩa (user-defined data type) ◼ Kiểu dữ liệu dẫn xuất (derived data type) ◼ C/C++ cung cấp các ký hiệu để tạo ra kiểu mới từ các kiểu khác (cơ bản hay người lập trình định nghĩa) ◼ Ví dụ: ◼ Mảng (array) ◼ Mảng của các ký tự, của các số nguyên, của các số thực, v.v. ◼ Con trỏ (pointer) ◼ Con trỏ đến ký tự, đến con số, v.v. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 10 © 2016
  6. Dữ liệu và Kiểu dữ liệu ◼ Kiểu dữ liệu cơ bản Loại Tên kiểu #bytes Giá trị Số nguyên (1) char, signed char 1 -2, 0, 4 (2) unsigned char 1 0, 1, 255 (3) short int, signed short int, 2 10, -100 short, signed short (4) unsigned short int, 2 0, 15, 100 unsigned short (5) int, signed int, 4 10, -100 long int, signed long int, long, signed long (6) unsigned int, 4 0, 15, 100 unigned long int, unsigned long (7) long long int, signed long long int 8 10, -100 Trường(8)Đại Học Bách Khoaunsigned long long int 8 0, 15, 100 Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 12 © 2016
  7. Dữ liệu và Kiểu dữ liệu ◼ Chương trình in kích thước kiểu (số bytes) ◼ Hàm: sizeof(.) trả về số byte của kiểu ở thông số #include #include int main(){ //bool printf("sizeof(bool) = %3d\n\n", sizeof(bool)); //char printf("char:\n"); printf("sizeof(char) = %3d\n", sizeof(char)); printf("sizeof(signed char) = %3d\n", sizeof(signed char)); printf("sizeof(unsigned char) = %3d\n\n", sizeof(unsigned char)); //short printf("short:\n"); printf("sizeof(short) = %3d\n", sizeof(short)); printf("sizeof(signed short) = %3d\n", sizeof(signed short)); printf("sizeof(unsigned short) = %3d\n\n", sizeof(unsigned short)); system("pause"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 14 © 2016
  8. Từ khoá ◼ Từ khoá là gì ◼ Là từ có ý nghĩa đặc biệt đã được quy định trước bởi ngôn ngữ lập trình. ◼ Như tên của các kiểu cơ bản nói trên ◼ Người lập trình không được dùng từ khoá để đặt tên cho các tên mình tạo ra như tên biến, tên kiểu, tên hàm, tên hằng, v.v. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 16 © 2016
  9. Biến và Khai báo biến ◼ Biến là gì? ◼ Là nơi lưu trữ dữ liệu của chương trình ◼ Là tên của vùng nhớ lưu trữ dữ liệu của chương trình ◼ Do có tên, nên khi cần đọc/ghi với vùng nhớ này, người lập trình chỉ cần dùng tên thay cho một địa chỉ của nó. ◼ Sử dụng biến như thế nào? ◼ Biến cần được khai báo trước khi dùng (đọc/ghi) ◼ Chương trình tự động cấp phát vùng nhờ khi gặp một khai báo biến Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 18 © 2016
  10. Biến và Khai báo biến ◼ Khi khai báo biến cần xác định điều gì? ◼ Biến lưu trữ dữ liệu gì? → xác định được kiểu ◼ Ý nghĩa của biến là gì? → xác định được tên sẽ được đặt cho nó ◼ Ví dụ: ◼ Khi giải Phương trình bậc 2 ◼ Lưu trữ hệ số: ◼ Kiểu: float hoặc double. Vì sao? ◼ Tên: a, b, c. Vì sao? ◼ Lưu trữ delta: ◼ Kiểu: float hoặc double. Vì sao? ◼ Tên: delta ◼ Lưu trữ nghiệm: ◼ Kiểu: float hoặc double. Vì sao? ◼ Tên: x1, x2, s1, s2, sol1, sol2, v.v. Có luật gì không? Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 20 © 2016
  11. Biến và Khai báo biến ◼ Minh hoạ #include #include //Chuong trinh giai Phuong trinh bac 2 int main(){ //Khao bao cac bien float a,b,c; float delta; float x1, x2; //Lay a,b,c tu nguoi dung //Giai cho truong hop bac 0: a = b = 0 //Giai cho truong hop bac 1: a = 0 //Giai cho truong hop 2: a va b <> 0 //Tinh delta //Truong hop: vo nghiem //Truong hop: nghiem kep //Truong hop: hai nghiem khac nhau system("pause"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 22 © 2016
  12. #include Hai biến: thuộc tầm vực toàn cục, #include bên ngoài tất cả các hàm #include Hai biến: thuộc tầm vực A /*Bien cuc bo*/ float g; Hai biến: thuộc tầm vực B double d; int main(){ float g; double d; TVCB: TVCB: B for(;;){ vực Tầm cục A bộ float g; double d; } { TVCB: D TVCB: TVCB: C { } } system("pause"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 24 © 2016
  13. Các tầm vực của biến ◼ Chương trình có 4 tầm vực cục bộ đặt tên: A, B, C, D ◼ Khi tham chiếu đến g và d trong A từ sau khi B kết thúc (nghĩa là bao hàm C và D) ◼ Thì g và d là g và d của A ◼ Nếu muốn g và d của toàn cục thì dùng ◼ ::g và ::d Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 26 © 2016
  14. Phép toán và biểu thức ◼ Phép toán ◼ Số học ◼ Luận lý và quan hệ ◼ Trên các bit ◼ Toán tử gán ◼ Toán tử khác Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 28 © 2016
  15. Phép toán và biểu thức Số học ◼ Toán tử ++ ◼ Tăng trước: ◼ Ví dụ: (++x – y) ◼ Tăng giá trị của x lên trước ◼ Dùng giá trị của x đã tăng vào biểu thức (cộng với y) ◼ Do đó: Nếu x = 4 và y = 5 trước khi đánh giá biểu thức ◼ Thì (++x – y) cho giá trị là: 0 ◼ Tăng sau: x++ ◼ Ví dụ: (x++ – y) ◼ Đánh giá biểu thức dựa trên giá trị của x đang có trước ◼ Sau đó, tăng x lên 1 sau ◼ Do đó: Nếu x = 4 và y = 5 trước khi đánh giá biểu thức ◼ Thì (x++ – y) cho giá trị là: -1 ◼ Trong cả 2 ví dụ trên: giá trị của x điều là 5 sau khi đánh giá biểu thức Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 30 © 2016
  16. Phép toán và biểu thức Toán tử luận lý và quan hệ Ký hiệu Ý nghĩa Kiểu áp dụng Ví dụ == Kiểm tra bằng nhau Kiểu số a == b != Kiểm tra khác nhau Kiểu số a != b > Lớn hơn Kiểu số a > b = Lớn hơn hay bằng Kiểu số a >= b <= Nhỏ hơn hay bằng Kiểu số a <= b && AND luận lý Luận lý b1 && b2 || OR luận lý Luận lý b1 || b2 ! Phủ định luận lý Luận lý !flag Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 32 © 2016
  17. Phép toán và biểu thức Toán tử gán Ký hiệu Ý nghĩa Kiểu áp dụng Ví dụ = Phép gán A = B Tất cả a = (b + c )*f += Tương đương A = A+B Kiểu số a += 2 -= A = A-B Kiểu số a -= 2 *= A = A*B Kiểu số a *= 2 /= A = A/B Kiểu số a /= 2 %= A = A%B Kiểu số nguyên a %= 2 >= A = A >> B Kiểu số a >>= 2 &= A = A & B Kiểu số a &= 2 ^= A = A ^ B Kiểu số a ^= 2 |= A = A | B Kiểu số a |= 2 Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 34 © 2016
  18. Phép toán và biểu thức Độ ưu tiên của các toán tử Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 36 © 2016
  19. Phép toán và biểu thức ◼ Biểu thức ◼ Được tạo thành từ toán tử và toán hạng ◼ Biểu thức: X + Y ◼ X, Y: Toán hạng ◼ + : Toán tử ◼ Đây là toán tử hai ngôi vì có hai toán hạng ◼ Biểu thức: ! (A && B) ◼ (A && B): Biểu thức con ◼ ! : Toán tử một ngôi, vì cần 01 toán hạng ◼ &&: Toán tử hai ngôi, hai toán hạng là A và B ◼ Toán hạng phải có kiểu tương thích với kiểu mà toán tử có thể thực hiện được Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 38 © 2016
  20. Kiểu enum ◼ Ứng dụng ◼ Với các chương trình lớn, một hằng số như 1, 2, v.v không mang đến thông tin về ý nghĩa con số này. Nó có thể là ◼ Lựa chọn mà người dùng nhập vào ◼ Một tháng trong năm hay một ngày trong tháng ◼ Một ký hiệu về màu sắc ◼ V.v ◼ Để tăng tính dể đọc, dể hiểu, dể bảo trì, các hằng số nên được ký hiệu hoá bởi một tên, tên này được người lập trình chọn để lồng ghép ý nghĩa của tên này. Ở trường hợp này nên dùng enum Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 40 © 2016
  21. Kiểu enum ◼ enum là gì? ◼ Có thể được xem như một kiểu dữ liệu. ◼ Ở các ví dụ trên ta có các kiểu là: colors, months, user_choices. ◼ Một biến kiểu colors chỉ có thể RED, GREEN, BLUE như đã khai báo ◼ Một biến kiểu months ở trên chỉ có thể có các giá trị JAN, FEB, MAR, v.v. ◼ Một biến kiểu user_choices ở trên chỉ có thể có các giá trị LOAD_DATA, INPUT_DATA, v.v. ◼ Nghĩa là người dùng có thể tạo ra kiểu mới Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 42 © 2016
  22. Kiểu enum ◼ Khai báo và dùng biến kiểu enum #include #include int main(){ enum colors {RED, GREEN, BLUE}; colors b = BLUE, c = GREEN; printf("b= %d\n", b); printf("c= %d\n", c); system("pause"); return 0; } Chương trình in ra: b = 2 c = 1 Vì sao? Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 44 © 2016
  23. Các giá trị bất biến ◼ Giá trị bất biến là gì? ◼ Là giá trị không thay đổi trong quá trình chương trình thực thi. ◼ Do đó, ◼ giá trị bất biến phải được xác định tại thời điểm biên dịch (lập chương trình) ◼ Ví dụ ◼ (1) Sử dụng từ khoá const const int MAX = 50; ◼ (2) Sử dụng macro #define MAX 50 ◼ (3) Sử dụng enum enum {MAX}; enum {MAX = 50}; Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 46 © 2016
  24. Chuyển đổi kiểu ◼ Chuyển đổi kiểu là gì? ◼ Khi ta gán một giá trị vào một biến cùng một kiểu dữ liệu, hay khi thực hiện phép toán nhị phân giữa hai giá trị cùng một kiểu dữ liệu thì không cần sự chuyển đổi kiểu nào xảy ra ◼ Ví dụ int a = 100; int b; b = a; float f = 10.5f; float fa; fa = f; Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 48 © 2016
  25. Chuyển đổi kiểu ◼ Các dạng chuyển đổi ◼ Chuyển đổi ngầm (mặc nhiên) ◼ Có thể giữa nguyên giá trị nguồn ◼ Có thể biến đổi giá trị nguồn ◼ Ép kiểu ◼ Người lập trình can thiệp bằng toán tử đặc biệt: cặp dấu ”(” và “)”. Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 50 © 2016
  26. Chuyển đổi kiểu ◼ Chuyển đổi ngầm ◼ Trường hợp giữ nguyên giá trị nguồn ◼ Khi kiểu nguồn có số bit thấp hơn kiểu đích ◼ Ví dụ ◼ char vào short ◼ short vào int ◼ Int vào long long ◼ Int vào double Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 52 © 2016
  27. Chuyển đổi kiểu ◼ Chuyển đổi ngầm ◼ Trường hợp giữ nguyên giá trị nguồn ◼ Trường hợp cần sự thay đổi ◼ unsigned vào signed và ngược lại ◼ Luận lý vào số: ◼ số vào Luận lý ◼ float hay double vào số nguyên (char, short, int, v.v) ◼ Phần thập phân bị cắt bỏ (2.456 → 2) ◼ Nếu sau khi cắt mà phần nguyên vẫn nằm ngoài phạm vi của kiểu đích thì . tuỳ vào hiện thực (không xác định) Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 54 © 2016
  28. Chuyển đổi kiểu ◼ Ép kiểu (type casting) #include #include int main(){ double x = 3/2; double y = (double)3/2; printf("x = %4.2g\n", x); printf("y = %4.2g\n", y); system("pause"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 56 © 2016
  29. Chuyển đổi kiểu ◼ Ép kiểu (type casting) #include #include int main(){ unsigned char a; signed char b; a = -1; b = 255; printf("a= %3d\n", a); printf("b= %3d\n", b); printf("a 5 is %s\n", b > 5 ? "true": "false"); system("pause"); return 0; } Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 58 © 2016
  30. Tổng kết Chủ đề Yêu cầu (Kiến thức & Kỹ năng) Dữ liệu và Kiểu dữ liệu - Biết được danh mục kiểu dữ liệu cơ bản Từ khoá - Biết được kích thước, phép toán áp dụng được với các kiểu cơ bản Biến và Khai báo biến - Quy tắc tên danh hiệu - Khai báo được biến & khở động chúng Tầm vực biến Các loại tầm vực và ý nghĩa Phép toán và biểu thức Sử dụng phép toán trong biểu thức Kiểu enum Định nghĩa và sử dụng enum Kiểu cấu trúc Hằng số Sử dụng được hằng ở nhiều cách Chuyển đổi kiểu dữ liệu Hiểu được quy tắc chuyển đổi và sử dụng ép kiểu được Trường Đại Học Bách Khoa Lập trình C/C++ Trung Tâm Kỹ Thuật Điện Toán 60 © 2016