Bài 5: Toán Tử và Biểu Thức [Thực Hành]
Mục tiêu:
Kết thúc bài học này,
bạn có thể:
Ø Sử dụng được các toán tử số học, so sánh và luận
lý
Ø Chuyển đổi các kiểu dữ liệu
Ø Nắm được thứ tự ưu tiên giữa các toán tử.
Các bước trong chương này đã được nghiên cứu kỹ và giải thích chi
tiết để chúng ta có thể hiểu rõ và áp dụng chúng một cách hoàn chỉnh.Ta hãy
theo các bước cẩn thận.
Phần I - Trong thời gian
1 giờ 30 phút đầu:
Ví dụ 1:
Trong chương này, ta sẽ
viết một chương trình tính toán tiền lãi đơn giản (lãi thuần chưa tính tiền vốn
vào) khi ta vay tiền.
Công thức để tính toán
là p * n * r /100. Ở đây ‘p’ có nghĩa là tiền vốn, ‘n’
là số năm và ‘r’ có nghĩa là tỉ lệ lãi suất.
Chương trình khai báo ba
biến số thực ‘float’ có tên là p, n và r. Chú ý rằng, các biến được khai báo
trên cùng một dòng mã thì ta dùng dấu phẩy (,) để phân chia chúng với nhau. Mỗi
biến trên được gán một giá trị.
Xét dòng mã sau:
printf("\nAmount is: %f",
p*n*r/100);
Trong printf() ở trên, chúng ta đã dùng ‘%f’ để hiển thị giá trị
của biến kiểu float (số thực), giá trị biến này là p*n*r/100, công thức dùng tính lãi đơn giản được đưa vào trong printf(). Đó là p, n và r được nhân với nhau và kết quả được chia cho 100. Như vậy printf() sẽ hiển thị lãi đơn.
Gọi Dev-C++.
5.1 Tính lãi đơn
1. Tạo ra một tập tin mới.
2. Gõ đoạn mã sau:
#include <stdio.h>
#include <conio.h>
void main()
{
float p, n, r;
p = 1000;
n = 2.5;
r = 10.5;
printf("\n Amount is: %f", p*n*r/100);
getch();
}
3. Biên dịch và thực thi chương trình.
5.2 Dùng toán tử số học
Trong phần này ta sẽ
viết một chương trình có sử dụng toán tử số học.
Chương trình này khai báo bốn biến số nguyên tên
là a, b, c và d. Giá trị sẽ gán cho các biến a, b và c là:
a = 50, b = 24, c = 68
Xét dòng mã sau:
d = a*b+c/2;
a nhân với b. c chia cho 2. Kết quả của a*b được
cộng với thương số của c/2. Giá trị này sẽ gán cho d qua toán tử (=). Biểu thức
được tính như sau:
1. 50 * 24 = 1200
2. 68 / 2 = 34
3. 1200 + 34 =
1234
4. d = 1234
‘printf( )’ : hiển thị giá trị của
biến d.
Xét biểu thức:
d = a*(b+c+(a-c)*b);
Ở đây dấu ngoặc đơn trong cùng có độ ưu
tiên cao nhất. Do vậy, (a-c) được tính trước. Sau đó, tính tới các dấu ngoặc
đơn ngoài. Kết quả của (a-c) được nhân cho b bởi vì ‘*’ có độ ưu tiên cao hơn ‘-‘ và ‘+’. Biểu thức được tính như dưới đây:
1. d =
50 * (24 + 68 + (50 - 68) * 24)
2. d =
50 * (24 + 68 + (-18) * 24)
3. d =
50 * (24 + 68 + (-432))
4. d =
50 * (92 - 432)
5. d =
50 * (-340)
6. d =
-17000
Các biểu thức khác được tính tùy vào các toán tử
đã được dùng. Kết quả được hiển thị bởi lệnh ‘printf()’.
1.Tạo mới một tập tin.
2. Gõ đoạn mã sau:
#include <stdio.h>
#include <conio.h>
main()
{
int a,b,c,d;
a = 50;
b = 24;
c = 68;
d = a*b+c/2;
printf("\n The value after a*b+c/2 is: %d", d);
d = a%b;
printf("\n The value after a mod b is: %d", d);
d = a*b-c;
printf("\n The value after a*b-c is: %d", d);
d = a/b+c;
printf("\n The value after a/b+c is: %d", d);
d = a+b*c;
printf("\n The value after a+b*c is: %d", d);
d = (a+b)*c;
printf("\n The value after (a+b)*c is: %d", d);
d = a*(b+c+(a-c)*b);
printf("\n The value after a*(b+c+(a-c)*b) is: %d", d);
getch();
getch();
}
3. Biên dịch và thực thi chương trình.
Kết quả:
5.3 Dùng toán tử so sánh và luận lý
Trong phần này chúng ta sẽ viết một chương trình
sử dụng toán tử so sánh và toán tử luận lý.
Ba biến số nguyên tên là
a, b và c được khai báo trong chương trình này. Các giá trị gán cho biến như
sau: a = 5, b = 6 & c = 7.
Xét những dòng mã sau:
1. a + b >= c;
Ðầu tiên, a+b sẽ được
tính (toán tử số học có độ ưu tiên cao hơn toán tử so sánh), kết quả là 11. Kế
đến giá trị 11 được so sánh với c. Kết quả là 1(true) bởi vì 11 > 7.
2. Xét
biểu thức khác:
a > 10 && b
<5;
Tính toán đầu tiên sẽ là
a> 10 và b<5, bởi vì toán tử so sánh (> <) có quyền ưu tiên cao hơn
toán tử luận lý AND (&&). Tính toán theo sau:
1. 5 > 10 && 6<5
2. FALSE && FALSE
3. FALSE tức là, 0
1. Tạo một tập tin mới.
2. Gõ đoạn mã sau:
#include
<stdio.h>
#include <conio.h>
main()
{
int
a = 5, b = 6, c = 7;
printf ("int a = 5, b = 6, c = 7;\n");
printf("The value of a > b is \t%i\n\n", a > b);
printf("The value of b < c is \t%i\n\n", b < c);
printf("The value of a + b >= c is \t%i\n\n", a + b >= c);
printf("The value of a - b <= b - c is \t%i\n\n", a-b <= b-c);
printf("The value of b-a ==
b - c is \t%i\n\n", b - a == b - c);
printf("The value of a*b != c * c is \t%i\n\n", a * b < c * c);
printf("Result of a>10 && b<5 = %d\n\n", a>10 &&
b<5);
printf("Result of a > 100 || b < 50 = %d\n\n", a>100 || b<50);
getch();
getch();
}
3. Biên dịch và thực thi chương trình.
Kết quả:
5.4
Chuyển đổi kiểu dữ liệu
Trong phần này, ta sẽ viết một chương trình để
hiểu rõ việc chuyển đổi kiểu dữ liệu.
Trong biểu thức đầu
tiên, tất cả đều là số nguyên ‘int’ 40 / 17 * 13 / 3 sẽ có kết quả là
8 (40 / 17 làm tròn ra 2, 2 * 13 = 26, 26 / 3 làm tròn
ra 8)
Biểu thức thứ hai như
sau:
1. Ðịnh giá trị: 40 / 17 * 13 / 3.0
2. 40 / 17 làm tròn kết quả là 2
3. 2 * 13 = 26
4. Nhưng vì có số 3.0 đã ép kiểu phép
chia cuối cùng thành số kiểu double, vì vậy 26.0 / 3.0 = 8.666667
Trong biểu thức thứ ba:
Nếu chúng ta di chuyển
dấu chấm thập phân sang số 13 (40 / 17 * 13.0 / 3), kết quả vẫn sẽ là 8.666667 bởi
vì:
1. 40
/ 17 làm tròn là 2
2. Số 13.0 ép
kiểu dữ liệu phép nhân thành double nhưng kết quả vẫn là 26 vì 2.0
* 13.0 = 26.0
3. Và 26.0 ép
phép chia cuối cùng thành kiểu double, vì vậy 26.0 / 3.0 = 8.666667
Trong biểu thức cuối:
nếu chúng ta di chuyển
dấu chấm thập phân sang số 17 (40 / 17.0 * 13 / 3), kết quả bây giờ
sẽ là 10.196078 bởi vì:
1. 17.0 ép
kiểu của phép chia đầu thành kiểu double và 40.0 / 17.0 =
2.352941
2. 2.352941
* 13.0 = 30.588233
3. và 30.588233
/ 3.0 = 10.196078
1. Tạo một tập tin mới.
2. Gõ đoạn mã sau:
#include <stdio.h>
#include <conio.h>
main()
{
printf("40/17*13/3 = %d", 40/17*13/3);
printf("\n\n40/17*13/3.0
= %lf", 40/17*13/3.0);
printf("\n\n40/17*13.0/3 = %lf",
40/17*13.0/3);
printf("\n\n40/17.0*13/3 = %lf",
40/17.0*13/3);
getch();
getch();
}
3. Biên dịch và thực thi chương trình.
Kết quả:
5.5 Thứ tự ưu tiên của các toán tử
Trong phần này chúng ta sẽ viết một chương trình
để tìm hiểu thứ tự ưu tiên giữa các toán tử.
Biểu thức sau đây sẽ được tính như sau:
(4-2*9/6<=3 && (10*2/4-3>3||
(1<5 && 8>10)))
Hãy theo các quy tắc chúng ta đã học trong
chương “Toán tử và Biểu thức” (Chú ý rằng biểu thức được in đậm dưới đây sẽ
được tính trước)
1. (4-2*9/6<=3
&& (10*2/4-3>3|| (1<5 && 8>10)))
2. (4-2*9/6<=3
&& (10*2/4-3>3|| ( 1 && 0 )))
3. (4-2*9/6<=3
&& (10*2/4-3>3|| 0))
4. (4-2*9/6<=3
&& (20/4-3>3|| 0))
5. (4-2*9/6<=3
&& (5-3>3|| 0))
6. (4-2*9/6<=3
&& (2>3|| 0))
7. (4-2*9/6<=3
&& (0|| 0))
8. (4-2*9/6<=3
&& 0)
9. (4-18/6<=3
&& 0)
10. (4-3<=3 && 0)
11. (1<=3 && 0)
12. ( 1 && 0)
13. 0 (False)
1. Tạo một tập tin mới.
2. Gõ đoạn mã sau:
#include
<stdio.h>
#include
<conio.h>
main()
{
printf("Result = %d",(4-2*9/6<=3 && (10*2/4-3 > 3 ||
(1 < 5 && 8>10))));
getch();
getch();
}
3. Biên dịch và thực thi chương trình.
Kết quả:
Phần II - Trong thời gian 30 phút kế tiếp:
1. Tính giá trị
biểu thức sau:
10 * 3 ^ 6 * 6 + 5 – 2 AND (2 * 2 + 6 /3 > 1 OR 2 >8)
Thực hiện như sau:
Gõ vào biểu thức trên sử
dụng câu lệnh printf(). AND được thay thế bởi && và OR được thay thế
bởi ||.
2. Giả sử tất cả biến có kiểu là int.
Tìm giá trị cho mỗi biến sau:
a. x = (2 +
3) * 6;
b. x = (12 + 6) /
2 * 3;
c. y = x =
(2 + 3) / 4;
d. y = 3 + 2
* (x = 7 / 2);
e. x = (int)
3.8 + 3.3;
f. x = (2 +
3) * 10.5;
g. x = 3 / 5
* 22.0;
h. x = 22.0 * 3 /
5;
Bài tập tự làm
1. Tính giá trị được gán
(nằm phía bên trái) cho mỗi trường hợp sau:
int s, m = 3, n = 5, r, t;
float x = 3.0, y;
t = n/m;
r = n%m;
y = n/m;
t = x*y-m/2;
x = x*2.0;
s = (m+n)/r;
y = --n;
2. Viết một chương
trình nhập vào một số thực. Ðơn vị tính cho số này là centimet (cm). Hãy in ra
số tương đương tính bằng foot (số thực, có 1 số lẻ thập phân) và inch (số thực,
có 1 số lẻ thập phân). Ðộ chính xác của foot và inch là một số lẻ thập phân.
Hướng dẫn: 2.54
centimeters = 1 inch, và 12 inches = 1 foot.
Nếu giá trị nhập vào là
333.3, kết quả là:
333.3 centimeters tương
đương 10.9 feet.
333.3 centimeters tương
đương 131.2 inches.
3. Tìm giá trị của
iResult cho những câu lệnh sau:
int iResult, a = 10, b =
8, c = 6, d = 5, e = 2;
iResult = a - b - c - d;
iResult = a - b + c - d;
iResult = a + b / c / d;
iResult = a + b / c * d;
iResult = a / b * c * d;
iResult = a % b / c * d;
iResult = a % b % c % d;
iResult = a - (b - c) -
d;
iResult = (a - (b - c))
- d;
iResult = a - ((b - c) -
d);
iResult = a % (b % c) * d * e;
iResult = a + (b - c) * d - e;
iResult = (a + b) * c + d * e;
iResult = (a + b) * (c / d) % e;
0 nhận xét:
Đăng nhận xét