Cấu trúc vòng lặp và các câu lệnh đặc biệt
Cấu trúc vòng lặp cho phép lặp lại nhiều lần 1 công việc (được thể hiện bằng 1 câu lệnh hay 1 khối lệnh) nào đó cho đến khi thỏa mãn 1 điều kiện cụ thể. Vòng lặp for Lệnh for cho phép lặp lại công việc cho đến khi ...
Cấu trúc vòng lặp cho phép lặp lại nhiều lần 1 công việc (được thể hiện bằng 1 câu lệnh hay 1 khối lệnh) nào đó cho đến khi thỏa mãn 1 điều kiện cụ thể.
Vòng lặp for
Lệnh for cho phép lặp lại công việc cho đến khi điều kiện sai.
Cú pháp:
for (Biểu thức 1; biểu thức 2; biểu thức 3)
<Công việc>
Lưu đồ:
Giải thích:
<Công việc>: được thể hiện là 1 câu lệnh hay 1 khối lệnh. Thứ tự thực hiện của câu lệnh for như sau:
B1: Tính giá trị của biểu thức 1.
B2: Tính giá trị của biểu thức 2.
- Nếu giá trị của biểu thức 2 là sai (=0): thoát khỏi câu lệnh for.
- Nếu giá trị của biểu thức 2 là đúng (!=0): <Công việc> được thực hiện.
B3: Tính giá trị của biểu thức 3 và quay lại B2.
Một số lưu ý khi sử dụng câu lệnh for:
- Khi biểu thức 2 vắng mặt thì nó được coi là luôn luôn đúng
- Biểu thức 1: thông thường là một phép gán để khởi tạo giá trị ban đầu cho biến điều kiện.
- Biểu thức 2: là một biểu thức kiểm tra điều kiện đúng sai để dừng vòng lặp.
- Biểu thức 3: thông thường là một phép gán để thay đổi giá trị của biến điều kiện.
- Trong mỗi biểu thức có thể có nhiều biểu thức con. Các biểu thức con được phân biệt bởi dấu phẩy.
Ví dụ 1: Viết đoạn chương trình in dãy số nguyên từ 1 đến 10.
#include <stdio.h>
#include<conio.h>
int main ()
{ int i;
clrscr();
printf(" Day so tu 1 den 10 :");
for (i=1; i<=10; i++)
printf("%d ",i);
getch();
return 0;
}
Kết quả chương trình như sau:
Ví dụ 2: Viết chương trình nhập vào một số nguyên n. Tính tổng của các số nguyên từ 1 đến n.
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
clrscr();
printf(" Nhap vao so nguyen duong n:"); scanf("%d",&n);
tong=0;
for (i=1; i<=n; i++)
tong+=i;
printf(" Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
Nếu chúng ta nhập vào số 9 thì kết quả như sau:
Ví dụ 3: Viết chương trình in ra trên màn hình một ma trận có n dòng m cột như sau:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9
…
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int dong, cot, n, m;
clrscr();
printf(" Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
for (dong=0;dong<n;dong++)
{
printf(" ");
for (cot=1;cot<=m;cot++)
printf("%d ",dong+cot);
}
getch();
return 0;
}
Kết quả khi nhập 3 dòng 6 cột như sau
Vòng lặp while
Vòng lặp while giống như vòng lặp for, dùng để lặp lại một công việc nào đó cho đến khi điều kiện sai.
Cú pháp:
while ( Biểu thức điều kiện )
<Công việc>
Lưu đồ:
Giải thích:
- <Công việc>: được thể hiện bằng 1 câu lệnh hay 1 khối lệnh.
- Kiểm tra Biểu thức điều kiện trước.
- Nếu điều kiện sai (=0) thì thoát khỏi lệnh while.
- Nếu điều kiện đúng (!=0) thì thực hiện công việc rồi quay lại kiểm tra điều kiện tiếp.
Lưu ý:
- Lệnh while gồm có biểu thức điều kiện và thân vòng lặp (khối lệnh thực hiện công việc)
- Vòng lặp dừng lại khi nào điều kiện sai.
- Khối lệnh thực hiện công việc có thể rỗng, có thể làm thay đổi điều kiện.
Ví dụ 1: Viết đoạn chương trình in dãy số nguyên từ 1 đến 10.
#include <stdio.h>
#include<conio.h>
int main ()
{ int i;
clrscr();
printf(" Day so tu 1 den 10 :");
i=1;
while (i<=10)
printf("%d ",i++);
getch();
return 0;
}
Kết quả chương trình như sau:
Ví dụ 2: Viết chương trình nhập vào một số nguyên n. Tính tổng của các số nguyên từ 1 đến n.
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
clrscr();
printf(" Nhap vao so nguyen duong n:");
scanf("%d",&n);
tong=0;
i=1;
while (i<=n)
{
tong+=i;
i++;
}
printf(" Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
Nếu chúng ta nhập vào số 9 thì kết quả như sau:
Ví dụ 3: Viết chương trình in ra trên màn hình một ma trận có n dòng m cột như sau:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9
…
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int dong, cot, n, m;
clrscr();
printf(" Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
dong=0;
while (dong<n)
{
printf(" ");
cot=1;
while (cot<=m)
{
printf("%d ",dong+cot);
cot++;
}
dong++;
}
getch();
return 0;
}
Kết quả khi nhập 3 dòng 6 cột như sau
Vòng lặp do… while
Vòng lặp do … while giống như vòng lặp for, while, dùng để lặp lại một công việc nào đó khi điều kiện còn đúng.
Cú pháp:
do
<Công việc>
while (< Biểu thức điều kiện >)
Lưu đồ:
Giải thích:
- <Công việc>: được thể hiện bằng 1 câu lệnh hay 1 khối lệnh.
- Trước tiên công việc được thực hiện trước, sau đó mới kiểm tra Biểu thức điều kiện.
- Nếu điều kiện sai thì thoát khỏi lệnh do …while.
- Nếu điều kiện còn đúng thì thực hiện công việc rồi quay lại kiểm tra điều kiện tiếp.
Lưu ý:
- Lệnh do…while thực hiện công việc ít nhất 1 lần.
- Vòng lặp dừng lại khi điều kiện sai.
- Khối lệnh thực hiện công việc có thể rỗng, có thể làm thay đổi điều kiện.
Ví dụ 1: Viết đoạn chương trình in dãy số nguyên từ 1 đến 10.
#include <stdio.h>
#include<conio.h>
int main ()
{ int i;
clrscr();
printf(" Day so tu 1 den 10 :");
i=1;
do
printf("%d ",i++);
while (i<=10);
getch();
return 0;
}
Kết quả chương trình như sau:
Ví dụ 2: Viết chương trình nhập vào một số nguyên n. Tính tổng của các số nguyên từ 1 đến n.
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int n,i,tong;
clrscr();
printf(" Nhap vao so nguyen duong n:");
scanf("%d",&n);
tong=0;
i=1;
do
{
tong+=i;
i++;
} while (i<=n);
printf(" Tong tu 1 den %d =%d ",n,tong);
getch();
return 0;
}
Nếu chúng ta nhập vào số 9 thì kết quả như sau:
Ví dụ 3: Viết chương trình in ra trên màn hình một ma trận có n dòng m cột như sau (n, m>=1):
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 5 6 7 8 9
…
#include <stdio.h>
#include<conio.h>
int main ()
{ unsigned int dong, cot, n, m;
clrscr();
printf(" Nhap vao so dong va so cot :");
scanf("%d%d",&n,&m);
dong=0;
do
{
printf(" ");
cot=1;
do
{
printf("%d ",dong+cot);
cot++;
} while (cot<=m);
dong++;
} while (dong<n);
getch();
return 0;
}
Kết quả khi nhập 3 dòng 6 cột như sau
So sánh các vòng lặp
Vòng lặp for, while:
- Kiểm tra điều kiện trước thực hiện công việc sau nên đoạn lệnh thực hiện công việc có thể không được thực hiện .
- Vòng lặp kết thúc khi nào điều kiện sai.
Vòng lặp do…while:
- Thực hiện công việc trước kiểm tra điều kiện sau nên đoạn lệnh thực hiện công việc được thực hiện ít nhất 1 lần.
- Vòng lặp kết thúc khi nào điều kiện sai.
Lệnh break
Cú pháp: break
Dùng để thoát khỏi vòng lặp. Khi gặp câu lệnh này trong vòng lặp, chương trình sẽ thoát ra khỏi vòng lặp và chỉ đến câu lệnh liền sau nó. Nếu nhiều vòng lặp --> break sẽ thoát ra khỏi vòng lặp gần nhất. Ngoài ra, break còn được dùng trong cấu trúc lựa chọn switch.
Lệnh continue
Cú pháp: continue
- Khi gặp lệnh này trong các vòng lặp, chương trình sẽ bỏ qua phần còn lại trong vòng lặp và tiếp tục thực hiện lần lặp tiếp theo.
- Ðối với lệnh for, biểu thức 3 sẽ được tính trị và quay lại bước 2.
- Ðối với lệnh while, do while; biểu thức điều kiện sẽ được tính và xét xem có thể tiếp tục thực hiện <Công việc> nữa hay không? (dựa vào kết quả của biểu thức điều kiện).