Chương 3

Tổ chức dữ liệu trong chương trình

Presenter:

Nhập môn về lập trình (C3)

Slide 1

Learning outcomes

L.O.2.1 – Biết được tên và các thuộc tính của các kiểu dữ liệu cơ bản về số, ký tự, enum và logic (logic trong mở rộng của C, C++). L.O.2.2 – Khai báo được các biến và hằng. L.O.2.3 – Xác định và giải thích rõ các kiểu lưu trữ biến. L.O.2.4 – Sử dụng được các toán tử có thể thực hiện được

với các kiểu dữ liệu để thành lập biểu thức.

L.O.2.5 – Nhập được giá trị của các biến từ bàn phím và xuất được giá trị của các biến ra màn hình (nhắc lại có nâng cao).

L.O.2.6 – Định nghĩa được các kiểu có cấu trúc và sử dụng

chúng.

Nhập môn về lập trình (C3)

Slide 2

Phân loại

Tổ chức dữ liệu trong chương trình C

Dữ liệu dùng trong các chương trình C thường

xuất hiện dưới 3 hình thức: • Giá trị tức thời (value). • Hằng (constant): có tên (name) và giá trị thay thế

(value).

• Biến (variable): có tên (name), kiểu (type) và nội dung

chứa bên trong (value).

Nhập môn về lập trình (C3)

Slide 3

Cách viết

Giá trị tức thời

 Dữ liệu số:

• Số nguyên hệ 8: bắt đầu bằng chữ „O‟ (Octal)

Ví dụ: O165 -O203

• Số nguyên hệ 16: bắt đầu bằng 0x (Hexadecimal)

Ví dụ: 0x3D -0x3AF8

• Số nguyên hệ 10: (Decimal)

Ví dụ: 169 -2053

-83.1E-9

 Dữ liệu ký tự / chuỗi

• Số thực chấm động: (floating point) -0.31459e1 Ví dụ: 3.14159

• Ký tự: đặt trong 2 dấu nháy đơn („)

Ví dụ: „A‟ „7‟ „\064‟ „\t‟

• Chuỗi: đặt trong 2 dấu nháy kép (“) “Nhap so: “ “%-10.3f\n”

Ví dụ:

Nhập môn về lập trình (C3)

Slide 4

Hằng

const = ;

#define

const int VMAX = 15; #define VMAX 15

 Hằng là một giá trị được đặt tên (thường dùng chữ lớn)  Cú pháp định nghĩa hằng gợi nhớ cơ bản : hay Ví dụ: Lưu ý : dấu < > chỉ để miêu tả phần tử do người sử dụng đặt

tên chứ không viết ra.

Nhập môn về lập trình (C3)

Slide 5

Định nghĩa

Biến

 Biến dùng trong chương trình C++ chính là bộ nhớ của

máy tính và có các đặc điểm sau: • Có tên (name): do người sử dụng đặt ra để dùng thay cho địa chỉ

(address).

=&

• Có kiểu (type): liên quan đến loại và độ lớn của giá trị mà biến có

thể chứa.

 Kiểu dữ liệu cung cấp bởi C++ chia ra thành kiểu có sẳn

(tên kiểu do C++ qui định) và kiểu của người sử dụng (tên kiểu do người sử dụng đặt thông qua đặc tả kiểu).

• Có nội dung: là giá trị chứa trong biến.

Nhập môn về lập trình (C3)

Slide 6

Kiểu dữ liệu có sẳn của C++

 void : 0 byte (không có giá trị nào), được dùng để miêu tả kiểu trả về

của hàm mà không muốn trả về giá trị.

[6 chữ số]

(1.175494351E-38F  3.402823466E+38)

 char : 1 byte (-128  127)  unsigned char : 1 byte (0  255)  short / short int : 2 bytes (-32,768  32,767)  unsigned short : 2 bytes (0 to 65535)  int / long (long integer) : 4 bytes (-2,147,483,648  2,147,483,647)  unsigned int / unsigned long : 4 bytes (0 to 4,294,967,295)  float (single-precision floating-point) :4 bytes

(2.2250738585072014E-308  1.7976931348623158E+308)

 double (double-precision floating-point) : 8 bytes [15 chữ số]

Nhập môn về lập trình (C3)

Slide 7

Định nghĩa và khai báo

Biến

 Định nghĩa biến theo cú pháp: [=];

trong đó có thể là kiểu có sẳn hay kiểu của người sử dụng. là trị ban đầu, có thể không có. Ví dụ:

int so=3; char kytu; float x1,x2; hoso sv1;

 Khai báo biến (đã được định nghĩa trong module khác):

Ví dụ:

extern ; extern int so; extern char gioitinh;

Ví dụ:

static long dem;

 Định nghĩa biến tĩnh: static [=];

Biến automatic là biến cục bộ

Biến static là biến toàn cục

Biến dynamic cấp phát lúc chạy

Nhập môn về lập trình (C3)

Slide 8

Các thành phần của biểu thức

Biểu thức

 Biểu thức thể hiện cách xử lý dữ liệu trong chương trình.

 Biểu thức là cách tính toán của chương trình.

 Các thành phần xác định biểu thức :

• Các toán hạng : các biến, hằng dữ liệu,... • Các toán tử tham gia biểu thức : +,-,*,/,... • Qui tắc kết hợp toán tử và toán hạng để tạo biểu thức. • Qui trình tính biểu thức của phần mềm. • Kiểu kết quả sau khi tính biểu thức.

Nhập môn về lập trình (C3)

Slide 9

Biểu thức cơ bản

Biểu thức

 Biểu thức cơ bản là phần tử nhỏ nhất tạo ra biểu thức.  Các biểu thức cơ bản gồm :

 Biểu thức cơ bản là biểu thức.

 Nhiều biểu thức cơ bản kết hợp với nhau bằng các toán

• Biến. • Hằng gợi nhớ. • Giá trị ( kiểu nguyên, thực, chuỗi, ...). • Gọi hàm. • [ nội dung biến ] [ giá trị đại diện của hằng ] [ chính giá trị ] [ trị trả về từ hàm ] [ giá trị Biểu thức ] ( Biểu thức ).

tử cũng là biểu thức.

Nhập môn về lập trình (C3)

Slide 10

Các toán tử

Biểu thức

 Phân loại theo số lượng toán hạng : • Toán tử 1 ngôi : chỉ cần 1 toán hạng. Ví dụ: toán tử '-' (số âm), toán tử „!‟ (not luận lý). • Toán tử 2 ngôi : cần dùng 2 toán hạng. Ví dụ: toán tử '*' (nhân 2 số), „%‟ (chia lấy phần dư), ... • Toán tử 3 ngôi : cần dùng 3 toán hạng. Ví dụ: toán tử 'c?v1:v2' (kiểm tra điều kiện c, nếu c đúng trả về

[ &, *, +, -, ~, ! ]

 VC++ thường dùng các ký tự đặc biệt để miêu tả toán tử. Ví dụ: '+' là cộng, '-' là trừ, '*' là nhân, '/' là chia, ...

v1, c sai trả về v2).

Nhập môn về lập trình (C3)

Slide 11

Qui trình tính biểu thức

Biểu thức

 Qui trình tính : Từ trái sang phải, mỗi lần gặp 1 toán tử (CurrentOp) thì phải nhìn tiếp toán tử đi ngay sau nó (SussesorOp), so sánh độ ưu tiên của 2 toán tử và ra quyết định như sau : • Nếu không có SussesorOp thì tính ngay toán tử CurrentOp (trên

1, 2 hay 3 toán hạng của nó).

• Nếu toán tử CurrentOp có độ ưu tiên cao hơn hay bằng toán tử SussesorOp thì tính ngay toán tử CurrentOp (trên 1, 2 hay 3 toán hạng của nó).

• Các trường hợp còn lại thì cố gắng thực hiện toán tử SussesorOp trước. Đổi SussesorOp thành CurrentOp và trở lại bước đầu, ...

Nhập môn về lập trình (C3)

Slide 12

Nhóm toán tử và độ ưu tiên (1)

Biểu thức

Array subscript Function call Conversion

Left to right Left to right None

 Bảng liệt kê độ ưu tiên các toán tử từ cao xuống thấp : Operator Name or Meaning Associativity

Member selection (object) Member selection (pointer) Left to right Left to right

[ ] ( ) ( ) . -> ++ -- ++ --

Postfix increment Postfix decrement Prefix increment Prefix decrement None None None None

Nhập môn về lập trình (C3)

Slide 13

Nhóm toán tử và độ ưu tiên (2)

Biểu thức

Name or Meaning Associativity

Dereference Address-of Unary plus Arithmetic negation (unary) Logical NOT Bitwise complement None None None None None None

Size of object Size of type type name None None None

Multiplication Division Remainder (modulus) Left to right Left to right Left to right

Operator * & + – ! ~ sizeof sizeof ( ) typeid( ) * / % + – Addition Subtraction Left to right Left to right

Nhập môn về lập trình (C3)

Slide 14

Nhóm toán tử và độ ưu tiên (3)

Biểu thức

Name or Meaning Associativity

Less than Greater than Less than or equal to Greater than or equal to Equality Inequality

Left to right Left to right Left to right Left to right Left to right Left to right

Bitwise AND Bitwise exclusive OR Bitwise OR

Left to right Left to right Left to right

Left shift Right shift Left to right Left to right

Logical AND Logical OR Left to right Left to right

Conditional

Right to left

Operator << >> < > <= >= == != & ^ | && || e1?e2:e3

Nhập môn về lập trình (C3)

Slide 15

Nhóm toán tử và độ ưu tiên (4)

Biểu thức

Name or Meaning Associativity

Assignment Multiplication assignment Division assignment Modulus assignment Addition assignment Subtraction assignment Left-shift assignment Right-shift assignment Bitwise AND assignment Bitwise inclusive OR assignment Bitwise exclusive OR assignment Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left Right to left

Operator = *= /= %= += -= <<= >>= &= |= ^= , Comma Left to right

Nhập môn về lập trình (C3)

Slide 16

Kiểu của biểu thức

Biểu thức

 Kiểu của biểu thức lấy theo kiểu của toán hạng lớn nhất.  So sánh các kiểu số dựa trên độ lớn (10x) và độ chính xác

(số chữ số có nghĩa). Kiểu Số byte Độ chính xác Độ lớn ----------------------------------------------------------------------------------------- char short int / long float double

 char < short < int/long < double  char < short < float < double  Ngoại lệ: float gặp int/long đổi ra double.

102 104 109 1032 10302 2 4 9 6 15 1 2 4 4 8

Nhập môn về lập trình (C3)

Slide 17

Toán tử gán

Biểu thức

Sử dụng Giải thích

iNum1 += iNum2

iNum1 = iNum1 + iNum2

Toán tử ----------------------------------------------------------------------------------- = iNum1 = iNum2

+=

iNum1 -= iNum2 iNum1 = iNum1 - iNum2 -=

iNum1 *= iNum2 iNum1 = iNum1 * iNum2 *=

iNum1 %= iNum2

iNum1 = iNum1 % iNum2

iNum1 /= iNum2 iNum1 = iNum1 / iNum2 /=

%=

Ví dụ : tính tổng S=1+2+3+...+7

tong=0;

for (dem=1; dem<=7; dem++) tong += dem;

Nhập môn về lập trình (C3)

Slide 18

Toán tử tăng / giảm

Biểu thức

Chức năng

Cộng 1 vào toán hạng

Toán tử ---------------------------------------------------------------------------------- ++ -- Trừ 1 vào toán hạng  ++ hay -- là các toán tử một toán hạng có thể dùng ở trước (prefix)

dem = ++tridau; tương đương tridau++; dem=tridau;

hoặc sau (postfix) tên biến.

 Toán tử prefix sẽ được thực hiện trước khi sử dụng toán hạng. Ví dụ :  Toán tử postfix sẽ được thực hiện sau khi sử dụng toán hạng. Ví dụ : dem = tridau--; tương đương dem=tridau; tridau--;

Nhập môn về lập trình (C3)

Slide 19

Biểu thức số học

Biểu thức

 Toán tử số học gồm các nhóm: + (dương), - (âm) *, /, % +, - ~ (not), & (and), | (or), ^ (xor)

 Biểu thức số học là biểu thức gồm các biểu thức cơ bản

kết hợp với nhau chỉ bằng toán tử số học.

 Toán hạng đầu vào kiểu số, kết quả đầu ra kiểu số.  Thường dùng để tính toán dữ liệu số.

• Một ngôi : • Nhân/Chia : • Cộng/Trừ : • Bit :

Nhập môn về lập trình (C3)

Slide 20

Biểu thức so sánh

Biểu thức

 Toán tử so sánh trả về trị true (khác 0) hay false (bằng 0).

phép so sánh

Toán tử ------------------------------------------------------------ == != > < <=

bằng khác lớn hơn nhỏ hơn nhỏ hơn hoặc bằng lớn hơn hoặc bằng

 Biểu thức so sánh có dạng

>=

 Toán hạng đầu vào kiểu số, kết quả đầu ra kiểu đúng/sai.  Thường dùng làm điều kiện trong lệnh.

Nhập môn về lập trình (C3)

Slide 21

Biểu thức luận lý

Biểu thức

 Toán tử luận lý thực hiện phép toán luận lý dựa trên trị luận lý đúng

hàm luận lý

NOT AND OR

(khác 0) và sai (bằng 0). Toán tử --------------------------------------------------------------- ! && ||  Biểu thức luận lý có dạng

 Toán hạng đầu vào kiểu đúng/sai, kết quả đầu ra kiểu đúng/sai.  Dùng để ghép các điều kiện trong lệnh.

Nhập môn về lập trình (C3)

Slide 22

Nguyên tắc hoạt động của toán tử luận lý

Biểu thức

 Các toán tử luận lý hoạt động theo bảng sự thật sau:

Sai

Sai

Đúng

Sai

Sai

Th1 Th2 ! Th2 Th1 & Th2 Th1 | Th2

Sai Đúng Sai Sai Đúng

Đúng Sai Đúng Sai Đúng

Đúng Đúng Sai Đúng Đúng

Nhập môn về lập trình (C3)

Slide 23

Ví dụ

Biểu thức

Nhập môn về lập trình (C3)

Slide 24

Cú pháp và mục đích

Lệnh gán

 Cú pháp lệnh gán dùng toán tử gán '=' :

 Sau khi thực hiện, giá trị sẽ được tính và cất

vào , nội dung cũ của sẽ bị mất.

 Ta có thể thực hiện phép gán liên tiếp như sau :

a = b = c = 25; // a,b,c đều chứa số 25

= ;

Nhập môn về lập trình (C3)

Slide 25

Ví dụ

Lệnh gán

radius

i

t h g e h

Nhập môn về lập trình (C3)

Slide 26