Lập trình hướng đối tượng - Chương 2: Biểu thức
Một biểu thức trong C/C++ là sự kết hợp của các thành phần nhu toán tử, hằng, biến, và hàm có trả về giá trị.
Thứ tự định trị của biểu thức tùy thuộc vào độ ưu tiên của các toán tử. Do đó, để viết biểu thức rõ ràng và thực hiện việc định trị đúng theo yêu cầu của lập trình viên ta nên dùng cặp dấu ngoặc tròn () để bao quanh các biểu thức con của biểu thức.
45 trang |
Chia sẻ: huyhoang44 | Lượt xem: 659 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Lập trình hướng đối tượng - Chương 2: Biểu thức, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2: Biểu thức3/29/202011. Biểu thức Biểu thức được tạo thành từ những thành tố như dữ liệu và toán tử. Dữ liệu có thể chứa trong biến hoặc hằng. Toán tử trong các ngôn ngữ lập trình có cùng ý nghĩa như trong toán họcMột biểu thức trong C/C++ là sự kết hợp của các thành phần như toán tử, hằng, biến, và hàm có trả về giá trị.3/29/202022. Kiểu dữ liệu (data types) C/C++ có 5 kiểu dữ liệu cơ sở: ký tự (char), số nguyên (int), số thực (float), số thực có độ chính xác gấp đôi(double),kiểu vô định (void). 3/29/20203Kích thuớc của kiểu int là 16 bits (2 bytes) trên môi truờng 16-bits, và 32 bits (4 bytes) trên môi trường 32-bits. Nói chung, tùy thuộc môi trường, kích thuớc của kiểu int có thể khác nhau. Chuẩn C chỉ ra phạm vi tối thiểu của kiểu dữ liệu số thực (float, double) là 1E-37 đến 1E+37. Kiểu void dùng để khai báo hàm không trả về giá trị hoặc tạo nên các con trỏ tổng quát (generic pointers). 3/29/202042. Kiểu dữ liệu (data types) 3/29/202053. Các định danh (Identifier names) Trong C/C++, tên của các biế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 _. Sau đây là những định danh đúng và sai: 3/29/20206Định danh không được trùng với các từ khóa (keywords) và không nên có cùng tên như các hàm thư viện của C/C++. 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ó. Không đuợc dùng từ khóa để đặt tên cho những định danh như biến, hằng, hàm, ... Tất cả các từ khóa trong C/C++ đều là chữ thuờng (lowercase). Sau đây là danh sách các từ khóa của C/C++: 3/29/202075. Biến (variables) Một 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 truớc khi được sử dụng. Dạng khai báo biến tổng quát là: 3/29/20208type: phải 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. Ngoài ra, ta có thể vừa khai báo vừa khởi tạo giá trị ban đầu cho 3/29/20209Lưu ý: Khi khai báo biến nếu không cung cấp giá trị khởi tạo thì giá trị của biến là chưa xác định. Do đó, việc dùng những biến này trong các biểu thức là vô nghĩa. Biến được khai báo tại ba nơi: bên trong hàm, trong định nghĩa tham số của hàm, và bên ngoài tất cả hàm. Những biến này đuợc gọi lần lượt là biến cục bộ, các tham số hình thức, và biến toàn cục. 3/29/2020106. Biến cục bộ (local variables) khai báo bên trong một hàm.Các biến cục bộ chỉ được tham chiếu đến một khối bắt đầu với dấu { và kết thúc với dấu }. Tồn tại trong khi khối chứa nó đang thực thi và bị hủy khi khối chứa nó thực thi xong. Ví dụ: Xem xét hai hàm sau: 3/29/202011Biến nguyên x được khai báo 2 lần, một trong hàm func1() và một trong hàm func2(). Biến x trong func1() không có quan hệ gì với biến x trong func2() bởi vì mỗi x chỉ tồn tại trong khối chứa nó. 6. Các tham số hình thức (formal parameters) Nếu một hàm có nhận các đối số truyền vào hàm thì nó phải khai báo các biến để nhận giá trị của các đối số khi hàm được gọi. Những biến này gọi là các tham số hình thức. Những biến này được đối xử giống như các biến cục bộ khác được khai báo trong hàm. Ví dụ:3/29/202012from, to: 2 tham số hình thứctotal: biến cục bộ của hàm sum.i: khai báo trong cấu trúc lặp for nên nó là biến cục bộ chỉ tồn tại trong cấu trúc for6. Biến toàn cục (global variables) Biến toàn cục có phạm vi là toàn bộ chương trình. Do đó, tất cả các lệnh có trong chương trình đều có thể tham chiếu đến biến toàn cục. Biến toàn cục được khai báo bên ngoài tất cả hàm. Khảo sát chương trình sau: 3/29/202013Value of gVar= 100 After increased, gVar= 101; After decreased, gVar= 100; 6. Từ khóa const Giá trị của biến thay đổi trong suốt quá trình thực thi chương trình. Để giá trị của biến không bị thay đổi, ta đặt truớc khai báo biến từ khóa const. Từ khi biến đã có giá trị, giá trị này sẽ không bao giờ bị thay đổi bởi bất kỳ lệnh nào trong chương trình. Thông thường ta dùng chữ HOA để đặt tên cho những biến này. Ví dụ: khai báo hằng nguyên MAX có giá trị 100 const int MAX = 200; 3/29/202014VI.6. Hằng chuỗi ký tự (string constants) C/C++ cung cấp một lọai hằng khác gọi là chuỗi. Một chuỗi là một tập các ký tự được bao quanh bởi cặp dấu nháy đôi “” . Ví dụ, "This is a string" là một chuổi. Lưu ý phân biệt hằng chuổi và hằng ký tự. Một hằng ký tự là một ký tự bao quanh bởi cặp dấu nháy đơn ‘. Do đó, 'a' là hằng ký tự nhưng "a" là hằng chuỗi 3/29/202015V.7. Hằng ký tự đặc biệt (escape sequences) C/C++ có những hằng ký tự đặc biệt mà không thể biểu diễn nhu những hằng ký tự thông thuờng. Những hằng này còn gọi là escape sequences. Sau đây là danh sách các hằng đặc biệt đó: 3/29/2020163/29/202017VI Toán tử (operators) C/C++ có bốn loại toán tử: số học (arithmetic), quan hệ (relational), luận lý (logical), và bitwise. VI.1. Toán tử gán (assignment operator) 3/29/202018 variableName: Tên biến expression: Biểu thức Lưu ý: phía bên trái dấu bằng phải là một biến hay con trỏ và không thể là hàm hay hằng. Ví dụ: VI.2. Chuyển đổi kiểu trong câu lệnh gán Khi những biến của một kiểu kết hợp với những biến của một kiểu khác thì một sự chuyển đổi kiểu xảy ra. ðối với câu lệnh gán, giá trị của biểu thức bên phải dấu bằng đuợc tự động chuyển thành kiểu dữ liệu của biến bên trái dấu bằng. Ví dụ:3/29/202019 i sẽ có giá trị là 123 vì 123.456 sẽ tự động chuyển thành số nguyên nên bị cắt bỏ phần thập phân. Sự chuyển đổi kiểu này gọi là chuyển đổi kiểu bị mất mát thông tin. thì d sẽ có giá trị là 100.0. Sự chuyển đổi kiểu này gọi là chuyển đổi kiểu không mất mát thông tin. 3/29/202020Tóm lại, khi chuyển đổi kiểu 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 thì việc chuyển đổi kiểu này là an toàn vì không bị mất mát thông tin. Thứ tự tăng dần từ kiểu dữ liệu có miền giá trị nhỏ đến kiểu dữ liệu có miền giá trị lớn là: Khi chuyển đổi 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 thì việc chuyển đổi kiểu này là không an toàn vì có thể mất mát thông tin. Thứ tự giảm dần từ kiểu dữ liệu có miền giá trị lớn đến kiểu dữ liệu có miền giá trị nhỏ là:3/29/202021VII. Các toán tử số học (arithmetic operators)Các toán tử số học gồm: + (cộng), - (trừ), * (nhân), / (chia), và % (lấy phần du của phép chia nguyên). 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 thì 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à trả về phần dư. Ví dụ: 7%2 thì kết quả là 1. 3/29/202022 Toán tử ++ và -- (increment and decrement operators) C/C++ có hai toán tử rất thuờng dùng là ++ và --. Toán tử ++ cộng 1 đến toán hạng của nó và toán tử -- thì trừ 1 từ toán hạng của nó. 3/29/2020233/29/202024Sau khi lệnh (1) hay (2) đuợc thực thi thì x có giá trị là 101Toán tử quan hệ & luận lý (relational & logical operators) Toán tử quan hệ liên quan đến sự quan hệ của hai giá trị. Toán tử luận lý liên quan đến sự nối kết của những quan hệ. Các biểu thức mà dùng toán tử quan hệ và toán tử luận lý được định trị là true (đúng) hoặc false(sai). Trong C/C++, giá trị 0 (zero) được xem là false và giá trị khác 0 (non-zero) được xem là true. 3/29/2020253/29/202026Các toán tử về luận lý:3/29/202027Cả hai toán tử quan hệ và luận lý có độ ưu tiên thấp hơn toán tử số học. Trong một biểu thức có thể có nhiều loại toán tử, thứ tự để định trị biểu thức dựa vào độ ưu tiên của toán tử. Để thay đổi thứ tự định trị trong một biểu thức, dùng cặp dấu ngoặc đơn () như trong các biểu thức số học. 3/29/2020283/29/202029trueToán tử ? (? operator) Toán tử ? là một toán tử ba ngôi do đó có ba toán hạng. Dạng tổng quát của toán tử ? là: 3/29/202030Exp1, Exp2, và Exp3 là các biểu thức. Toán tử ? làm việc như sau: đầu tiên Exp1 được định trị. Nếu kết quả là true thì Exp2 được định trị và giá trị của nó trở thành giá trị của cả biểu thức. Nếu Exp1 là false thì Exp3 được định trị và giá trị của nó trở thành giá trị của cả biểu thức. Toán tử sizeof sizeof là toán tử một ngôi mà trả về số byte của kiểu dữ liệu chiếm trong bộ nhớ. Mỗi môi trường (hệ điều hành, loại CPU, ...) dùng số byte khác nhau cho mỗi kiểu dữ liệu. Dạng tổng quát của toán tử sizeof :3/29/2020313/29/2020323/29/202033 Toán tử dấu phẩy (comma operator) Toán tử comma buộc các biểu thức cùng với nhau. Biểu thức bên trái của toán tử comma luôn luôn được định trị như void, biểu thức bên phải được định trị và trở thành giá trị của biểu thức. Dạng tổng quát của toán tử comma: 3/29/202034Các biểu thức được định trị từ trái sang phải, biểu thức cuối cùng (exp_n) được định trị và trở thành giá trị của toàn bộ biểu thức. 3/29/202035Biểu thức (expressions)Một biểu thức trong C/C++ là sự kết hợp của các thành phần nhu toán tử, hằng, biến, và hàm có trả về giá trị. Thứ tự định trị của biểu thức tùy thuộc vào độ ưu tiên của các toán tử. Do đó, để viết biểu thức rõ ràng và thực hiện việc định trị đúng theo yêu cầu của lập trình viên ta nên dùng cặp dấu ngoặc tròn () để bao quanh các biểu thức con của biểu thức. 3/29/2020363/29/202037result = (x * y) – (z % 10) + (w/2); Chuyển đổi kiểu trong các biểu thức Khi các hằng và biến của những kiểu khác nhau tồn tại trong một biểu thức, giá trị của chúng phải đuợc chuyển thành cùng kiểu truớc khi các phép toán giữa chúng đuợc thực hiện. Trình biên dịch sẽ thực hiện việc chuyển kiểu (convert) tự động đến kiểu của toán hạng có kiểu lớn nhất. Việc chuyển kiểu này gọi là thang cấp kiểu (type promotion). 3/29/2020383/29/202039Ép kiểu (casting) Casting dùng để ép một biểu thức thành một kiểu theo ý muốn của lập trình viên. Dạng tổng quát của casting là :3/29/202040type: là tên một kiểu dữ liệu hợp lệ.Do 7/2 là phép chia nguyên nên kết quả không có phần thập phân. Sau lệnh trên result có giá trị là 3. ðể phép chia trên là phép chia số thực dù rằng toán hạng có kiểu nguyên ta thực hiện ép kiểu tử số hoặc mẫu số hoặc cả hai. Các cách viết sau sẽ cho cùng kết qủa: 3/29/202041Dạng viết tắt của câu lệnh gán (shorthand assignments)Các dạng viết tắt của câu lệnh gán với các toán tử số học gồm +=, - =, *=, /=, và %=. Những lệnh có dạng: 3/29/2020423/29/202043Bài tập:Bài 1: Nhập vào bán kính r của đường tròn. Tính và xuất ra chu vi, diện tích của đường tròn tương ứng.3/29/202044Nhập rXuất chu vi pdiện tích sTính p=2*pi*rs=pi*r*rpi=3.14 (hằng số)Cấu trúc 1 chương trìnhr , p, s biến.Kiểu dữ liệu: int, float, double?3/29/202045#include #include const float pi=3.14void main(){ float r,p,s; cout>r; // nhap r p=r*2*pi; // công thức tinh hinh tron s=pi*r*r; // cong thuc tinh dien tich cout << “Chu vi hinh tron " << r ; // Xuat chu vi hinh tron cout << “Dien tich hinh tron " << s; // Xuat dien tich hinh tron}
Các file đính kèm theo tài liệu này:
- chuong_2_0262.pptx