You are on page 1of 6

BÀI 04 - CÁC PHÉP TOÁN CƠ BẢN

0. Ý nghĩa bài học

- Sử dụng được các phép toán: số học, luận lý, so sánh.


(phép toán trên bit sẽ học ở môn VĐK)
- Nắm được trình tự thực hiện của 1 phép toán phức hợp (gồm nhiều phép bên trong)

*Cho thêm bài tập để SV còn yếu làm thêm – SV check chéo kq cho nhau!

1. Phép toán số học

Ký hiệu Ví dụ Ý nghĩa
= float a=1.1, b=2.2; Gán giá trị của vế phải cho vế trái.
int c;
(gán) a = b; *Lưu ý 01: Vế trái của dấu = chỉ là 1 biến.
b = a + 4;
*Lưu ý 02: Vế phải của dấu = có thể là 1 biến hoặc 1 biểu
c = a; //Không lỗi thức tính toán.
(nghiên cứu sau: ép
kiểu) *Lưu ý 03: Nếu gán số thực vào biến số nguyên, thì biến số
nguyên chỉ chứa phần nguyên (không lỗi – không nên làm).
*Hỏi: Sau khi chạy xong, a = 2.2, b =6.2, c = 2
+ float a=1,b=2,c=3.3; (Bước 1) Thực hiện phép cộng bên vế phải.
a = b + c;
(cộng) (Bước 2) Gán kết quả từ vế phải sang cho vế trái (biến a).
*Lưu ý 04: Biến bên VP không đổi g.trị. Biến bên VT đổi
*Hỏi: Sau khi chạy xong, a = 5.3, b = 2.0, c = 3.3
- char a=1, b=2, c=3; Tương tự dấu +.
a = b – c – 5;
(trừ)
*Hỏi: Sau khi chạy xong, a = , b = ?, c = ? Lỗi chương trình
* double a=1,b=2,c=3.3; Tương tự dấu +.
a = b * c * 2;
(nhân)
*Hỏi: Sau khi chạy xong, a = , b = ?, c = ? 13.200000 2.000000 3.300000
/ double a=1,b=2,c=3.3; Tương tự dấu +.
a = c / b * 2;
(chia)

*Hỏi: Sau khi chạy xong, a = ?, b = ?, c = ? 3.300000 2.000000 3.300000

/ int a=1, b=2, c=3, d; *Lưu ý 05: (xem “trình tự tính toán” trước lưu ý số 04)
float x, y,z=3,k,p;
(chia) a = c / b; Kết quả của phép toán (x+y) hay (x*y) hay (x/y) hay (x-y) :
y = c / b;
d = 1.0*c/b; => Là số nguyên, nếu các biến đều là số nguyên.
x = 1.0*c/b;
=> Là số thực, nếu chỉ cần 1 biến là kiểu số thực.
y = 1.0*(c/b);
k = a*b/z;
p = a*z/b;
*Hỏi: Sau khi chạy xong, a = ?, b = ?, c = ?, d = ?, x = ?, y = ? 1 2 3 11.500000 1.000000
0.666667 1.500000
% int a=1, b=3, c=5; - Đây là phép chia lấy phần dư.
float w, k=2.2;
(chia a = c % b; * Lưu ý 06: Phép % chỉ sử dụng được với số nguyên.
lấy dư) w = k % b;
(Vì số thực sẽ luôn chia hết, không có phần dư).
*Hỏi: Sau khi chạy xong, a = ?, b = ?, c = ?, w = ? Lỗi chương trình

2. Độ ưu tiên của các phép toán

Phép toán Độ ưu tiên (1 lớn nhất) Ghi chú


() 1 Đóng mở ngoặc
! 2 Phép luận lý
*/% 3
+- 4
> >= <= < 5 Phép so sánh (học sau)
== != 6 Phép so sánh (học sau)
&& 7 Phép luận lý
|| 8 Phép luận lý
- Trong 1 biểu thức tính toán, nếu có nhiều phép toán, thì chương trình sẽ thực hiện các phép toán
có độ ưu tiên cao hơn trước, rồi đến các phép toán có độ ưu tiên thấp hơn.

Câu hỏi:
1. Xác định giá trị của các biến sau khi chạy chương trình và giải thích:
int a,b,c;
a=5; b=10;
c = a * 5 + b % 3 – 4.2;
2. Xác định giá trị của các biến sau khi chạy chương trình và giải thích:
float a,b,c;
a=5; b=10;
c = a * 5 + b / 3.0 - 4.2;
3. Xác định giá trị của các biến sau khi chạy chương trình và giải thích:
int a,b;
float c;
a=5; b=10;
c = a * (b/3.0 - 4.2);
4. Xác định giá trị của các biến sau khi chạy chương trình và giải thích:
int c;
c = 10 / 3.0 + 5.9 - 13 % 5;
5. Cho chương trình:
int a=2;
float c = 5 / (a + 0.0);
Hỏi: c = ?

3. Phép toán so sánh

Ký hiệu Ví dụ Ý nghĩa
> int a=1, b=2, c; - Phép > dùng để so sánh xem Phía trước có lớn hơn Phía
c = a > b;
(lớn hơn) sau hay không?
+ Nếu đúng thì kết quả trả về là 1.
+ Nếu sai thì kết quả trả về là 0.
*Lưu ý: Số khác 0 là True. Chỉ số 0 là False. (học sau)
*Hỏi: Sau khi chạy xong, a = ?, b = ? c = ?
*Tương tự cho các phép sau:
>= Lớn hơn hoặc bằng Tương tự như trên.
< Bé hơn

<= Bé hơn hoặc bằng

== Bằng (so sánh là 2


dấu bằng nha)
(1 dấu là phép gán)
!= Không bằng

Câu hỏi:
1. Xác định giá trị của các biến sau khi chạy chương trình & giải thích:
int a=4,b=7,c;
c = a <= b - a + 5.0/2 + 3.5;
2. Xác định giá trị của các biến sau khi chạy chương trình & giải thích:
int a=4,b=7,c;
c = a > b + 7/(5.0 == a);

- Thực tế, phép so sánh không sử dụng để thực hiện các phép toán mà thường kết hợp với các câu
lệnh so sánh điều kiện: if, for, while,...để kiểm tra điều kiện đúng/sai. Xem ví dụ sau:
Chương trình Ý nghĩa
int a=1,b=2; - Cho a, b giá trị.
if(a>b) - Dùng câu lệnh if(nếu) để kiểm tra điều kiện:
printf("a lon hon b"); o Nếu a>b đúng, thì xuất ra:
if(a<b) "a lon hon b"
printf("a nho hon b"); o Tương tự cho 2 trường hợp còn lại.
if(a==b)
printf("a nho hon b");
4. Phép toán luận lý

- Phép luận lý là phép xác định đúng/sai.


- Trong C, để xác định đúng sai thì trình biên dịch quy định: đúng (khác 0), sai (bằng 0).
Ký hiệu Ví dụ Ý nghĩa
! int a=5,b=-3,c=0,x,y,z; - Đây là phép phủ định. Đúng thành Sai, và ngược lại.
x = !a;
(not) y = !b;
z = !c; //đoán xem?
*Hỏi: Sau khi chạy xong, a = ?, b = ? c = ?, x = ?, y = ?, z = ?
&& int a=5,b=-3,c=0,x,y,z; - Nếu tất cả cùng đúng => đúng (trả về số 1);
x = a && b;
(and) y = x && b && (a<c); - Nếu chỉ cần 1 sai => sai (trả về số 0).
z = !c && !a <= !b;
đúng && đúng = đúng(1)
(đúng && sai) = (sai && đúng) = (sai && sai) =
sai(0)
*Hỏi: Sau khi chạy xong, a = ?, b = ? c = ?, x = ?, y = ?, z = ? Giải thích các bước tính toán.
*Gợi ý: xem lại (mục 2)Độ ưu tiên của các phép toán.
|| int a=5,b=-7,c=0,x,y,z; - Nếu tất cả cùng sai => sai (trả về số 0);
x = a || b || c;
(or) y = x || !c && !x > c; - Nếu chỉ cần 1 đúng => đúng (trả về số 1).
z = (a>!b) && (a||c);
sai || sai = sai(0)
(đúng && sai) = (sai && đúng) = (đúng && đúng) =
đúng(1)
*Hỏi: Sau khi chạy xong, a = ?, b = ? c = ?, x = ?, y = ?, z = ? Giải thích các bước tính toán.

- Thực tế, phép luận lý được sử dụng trong so sánh điều kiện: if, for, while,...để kiểm tra điều kiện
đúng/sai. Xem ví dụ sau:
Chương trình Câu hỏi
int a=4,b=2,c=5; - Theo bạn, chương trình này dùng để làm
if(a>=b && a>=c) gì?
printf("a lon nhat");
if(b>=a && b>=c)
printf("b lon nhat");
if(c>=a && c>=b)
printf("c lon nhat");

5. Các phép toán khác

Ký hiệu Ví dụ Ý nghĩa
++ int a=2, b=3, x, y; *Có 2 dạng: a++, ++a.
a++;
(tăng 1) ++b; - Nếu đứng 1 mình thì giống nhau: (a++) = (++a),
y = 5 + ++a; cũng chính là: (a = a+1)
x = a++ + ++b;
//nên đóng ngoặc cho dễ - Nếu nằm trong 1 biểu thức thì khác nhau:
theo dõi. (a++)+(++b)
x = 5 + (a++); x = 5 + a;
//Tính trước - tăng sau 
a++;
x = 5 + (++a); ++a;
//Tăng trước - tính sau 
x = 5 + a;
*Hỏi: Sau khi chạy xong, a = ?, b = ?, x = ?, y = ? Viết lại thành từng câu lệnh đơn.
-- int a=2, b=3, x, y; - Tương tự ++
x = a-- + b;
(giảm 1)
y = (++a - b--)/3;
*Hỏi: Sau khi chạy xong, a = ?, b = ?, x = ?, y = ? Viết lại thành từng câu lệnh đơn.
+= int a=4; - Phép viết tắt:
a+=5;
(viết tắt) a += 5;  a = a + 5;
*Hỏi: Sau khi chạy xong, a = ?.
-= int a=1,b=2,c=5; - Tương tự +=
a += b + 1;
*= b *= a + 2;//Đoán xem? *Lưu ý: Nếu vế phải là 1 biểu thức, thì biểu thức được
c %= a-1;
/= thực hiện trước, rồi mới tính vào vế trái.
%=
*Hỏi: Sau khi chạy xong, a = ?, b = ?
Cho chương trình:
int a= 7, b=3;
a+=5;
printf("a=%d\n",a++);
printf("kq=%d\n",--b + a);
Hỏi: Kết quả xuất ra màn hình là gì? Tại sao ?

6. Ép kiểu dữ liệu

- Từ 1 biến kiểu A, bạn có thể ép thành kiểu B = bằng cách ghi tên kiểu dữ liệu mong muốn ở phía
trước biến cần ép kiểu.
Chương trình Ý nghĩa
int a; - b là số thực.
float b; - (int)b: ép kiểu giá trị của b thành kiểu số
b = 5.3; nguyên. (tức: chỉ còn giữ lại phần nguyên)
a = (int)b; Và Kết quả gán cho a. Lúc này a = 5.
- Thậm chí, bạn cũng có thể ghi: a = b; thì
chương trình vẫn tự động ép kiểu.

- Trong một số trường hợp thì việc ép kiểu phải ghi rõ ràng, nếu không thì kết quả sẽ không đúng
như mong muốn, xét ví dụ sau:
Chương trình 01 Hỏi
int a=7; b = ?
float b;
b = a/2;

Chương trình 02 Hỏi


int a=7; b = ?
float b;
b = (float)a/2;

Chương trình 03 Hỏi


int a=7; b = ?
float b;
b = a/2.0;//b=1.0*a/2;

You might also like