Tóm Tắt
BÀI GIẢNG 4:
CẤU TRÚC LẶP
1/. Cấu trúc lặp:
Là cấu trúc cho phép thực hiện nhiều lần 1 lệnh / 1 nhóm lệnh theo biến đếm hoặc
theo điều kiện.
Lệnh break : ngắt / thoát khỏi vòng lặp
o Khi gặp lệnh break bên trong một vòng lặp, vòng lặp ngay lập tức kết thúc và
điều khiển chương trình tiếp tục tại lệnh tiếp theo sau vòng lặp.
o Chúng ta có thể sử dụng lệnh break Java trong tất cả các loại vòng lặp như
vòng lặp for, vòng lặp while và vòng lặp do-while.
Lệnh continue : tiếp tục lần lặp tiếp theo và bỏ qua các lệnh phía sau nó.
o Lệnh continue được sử dụng trong cấu trúc lặp khi ta cần chuyển đến bước lặp
tiếp theo của vòng lặp ngay lập tức. Nó có thể được sử dụng với vòng lặp for
hoặc vòng lặp while.
o Câu lệnh continue trong Java được sử dụng để tiếp tục vòng lặp. Nó tiếp tục
dòng hiện tại của chương trình và bỏ qua đoạn mã còn lại. Trong trường hợp
có vòng lặp bên trong, nó chỉ tiếp tục vòng lặp bên trong.
o Chúng ta có thể sử dụng lệnh continue của Java trong tất cả các loại vòng lặp
như vòng lặp for, vòng lặp while và vòng lặp do-while.
2/. Lệnh For : là cấu trúc lặp thực hiện theo biến đếm
Cú pháp:
for ( statement 1 ; statement 2 ; statement 3 )
{
// Kh i l nh đ c th c thiốệượự
}
C th :ụể
for ( khi to bin đmởạếế ; điu kinềệ ; Lnh tăng / gimệả )
{
// Kh i l nh đ c th c thiốệượự
}
o Statement 1 là lệnh gán giá trị ban đầu cho biến đếm (khởi tạo)
o Statement 2: là điều kiện thi hành của for.
o Statement 3: lệnh tăng / giảm biến đếm sẽ thực hiện sau mỗi lần thi hành khối lệnh.
Sinh viên xem ví dụ và lắng nghe giải thích
Ví dụ 1 : xuất ra các giá trị từ 0 đến 49
for (int i = 0; i < 50; i++)
{
Học tới đây _ 09/11/2021 _ Lớp 21DTH2B
2/. Lệnh while: là cấu trúc lặp theo điều kiện (với việc kiểm tra điều kiện được thực hiện
trước)
Cú pháp: thực hiện khối lệnh trong khi điều kiện còn đúng, dừng khi điều kiện sai.
while ( condition )
{
// Kh i l nh đ c th c thiốệượự
}
Ví dụ 5 : thực hiện 10 lần, in giá trị: 1, 2, …, 8, 9, 10. Dừng khi i = 11.
int i=1;
while (i<=10)
{
System.out(i);
i++;
}
3/. Lệnh do .. while: là cấu trúc lặp theo điều kiện (với việc kiểm tra điều kiện được thực
hiện sau)
Cú pháp: thực hiện khối lệnh trong khi điều kiện còn đúng, dừng khi điều kiện sai.
do
{
RC chọn Terminate/Disconnect All để dừng chương trình.
Ví dụ 8 :
public class VdDoWhile {
public static void main(String[] args)
{
int a = 1, sum = 0;
do
{
sum += a;
a++;
} while (a <= 10);
System.out(“Tổng từ 1 đến 10 là: ” + sum);
}
}
Kết quả:
Ví dụ 9 : phân biệt while và do … while.
While (kiểm tra đk trước) Do .. while (kiểm tra đk sau)
int x=0, i=10;
while (i<10)
{
x = x + i;
i++;
}
System. out .println(“x = ” + x);
int x=0, i=10;
do
{
x = x + i;
i++;
} while (i<10);
System. out .println(“x = ” + x);
Kt qu:ếả Kt qu:ếả
Bài tập mẫu 1 : Viết chương trình nhập vào 1 số nguyên n, thực hiện tính giá trị của biểu
thức sau:
Sn = 1 + ½ + 1/3 + …+ 1/n
import java.util;
public class Btm1 {
public static void main(String[] args)
{
Scanner s = new Scanner(System. in );
int i, n;
float sn = 0;
System. out .print(“Nh p s n: “ậố );
n = s();
for (i=1; i<=n; i++)
sn = sn + (1/( float )i);
System. out .format(“K t qu Sn: %”ếả , sn);
}
}
Bài tập mẫu 2 : Viết chương trình nhập vào 2 số nguyên a, b, xác định ước số chung lớn
nhất của (a, b).
Thuật toán xác định USCLN(a, b): trừ dần 2 số cho nhau đến khi a=b thì đó là uscln
import java.util;
public class Btm2 {
public static void main(String[] args)
{
Scanner s = new Scanner(System. in );
int a, b, uscln;
System. out .print(“Nh p s a: “ậố );
a = s();
System. out .print(“Nh p s b: “ậố );
b = s();
while (a!=b)
{
if (a>b)
a = a-b;
else
// tính s mũ 10ố
dem = dem * 10;
// tính th ng c a (s 10 / 8) ươủố
soDec /= 8;
}
System. out .println(“S H 8 là: “ốệ + soOct);
}
}
Bài tập mẫu 4 : Viết chương trình nhập vào 1 số nguyên x, xác định số x có phải là số
nguyên tố hay không?
Thuật toán:
Dựa vào định nghĩa của số nguyên tố (là số chỉ chia hết cho 1 và chính nó), ta sẽ có được thuật toán
kiểm nguyên tố đơn giản nhất:
Kiểm tra các số từ 2 đến n – 1 , nếu n chia hết cho một trong những số đó thì n không phải là
số nguyên tố. Ngược lại thì n là số nguyên tố.
o Độ phức tạp thời gian (ĐPT) của thuật toán trên là O(n)
Tuy nhiên, giống như thuật toán đếm số ước của n, ta hoàn toàn có thể cải tiến để giảm ĐPT:
Kiểm tra các số từ 2 đến √n , nếu n chia hết cho một trong những số đó thì n không phải là số
nguyên tố. Ngược lại thì n là số nguyên tố.
o ĐPT: O(√n)
import java.util;
public class Btm4 {
public static void main(String[] args)
{
Scanner s = new Scanner(System. in );
int i, x;
boolean kt= true ;
System. out .print(“Nh p s x: “ậố );
x = s();
i=2;
while (i<x)
{
if (x % i == 0)
{
kt = false ;
break ;
}
else
i++;
}
if (kt)
System. out .println(“S “ố + x + ” là s nguyên t “ốố );
else
System. out .println(“S “ố + x + ” không ph i s nguyên ảố
t “ố );
}
}
Bài tập 15 : Viết chương trình nhập vào số nguyên n (có kiểm tra giá trị n, n phải từ 1 đến
20) thực hiện tính n!.
import java.util;
public class vd99 {
public static void main(String[] args)
{
long gt=1;
int n, i;
Scanner s = new Scanner(System. in );
do
{ // ki m tra nh p n ph i t 1 đ n 20ểậảừế
System. out .print(“Nh p s n: “ậố );
n = s();
} while (n <=0 || n>20);
for (i=1; i<=n; i++) // tính giai th aừ
gt = gt * i;
System. out .printf(n + “! = ” + gt);
}
}
Kiểm tra 1: Viết chương trình nhập vào 1 số là số điện tiêu thụ ( sdtt ) , nhập vào 1 số là
định mức sử dụng ( dmsd ), thực hiện tính tiền điện phải trả theo mô tả sau:
(sdtt < = dmsd): tính giá 600 / mỗi kwh
(sdtt > dmsd) và (sdtt <= 2 * dmsd): tính giá 1000 cho số kwh vượt dmsd
(sdtt > 2 * dmsd) và (sdtt <= 5 * dmsd): tính giá 3000 cho số kwh vượt 2 lần dmsd
(sdtt > 5 * dmsd): tính giá 10000 cho số kwh vượt 5 lần dmsd
Yêu cầu:
1. Vẽ lưu đồ
2. Viết chương trình Java (có chú thích)
Thiếu: System.out(“Quí khách ph i tr : ” + stpt);ảả
Kiểm tra 2: Viết chương trình nhập vào 1 số nguyên n (có kiểm tra giá trị, n phải từ 1 đến
5), cho biết số n là số mấy: one, two, three, four, five.
Yêu cầu:
1. Vẽ lưu đồ
2. Viết chương trình Java (có chú thích)
import java.util;
public class Kiemtra2 {
public static void main(String[] args)
{
Scanner s = new Scanner(System. in );
int n;
do
{
System. out .print(“Nh p s n: “ậố );
n = s();
} while (n<=0 || n>5);
switch (n)
{
case 1:
System. out .print(“One”);
break ;
case 2:
System. out .print(“Two”);
break ;
case 3:
System. out .print(“Three”);
break ;
case 4:
System. out .print(“Four”);
break ;
case 5:
System. out .print(“Five”);
break ;