You are on page 1of 46

BÀI 4:

CẤU TRÚC VÒNG LẶP


2
Nội dung:
 Vòng lặp là gì?
 Có 4 cấu trúc lặp:
 for …
 do … while
 While …
 foreach …
 Vòng lặp lồng nhau

BUSINESS INFORMATION TECHNOLOGY


3
Vòng lặp là gì?
 Vòng lặp là một cấu trúc điều khiển cho
phép lặp đi lặp lại một khối lệnh
 Có thể thi hành khối lệnh một số lần cố định
 Có thể thi hành khối lệnh trong khi điều kiện
đúng
 Có thể thi hành khối lệnh với mỗi phần tử
trong tập hợp
 Vòng lặp mà không bao giờ dừng là vòng
lặp bị “quẩn” hoặc vòng lặp vô hạn

BUSINESS INFORMATION TECHNOLOGY


4
Lệnh for
Cú pháp:
for (<bt khởi động>;<bt điều kiện >;<bt lặp> )
<lệnh>;
Mô tả:
B1 : Thi hành <bt khởi động>
B2 : Nếu <bt điều kiện> Sai thì sang B6
B3 : Thi hành <lệnh>
B4 : Thi hành <bt lặp>
B5 : Quay về B2
B6 : Thoát vòng lặp
BUSINESS INFORMATION TECHNOLOGY
Sơ đồ khối 5
5

2
1
for (<bt khởi động> ; <bt điều kiện> ; <bt lặp> )
4
<lệnh>;

3 (Đ)
6 (S)

BUSINESS INFORMATION TECHNOLOGY


6
Lưu ý:
for : chữ thường
Các bt sau for đặt trong cặp ngoặc (…)
Các thành phần cách nhau bằng ;
Có thể bỏ bớt bất kỳ bt thành phần nào
<bt lặp> có thể là tăng hoặc giảm
Nếu nhiều lệnh thì các lệnh đặt trong cặp dấu
ngoặc nhọn { … }
Trong C#, nhất quán điều kiện đúng thì lặp,
sai thì thoát

BUSINESS INFORMATION TECHNOLOGY


7
Ví dụ vòng lặp đơn giản
 In các số từ 1 đến 100
for (int i= 1; i<= 100; i++)
{
Console.Write( i + " ");
}
 Tính n!
Console.Write(«Nhap so nguyen : «);
int n = int.Parse(Console.ReadLine());
double k = 1;
for (int i = 1; i <= n; i++)
{
k = k*i;
}
Console.WriteLine(«{0}! = {1}» , n , k);

BUSINESS INFORMATION TECHNOLOGY


8
Ví dụ vòng lặp phức tạp
 Vòng lặp có nhiều biến đếm:
for (int i=1, sum=1; i<=128; i=i*2, sum+=i)
{
Console.WriteLine("i={0}, sum={1}", i, sum);
}
 Kết quả:
i=1, sum=1
i=2, sum=3
i=4, sum=7
i=8, sum=15
...
i=128, sum=255

BUSINESS INFORMATION TECHNOLOGY


8
9
Ví dụ
 Tính n mũ m (ký hiệu n^m):
static void Main()
{
Console.WriteLine(“Nhap 2 so : “);
int n = int.Parse(Console.ReadLine());
int m = int.Parse(Console.ReadLine());
double kq = 1;
for (int i=0; i<m; i++)
{
kq = kq*n;
}
Console.WriteLine(“{0}^{1} = {2}“ ,n,m,kq);
}

BUSINESS INFORMATION TECHNOLOGY


Ví dụ: Tính tổng N số nguyên đầu tiên 10

int S= 0;
for (int i = 1; i <= N; i++)
S = S + i ;

Không có <bt khởi động>

int S= 0, i = 1;
for ( ; i <= N; i++)
S = S + i ;

BUSINESS INFORMATION TECHNOLOGY


Ví dụ: Tính tổng N số nguyên đầu tiên (tt) 11

Không có <bt khởi động> và <bt lặp>


int S= 0, i = 1;
for ( ; i <= N; )
{ S = S + i ;
i = i+1;
}
Hoặc

int S= 0, i = 1;
for ( ; i <= N; )
S = S + i++ ;
BUSINESS INFORMATION TECHNOLOGY
Ví dụ: Tính tổng N số nguyên đầu tiên (tt) 12

Không có biểu thức nào trong vòng for


static void Main()
{
int S= 0, i = 1;
for ( ; ; )
{
if (i>N) break ;
S = S+ i ;
i ++ ;
}
}

Nên viết đầy đủ, đừng bỏ phần nào !!!

BUSINESS INFORMATION TECHNOLOGY


13
Dùng continue
 continue quay về đầu vòng lặp
 Vídụ: tính tổng tất cả các số lẻ từ 1 đến n
mà không chia hết cho 7:
Console.WriteLine("Nhap so : ");
int n = int.Parse(Console.ReadLine());
int sum = 0;
for (int i = 1; i <= n; i += 2)
{
if (i % 7 == 0)
{ continue;
}
sum += i;
}
Console.WriteLine("tong = {0}", sum);

BUSINESS INFORMATION TECHNOLOGY


14
Ví dụ:
 Vòng lặp for giảm dần
int S= 0;
for (int i = 100; i >=1 ; i--)
S = S + i ;
 Bước tăng hoặc giảm không nhất thiết là 1
int S= 0;
for (int i = 0; i <=100 ; i=i+5)
S = S + i ;

BUSINESS INFORMATION TECHNOLOGY


15
Bài tập tại lớp (1):
 In bảng cửu chương N

BUSINESS INFORMATION TECHNOLOGY


16
Bài tập tại lớp (2):
 Cho chữ rớt từ đỉnh xuống đáy màn hình

BUSINESS INFORMATION TECHNOLOGY


17
Vòng lặp lồng nhau là gì?
 Trong thân vòng lặp có lệnh lặp ta gọi là vòng
lặp lồng nhau

for (<btkđ>; <btđk>; <btlặp>)


{
for (<btkđ>; <btđk>; <btlặp>)
{
<lệnh>;
}

}

BUSINESS INFORMATION TECHNOLOGY


18
Ví dụ: In tam giác
 In tam giác như sau:
1
1 2

1 2 3 ... n
Console.WriteLine("Nhap so : ");
int n = int.Parse(Console.ReadLine());
for(int i= 1; i<= n; i++) //i là hàng
{
for(int j= 1; j<= i; j++) //j là cột
{
Console.Write("{0} ", j);
}
Console.WriteLine();
}

BUSINESS INFORMATION TECHNOLOGY


19
Các lệnh nhảy (Jump)
 Lệnh nhảy gồm:
 break, continue, goto
 continue:
 Tronglệnh lặp while và do-while lệnh nhảy sẽ chuyển
đến kiểm tra điều kiện
 Trong lệnh lặp for, lệnh nhảy sẽ chuyển đến <bt lặp>
 break: Để thoát vòng lặp trong cùng nhất
 goto <nhãn>: Để thoát ra khỏi vòng lặp ngoài cùng
 Nên tránh dùng goto!!!

BUSINESS INFORMATION TECHNOLOGY


20
Ví dụ: các lệnh nhảy
int dem = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j % 3 == 0)
continue;
if (i == 7)
break;
Nhãn if (i + j > 9)
goto breakOut;
}
dem++;
}
breakOut:

BUSINESS INFORMATION TECHNOLOGY


21
Ví dụ: Vòng lặp lồng nhau
 In tất cả các chữ số bốn chữ số trong định
dạng ABCD sao cho A + B = C + D (được gọi
là số hạnh phúc)
Bạn có thể cải thiện
static void Main() thuật toán này chỉ
{ for (int a = 1; a <= 9; a++) sử dụng 3 vòng lặp?
for (int b = 0; b <= 9; b++)
for (int c = 0; c <= 9; c++)
for (int d = 0; d <= 9; d++)
if (a + b == c + d)
Console.WriteLine("{0}{1}{2}{3}",
a, b, c, d);
}

BUSINESS INFORMATION TECHNOLOGY


22
Ví dụ - Vòng lặp lồng nhau

 Intất cả các kết hợp từ TOTO 6/49 Chú ý:Việc thi


static void Main()
{ hành CT này có
int i1, i2, i3, i4, i5, i6; thể mất nhiều thời
for (i1 = 1; i1 <= 44; i1++)
gian.
for (i2 = i1 + 1; i2 <= 45; i2++)
for (i3 = i2 + 1; i3 <= 46; i3++)
for (i4 = i3 + 1; i4 <= 47; i4++)
for (i5 = i4 + 1; i5 <= 48; i5++)
for (i6 = i5 + 1; i6 <= 49; i6++)
Console.WriteLine("{0} {1} {2} {3} {4} {5}",
i1, i2, i3, i4, i5, i6);
}

BUSINESS INFORMATION TECHNOLOGY


23
Bài tập tại lớp (3):
 Vừa gà vừa chó. Bó lại cho tròn. 36 con. 100
chân chẳn. Tính số gà và chó.

BUSINESS INFORMATION TECHNOLOGY


24
Bài tập tại lớp (4):
 Đàn trâu trăm con. Ăn trăm bó cỏ. Trâu đứng ăn
năm. Trâu nằm ăn 3. Riêng đám trâu già. 3 con 1 bó.
Tính số trâu mỗi loại.

BUSINESS INFORMATION TECHNOLOGY


25
Vòng lặp foreach
 Cú pháp vòng lặp foreach:
foreach (<kiểu DL> <biến> in <tập hợp>)
{
<lệnh>;
}

 Lặp lại việc thực hiện lệnh


 <biến> sẽ lần lượt nhận các giá trị trong <tập hợp>
 <Tập hợp> có thể là danh sách, mảng hoặc nhóm các
phần tử cùng loại
 Sẽ ví dụ ở phần mảng

BUSINESS INFORMATION TECHNOLOGY


26
Lệnh do … while
Cú pháp:
do
{
<lệnh 1>;
<lệnh 2>;

}
while (<điều kiện>);
Ý nghĩa :
Thực hiện các lệnh giữa do và while, kiểm tra nếu
<điều kiện> đúng thì tiếp tục thực hiện các lệnh,
sai thì dừng.
BUSINESS INFORMATION TECHNOLOGY
27
Sơ đồ khối lệnh do … while

<lệnh>
true

<điều kiện>

false

BUSINESS INFORMATION TECHNOLOGY


28
Lưu ý:
Từ khóa do và while là chữ thường
Bắt buộc cặp dấu {…} giữa do và while
<điều kiện> đặt trong cặp ngoặc (…)
Các lệnh được thực hiện ít nhất 1 lần
Trong thân vòng lặp (giữa do và while)
có thể là lệnh break và continue
break: nhảy/thoát ra khỏi vòng lặp
Continue: quay về đầu vòng lặp

BUSINESS INFORMATION TECHNOLOGY


Ví dụ: Nhập bán kính dương, sai thì nhập lại 29

static void Main()


{
float R=0;
do
{
Console.Write(“Nhap ban kinh : “);
R = float.Parse(Console.ReadLine());
if (R<=0) Console.WriteLine(“Nhap sai !!!”);
}
while (R<=0)

BUSINESS INFORMATION TECHNOLOGY


30
Ví dụ
 Tính n!
static void Main()
{
Console.WriteLine(“Nhap so : “);
int n = Convert.ToInt32(Console.ReadLine());
long gt = 1; int k = n;
do
{
gt *= n;
n--;
}
while (n > 0);

Console.WriteLine(“{0}! = {1}" , k , gt);


}

BUSINESS INFORMATION TECHNOLOGY


31
Lệnh while
Cú pháp:
while (<điều kiện>)
{
<lệnh 1>;
<lệnh 2>;

}

BUSINESS INFORMATION TECHNOLOGY


32
Sơ đồ khối lệnh while

false
<điều kiện>

true

<lệnh>

BUSINESS INFORMATION TECHNOLOGY


33
Lưu ý:
T ừ khóa while là chữ thường
<điều kiện> đặt trong cặp ngoặc (…)
Cách dùng lệnh break và continue
trong thân vòng lặp tương tự như vòng
lặp for
Nếu sau điều kiện chỉ thực hiện 1 lệnh
thì có thể bỏ cặp ngoặc nhọn {…}

BUSINESS INFORMATION TECHNOLOGY


34
Ví du: In các số từ 0 đến 9
int dem = 0;
while (dem < 10)
{
Console.WriteLine("Number : {0}", dem);
dem++;
}

BUSINESS INFORMATION TECHNOLOGY


35
Ví dụ: Tính tổng từ 1 đến n
 Tính và in tổng của n số tự nhiên đầu tiên
Console.Write("n = ");
int n = int.Parse(Console.ReadLine());
int i = 1;
int sum = 1;
Console.Write("Tong 1");
while (i < n)
{
i++;
sum += i ;
Console.Write("+{0}", i);
}
Console.WriteLine(" = {0}", sum);

BUSINESS INFORMATION TECHNOLOGY


36
Ví dụ:
 Kiểm tra một số n (>=2) có là số nguyên tố hay không?

Console.Write("Nhap so nguyen duong (>=2) : ");


long n = long.Parse(Console.ReadLine());
long i = 2;
long max = (long) Math.Sqrt(n);
bool nto = true;
while (nto && (i <= max))
{
if (n % i == 0)
{
nto = false;
}
i++;
}
Console.WriteLine("So {0} la nguyen to? {1}", n, nto);

BUSINESS INFORMATION TECHNOLOGY


Ví dụ: số n (>=2) có là số nguyên tố (cách khác)37
int N;
do
{
Console.Write("Nhap so nguyen duong >=2 ");
N = int.Parse(Console.ReadLine());
}
while (N < 2);
int i = 2;
while (N % i != 0)
{
i++;
}
if (i == N)
Console.Write("{0} la so nguyen to",N);
else
Console.Write("{0} khong la so nguyen to",N);

BUSINESS INFORMATION TECHNOLOGY


38
Sừ dụng break
 break để thoát vòng lặp trong cùng nhất
static void Main()
{ // Calculate n! = 1 * 2 * ... * n
Console.WriteLine("Nhap so n : ");
int n = Convert.ToInt32(Console.ReadLine());
int kq = 1;
while (true)
{
if(n == 1)
break;
kq *= n;
n--;
}
Console.WriteLine("n! = " + kq);
}

BUSINESS INFORMATION TECHNOLOGY


39
Ví dụ:
 In tất cả số nguyên tố trong khoảng [n, m]:
Console.Write("Nhap 2 so nguyen duong : ");
int n = int.Parse(Console.ReadLine());
int m = int.Parse(Console.ReadLine());
for (int so = n; so <= m; so++)
{
bool nto = true;
int i = 2;
int max = (int)Math.Sqrt(so);
while (i <= max)
{
if (so % i == 0)
{ nto = false;
break;
}
i++;
}
if (nto)
{
Console.Write("{0} ", so );
}
}

BUSINESS INFORMATION TECHNOLOGY


40
Ví dụ:
 Tính tích tất cả các số trong khoảng [n..m]:
Console.WriteLine("Nhap 2 so : ");
int n = int.Parse(Console.ReadLine());
int m = int.Parse(Console.ReadLine());
int i = n;
decimal tich = 1;
do
{
tich *= i;
i++;
}
while (i <= m);
Console.Write("Tich [{0}..{1}] = {2} ",n,m,tich);

BUSINESS INFORMATION TECHNOLOGY


41
Bài tập tại lớp (5):
 Lặp lại việc cho chữ rơi từ đỉnh xuống đáy màn hình.
Khi nào nhấn phím Esc thì dừng.

BUSINESS INFORMATION TECHNOLOGY


42
Bài tập tại lớp (6):
 Cho máy tạo số ngẫu nhiên từ 0->99. Lặp lại việc
đoán số cho đến khi đoán đúng, đoán tối đa 6 lần.

BUSINESS INFORMATION TECHNOLOGY


43
Tóm tắt:
 C# hỗ trợ 4 loại vòng lặp:
 While …
 do … while
 for …
 Foreach …
 Vòng lặp có thể lồng nhau dùng để thực hiện
các thuật toán phức tạp hơn
 Các lệnh continue, break và goto có thể điều
khiển việc thi hành vòng lặp

BUSINESS INFORMATION TECHNOLOGY


Bài tập về nhà 44

 Làm các bài tập trong file BaiTapVongLap.docx


trừ các bài đã sửa trên lớp

BUSINESS INFORMATION TECHNOLOGY


Tài Liệu Tham Khảo 46

 C# Language (MSDN)
 C# Online.NET
 C# Friends
 C# Specification
 ECMA-334 C# Language Specification (.pdf)
 ISO C# Language Specification (for purchase)
 Microsoft Visual C# .NET
 Borland's C# Builder for the Microsoft® .NET Fr
amework
 SharpDevelop: Open Source C# IDE
BUSINESS INFORMATION TECHNOLOGY

You might also like