Chương 03 Tổ chức dữ liệu trong chương trình Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 1 Nội dung Dữ liệu cố định Hằng Biến Kiểu dữ liệu Từ khoá Tầm vực biến Phép toán và biểu thức Kiểu enum, struct Chuyển đổi kiểu dữ liệu Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 2 Dữ liệu Dữ liệu được lưu trữ trong RAM của máy tính trong quá trình chương trình thực thi Dữ liệu trong các chương trình C thường xuất hiện dưới 3 hình thức: Literals hay Fixed Value: giá trị cố định Constant: hằng có tên (name) và giá trị thay thế (value) Variable: biến có tên (name), kiểu (type) và nội dung chứa bên trong (value) Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 3 Giá trị cố định Giá trị số: Số nguyên hệ bát phân (octal): bắt đầu bằng số 0 Ví dụ: 0165 -0203 Số nguyên hệ thập lục (hexadecimal): bắt đầu bằng 0x Ví dụ: 0x3D -0x3AF8 Số nguyên hệ thập phân (decimal): như bình thường Ví dụ: 169 -2053 Số thực dấu chấm động: (floating point) Ví dụ: 3.1E-9 Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 4 Giá trị cố định Giá trị cố định kiểu số nguyên có thể có phần hậu tố (suffix) là sự kết hợp của U và L, cho kiểu Unsigned và kiểu Long. Có thể là chữ hoa hoặc chữ thường theo bất cứ thứ tự nào. Ví dụ: 078 /* Không hợp lệ: 8 không có trong hệ bát phân*/ 032UU /* Khong hop le: không thể lặp lại hậu tố */ 30 /* int */ 30u /* unsigned int */ 30l /* long */ 30ul /* unsigned long */ Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 5 Giá trị cố định Giá trị kiểu ký tự - chuỗi Ký tự: đặt trong 2 dấu nháy đơn ('). Có thể ký tự bình thường (plain character) hay escape sequence ('\n', '\t', …) Ví dụ: 'A' '7' '\101' '\t' Chuỗi: đặt trong 2 dấu nháy kép (“) Ví dụ: "Dai Hoc Bach Khoa" Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 6 Escape sequence Escape Escape sequenc Meaning Meaning sequence e \\ \ character \n Newline \' ' character \r Carriage return \" " character \t Horizontal tab \? ? character \v Vertical tab \a Alert or bell \ooo Octal number of one to three digits \b Backspace Hexadecimal number of one or \xhh.
\f Form feed more digits Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 7 Hằng Hằng là một giá trị được đặt tên (thường dùng chữ in hoa) Cú pháp định nghĩa hằng: const <type> <name> = <value> ; hay #define <ConstName> <value> Ví dụ: const int MAX = 15; #define MAX 15 Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 8 Ví dụ Kiểu ký tự const char c = ‘a’; const char c = ‘A’; Kiểu chuỗi const char c[] = “LAP TRINH C/C++”; const char c[] = “SAI GON”; Kiểu số const int a = 100; const float f = 10.5; Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 9 Biến Biến là một vùng trong bộ nhớ của máy tính và có các đặc điểm sau: Có tên (name): do người dùng tự đặt ra để dùng thay cho địa chỉ trong bộ nhớ Có kiểu (type): liên quan đến loại và độ lớn của giá trị mà biến có thể chứa. Có dữ liệu: là giá trị chứa trong biến. Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 10 Biến Là nơi lưu trữ dữ liệu của chương trình, nói khác nó là 1 vùng nhớ được đặt tên 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ó. 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ần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 11 Khai báo biến Cú pháp: <type> <VariableName> [=<ConstExpr>]; trong đó: <type> : kiểu có sẵn hay người dùng tự định nghĩa <VariableName> : tên biến do người dùng tự đặt <ConstExpr> : giá trị ban đầu, có thể có hoặc không Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 12 Khai báo biến Ví dụ: Tạo một biến int a; char c; Tạo nhiều biến cùng kiểu int a, b; char c1, c2; Tạo biến và khởi động giá trị int a=10, b; char c1=‘A’, c2=‘a’; Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 13 Khai báo biến Khai báo biến đã được định nghĩa trong module khác: extern <type> <variable> ; Ví dụ: extern int so; Khai báo biến tĩnh: static <type> <variable> [=<ConstExpr>]; Ví dụ: static long dem; Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 14 Quy tắc đặt tên biến Quy tắc đặt tên biến theo quy tắc đặt tên danh hiệu (tên hằng, tên biến, …) Quy tắc đặt tên danh hiệu: Ký tự đầu là một chữ cái hay dấu gạch dưới (_) Các ký tự tiếp theo là chữ cái, số, dấu gạch dưới Không được là ký hiệu nào khác: ! @ # $ % ^ & * … Không được trùng với từ khoá Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 15 Từ khoá Là từ có ý nghĩa đặc biệt đã được quy định trước bởi ngôn ngữ lập trình.
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. Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 16 Từ khoá Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 17 Kiểu dữ liệu Dữ liệu mà chương trình lưu trữ có thể thuộc nhiều dạng khác nhau, gọi là kiểu dữ liệu (data type) Ký tự (character) Kiểu số Số nguyên (integer) Số thực (float) Kiểu chuỗi Kiểu mảng (array) Kiểu cấu trúc (struct) Kiểu kiệt kê (enum) … Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 18 Kiểu dữ liệu Mỗi kiểu dữ liệu có cách tổ chức lưu trữ, cũng như các phép toán đi kèm khác nhau Cách tổ chức lưu trữ Ví dụ: với số nguyên, ý nghĩa bit có trọng số lớn nhất (MSB) phụ thuộc vào nó là số có dấu hay không dấu Số không dấu: bit này tham gia vào tính độ lớn giá trị Số có dấu: bit này chỉ ra là số dương hay âm Các phép toán Ví dụ: có thể thực hiện các phép toán nhân hay chia với kiểu số, nhưng không thể thực hiện nhân với kiểu chuỗi ký tự Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 19 Các loại kiểu dữ liệu Kiểu dữ liệu cơ bản (fundamental data type) Ngôn ngữ C/C++ cung cấp sẵn một số các tên kiểu Tên các kiểu này cũng là từ khoá Kiểu dữ liệu do người lập trình định nghĩa (user- defined data type) Tên kiểu do người lập trình tự đặt ra Một số kiểu như: struct, enum Kiểu dữ liệu dẫn xuất (derived data type) Mảng (array) Con trỏ (pointer) Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 20 Kiểu số nguyên Type Storage size Value range char 1 byte -128 to 127 or 0 to 255 unsigned char 1 byte 0 to 255 signed char 1 byte -128 to 127 -32,768 to 32,767 or int 2 or 4 bytes -2,147,483,648 to 2,147,483,647 0 to 65,535 unsigned int 2 or 4 bytes or 0 to 4,294,967,295 short 2 bytes -32,768 to 32,767 unsigned short 2 bytes 0 to 65,535 long 4 bytes -2,147,483,648 to 2,147,483,647 unsigned long 4 bytes 0 to 4,294,967,295 Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 21 Hàm sizeof() Hàm sizeof() trả về số byte của kiểu dữ liệu Ví dụ: printf("%d", sizeof(int)); Số bytes của kiểu dữ liệu tuỳ thuộc vào phiên bản, tuy nhiên sẽ thoả mãn: 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long) Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 22 Kiểu số thực Storage Type Value range Precision size float 4 byte 1.4E+38 6 decimal places double 8 byte 2.7E+308 15 decimal places long 3.4E-4932 to 10 byte 19 decimal places double 1.1E+4932 Thêm #include <float.h> vào đầu chương trình để sử dụng các chi tiết đã cài đặt sẵn của kiểu số thực Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 23 Kiểu enum enum dùng để định nghĩa các giá trị thuộc kiểu số nguyên nhưng được gán cho tên gợi nhớ Cú pháp: enum enumName { enumeration list } ví dụ: enum colors {RED, GREEN, BLUE}; enum months {JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 24 Kiểu enum enum 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 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. Nghĩa là người dùng có thể tạo ra kiểu mới Trần Quang Kỹ thuật lập trình Chương 03: Tổ chức dữ liệu trong chương trình © 2016 25 Kiểu enum enum có thể xem như một tập hợp các hằng số.
Ở các ví dụ trên ta có các tập hợp: colors, months Với tập colors có các hằng: RED, GREEN, BLUE như đã khai báo Với tập months có các hằng: JAN, FEB, MAR, v.v… Về bản chất, các giá trị trong tập hợp (enum) được TỰ ĐỘNG gán một con số nguyên. Mặc định hằng đầu tiên là 0, kế tiếp là 1, v.