Bài 5 Toán tử và Biểu thức
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 Borland 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 trong ‘Edit window’:
#include <stdio.h>
#include <conio.h>
void main()
{
Ở đâ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)
62 Lập trình cơ bản C
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 trong ‘Edit window’:
#include <stdio.h>
#include <conio.h>
void main()
{
int a,b,c,d;
clrscr();
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);
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 vào ‘Edit window’:
#include <stdio.h>
#include <conio.h>
void 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);
}
3. Lưu tập tin với tên compare.c.
4. Biên dịch tập tin compare.c.
5. Thực thi chương trình compare.c.
64 Lập trình cơ bản C
6. Trở về trình soạn thảo.
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 vào ‘Edit window’:
#include <stdio.h>
#include <conio.h>
void main()
{
clrscr();
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);
}
3. Lưu tập tin với tên type.c.
4. Biên dịch tập tin type.c.
5. Thực thi chương trình type.c.
6. Trở về trình soạn thảo.
Kết quả xuất:
40/17*13/3 = 8
40/17*13/3.0 = 8.666667
40/17*13.0/3 = 8.666667
40/17.0*13/3 = 10.196078
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)))
5. Thực thi chương trình precede.c.
6. Trở về trình soạn thảo.
Kết quả xuất:
Result = 0
Toán tử và biểu thức 67
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;
68 Lập trình cơ bản C
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;