đây là bài viết về vòng lặp trong C bao gồm có vòng lặp for, vòng lặp while, vòng lặp do-while các bạn có thể tải sẵn bài tâp và code của mình TẠI ĐÂY để tiện theo dõi bài viết.
đây là bài viết về lệnh lặp nếu các bạn chưa chắc về kiến thức rẽ nhánh thì nên tham khảo lại TẠI ĐÂY . chúc các bạn vui vẻ.
sau đây là chi tiết :
Giới thiệu
- Một trong những điểm mạnh lớn nhất của máy tính là khả năng thực hiện một chuỗi các lệnh lặp đi lặp lại. Điều đó có được là do sử dụng các cấu trúc lặp trong ngôn ngữ lập trình. Trong bài này bạn sẽ tìm hiểu các loại vòng lặp khác nhau C.
1. Vòng lặp
- Vòng lặp là một đoạn mã lệnh trong chương trình được thực hiện lặp đi lặp lại cho đến khi thỏa mãn một điều kiện nào đó. Vòng lặp là một khái niệm cơ bản trong lập trình cấu trúc. Trong C có các loại vòng lặp sau (for, while, do...while)
- Ta sử dụng các toán tử quan hệ và toán tử logic trong các biểu thức điều kiện để điều khiển sự thực hiện của vòng lặp.
2. Vòng lặp "for"
- Cú pháp tổng quát của vòng lặp "for" như sau:
sơ đồ khối:
|
cấu trúc vòng lặp |
code:
for (khởi tạo giá trị cho biến điều khiển; biểu thức điều kiện; biểu thức thay đổi giá trị của biến điều khiển)
{
Cậu lệnh (các câu lệnh);
}
- Khởi tạo giá trị cho biến điều khiển là một câu lệnh gán giá trị ban đầu cho biến điều khiển trước khi thực hiện vòng lặp. Lênh này chỉ được thực hiện duy nhất một lần. Biểu thức điều kiện là một biểu thức quan hệ, xác định điều kiện thoát cho vòng lặp. Biểu thức thay đổi giá trị của biến điều khiển xác định biến điều khiển sẽ bị thaddooior thế nào sau mỗi lần vòng lặp được lặp lại (thường là tăng hoặc giảm giá trị của biến điều khiển). Ba phần trên được phân cách bởi dấu chấm phẩy. Câu lệnh trong than vòng lặp có thể là một lệnh duy nhất (lệnh đơn) hoặc lệnh phức (nhiều lệnh).
- Vòng lặp for sẽ tiếp tục được thực hiện chừng nào mà biểu thức điều kiện còn [b]đúng (true)[b]. Khi biểu thức điều kiện là sai (false), chương trình sẽ thoát ra khỏi vòng lặp for
- Toán tử "phẩy (comma)": phần biểu thức trong toán tử for có thể được mở rộng để thêm vào các lệnh khởi tạo hay các lệnh thay đổi giá trị của biến. Cú pháp như sau:
code:
- Các biểu thức trên được phân tách bởi toán tử
phẩy ",", và được thực hiên từ trái sang phải. Thứ tự của các biểu thức là quan trọng trong trường hợp giá trị của biểu thức thứ hai phục thuộc vào giá trị của
biểu thức thứ nhất. Toán tử này có độ ưu tiên thấp nhất trong các toán tử của C.
3. Vòng lặp "for" lông nhau
- Một vòng lặp for được gọi là lông nhau khi nó nằm bên trong một vòng lặp for khác. Nó sẽ có dạng tương tự như sau:
sơ đồ khối
|
vòng lặp for lồng nhau |
code:
for (i=1; i< max1; i ++)
{
....
....
for (j=1;j< max1;j++)
{
....
....
}
}
- Vòng lặp
for khi không có bất kỳ thành phần nào sẽ là một vòng lặp vô tận. Tùy nhiên, lệnh
break bên trong vòng lặp sẽ cho phép thoát khỏi vòng lặp.
4. Vòng lặp "while"
- Cấu trúc lặp thứ hai trong C là vòng lặp
while. Cú pháp tổng quát như sau:
sơ đồ khối:
|
cấu trúc vòng lặp |
code:
while (điều_kiện_là_đúng)
câu_lệnh;
- Trong đó,
câu_lệnh có thể là rỗng, hay một lệnh đơn, hay một khối lệnh. Nếu vòng lặp while chứa một tập lệnh thì chúng phải được đặt trong cặp ngoặc
xoắn {}. điều_kiện có thể là biểu thức bất kỳ. Vòng lặp sẽ được thực hiện lặp đi lặp lại khi điều kiện trên là
đúng (true). Chương trình sẽ chuyển đến thực hiện lệnh tiếp theo sau vòng lặp khi điều kiện trên là
sai (false).
- Vòng lặp for có thể được sử dụng khi số lần thực hiện vòng lặp đã được xác định trước. Khi số lần lặp không biết trước,
vòng lăp while có thể được sử dụng.
5. Vòng lặp "do...while"
- Vòng lặp
do ... while còn được gọi là vòng lặp do trong C. Không giống như vòng lặp
for và
while, vòng lặp này kiểm tra điều kiện tại cuối vòng lặp. Điều này có nghĩa là vòng lặp
do...while sẽ được thực hiện ít nhất một lần, ngay cả khi điều kiện la
sai (false) ở lần chạy đầu tiên. Cú pháp tổng quát của vòng lặp
do...while viết như sau:
sơ đồ khối
|
cấu trúc vòng lặp do-while |
code:
do
{
câu_lệnh
}
while(điều_kiện);
- Cặp dấu
ngoặc "{}" là không cần thiết khi chỉ có một câu lệnh hiện diện trong vòng lặp, nhưng việc sử dụng dấu
ngoặc "{}" là một thói quen tốt. Vòng lặp
do...while lặp đến khi
điều_kiện mang giá trị false. Trong vòng lặp
do...while, câu_lệnh (khối các câu lệnh) sẽ được thực thi trước, và sau đó điều_kiện được kiểm tra. Nếu
điều_kiện là true, chương trình sẽ quay lại thực hiện lệnh do. Nếu điều kiện là
false, chương trình chuyển đến thực hiện lệnh nằm sau vòng lặp. Tương tự như vòng lặp for, các vòng lặp while và
do...while cũng có thể lồng vào nhau.
6. Các lệnh nhẩy
a. Lệnh "return"
- Lệnh
return dùng để quay lại vị trí gọi hàm sau khi các lệnh trong hàm đó được thực thi xong. Trong lệnh
return có thể có một giá trị gắn với nó, giá trị đó sẽ được trả về cho chương trình. Cú pháp tổng quát của cậu lệnh
return như sau:
code
- Biểu thức là một tùy chọn (không bắt buộc). Có thể có hơn một lệnh return được sử dụng trong một hàm. Tuy nhiên, hàm sẽ quay trở về vị trí gọi hàm khi gặp lệnh
return đầu tiên.
b. Lệnh
"goto"
- C là một ngôn ngữ lệnh trình có cấu trúc, tuy vậy nó vẫn chưa một số câu lệnh làm phá vỡ cấu trúc chương trình. Đó là 2 lệnh
goto, label. Lệnh
goto cho phép chuyển điều khiển tới một câu lện bất kỳ nằm trong cùng khối lệnh hay khác khối lệnh bên trong hàm đó. Vì vậy nó vi phạm các qui tắc của một ngôn ngữ lập trình có cấu trúc. Cú pháp tổng quát là:
code:
goto lebel;
- Trong đó label là một định danh phải xuất hiện như tiền tố
(prefix) của một câu lệnh khác trong cùng một hàm. Dấu chấm phẩy ";" sau label đánh dấu sự kết thúc của lệnh
goto
c. Lệnh
"break"
- Câu lệnh
break có hai cách dùng. Nó có thể được sử dụng để kết thúc một case trong một câu lệnh switch hoặc để kết thúc ngay một vòng lặp, mà không cần kiểm tra điều kiện vòng lặp.
- Khi chương trình gặp lệnh
break trong một vòng lặp, ngay lập tức vòng lặp được kết thúc và quyền điều khiển chương trình được chuyển đến câu lệnh theo sau vòng lặp.
d. Lệnh
"continue"
- Lệnh
continue kết thúc lần lặp hiện hành và bắt đầu lần lặp kết tiếp. Khi gặp lệnh này trong chương trình, các câu lệnh còn lại trong thân của vòng lặp được bỏ qua và quyền điều khiển được chuyển đến bước đầu của vòng lặp trong lần lặp kế tiếp. Trong trường hợp
for,
continue thực hiện biểu thức thay đổi của biến điều khiển và sau đó kiểm tra biểu thức điều kiện. Trong trường hợp của lệnh while và
do...while, quyền điều khiển chương trình được chuyển đến biểu thức kiểm tra điều kiện
7. Hàm
"exit()"
- Hàm
exit() là một hàm trong thư viện chuẩn của C. Nó làm việc tương tự như một lệnh chuyển quyền điều khiển, điểm khác nhau chính là các lệnh chuyển quyền điều khiển thường được sử dụng để thoát khỏi một vòng lặp, trong khi
exit() được sử dụng để thoát khỏi chương trình. Hàm này sẽ ngay lập tức kết thúc chương trình và quyền điều khiển được trả về cho hệ điều hành. Hàm
exit() thường được dùng để kiểm tra một điều kiện bắt buộc cho việc thực thi của một chương trình có được thỏa mãn hay không. Cú pháp tổng quát của hàm
exit() như sau:
code:
- Ở đó
mã_trả_về là một tùy chọn. Số 0 thường được dùng như một
mã_trả_về để xác định sự kết thúc chương trình một cách bình thường. Những giá trị khác xác định một vài loại lỗi.
bài làm luyện tập:
1. Khai báo một biến có độ tuổi của con người. In tên nhiều lần của người dùng như tuổi tác của mình
sơ đồ khối:
|
in tên số lần tuổi |
code vòng lặp while;
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
char a[20];
int i,j;
printf("Ten: ");
scanf("%s",a);
printf("Tuoi: ");
scanf("%d",&i);
j=1;
printf("\n\n\n");
while (j<=i) {
printf ("%d %s\t",j,a);
j = j+1;
}
printf("\n\n\n");
system("pause");
return 0;
}
code: vòng lặp for;
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
char a[20];
int i,j;
printf("Ten: ");
scanf("%s",a);
printf("Tuoi: ");
scanf("%d",&i);
j=1;
printf("\n\n\n");
for (j=1;j<=i;j++) {
printf ("%d %s\t",j,a);
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp do - while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
char a[20];
int i,j;
printf("Ten: ");
scanf("%s",a);
printf("Tuoi: ");
scanf("%d",&i);
j=1;
printf("\n\n\n");
do {
printf ("%d %s\t",j,a);
j = j+1;
}
while (j<=i);
printf("\n\n\n");
system("pause");
return 0;
}
kết quả ra màn hình:
|
in tên với số tuổi |
2. Chương trình sẽ hiển thị ngay cả con số 1-30.
sơ đồ khối:
|
in số từ 1-30 |
code: vòng lặp while
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=1;
while (i<=30){
printf("%d\t",i);
i=i+2;
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=1;
for(i=1;i<=30;i=i+2){
printf("%d\t",i);
}
printf("\n\n\n");
system("pause");
return 0;
}
code: vòng lặp do-while
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=1;
do{
printf("%d\t",i);
i=i+2;
}
while (i<=30);
printf("\n\n\n");
system("pause");
return 0;
}
kết quả in ra màn hình
|
in các số từ 1-30 |
3. Những con số hiển thị chương trình 10-0 trong thứ tự đảo ngược
sờ đồ khối :
|
in từ 10-1 |
code vòng lặp while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=10;
while (i>=0){
printf("%d ",i);
i=i-1;
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=10;
for (i=10;i>=0;i=i-1){
printf("%d ",i);
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp do-while
a#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=10;
do{
printf("%d ",i);
i=i-1;
}
while (i>=0);
printf("\n\n\n");
system("pause");
return 0;
}
kết quả ra màn hình:
|
in từ 10-1 |
4. Chương trình sẽ chấp nhận số nguyên và hiển thị chúng cho đến khi bằng không (0) được nhập
sơ đồ khối:
|
hiển thị 1 số cho tới 0 |
code: vòng lặp while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
printf("vao so nguyen: ");
scanf("%d",&i);
while (i>=0){
printf("%d ",i);
i=i-1;
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i,j;
printf("vao so nguyen: ");
scanf("%d",&i);
for(j=i;j>=0;j--){
printf("%d ",j);
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp do while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
printf("vao so nguyen: ");
scanf("%d",&i);
do{
printf("%d ",i);
i=i-1;
}
while (i>=0);
printf("\n\n\n");
system("pause");
return 0;
}
kết quả in ra màn hình
|
in số giảm dần |
Hint:
Get the number.
To begin, set the factorial of the number to be one.
While the number is greater than one
Set the factorial to be the factorial multiplied by the number.
Decrement the number.
Print out the factorial
5. Tìm các giai thừa của một số.
gợi ý:
Lấy tổng số.
Để bắt đầu, thiết lập giai thừa của các số được một.
Trong khi con số này lớn hơn một
Đặt thừa là thừa nhân với số.
Giảm các số.
In ra các thừa
sơ đồ khối
|
Tìm giai thừa |
code vòng lặp while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i,j,t;
printf("Vao so: ");
scanf("%d",&i);
j=1;
t=1;
while (j<=i){
t = t*j;
j=j+1;
}
printf("%d! = %d",i,t);
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i,j,t;
printf("Vao so: ");
scanf("%d",&i);
j=1;
t=1;
for (j=1;j<=i;j++){
t = t*j;
}
printf("%d! = %d",i,t);
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp do-while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i,j,t;
printf("Vao so: ");
scanf("%d",&i);
j=1;
t=1;
do{
t = t*j;
j=j+1;
}
while (j<=i);
printf("%d! = %d",i,t);
printf("\n\n\n");
system("pause");
return 0;
}
hiện ra màn hình:
|
tìm giai thừa |
6. Viết chương trình in ra hàng loạt 100, 95, 90, 85, .........., 5.
sơ đồ khối:
|
in ra bội số của 5 |
code vòng lặp while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=100;
while (i>=1){
printf("%d\t",i);
i=i-5;
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=100;
for (i=100;i>=1;i=i-5){
printf("%d\t",i);
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp do while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int i;
i=100;
do{
printf("%d\t",i);
i=i-5;
}
while (i>=1);
printf("\n\n\n");
system("pause");
return 0;
}
in ra màn hình:
|
in bội số của 5 |
7. Chấp nhận hai số num1 và num2. Tìm tổng của tất cả các số lẻ giữa hai
số nhập vào.
sơ đồ khối:
|
tổng các số lẻ trong khoảng biết trước |
code vòng lặp while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a,b,i;
printf("Vao A va B: ");
scanf("%d%d",&a,&b);
if (a%2==0) a=a+1;
while (a<=b){
i=i+a;
a=a+2;
}
printf("\n tong cac so le tu A den B la: %d",i);
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a,b,i;
printf("Vao A va B: ");
scanf("%d%d",&a,&b);
if (a%2==0) a=a+1;
for (;a<=b;a=a+2){
i=i+a;
}
printf("\n tong cac so le tu A den B la: %d",i);
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp do-while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a,b,i;
printf("Vao A va B: ");
scanf("%d%d",&a,&b);
if (a%2==0) a=a+1;
do{
i=i+a;
a=a+2;
}
while (a<=b);
printf("\n tong cac so le tu A den B la: %d",i);
printf("\n\n\n");
system("pause");
return 0;
}
in ra màn hình
|
in tổng các số lẻ trong khoảng biết trước |
8. Viết chương trình để tạo ra các loạt Fibonacci. (1,1,2,3,5,8,13, .........)
sờ đồ khối:
|
fibonacci |
code vòng lặp while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a,b,i,j;
printf("vao so:");
scanf("%d",&a);
i=0;
j=1;
b=1;
printf("0 ");
while (b<=a){
b=i+j;
j=i;
i=b;
printf("%d ",b);
}
printf("\n\n\n");
system("pause");
return 0;
}
code vòng lặp for:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a,b,i,j;
printf("vao so:");
scanf("%d",&a);
i=0;
j=1;
b=1;
for (b=0;b<=a;){
printf("%d ",b);
b=i+j;
j=i;
i=b;
}
system("pause");
return 0;
}
code vòng lặp do-while:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int a,b,i,j;
printf("vao so:");
scanf("%d",&a);
i=0;
j=1;
b=0;
do{
printf("%d ",b);
b=i+j;
j=i;
i=b;
}
while (b<=a);
printf("\n\n\n");
system("pause");
return 0;
}
in ra màn hình:
|
fibonacci |
Trên đây là toàn bộ kiến thức về vòng lặp... mong rằng bài viết của mình sẽ khiến các bạn hiểu về phần này... chúc các bạn vui vẻ...