Download - C3: BiỂU THỨC (Expression)
21/04/23 1
C3: BiỂU THỨC (Expression)
1. Giới thiệu
2. Toán tử
3. Chuyển đổi kiểu dữ liệu
4. Thứ tự ưu tiên của toán tử
5. Vài chương trình mẫu
21/04/23 2
1. Giới thiệu Toán tử: Dùng thực hiện các phép tính Toán hạng: Là hằng, biến hoặc biểu thức Biểu thức:
Là sự kết hợp giữa các toán tử (operator) và các toán hạng (operand) theo một trật tự nhất định.
Trong trường hợp biểu thức có nhiều toán tử, ta dùng cặp dấu ngoặc đơn () để chỉ định toán tử nào được thực hiện trước.
Ví dụ một biểu thức:
x=2*(y +3) -z
-Toán tử?
-Toán hạng?
21/04/23 3
2. Toán tử
2.1 Toán tử gán
2.2 Các toán tử gán phức hợp
2.3 Các toán tử số học ( +, -, *, /, % )
2.4 Các toán tử quan hệ ( ==, !=, >, <, >=, <= => )
2.5 Các toán tử logic ( !, &&, || )
2.6 Toán tử điều kiện ( ? )
2.7 Toán tử sizeof
2.8 Toán tử BITWISE
2.9 Toán tử &, *
2.1 Toán tử gán (=)
Ví dụ: int a=5; //gán giá trị nguyên 5 cho biến a
int k=a;
float x= 4.5 + a;
Toán tử gán dùng để gán một giá trị (biểu thức) nào đó cho một biến
Vế trái bắt buộc là biến Vế phải là hằng hoặc biến hoặc một biểu thức Toán tử gán thực hiện từ trái qua phải
21/04/23 4
5
2.1 Toán tử gán (tt)
Ví dụ: a = b;
Gán giá trị đang chứa trong biến b cho biến a.
21/04/23
Chú ýSự thay đổi của b sau phép gán sẽ không ảnh hưởng đến giá trị của a.
int x=3;int y=x;x=5;cout<<x<<endl<<y;
Kết quả?
3 35 5355353
6
2.1 Toán tử gán (tt)
Ví dụ:
a = 2 + (b = 5); //hợp lệ
Vì vậy biểu thức sau cũng hợp lệ trong C++
a=b=c=5; //hợp lệ
21/04/23
tương đương với
b = 5; a = 2 + b; Từ đó ta có a=7;
gán giá trị 5 cho cả ba biến a, b và c
7
2.2 Các toán tử gán phức hợp (+=, -=, *=, /=, %=)
a += k; tức a = a+k;a -= k; tức a = a - k;
a /= k; tức a = a /k;c *= k; tức c = c*k;
e %= k; tức e = e %k;
21/04/23
int x=3,y=8,z=20;x+=15; x-=y;z/=y;x*=y+1; z%=y-4;
x=3+15=18x=18-8=10z=20/8=2x=10*(8+1)=90z=2%(8-4)=2
Với k là một hằng/ biến/ biểu thức
8
Tăng và giảm
Toán tử tăng (++) là tăng 1 đơn vị và giảm (--) là giảm đi 1 đơn vị.
21/04/23
a++;a+=1;a=a+1;
a--;a-=1;a=a-1;
9
Tăng và giảm (tt)
Một tính chất của toán tử (++) là sự khác nhau giữa tiền tố a++ và hậu tố ++a;
++a?
giá trị của biến a tăng 1 trước khi tính biểu thức.
21/04/23
Ví dụ:
int x=3,y,z=5;y=++x; z+=++y;
x=4;y=4;
y=5;z=z+y=5+5=10
a++? giá trị của biến a tăng 1 sau khi tính biểu thức
Ví dụ:
int x=3,y,z=5;y=x++; z+=y++;
y=3; x=4;
z=z+y=5+3=8; y=4;
10
Tăng và giảm (tt) Hãy chú ý sự khác biệt :
21/04/23
21/04/23 11
2.3 Các toán tử số học ( +, -, *, /, % )
5 toán tử số học được hỗ trợ bởi ngôn ngữ là:
+ cộng
- trừ
* nhân
/ chia
% chia lấy phần dư
Ví dụ:
3 + 4 78 – 3 53 * 4 128 / 2 49 % 2 1
Thứ tự thực hiện các toán tử này cũng giống như chúng được thực hiện trong toán học
21/04/23 12
Lưu ý: Trừ toán tử %, các toán tử còn lại đều chấp nhận việc
pha trộn toán hạng số nguyên hay số thực Nếu cả 2 toán hạng là số nguyên thì kết quả là số
nguyên Nếu có 1 toán hạng số thực thì kết quả là số thực
8/3 5-1.5
8/3.0 5-1.0
3*15.0 5+6
3*15 5+6.0
=2 (int)
=2.666667 (double)
=45 (double)
=45 (int)
5-1
5-1.0
5+6.0
5+6
=4 (int)
=4 (double)
=11 (double)
=11 (int)
21/04/23 13
2.4 Các toán tử quan hệ ( ==, !=, >, <, >=, <= )
Để so sánh hai biểu thức với nhau chúng ta có thể sử dụng các toán tử quan hệ
== Bằng != Khác
> Lớn hơn < Nhỏ hơn
>= Lớn hơn hoặc bằng < = Nhỏ hơn hoặc bằng
Kết quả của phép toán quan hệ là một giá trị logic (hoặc đúng (1) hoặc sai (0))
int a=4,b=6;
int x=(a<=b)*10;
int y=(a!=b)*(2*a==2*b)*10;
int z=(a-b>0)*10;
x=1*10=10 y=1*0*10=0 z=0*10=0
21/04/23 14
Lưu ý:
Các ký tự cũng là toán hạng (giá trị tính bằng vị trí trong ASCII)
‘A’ 65, ‘B’ 66 , . … ’Z’ 90;
‘a’ 97, ‘b’ 98, …. ’z’ 122;
int x=(‘A’<‘H’)*100 + (‘c’<100)*‘B’;
x=?x=1*100+1*66 = 166
21/04/23 15
2.5 Các toán tử logic ( !, &&, || ).
Toán tử ! là toán tử “phủ định”
Toán tử && là toán tử “và”
Toán tử || là toán tử “hoặc”
!1 là 0 !0 là 1
1 && 1 là 1 1 && 0 là 00 && 1 là 0 0 && 0 là 0
1 || 1 là 1 1 || 0 là 10 || 1 là 1 0 || 0 là 0
21/04/23 16
2.5 Các toán tử logic ( !, &&, || ) (tt)
Toán tử &&, || tính toán nhiều biểu thức logic để cho ra một kết quả logic.
Toán tử ! tính toán trên một biểu thức logic.
Có thể kết hợp nhiều toán tử logic cho nhau.
Ví dụ:
int a=4, b=6, kt=‘A’;
int x=((a<b) && (kt<‘H’))*10;
int y=(!(a<b) && (kt<‘H’))*10;
int z=(!(a<b) || (kt<=‘H’))*10;
=>x=10=>y=0
=>z=10
21/04/23 17
2.6 Toán_tử_điều_kiện ( ? )
Toán_tử_điều_kiện tính toán một Biểu_thức_logic
Nếu Biểu_thức_logic là đúng: trả về Giá_trị1.
Nếu Biểu_thức_logic là sai: trả về Giá_trị2.
Biểu_thức_logic ? Giá_trị1 : Giá_trị2 ;
Đúng
Sai
21/04/23 18
Toán tử điều kiện ( ? ) Xét ví dụ:
7==5 ? 4 : 3
7==5+2 ? 4 : 3
5>3 ? a : b
a>b ? a : b
3 vì 7 không bằng 5.
4 vì 7 bằng 5+2.
a, vì 5 lớn hơn 3.
giá trị lớn hơn, a hoặc b.
Chương trình đơn giản
Nhập bán kính r từ bàn phím.
In ra chu vi đường tròn và diện tích hình tròn.
Nếu r <=0 thì chu vi và diện tích bằng 0.
chu vi? diện tích?
chu vi = 2*pi*r; diện tích =pi*r*r;
Chương trình đơn giản#include <iostream.h>
#define pi 3.14159
void main()
{ float r, cv, dt;
cout<<“Ban hay nhap ban kinh”; cin>>r;
cv=(r>0? 2*pi*r : 0); //su dung toan tu dieu kieu
dt=(r>0? pi*r*r : 0); //su dung toan tu dieu kien
cout<<“\nChu vi la: ”<<cv<<endl;
cout<<“\nDien tich la: ”<<dt<<endl;
}
21
2.7 Toán tử sizeofTrả về số byte của kiểu hay biến nào đó chiếm
giữ.Toán tử này có một đối số bên trong.
Cú pháp: int sizeof( đối số)
Ví dụ:
a = sizeof (char); b=sizeof(int);
a sẽ bằng 1 vì kiểu char có kích cỡ 1 byte.
b sẽ bằng 2 vì kiểu int có kích cỡ 2 byte.
21/04/23
22
Kích thước một số kiểu:
21/04/23
char => 1 byte
int, short, unsigned int => 2 byte
long, unsigned long => 4 byte
float => 4 byte
double => 8 byte
a=sizeof(8/3)
b=sizeof(8/3.0)
c=sizeof(3.14*100)
d=sizeof(‘A’)
a=sizeof(int) = 2b=sizeof(double) = 8c=sizeof(double) = 8a=sizeof(char) = 1
23
2.8 Toán tử BITWISE (Bit operator) Dùng kiểm tra, gán hay thay đổi các bit thật sự trong 1
byte Trong C++ chỉ sử dụng với dữ liệu và biến int, char
21/04/23
24
2.8 Toán tử BITWISE (Bit operator)
Phủ định bit (~): Là toán tử đơn hạng, thực hiện đão bit trong toán hạng của nó.
Và bit (&): So sánh các bit tương ứng của các toán hạng và cho kết quả là 1 khi các bit tương ứng là 1, ngược lại là 0.
Hoặc bit (|): So sánh các bit tương ứng của các toán hạng và cho kết quả là 0 khi các bit tương ứng là 0, ngược lại là 1.
XOR bit (^): So sánh các bit tương ứng của các toán hạng và cho kết quả là 0 khi cả 2 bit là 0 hoặc cả 2 bit là 1, ngược lại là 1.
21/04/23
25
2.8 Toán tử BITWISE (Bit operator) Toán tử dịch trái bit và dịch phải bit: Lấy 1 bit làm toán
hạng trái của chúng và 1 số nguyên dương n làm toán hnagj phải Toán tử dịch trái cho kết quả là 1 bit sau khi thực hiện
dịch n bit trong bit của toán hạng trái về bên trái Toán tử dịch phải cho kết quả là 1 bit sau khi thực
hiện dịch n bit trong bit của toán hạng trái về bên phải. Các bit trống sau khi dịch được đặt tới 0
105 & 7 = 1// 01101001 & 0000 0111= 00000001105 | 7 = 127//01101001 | 0000 0111= 011011110x60 = 0x96 /* 0110 1001 = 1001 0110 */
21/04/23
26
2.9 Toán tử &, *
Toán tử &: Trả về địa chỉ bộ nhớ của hệ số của nó Cách viết: m=&abc;
• Toán tử *: Trả về giá trị của biến được cấp phát tại địa chỉ đi theo sau nó
• Cách viết: q=*m;
21/04/23
27
Ví dụ: Giả sử biến abc ở vị trí bộ nhớ là 200, biến abc
có giá trị là 100
Vậy:
m=&abc;
q=*m;
200
100
21/04/23
28
3. Chuyển đổi kiểu
Cho phép bạn chuyển đổi dữ liệu từ kiểu này sang kiểu khác.
Cách cơ bản nhất được thừa kế từ ngôn ngữ C là
(Kiểu_Dữ_liệu) <Biểu_Thức>
21/04/23
29
Chuyển kiểu tường minh
int a=(int) 3.14; // giá trị của a là 3
int b=int (3.14); //tương đương (int) 3.14
float c=(float) 3; //giá trị của c là 3.0
21/04/23
Chuyển kiểu tường minh (các toán tử kiểu là đơn hạng)
30
Chuyển kiểu không tường minh
Chuyển kiểu không tường minh (các giá trị của các kiểu khác nhau được trộn trong biểu thức)
Việc chuyển đổi kiểu tự động theo quy tắc sau: char-->int-->longint-->float-->double
double d=1; //d nhận giá trị thực 1.0
int i=10.5; //i nhận giá trị nguyên 10
i = i + d; // nghĩa là: i = int(double(i) + d)
21/04/23
31
4. Thứ tự ưu tiên của các toán tử
Khi viết các biểu thức phức tạp với nhiều toán tử, phải dựa theo thứ tự ưu tiên các toán tử.
Ví dụ như trong biểu thức sau:
a = 5 + 7 % 2.
cách 1: a = 5 + 7 % 2 = 5+1 = 6cách 2: a = 5 + 7 % 2 = 12%2 = 0
21/04/23
Ta thực hiện theo cách 1 hay cách 2?
32
Thứ tự …
21/04/23
Ví dụ:
Ví dụ: a = = b + c * d
Thứ tự thực hiện các toán tử như sau: * -> + -> ==
Ví dụ: a == (b + c) * d
Thứ tự thực hiện các toán tử như sau: + -> * -> ==
Ví dụ: a = b += c
Tính phép cộng cho b trước rồi gán b sau khi cộng cho a.
int a=1, b=3, c=5;
a=b+=c;
Ta được a=8; b=8; c=5;
21/04/23 33
TỔNG KẾT CHƯƠNG 3 Biểu thức Các phép toán:
=+, -, *, / ,%++, --, +=, -=, *=, /=, %=sizeof(kiểu/ biến) toán tử điều kiện ?…
chuyển đổi kiểu thứ tự ưu tiên các phép toán
KẾT THÚC CHƯƠNG 3