BÀI TẬP VIẾT CHƯƠNG TRÌNH
1. Nhập vào hai số nguyên a, b. In ra màn hình giá trị
2. Cho ba số a, b, c đọc vào từ bàn phím. Hãy tìm giá
lớn nhất.
trị lớn nhất của ba số trên và in ra kết quả.
3. Cho ba số a, b, c đọc vào từ bàn phím. Hãy in ra
màn hình theo thứ tự tăng dần các số. (Chỉ được
dùng thêm hai biến phụ).
4. Viết chương trình nhập vào một số nguyên n gồm
ba chữ số. Xuất ra màn hình chữ số lớn nhất ở vị trí
nào?
14
Ví dụ: n=291. Chữ số lớn nhất nằm ở hàng chục
(chữ số 9).
Ví dụ: n=291. Xuất ra 129.
6. Nhập vào ngày, tháng, năm. Kiểm tra xem ngày,
tháng, năm đó có hợp lệ hay không? In kết quả ra
màn hình.
5. Viết chương trình nhập vào số nguyên n gồm ba
chữ số. Xuất ra màn hình theo thứ tự tăng dần của
các chữ số.
7. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút,
giây đó có hợp lệ hay không? In kết quả ra màn
hình.
15
9. Viết chương trình tính diện tích và chu vi các hình:
tam giác, hình vuông, hình chữ nhật và hình tròn
với những thông tin cần được nhập từ bàn phím.
8. Viết chương trình nhập vào ngày, tháng, năm hợp
lệ. Cho biết năm này có phải là năm nhuận hay
không? In kết quả ra màn hình.
10. Viết chương trình tính tiền cước TAXI. Biết rằng:
km đầu tiên là 13000đ.
Mỗi km tiếp theo là 12000đ.
Nếu lớn hơn 30km thì mỗi km thêm sẽ là 11000đ.
Hãy nhập số km sau đó in ra số tiền phải trả.
11. Nhập vào 3 số nguyên dương. Kiểm tra xem 3 số
đó có lập thành tam giác không? Nếu có hãy cho biết
tam giác đó thuộc loại nào? (Cân, vuông, đều, …).
12. Viết chương trình nhập vào số nguyên dương n.
Kiểm tra xem n có phải là số chính phương hay
không? (số chính phương là số khi lấy căn bậc 2 có
kết quả là nguyên).
16
CẤU TRÚC LỰA CHỌN
Trường hợp giá trị biểu
thức bằng n1
Trường hợp giá trị biểu
thức bằng n2
Trường hợp giá trị biểu
thức bằng nk
switch (biểu thức)
case n1:
các câu lệnh ;
break ;
case n2:
các câu lệnh ;
break ;
………
case nk:
;
break ;
[default: các câu lệnh]
Các trường hợp còn lại
17
Với:
ni là các hằng số nguyên hoặc ký tự.
Phụ thuộc vào giá trị của biểu thức viết sau switch,
nếu:
–Giá trị này = ni thì thực hiện câu lệnh sau case ni.
–Khi giá trị biểu thức không thỏa tất cả các ni thì
thực hiện câu lệnh sau default nếu có, hoặc thoát
khỏi câu lệnh switch.
18
–Khi chương trình đã thực hiện xong câu lệnh của
case ni nào đó thì nó sẽ thực hiện luôn các lệnh
thuộc case bên dưới nó mà không xét lại điều kiện
(do các ni được xem như các nhãn) Vì vậy, để
chương trình thoát khỏi lệnh switch sau khi thực
hiện xong một trường hợp, ta dùng lệnh break.
Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 5. In cách
đọc của số đó ra màn hình.
19
void main()
{
int n;
cout<<"Nhap vao n (1<=n<=5): “;
cin>>n;
switch (n)
{
case 1: cout<<"So mot”; break;
case 2: cout<<"So hai"; break;
case 3: cout<<"So ba”; break;
case 4: cout<<"So bon”; break;
case 5: cout<<"So nam”; break;
default : cout<<"Khong doc duoc";
}
}
BÀI TẬP VIẾT CHƯƠNG TRÌNH
13. Viết chương trình nhập vào số điểm và xếp hạng như sau:
Điểm 1-4: Kém
Điểm 5: Trung bình
Điểm 6: Trung bình khá
Điểm 7: Khá
Điểm 8-9: Giỏi
Điểm 10: Xuất sắc
14. Viết chương trình nhập vào ngày tháng năm, kiểm tra xem
ngày tháng năm có hợp lệ không? In kết quả kiểm tra ra màn
hình
– Gợi ý: if ((Nam % 400 == 0) || ((Nam % 100 != 0)
&& (Nam % 4 == 0)));
20
CẤU TRÚC LẶP
21
VÒNG LẶP FOR
1
2
4
3
for ( ; <điều kiện lặp> ; )
{
;
}
Khởi gán: Dùng để khởi gán giá trị ban đầu cho
vòng lặp
Điều kiện lặp: Dùng để kiểm tra điều kiện trước khi
thực hiện vòng lặp
Cập nhật: Dùng để cập nhật vòng lặp (tăng hoặc
giảm chỉ số lặp)
22
Bất kỳ biểu thức nào trong 3 biểu thức nói trên đều có
thể vắng nhưng phải giữ dấu chấm phẩy (;)
SƠ ĐỒ HOẠT ĐỘNG
23
Bước 1: Khởi gán
Bước 2: Kiểm tra điều kiện
― Nếu điều kiện bằng true thì cho thực
hiện các lệnh của vòng lặp, thực hiện cập
nhật vòng lặp. Quay trở lại bước 2.
― Ngược lại thoát khỏi lặp.
24
Ví dụ: In ra màn hình 10 dòng chữ “ABC”
25
void main()
{
cout<<“ABC“<
for (int dong = 1; dong <= 10; dong++)
26
}
, với n>0
27
Ví dụ: Tính tổng:
VÒNG LẶP while
1
< Khởi gán>
2
while ( <điều kiện lặp>)
3
lệnh/ khối lệnh;
4
Lưu ý: Cách hoạt động của while giống for
28
Ví dụ: In ra màn hình 10 dòng chữ “Xin chao”
void main()
{
int dong = 1;
while(dong <= 10)
{
cout<<"Xin chao“<
dong++;
}
}
29
VÒNG LẶP do … while
;
;
< Khởi gán>
do
{
} while (điều kiện);
30
VÒNG LẶP do … while
Thực hiện khối lệnh cho đến khi biểu thức có
giá trị bằng false.
hợp nhập có kiểm tra điều kiện
Cấu trúc lặp do…while thường dùng cho trường
31
Ngược lại với cấu trúc lặp for và while (kiểm
tra điều kiện trước khi thực hiện lặp), vòng lặp
do…while thực hiện lệnh lặp rồi mới kiểm tra
điều kiện. Do đó vòng lặp do...while thực hiện
lệnh ít nhất một lần.
32
if (n <= 0)
Ví dụ: Nhập vào một số nguyên dương, nếu nhập sai
thì thông báo lỗi và yêu cầu nhập lại.
void main()
{
int n;
do{
cout<<"Nhap vao mot so nguyen duong: ";
cin>>n;
cout<<"Nhap sai, hay nhap lai!“<
LỆNH break và return
Lệnh break: thoát khỏi các cấu trúc
switch, while, for, do…while chứa nó
gần nhất (đang chứa break) tại thời điểm
break được gọi thi hành mà không cần
kiểm tra kết quả của biểu thức điều kiện.
Tuy nhiên, cần phân biệt với lệnh return là
lệnh trả về từ hàm, nghĩa là thoát khỏi
hàm đang thi hành, nên cũng giúp thoát
luôn khỏi tất cả các vòng lặp.
33
LỆNH continue
Lệnh continue: được sử dụng trong các
vòng lặp như while, for, do…while.
Khi lệnh continue được gọi thì chương trình
sẽ quay trở về đầu vòng lặp để bắt đầu lần
lặp mới (có kiểm tra điều kiện lặp để xác
định có lặp tiếp hay không).
Nếu có các lệnh còn lại (cùng trong vòng
lặp) đặt sau continue sẽ không được thực
hiện.
Nói tóm lại, lệnh continue dùng để bỏ qua
một lần lặp nào đó nếu thỏa điều kiện.
34
Ví dụ: Cho phép người dùng nhập liên tục số nguyên
dương, nếu nhập số nguyên âm thì dừng
void main()
if (n <= 0)
35
{ int n;
while (true)
{
cout<<"Nhap gia tri n: “;
cin>>n;
{
cout<<"Ket thuc vong lap”;
break;
}
}
}
36
Ví dụ: In ra màn hình giá trị từ 10 đến 20 trừ
đi số 13 và số 17.
void main()
{
for (int k = 10; k <= 20; k++)
{
if (k == 13 || k == 17)
continue;
cout<
XÁC ĐỊNH KẾT QUẢ
int a=18;
for(int i = 1; i <= a; i++)
cout<
if(a%i == 0)
-----------------------------------------------------------
{
for(int i = 0; i < 5; i++)
for(int j = 0; j <= i; j++)
cout<
cout<
37
}
int i = 10, s = 0;
while(i > 0)
{
if(i%2 == 0)
s+=i;
else
if(i > 5)
i--;
s+=2*i;
}
38
cout<<“s = ” <
int a = 18, i = 1;
do{
if(a%i == 0)
cout<
i++;
} while(i <= a);
39
int a = 11, b = 16, i = a;
while( i < b )
{
if(i%2 == 0)
{
cout<
break;
}
i++;
}
40
41
int a = 10, s = 0, i = 0;
while( i < a )
{
i++;
if (i % 2 == 0)
continue;
else
s=s+i;
}
cout<<"s = " <
int i = 1, s = 0;
while(true)
{
s = s + i++;
if (i % 2)
i = i + 2;
else
i = i + 1;
if (i > 20)
break;
}
42
cout<<"s = " <
15. Viết chương trình nhập số nguyên dương n.
Liệt kê n số nguyên tố đầu tiên.
16. Viết chương trình nhập vào hai số nguyên
dương a và b. Tìm ước số chung lớn nhất và bội
số chung nhỏ nhất của a và b.
17. Viết chương trình nhập vào một số nguyên n
gồm tối đa 10 chữ số (4 bytes). In ra màn hình
giá trị nhị phân của số trên. (Hướng dẫn: chia
lấy dư cho 2 và xuất theo thứ tự ngược lại).
18. Viết chương trình đếm số ước số của số
nguyên dương N.
Ví dụ: N=12
43
số ước số của 12 là 6
(n>1)
44
19. Một số hoàn thiện là một số có
tổng các ước số của nó (không kể
nó) bằng chính nó. Hãy liệt kê các số
hoàn thiện nhỏ hơn 30000.
Ví dụ: số 6 là số hòan thiện vì tổng
các ước số là 1+2+3 = 6.
20. Nhập vào ngày, tháng, năm. Cho
biết đó là ngày thứ mấy trong năm.
21. In ra dãy số Fibonaci
f1 = f0 =1;
fn = fn-1 + fn-2;
XÁC ĐỊNH KẾT QUẢ CHƯƠNG TRÌNH
Xác định xem chương trình có sử dụng những biến nào;
Giá trị ban đầu của mỗi biến;
Những biến nào sẽ bị thay đổi trong quá trình chạy chương
trình thì lập thành bảng có dạng sau:
Biến 1 Biến 2 … Biến k
Kết quả trả về
(hoặc in ra
màn hình)
Bước (hoặc lần
lặp hoặc dòng
lệnh thực hiện)
0
1
2
...
…
45
Giá trị 0 Giá trị 0 … Giá trị 0
Giá trị 1 Giá trị 1 … Giá trị 1
Giá trị 2 Giá trị 2 … Giá trị 2
…
… … …
… … …
…
Lưu ý từng lệnh và xét kỹ giá trị của biểu thức điều kiện
trong đoạn chương trình
DÙNG CÔNG CỤ DEBUG XÁC ĐỊNH LỖI/
KẾT QUẢ CHƯƠNG TRÌNH
Dùng để xác định lỗi logic (lỗi giải thuật) trong
chương trình. Mặc dù chương trình không còn lỗi
nhưng khi chạy chương trình vẫn ra kết quả sai,
những lỗi đó có thể là:
Dùng chấm phẩy sau: if, else, for, while mà chưa
thực hiện lệnh;
Không dùng cặp dấu ngoặc ({}) để bao khối lệnh;
Khai báo sai kiểu dữ liệu, không ép kiểu dữ liệu;
Chia cho 0;
Không có điều kiện dừng (điều kiện dừng sai);
Phân tích giải thuật thiếu (chưa vét hết các
46
trường hợp) hoặc sai;
Bước 1: Đặt dấu nháy vào vị trí bắt đầu
cần kiểm tra lỗi
47
Bước 2: Nhấn phím Ctrl + F10
48
Quan sát vị trí dấu mũi tên trên cửa sổ viết
code để xác định dòng lệnh đang thực hiện.
Cửa sổ Locals (View\ Debug Windows\
Variables hoặc nhấn phím Alt+4) sẽ thể hiện
tên (name), giá trị (value) và kiểu (type) của
các biến cục bộ trong đoạn chương trình.
Cửa sổ Watch (View\ Debug Windows\
Watch hoặc nhấn Alt+3) cũng có thể quan
sát chi tiết biến tương tự như cửa sổ Locals,
nhưng chỉ thể hiện những biến nào mà ta
nhập tên biến tương ứng vào cửa sổ này.
49
Bước 3: Nhấn phím F10 để thực hiện lệnh
kế tiếp (hoặc hàm kế tiếp).
Nếu muốn xem lệnh thực hiện bên trong
của hàm thì nhấn phím F11 (nếu lệnh là lời
gọi thực hiện hàm – lưu ý: không nên nhấn
phím F11 khi thực hiện các hàm thư viện
(ví dụ: cin, cout)
50