Bài giảng Kỹ thuật lập trình - Chương 2: Biểu thức
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 2: Biểu thức", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_ky_thuat_lap_trinh_chuong_2_bieu_thuc.pptx
Nội dung text: Bài giảng Kỹ thuật lập trình - Chương 2: Biểu thức
- Chương 2: Biểu thức 8/14/2021 1
- 1. 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ọc Mộ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ị. 8/14/2021 2
- 2. 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). 8/14/2021 3
- 2. Kiểu dữ liệu (data types) Kí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). 8/14/2021 4
- 8/14/2021 5
- 3. 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: Đị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++. 8/14/2021 6
- 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++: 8/14/2021 7
- 5. 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à: type: 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 8/14/2021 8
- 8/14/2021 9
- Lư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. 8/14/2021 10
- 6. 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: Biế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ó. 8/14/2021 11
- 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ụ: from, to: 2 tham số hình thức total: 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 for 8/14/2021 12
- 6. 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: Value of gVar= 100 After increased, gVar= 101; After decreased, gVar= 100; 8/14/2021 13
- 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; 8/14/2021 14
- VI.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 8/14/2021 15
- V.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 đó: 8/14/2021 16
- 8/14/2021 17
- VI 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) 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ụ: 8/14/2021 18
- 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. i sẽ có giá trị là 123 vì 123.456 sẽ tự động Ví dụ: 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. 8/14/2021 19
- Tó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à: 8/14/2021 20
- 8/14/2021 21
- VII. 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. 8/14/2021 22
- 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ó. 8/14/2021 23
- Sau khi lệnh (1) hay (2) đuợc thực thi thì x có giá trị là 101 8/14/2021 24
- Toá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. 8/14/2021 25
- 8/14/2021 26
- Các toán tử về luận lý: 8/14/2021 27
- Cả 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. 8/14/2021 28
- true 8/14/2021 29
- Toá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à: Exp1, 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. 8/14/2021 30
- 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 : 8/14/2021 31
- 8/14/2021 32
- 8/14/2021 33
- 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: Cá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. 8/14/2021 34
- 8/14/2021 35
- Biể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. 8/14/2021 36
- result = (x * y) – (z % 10) + (w/2); 8/14/2021 37
- 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). 8/14/2021 38
- 8/14/2021 39
- É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à : type: 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. 8/14/2021 40
- ðể 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: 8/14/2021 41
- Dạ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: 8/14/2021 42
- 8/14/2021 43
- Bà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. Tính Nhập Xuất p=2*pi*r r chu vi p s=pi*r*r diện tích s pi=3.14 (hằng số) Cấu trúc 1 chương trình 8/14/2021 44
- r , p, s biến. Kiểu dữ liệu: int, float, double? #include #include const float pi=3.14 void 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 } 8/14/2021 45