Cấu trúc vòng lặp for, while, do-while.
đâ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ẻ.
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:
Biểu_thức_1, Biểu_thức_2
- 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++){........}}
- 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:
code:
- 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).while (điều_kiện_là_đúng)câu_lệnh;
- 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ặpdo...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
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:
- 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
return biểu_thức
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:
- 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:
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:
exit (int mã_trả_về);
- Ở đó 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:
Bài 1. Declare a variable which has the age of the person. Print the user’s name as many times as his age
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 |
Bài 2. The program displays even numbers from 1 to 30.
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 |
Bài: 3. The program displays numbers from 10 to 0 in the reverse order
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 |
Bài: 4. The program will accept integers and display them until zero (0) is entered
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;
}
in số giảm dần |
Bài 5. Find the factorial of a number.
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 |
Bài 6. Write a program to print the series 100, 95 , 90, 85,………., 5.
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ẻ...
Không có nhận xét nào:
Đăng nhận xét