650 likes | 893 Views
Chương 2 BIỂU THỨC (Expressions). CHƯƠNG 2. CHƯƠNG 1. 1. 2. Kiểu dữ liệu(Data type). Dữ liệu ( data ) là tất cả những gì được máy tính xử lý. Xét về phương diện điện tử thì máy tính chỉ hiểu các thông tin biểu diễn dưới dạng mã nhị phân.
E N D
Chương 2 BIỂU THỨC (Expressions) CHƯƠNG 2 CHƯƠNG 1 1
2. Kiểu dữ liệu(Data type) Dữ liệu (data) là tất cả những gì được máy tính xử lý. Xét về phương diện điện tử thì máy tính chỉ hiểu các thông tin biểu diễn dưới dạng mã nhị phân. Về phương diện ngôn ngữ bậc cao thì dữ liệu đã được khái quát hóa thành các kiểu dữ liệu và ta không cần quan tâm đến biểu diễn chi tiết trong máy tính của các kiểu dữ liệu. Một ngôn ngữ lập trình khác nhau sẽ có kiểu dữ liệu và cú pháp khác nhau.
2. Kiểu dữ liệu(Data type) -tt • Trong một ngôn ngữ lập trình, một dữ liệu bao giờ cũng thuộc về một kiểu dữ liệu nhất định. • Các thuộc tính của một kiểu dữ liệu bao gồm: • Tên kiểu dữ liệu. • Miền giá trị. • Kích thước lưu trữ. • Tập các phép toán tác động lên kiểu dữ liệu.
2. Kiểu dữ liệu(Data type) -tt • Các kiểu dữ liệu cơ sở: • Ký tự • Số nguyên • Số thực • Kiểu liệt kê • Kích thước và phạm vi của những kiểu dữ liệu này có thể thay đổi tùy theo loại CPU và trình biên dịch.
Cách biểu diễn số nguyên dưới dạng số Hexa Cách viết theo hệ 8 hoặc hệ 16 thường tạo thuận lợi cho những người lập trình hệ thống. Ngoài cách viết dưới dạng thập phân, C++ còn quy ước cho phép viết số nguyên dưới dạng số bát phân (hệ đếm 8) bằng cách thêm 0 đầu, hoặc dưới dạng thập lục phân (hệ đếm 16) bằng cách thêm 0x. Ví dụ
Hằng số nguyên có định trước kiểu Đôi lúc chúng ta muốn ghi các hằng số với kiểu được định trước một cách tường minh để đảm bảo độ chính xác bằng cách ghi thêm một kí tự vào cuối dãy số: L cho kiểu long, U cho kiểu unsigned intvà UL cho kiểu unsigned long. Ví dụ: • 52000U hằng số nguyên theo kiểu unsigned int. • 123456789L hằng số nguyên theo kiểu long. • 012345L hằng số nguyên viết dưới dạng số hệ 8, kiểu long.
Ghi chú Khi thực hiện các phép tính trên số nguyên, cần hết sức thận trọng xem các phép toán đó có cho kết quả vượt quá phạm vi biểu diễn của nó không. Chẳng hạn, với a và b là dữ liệu kiểu int, khi đó hai câu lệnh sau: a = 80; b = (a*500)/200; cho kết quả sai giá trị của b, vì a*500 = 40000 vượt quá phạm vi của int. Tuy nhiên ta có thể viết: b = (a*500L)/200;
2.2. Kiểu số thực • Mộtgiátrịkiểusốthựclàmộtphầntửcủatậpcácsốthựcmà ta cóthểbiểudiễnđượctrênmáy. • Cóhaicáchghihằngsốthực: Cách 1: Dạngviếtthậpphânbìnhthường, trongđódấuphẩyđượcthaybằngdấuchấm: 2.12; 4.0; -125.09; 235.55 Cách 1: Dạngviếtcóphầnmũ hay còngọidạngviếtkhoahọc. Gồmhaiphần: phầnđịnhtrịvàphầnmũviếtsauchữEđểbiểudiễnsốmũcủacơsố 10.
Ví dụ • 627.12345 = 6.2712345*102 sẽ được viết lại cho máy tính là: 6.2712345E+02 Phần định trị Phần mũ • -0.001234 = -1.234*10-3 được viết là -1.234E-03 Lưu ý: Phần định trị và phần mũ đều có thể có dấu đi kèm, chúng được viết liền nhau, không có dấu cách ở giữa.
Trong C++ cho phép sử dụng các kiểu số thực sau: Lưu ý: Cột phạm vi giá trị chỉ miền biến thiên trị tuyệt đối của số. Chẳng hạn với số x kiểu float thì x có trị tuyệt đối nằm trong khoảng từ 3.4*10-38 đến 3.4*1038. Nếu > 3.4*1038 thì không biểu diễn x trong máy được, còn nếu < 3.4*10-38 thì x được coi là bằng không.
Cách viết đúng các hằng số thực 4. không cần phần lẻ sau dấu chấm 3E-6 không cần dấu chấm ở phần định trị nếu có phần mũ 5.7 viết bình thường .2152 không cần số 0 đầu tiên 0.02e-3 chấp nhận dùng chữ e
3. Định danh (Identifier Name) • Trong C/C++, tênbiến, hằng, hàm,… được gọi là định danh • Những định danh này có thể là 1 hoặc nhiều ký tự. Ký tự đầu tiên phải là một chữ cái hoặc dấu _ (underscore), những ký tự theo sau phải là chữ cái, chữ số, hoặc dấu _ • C/C++ phân biệt ký tự HOA và thường. • Định danh không được trùng với từ khóa (keywords).
4. Từ khóa (keywords) • Là những từ được dành riêng bởi ngôn ngữ lập trình cho những mục đích riêng của nó • Tất cả các từ khóa trong C/C++ đều là chữ thường (lowercase). • Danh sách các từ khóa trong C/C++
Câu lệnh • Nhằmralệnhchomáythựchiện; • Mỗi câulệnhsẽcócúphápvà ý nghĩariêng; • Lệnhđượckếtthúcbằng “ ; “ (khôngphảihết 1 dòng) • C++ chia cáccâulệnhthànhbaloại: • lệnh biểuthức, • lệnh kép(compound statement) • lệnh điềukhiển.
Câu lệnh biểu thức Bao gồm một biểu thức đơn giản và theo sau là dấu chấm phẩy. Các biểu thức có thể là mối quan hệ giữa các phép toán, gọi hàm hoặc chỉ có dấu chấm phẩy. Chẳng hạn, ta có các lệnh biểu thức sau: [1] x = 2*y – 7.4; [2] cout << “Hello.”; [3] intResult=Test(n); [n] ;
Câu lệnh khối { r = 2.5; dt = M_PI*r*r; cout<< “Diện tích hình tròn là: “<<dt<< endl; } • Lệnhképbaogồmmộtsốlệnhriênglẻđượcgóitrongcặpdấu{ … }. Nhữnglệnhriênglẻnàycóthểlàlệnhbiểuthức, lệnhkép hay lệnhđiềukhiển. Khácvớilệnhbiểuthức, lệnhképkhôngđượckếtthúcbởidấuchấmphẩy. Chẳnghạn:
Câu lệnh điều khiển Lệnh điều khiển bao gồm các câu lệnh như: • Lệnh rẽ nhánh: if • Lệnh Lựa chọn: switch • Lệnh lặp: for, while, do… while (Phần này sẽ giải thích rõ trong chương 3)
Câu lệnh Gán <tên biến> = <biểu thức>; Ý nghĩa: Đầu tiên máy tính trị của biểu thứcvế phải, sau đó gán giá trị tính được cho tên biếnở vế trái. • Phép gán: dấu “=“ dùng để gán giá trị của một biểu thức cho một biến đã được khai báo. • Cú pháp của lệnh gán:
Ý nghĩa Câu lệnh Gán • Vế trái của phép gán chỉ và chỉ có thể là một biến hoặc là giá trị dạng một địa chỉ ô nhớ. • Có thể sử dụng phép gán kép: a = b = c = 5; // gán giá trị 5 cho cả 3 biến a,b,c. a = 2 + (b = 5); /* gọi là lệnh gán dây chuyền; tương đương với b = 5; a = 2 + b; */
5. Biến (Variables) • Biến là định danh của một vùng trong bộ nhớ dùng để giữ một giá trị mà có thể bị thay đổi bởi chương trình. • Tất cả biến phải được khai báo trước khi sử dụng.
Cách khai báo typevariableNames; • type: là một trong các kiểu dữ liệu hợp lệ. • variableNames: tên của một hay nhiều biến phân cách nhau bởi dấu phẩy.
Khởi tạo Biến Ngoài ra, ta có thể vừa khai báo vừa khởi tạo giá trị ban đầu cho biến: typevarName1=value, ... ,varName_n = value; Ví dụ: float mark1, mark2, mark3, average = 0;
Ý nghĩa của Biến • Việc khai báo biến nhằm ba công việc chính: • dành vùng bộ nhớ để sử dụng • đặt tên vùng đó bởi một tên gọi • qui định kiểu dữ liệu cho biến. • Ngay trên dòng khai báo ta có thể gán cho biến một giá trị. Việc làm này gọi là khởi đầu cho biến.
Phạm vi của biến • Biến cục bộ (local variables) • Lànhữngbiếnđượcđịnhnghĩa ở trongmộthàmhoặcmộtkhốilệnh. • Đượccấpphátbộnhớtựđộng (Auto) • Tồntại (life time) từkhiđịnhnghĩachođếnkhikếtthúchàmhoặckhốilệnh 26
Ví dụ x làbiếncụcbộ ( x trong func1 khác x trong func2 ) 27 void func1(void) { int x1; x = 10; } void func2(void) { int x2; x2 = -199; X1=10; }
Biến cục bộ 28 int sum(int from, int to) { int total=0; for(int i=from ; i<=to ; i++) total +=i; return total; }
Phạm vi của biến • Biến toàn cục (global variables) • Lànhữngbiếnđượcđịnhnghĩa ở ngoàitấtcảcáchàm. • Đượccấpphátbộnhớtựđộng (Auto) • Tồntại (life time) từkhiđịnhnghĩachođếnkhikếtthúcchươngtrình • Biếntoàncụccóthểđượctruyxuấtmọinơitrongchươngtrình • Không gian bộ nhớ cho các biến toàn cục đượcdànhriêngtrướckhisựthực hiện của chươngtrình bắt đầu,nhưngngượclại không gian bộ nhớ cho các biến cục bộ đượccấp phát ở thời điểm thực hiện chươngtrình. 29
Ví dụ Biếntoàncục Truyxuấtbiến global #include <iostream.h> int gVar = 100; void increase() ; // prototype void main() { cout << “Value of gVar= “ << gVar; increase(); cout << “After decreased, gVar= “ << gVar; } void increase() { gVar = gVar + 1; } 30
7. Từ khóa const • Hằng là một đại lượng có giá trị không thay đổi trong chương trình. • Thông thường ta dùng chữ HOA để đặt tên cho hằng. Ví dụ: const int intMAX = 200;
Ví dụ: • Hằng ký tự được đặt trong cặp nháy đơn. Ví dụ: ‘a’ • Hằng nguyên Ví dụ 100 -50
Hằng số thực • Hằng số thực yêu cầu một dấu chấm phân cách phần nguyên và phần thập phân. Ví dụ: 123.45 • Cách viết một số loại hằng số
8. Hằng chuỗi ký tự (string constants) • Hằng chuỗi ký tự là một tập các ký tự đặt trong cặp nháy kép “”. Ví dụ: • "This is a string" //là một chuỗi. • ‘a’ //là một hằng ký tự. • “a” //là một hằng chuỗi.
Ví dụ #include <iostream.h> intmain() { cout <<"Items:\n"; cout <<”\tItem1\n”; cout <<”\tItem2\n”; cout <<”\tItem3\n”; return 0; }
10. Toán tử (operators) Toán tử gán (assignment operator) variableName =expression; Với: • variableName: Tên biến • expression: Biểu thức Lưu ý:phía bên trái dấu = phải là một biến hay con trỏ và không thể là hàm hay hằng. Ví dụ:total = a + b + c + d;
11. Chuyển đổi kiểu trong câu lệnh gán • Vế phải và vế trái của lệnh gán phải cùng kiểu Ví dụ: int i=100; double d = 123.456; • Nếu thực thi lệnh i = d; thì i = 123 (chuyển đổi kiểu mất mát thông tin). • Nếu thực thi lệnh d = i; thì d =100.0 (chuyển đổi kiểu không mất mát thông tin).
11. Chuyển đổi kiểu trong câu lệnh gán -tt Khi chuyển đổi từ kiểu dữ liệu có miền giá trị nhỏ sang kiểu dữ liệu có miền giá trị lớn hơn:charintlongfloatdouble, thì việc chuyển đổi kiểu này là không mất mát thông tin Khi chuyển đổi từ kiểu dữ liệu có miền giá trị lớn sang kiểu dữ liệu có miền giá trị nhỏ hơn:doublefloatlongintchar, thì việc chuyển đổi kiểu này là mất mát thông tin
12. Toán tử số học (arithmetic operators) –tt • Khi tử số và mẫu số của phép chia là số nguyên thì đó là phép chia nguyên nên phần dư của phép chia nguyên bị cắt bỏ. Ví dụ: 5/2 cho kết quả là 2. • Toán tử lấy phần dư % (modulus operator) chỉ áp dụng với số nguyên.
Ví dụ #include <iostream.h> intmain() { int a, b=3; a = b; a+=2; // tương đương với a=a+2 cout << a; return 0; }
14. Toán tử ++ và -- (increment and decrement operators) Toán tử tăng (++) và toán tử giảm (--) có tác dụng làm tăng hoặc giảm 1 giá trị lưu trong biến. Ví dụ: a++; //tương đương với a+=1; và a=a+1 a--; //tương đương với a-=1; và a=a-1
Tiền tố (prefix) Toán tử ++/-- đặt trước toán hạng, hành động tăng/giảm trên toán hạng được thực hiện trước, sau đó giá trị mới của toán hạng sẽ tham gia định trị của biểu thức. Ví dụ: b=3;a=++b; Kết quả: a chứa giá trị 4, b chứa giá trị 4
Hậu tố (postfix) Toán tử ++/-- đặt sau toán hạng, giá trị trong toán hạng được tăng/giảm sau khi đã tính toán. Ví dụ b=3; a=b++;Kết quả: a chứa giá trị 3, b chứa giá trị 4
Ví dụ int x = 100; int n, m; n = ++x + 1; // n sẽ có giá trị là 102 (1) n = x++ + 1; // n sẽ có giá trị là 101 (2) • Sau lệnh (1), (2) thì x có giá trị là 101 m = --x + 1; // m sẽ có giá trị là 100 (3) m = x-- + 1; // m sẽ có giá trị 101 (4) • Sau lệnh (3), (4) thì x có giá trị là 99
Độ ưu tiên Khi các toán tử số học xuất hiện trong một biểu thức, thì độ ưu tiên thực hiện như sau:
15. Toán tử quan hệ & luận lý (relational & logical operators) Toán tử quan hệ được định trị là true hoặc false.
15. Toán tử quan hệ & luận lý (relational & logical operators) -tt Toán tử luận lý: Bảng chân trị: