x9nd
04-20-2009, 10:22 PM
Bài 4 : Toán tử và biểu thức - Lư thuyết
Giới thiệu
- C có một tập các toán tử phong phú. Toán tử là công cụ để thao tác dữ liệu. Một toán tử là một kư hiệu dùng để đại diện cho một thao tác cụ thể nào đó được thực hiện trên dữ liệu. C định nghĩa bốn loại toán tử:
+ Toán tử số học (arithmetec).
+ Toán tử quan hệ (relational).
+ Toán tử luận lư (logical).
+ Toán tử luận lư nhị phân (bitwise).
- Toán tử thao tác trên hằng hoặc biến. Hằng hoặc biến này được gọi là toán hạng (operands). Toán tử được phân loại theo toán tử một ngôi, hai ngôi và ba ngôi. Toán tử một ngôi chỉ thao tác trên một phần tử dữ liệu, toán tử hai ngôi trên hai phần tử dữ liệu và ba ngôi trên ba phần tử dữ liệu.
1. Biểu thức (Expressions)
- Một biểu thức là tổ hợp các toán tử và toán hạng. Toán tử thực hiện các thao tác như cộng, trừ, so sánh ... Toán hạng là những biến hay những giá trị mà các phép toán được thực hiện trên nó.
Ví dụ :
c = a + b;
- Trong ví dụ a + b, "a" và "b" là toán hạng và "+' là toán tử. Tất cả kêt hợp lại là một biểu thức.
- Trong quá tŕnh thực thi chương tŕnh, giá trị thực sự của biến (nếu có) sẽ được sử dụng cùng với các hằng có mặt trong biểu thức. V́ vậy, mọi biểu thức trong C đều có một giá trị.
2. Toán tử gán (Assignment Operator)
- Trước khi nghiên cứu các toán tử khác, ta hăy xét toán tử gán (=). Đây là toán tử thông dụng nhất cho mọi ngôn ngữ và mọi người đều biết. Trong C, toán tử gán có thể được dùng cho bất kỳ biểu thức C hợp lệ. Dạng thức chung cho toán tử gán là:
Code:
Tên biến = biểu thức;
3. Biểu thức số học (Arithmetic Expressions)
- Các phép toán thường được thực hiện theo một thứ tự cụ thể (hoặc riêng biệt) để cho ra giá trị cuối cùng. Thứ tự này gọi là độ ưu tiên (sẽ nói đến sau).
- Các biểu thức toán học trong C được biểu diễn bằng cách sử dụng toán tử số học cùng với các toán hạng dạng số và kư tự. Những biểu thức này gọi là biểu thức số học.
Ví dụ
a * (b+c/d) / 22;
++i % 7;
5 + (c = 3+8);
4. Toán tử quan hệ (Ralational Operators)
- Toán tử quan hệ được dùng để kiểm tra mối quan hệ giữa hai biến, hay giữa một biến và một hằng. Ví dụ, việc xét số lớn hơn của hai số, a và b, được thực hiện thông qua dấu lớn hơn (>) giữa hai toán hạng a và b (a > b).
- Trong C, true (đúng) là bất cứ giá trị nào khác không (0), và false (sai) là bất cứ giá trị nào bằng không (0). Biểu thức dùng toán tử quan hệ trả về 0 cho false và 1 cho true.
Ví dụ
a == 14;
- Biểu thức này sẽ kiểm tra xem giá trị của a có bằng 14 hay không. Giá trị của biểu thức sẽ là 0 (false) nếu a có giá trị khác 14 và 1 (true) nếu nó là 14.
- Bảng sau mô tả ư nghĩa của các toán tử quan hệ.
[Only registered and activated users can see links]
5. Toán tử luận lư (Logical Operator)
- Toán tử luận lư là các kư hiệu dùng để kết hợp hay phủ định biểu thức có chứa các toán tử quan hệ. Những biểu thức dùng toán tử luận lư trả về 0 cho false và 1 cho true.
- Bảng sau mô tả ư nghĩa của các toán tử luận lư.
6. Toán tử luận lư nhị phân (Bitwise Logical Operator)
- Ví dụ xét toán hạng có giá trị là 12, toán tử luận lư nhị phân sẽ coi số 12 này như 1100. Toán tử luân lư nhị phân xem xét các toán hạng dưới dạng chuỗi bit chứ không phải là giá trị số thông thường. Giá trị số có thể thuộc các cơ số: thập phân (decimal), bát phân (octal) hay thập lục phân (hexadecimal). Riêng toán tử luận lư nhị phân sẽ chuyển đổi toán hạng mà nó thao tác thành biểu diễn nhị phần tương ứng, đó là dăy số 1 hoặc 0.
- Được tổng kết qua bàng sau.
[Only registered and activated users can see links]
7. Biểu thức dạng hỗn hợp & Chuyển đổi kiểu
- Một biểu thức dạng hỗn hợp là một biểu thức mà trong đó các toán hạng của một toán tử thuộc về nhiều kiểu dữ liệu khác nhau. Những toán hạng này thông thường được chuyển về cùng kiểu với toán hạng có kiểu dữ liệu lớn nhất. Điều này được gọi là tăng cấp kiểu. Sự phát triển về kiểu dữ liệu theo thứ tự sau :
Code:
char < int <long < float < double
- Chuyển đổi kiểu tự động được tŕnh bày dưới đây nhằm xác định giá trị biểu thức:
+ char và short được chuyển thành int và float được chuyển thành double.
+ Nếu có một toán hạng là double, toán hạng c̣n lại sẽ được chuyển thành double, và kết quả là double.
+ Nếu có một toán hạng là long, toán hạng c̣n lại sẽ được chuyển thành unsigned và kết quả cũng là unsigned.
+ Nếu tất cả toán hạng kiểu int, kết quả là int.
- Ngoài ra nếu một toán hạng là long, và toán hạng khác là unsigned và giá trị của kiểu unsigned không thể biểu diễn bằng kiểu long. Do vậy, cả hai toán hạng được chuyển thành unsigned long.
8. Ép kiểu (Casts)
- Thông thường, ta nên đổi tất cả hằng số nguyên sang kiểu float nếu biểu thức bao gồm những phép tính số học dựa trên số thực, nếu không thi vài biểu thức có thể mất đi giá trị thật của nó.
Ví dụ
int x, y, x;
x = 10;
y = 100;
z = x/y;
- Lúc này z sẽ bằng 0 khi phép chia diễn ra và phần thập phân (0.10) sẽ bị cắt bỏ.
- Cú pháp của việc ép kiểu.
Code:
(kiểu dữ liệu) biểu thức;
9. Độ ưu tiên của toán tử (Precedence)
- Độ ưu tiên của toán tử thiết lập thứ tự ưu tiên tính toán khi một biểu thức số học cần được ước lượng. Tóm lại, độ ưu tiên đề cập đến thứ tự mà C thực thi các toán tử. Thứ tự ưu tiên của toán tử số học được thể hiện như bảng dưới đây.
[Only registered and activated users can see links]
- Những toán tử nằm cùng một hàng ở bảng trên có cùng quyền ưu tiên. Việc tính toán của một biểu thức số học sẽ được thực hiện từ trái sang phải cho các toán tử cùng độ ưu tiên. Toán tử *, / , và % có cùng độ ưu tiên và cao hơn + và - (hai ngôi).
- Độ ưu tiên của những toán tử này có thể được thay đổi bằng cách sử dụng dấu ngoặc đơn. Một biểu thức trong ngoặc luôn luôn được tính toán trước. Các cặp dấu ngoặc đơn có thể được bao *****g nhau, và việc tính toán được thực hiện ở những cặp trong cùng trước, từ trái qua phải.
- Độ ưu tiên của toán tử so sánh : không có thứ tự ưu tiên giữa các toán tử và chúng đựoc ước lượng từ trái qua phải.
- Thứ tự ưu tiên của các toán tử luận lư
1. NOT
2. AND
3. OR
- Thứ tự ưu tiên giữu các kiểu toán tử khác nhau
1. Số học
2. So sánh (quan hệ)
3. Luận lư
Kết thúc bài 4
Bài tập tự làm
1. Viết một chương tŕnh nhập và cộng ba số.
2. Viết một chương tŕnh tính giá trị của biểu thức với các giá trị sau:
z = a*b+(c/d)-c*f;
a = 10
b = 7
c = 15.75
d = 4
e = 2
f = 5.6
3. Viết một chương tŕnh tính diện tích và chu vi của h́nh chữ nhật.
4. Viết một chương tŕnh tính thể tích h́nh trụ.
5. Viết một chương tŕnh tính lương thực lănh của một nhân viên theo công thức dưới đây.
Lương cơ bản : $ 12000
DA : 12% lương cơ bản
HRA : $150
TA : $120
Các mục khác : $450
Thuế : PF: 14% lương cơ bản và IT: 15% lương cơ bản
Lương thực lănh = Lương cơ bản + DA + HRA + TA + Các mục khác - (PF + IT)
(Bài 5: Toán tử và biểu thức - thực hành) Nhớ thanks:monkey35:
Giới thiệu
- C có một tập các toán tử phong phú. Toán tử là công cụ để thao tác dữ liệu. Một toán tử là một kư hiệu dùng để đại diện cho một thao tác cụ thể nào đó được thực hiện trên dữ liệu. C định nghĩa bốn loại toán tử:
+ Toán tử số học (arithmetec).
+ Toán tử quan hệ (relational).
+ Toán tử luận lư (logical).
+ Toán tử luận lư nhị phân (bitwise).
- Toán tử thao tác trên hằng hoặc biến. Hằng hoặc biến này được gọi là toán hạng (operands). Toán tử được phân loại theo toán tử một ngôi, hai ngôi và ba ngôi. Toán tử một ngôi chỉ thao tác trên một phần tử dữ liệu, toán tử hai ngôi trên hai phần tử dữ liệu và ba ngôi trên ba phần tử dữ liệu.
1. Biểu thức (Expressions)
- Một biểu thức là tổ hợp các toán tử và toán hạng. Toán tử thực hiện các thao tác như cộng, trừ, so sánh ... Toán hạng là những biến hay những giá trị mà các phép toán được thực hiện trên nó.
Ví dụ :
c = a + b;
- Trong ví dụ a + b, "a" và "b" là toán hạng và "+' là toán tử. Tất cả kêt hợp lại là một biểu thức.
- Trong quá tŕnh thực thi chương tŕnh, giá trị thực sự của biến (nếu có) sẽ được sử dụng cùng với các hằng có mặt trong biểu thức. V́ vậy, mọi biểu thức trong C đều có một giá trị.
2. Toán tử gán (Assignment Operator)
- Trước khi nghiên cứu các toán tử khác, ta hăy xét toán tử gán (=). Đây là toán tử thông dụng nhất cho mọi ngôn ngữ và mọi người đều biết. Trong C, toán tử gán có thể được dùng cho bất kỳ biểu thức C hợp lệ. Dạng thức chung cho toán tử gán là:
Code:
Tên biến = biểu thức;
3. Biểu thức số học (Arithmetic Expressions)
- Các phép toán thường được thực hiện theo một thứ tự cụ thể (hoặc riêng biệt) để cho ra giá trị cuối cùng. Thứ tự này gọi là độ ưu tiên (sẽ nói đến sau).
- Các biểu thức toán học trong C được biểu diễn bằng cách sử dụng toán tử số học cùng với các toán hạng dạng số và kư tự. Những biểu thức này gọi là biểu thức số học.
Ví dụ
a * (b+c/d) / 22;
++i % 7;
5 + (c = 3+8);
4. Toán tử quan hệ (Ralational Operators)
- Toán tử quan hệ được dùng để kiểm tra mối quan hệ giữa hai biến, hay giữa một biến và một hằng. Ví dụ, việc xét số lớn hơn của hai số, a và b, được thực hiện thông qua dấu lớn hơn (>) giữa hai toán hạng a và b (a > b).
- Trong C, true (đúng) là bất cứ giá trị nào khác không (0), và false (sai) là bất cứ giá trị nào bằng không (0). Biểu thức dùng toán tử quan hệ trả về 0 cho false và 1 cho true.
Ví dụ
a == 14;
- Biểu thức này sẽ kiểm tra xem giá trị của a có bằng 14 hay không. Giá trị của biểu thức sẽ là 0 (false) nếu a có giá trị khác 14 và 1 (true) nếu nó là 14.
- Bảng sau mô tả ư nghĩa của các toán tử quan hệ.
[Only registered and activated users can see links]
5. Toán tử luận lư (Logical Operator)
- Toán tử luận lư là các kư hiệu dùng để kết hợp hay phủ định biểu thức có chứa các toán tử quan hệ. Những biểu thức dùng toán tử luận lư trả về 0 cho false và 1 cho true.
- Bảng sau mô tả ư nghĩa của các toán tử luận lư.
6. Toán tử luận lư nhị phân (Bitwise Logical Operator)
- Ví dụ xét toán hạng có giá trị là 12, toán tử luận lư nhị phân sẽ coi số 12 này như 1100. Toán tử luân lư nhị phân xem xét các toán hạng dưới dạng chuỗi bit chứ không phải là giá trị số thông thường. Giá trị số có thể thuộc các cơ số: thập phân (decimal), bát phân (octal) hay thập lục phân (hexadecimal). Riêng toán tử luận lư nhị phân sẽ chuyển đổi toán hạng mà nó thao tác thành biểu diễn nhị phần tương ứng, đó là dăy số 1 hoặc 0.
- Được tổng kết qua bàng sau.
[Only registered and activated users can see links]
7. Biểu thức dạng hỗn hợp & Chuyển đổi kiểu
- Một biểu thức dạng hỗn hợp là một biểu thức mà trong đó các toán hạng của một toán tử thuộc về nhiều kiểu dữ liệu khác nhau. Những toán hạng này thông thường được chuyển về cùng kiểu với toán hạng có kiểu dữ liệu lớn nhất. Điều này được gọi là tăng cấp kiểu. Sự phát triển về kiểu dữ liệu theo thứ tự sau :
Code:
char < int <long < float < double
- Chuyển đổi kiểu tự động được tŕnh bày dưới đây nhằm xác định giá trị biểu thức:
+ char và short được chuyển thành int và float được chuyển thành double.
+ Nếu có một toán hạng là double, toán hạng c̣n lại sẽ được chuyển thành double, và kết quả là double.
+ Nếu có một toán hạng là long, toán hạng c̣n lại sẽ được chuyển thành unsigned và kết quả cũng là unsigned.
+ Nếu tất cả toán hạng kiểu int, kết quả là int.
- Ngoài ra nếu một toán hạng là long, và toán hạng khác là unsigned và giá trị của kiểu unsigned không thể biểu diễn bằng kiểu long. Do vậy, cả hai toán hạng được chuyển thành unsigned long.
8. Ép kiểu (Casts)
- Thông thường, ta nên đổi tất cả hằng số nguyên sang kiểu float nếu biểu thức bao gồm những phép tính số học dựa trên số thực, nếu không thi vài biểu thức có thể mất đi giá trị thật của nó.
Ví dụ
int x, y, x;
x = 10;
y = 100;
z = x/y;
- Lúc này z sẽ bằng 0 khi phép chia diễn ra và phần thập phân (0.10) sẽ bị cắt bỏ.
- Cú pháp của việc ép kiểu.
Code:
(kiểu dữ liệu) biểu thức;
9. Độ ưu tiên của toán tử (Precedence)
- Độ ưu tiên của toán tử thiết lập thứ tự ưu tiên tính toán khi một biểu thức số học cần được ước lượng. Tóm lại, độ ưu tiên đề cập đến thứ tự mà C thực thi các toán tử. Thứ tự ưu tiên của toán tử số học được thể hiện như bảng dưới đây.
[Only registered and activated users can see links]
- Những toán tử nằm cùng một hàng ở bảng trên có cùng quyền ưu tiên. Việc tính toán của một biểu thức số học sẽ được thực hiện từ trái sang phải cho các toán tử cùng độ ưu tiên. Toán tử *, / , và % có cùng độ ưu tiên và cao hơn + và - (hai ngôi).
- Độ ưu tiên của những toán tử này có thể được thay đổi bằng cách sử dụng dấu ngoặc đơn. Một biểu thức trong ngoặc luôn luôn được tính toán trước. Các cặp dấu ngoặc đơn có thể được bao *****g nhau, và việc tính toán được thực hiện ở những cặp trong cùng trước, từ trái qua phải.
- Độ ưu tiên của toán tử so sánh : không có thứ tự ưu tiên giữa các toán tử và chúng đựoc ước lượng từ trái qua phải.
- Thứ tự ưu tiên của các toán tử luận lư
1. NOT
2. AND
3. OR
- Thứ tự ưu tiên giữu các kiểu toán tử khác nhau
1. Số học
2. So sánh (quan hệ)
3. Luận lư
Kết thúc bài 4
Bài tập tự làm
1. Viết một chương tŕnh nhập và cộng ba số.
2. Viết một chương tŕnh tính giá trị của biểu thức với các giá trị sau:
z = a*b+(c/d)-c*f;
a = 10
b = 7
c = 15.75
d = 4
e = 2
f = 5.6
3. Viết một chương tŕnh tính diện tích và chu vi của h́nh chữ nhật.
4. Viết một chương tŕnh tính thể tích h́nh trụ.
5. Viết một chương tŕnh tính lương thực lănh của một nhân viên theo công thức dưới đây.
Lương cơ bản : $ 12000
DA : 12% lương cơ bản
HRA : $150
TA : $120
Các mục khác : $450
Thuế : PF: 14% lương cơ bản và IT: 15% lương cơ bản
Lương thực lănh = Lương cơ bản + DA + HRA + TA + Các mục khác - (PF + IT)
(Bài 5: Toán tử và biểu thức - thực hành) Nhớ thanks:monkey35: