Khái niệm cơ bản Lab - Session 5
Gửi bởi: Phạm Thọ Thái Dương 30 tháng 12 2019 lúc 9:35:42 | Được cập nhật: 19 giờ trước (21:29:22) Kiểu file: DOC | Lượt xem: 428 | Lượt Download: 0 | File size: 0.116224 Mb
Nội dung tài liệu
Tải xuống
Link tài liệu:
Các tài liệu liên quan
Có thể bạn quan tâm
Thông tin tài liệu
Toán tử và Biểu thức
Bài 5
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
#include
void main()
{
float p, n, r;
clrscr();
p = 1000;
Toán tử và biểu thức
61
n = 2.5;
r = 10.5;
printf(“\n Amount is: %f”, p*n*r/100);
}
3. Lưu tập tin với tên simple.c.
4. Biên dịch tập tin simple.c.
5. Thực thi chương trình simple.c.
6. Trở về trình soạn thảo.
Kết quả:
The Amount is: 262.500000
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.
2.
3.
4.
50 * 24 = 1200
68 / 2 = 34
1200 + 34 = 1234
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.
2.
3.
4.
62
d
d
d
d
=
=
=
=
50 * (24 + 68 + (50 - 68) * 24)
50 * (24 + 68 + (-18) * 24)
50 * (24 + 68 + (-432))
50 * (92 - 432)
Lập trình cơ bản C
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 trong ‘Edit window’:
#include
#include
void main()
{
int a,b,c,d;
clrscr();
a = 50;
b = 24;
c = 68;
d = a*b+c/2;
printf(“\n The
d = a%b;
printf(“\n The
d = a*b-c;
printf(“\n The
d = a/b+c;
printf(“\n The
value after a*b+c/2 is: %d”, d);
value after a mod b is: %d”, d);
value after a*b-c is: %d”, d);
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);
3. Lưu tập tin với tên arith.c.
4. Biên dịch tập tin arith.c.
5. Thực thi chương trình arith.c.
6. Trở về trình soạn thảo.
Kết quả xuất:
The
The
The
The
The
value
value
value
value
value
Toán tử và biểu thức
after
after
after
after
after
a*b+c/2 is: 1234
a mod b is: 2
a*b-c is: 1132
a/b+c is: 70
a+b*c is: 1682
63
The value after (a+b)*c is: 5032
The value after a*(b+c+(a-c)+b) is: -17000
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 vào ‘Edit window’:
#include
#include
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.
64
Lập trình cơ bản C
5. Thực thi chương trình compare.c.
6. Trở về trình soạn thảo.
Kết quả xuất:
int a = 5, b = 6, c = 7;
The value of a > b is
0
The value of
b < c
1
The value of
a + b >= c
The value of
a - b <= b - c
is
1
The value of
b - a == b - c
is
0
The value of
a * b != c * c
is
1
is
is
Result of a > 10 && b < 5 =
1
0
Result of a > 100 || b < 50 = 1
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ì:
40 / 17 làm tròn là 2
1.
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
Toán tử và biểu thức
65
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 vào ‘Edit window’:
#include
#include
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 t hứ tự ưu tiên giữa các toán tử.
66
Lập trình cơ bản C
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.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(4-2*9/6<=3 && (10*2/4-3>3|| (1<5 && 8>10)))
(4-2*9/6<=3 && (10*2/4-3>3|| ( 1 && 0 )))
(4-2*9/6<=3 && (10*2/4-3>3|| 0))
(4-2*9/6<=3 && (20/4-3>3|| 0))
(4-2*9/6<=3 && (5-3>3|| 0))
(4-2*9/6<=3 && (2>3|| 0))
(4-2*9/6<=3 && (0|| 0))
(4-2*9/6<=3 && 0)
(4-18/6<=3 && 0)
(4-3<=3 && 0)
(1<=3 && 0)
( 1 && 0)
0 (False)
1. Tạo một tập tin mới.
2. Gõ đoạn mã sau vào cửa sổ soạn thảo:
#include
#include
void main()
{
clrscr();
printf(“Result = %d”,(4-2*9/6<=3 && (10*2/4-3 > 3 ||
(1 < 5 && 8>10))));
}
3. Lưu tập tin với tên precede.c.
4. Biên dịch tập tin precede.c.
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.
b.
c.
d.
e.
f.
g.
h.
68
x = (2 + 3) * 6;
x = (12 + 6) / 2 * 3;
y = x = (2 + 3) / 4;
y = 3 + 2 * (x = 7 / 2);
x = (int) 3.8 + 3.3;
x = (2 + 3) * 10.5;
x = 3 / 5 * 22.0;
x = 22.0 * 3 / 5;
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;
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
iResult
iResult
iResult
iResult
iResult
iResult
iResult
iResult
iResult
iResult
iResult
iResult
iResult
=
=
=
=
=
=
=
=
=
=
=
=
=
=
a - b - c - d;
a - b + c - d;
a + b / c / d;
a + b / c * d;
a / b * c * d;
a % b / c * d;
a % b % c % d;
a - (b - c) - d;
(a - (b - c)) - d;
a - ((b - c) - d);
a % (b % c) * d * e;
a + (b - c) * d - e;
(a + b) * c + d * e;
(a + b) * (c / d) % e;
Toán tử và biểu thức
69