câu lệnh for

I. Lặp với số thứ tự biết trước và lặp với số thứ tự ko biết trước

Cùng kiểm tra nhị Việc sau đây:

  • Bài toán 11: Tính độ quý hiếm tổng S,S, biết:

S=11+12+13++1NS = \frac{1}{1} + \frac{1}{2} + \frac{1}{3} + \cdots + \frac{1}{N}

Bạn đang xem: câu lệnh for

  • Bài toán 22: Tính độ quý hiếm tổng S,S, biết:

S=1+2+3++...S = 1 + 2 + 3 + \cdots + ...

cho cho tới khi S106S \ge 10^6.

Đối với Việc 1,1, SS hoàn toàn có thể được xem bằng phương pháp sau:

  • Đầu tiên, SS được gán độ quý hiếm 1 (11)1 \ (\frac{1}{1}).
  • Tiếp theo đòi, nằm trong vô tổng S một độ quý hiếm 1x\frac{1}{x} với x=2,3,4,...,Nx = 2, 3, 4,..., N. Việc nằm trong này được tái diễn N1N - 1 thứ tự cho tới khi x=Nx = N thì nhận được tổng SS lúc đầu.

Đối với Việc 2,2, tao mang 1 phương pháp tính tương tự:

  • Đầu tiên, SS được gán độ quý hiếm 11.
  • Tiếp theo đòi, nằm trong vô tổng SS một số trong những xx với x=2,3,4,...x = 2, 3, 4,... Số thứ tự tái diễn việc làm này không được biết trước tuy nhiên tiếp tục tạm dừng khi đạt được tổng S106S \ge 10^6.

Nhìn công cộng, vào cụ thể từng thuật toán đều sẽ sở hữu những thao tác nên lặp lên đường tái diễn rất nhiều lần. Đối với loài người, khi số thứ tự tái diễn việc làm quá to, việc tiến hành được xem là bất khả đua. Nhưng với PC, năng lực đo lường và tính toán vô cùng nhanh gọn lẹ tiếp tục tạo nên việc tiến hành những thao tác lặp trở thành vô cùng hiệu suất cao. Có nhị dạng lặp là lặp với số thứ tự biết trướclặp với số thứ tự ko biết trước. C++ hỗ trợ cả nhị cấu tạo lặp nhằm màn trình diễn nhị thao tác lặp này.

II. Câu mệnh lệnh for - Lặp với số thứ tự biết trước

Câu mệnh lệnh for là một trong những cấu tạo điều khiển và tinh chỉnh vô cùng hiệu suất cao nhằm lặp lên đường tái diễn một việc làm vô một số trong những thứ tự chắc chắn.

Cú pháp:

for ({Khởi_tạo_biến_đếm}; {Điều_kiện_dừng}; {Tăng_giảm_biến_đếm})
{
    {Khối_lệnh};
}

Quy trình tiến hành của vòng lặp:

  • Bước 11 - {Khởi_tạo_biến_đếm}: Một mệnh lệnh khởi dẫn đến một hoặc nhiều phát triển thành kiểm điểm ngẫu nhiên trong tầm lặp, hoặc ko khởi tạo nên phát triển thành nào là cả (tuy nhiên vẫn nên đem lốt chấm phẩy).
  • Bước 22 - {Điều_kiện_dừng}: Là một biểu thức logic xác lập ĐK lúc nào vòng lặp tiếp tục tạm dừng. Trước khi tiến hành {Khối_lệnh}, biểu thức tiếp tục đánh giá thành quả, nếu như là true thì |Khối lệnh| sẽ tiến hành tiến hành tiếp, ngược lại thì vòng lặp tiếp tục giới hạn.
  • Bước 33 - {Khối_lệnh}: Sau khi đánh giá {Điều_kiện_dừng} và thấy thành quả là true, khối mệnh lệnh sẽ tiến hành tiến hành.
  • Bước 44 - {Tăng_giảm_biến_đếm}: Cập nhật độ quý hiếm phát triển thành kiểm điểm theo đòi ngẫu nhiên cơ hội nào là người tiêu dùng ước muốn (có thể ko update gì cả vẫn nên đem lốt chấm phẩy). Sau khi update kết thúc, quy trình con quay quay về kể từ bước 22 cho đến khi {Điều_kiện_dừng} nhận độ quý hiếm false.

Ví dụ: Cùng xét lịch trình sau:

#include <iostream>
using namespace std;
    
int main()
{
    int N;
    cin >> N;
        
    int S = 0;
    for (int i = 1; i <= N; ++i)
        S = S + i;
        
    cout << "Tổng từ là một cho tới N là: " << S;
        
    return 0;
}

Vòng lặp sẽ tạo phát triển thành kiểm điểm i = 1, tiếp theo đánh giá ĐK i <= N, nếu như ĐK này chính thì tiến hành câu mệnh lệnh S = S + i, tiếp sau đó tăng phát triển thành ii lên 11 đơn vị chức năng, rồi lại con quay quay trở lại đánh giá ĐK i <= N,...Quá trình tiếp tục tái diễn cho đến khi phát triển thành ii nhận độ quý hiếm N+1,N + 1, vòng lặp tạm dừng.

Giả sử nhập vô NN vày 10,10, thành quả in rời khỏi là:

Tổng từ là một cho tới N là 55

Sơ đồ dùng quy trình thực hiện:

III. Câu mệnh lệnh while - lặp với số thứ tự ko biết trước

Đôi khi tất cả chúng ta cần thiết tái diễn một việc làm nào là bại, tuy nhiên ko biết trước số thứ tự tiếp tục lặp nhưng mà chỉ hiểu rằng ĐK lúc nào việc làm này sẽ tạm dừng, khi bại vòng lặp while tiếp tục trở thành vô cùng hữu dụng. Có nhị dạng vòng lặp while vô C++: whiledo...while.

1. Vòng lặp while

Cú pháp:

while ({Điều_kiện_dừng})
{
    {Khối_lệnh};
}

Quy trình tiến hành vòng lặp:

  • Bước 11 - {Điều_kiện_dừng}: Là biểu thức logic xác lập ĐK giới hạn của vòng lặp. Trước khi thực đua {Khối_lệnh}, lịch trình tiếp tục đánh giá {Điều_kiện_dừng}, nếu như thành quả là true thì nối tiếp thực đua {Khối_lệnh}, ngược lại vòng lặp kết đốc.
  • Bước 22 - {Khối_lệnh}: Sau khi đánh giá {Điều_kiện_dừng} và thấy thành quả là true, khối mệnh lệnh sẽ tiến hành tiến hành. Sau bại, tiến độ nối tiếp quay trở lại bước 11 cho tới khi vòng lặp giới hạn.

Ví dụ:

#include <iostream>
using namespace std;
    
int main()
{   
    int S = 0, i = 1;
    while (S <= 100)
    {
        S = S + i;
        i = i + 5;
    }
        
    cout << "Tổng S là: " << S;
        
    return 0;
} 

Đầu tiên lịch trình sẽ tạo phát triển thành nhị phát triển thành S = 0i = 1. Sau bại khi vô vòng lặp, đánh giá ĐK S <= 100, nếu như ĐK này chính thì tiến hành câu mệnh lệnh S = S + i, tiếp sau đó tăng phát triển thành ii lên 55 đơn vị chức năng, rồi lại con quay quay trở lại đánh giá ĐK i <= N,...Quá trình tiếp tục tái diễn cho đến khi phát triển thành SS nhận độ quý hiếm to hơn 100100 thì vòng lặp tạm dừng.

Kết trái ngược in rời khỏi khi chạy lịch trình là:

Tổng S là 112

Sơ đồ dùng quy trình thực hiện:

2. Vòng lặp do...while

Về cơ bạn dạng, vòng lặp do...while tương đương với vòng lặp while, tuy nhiên điểm khác lạ là vòng lặp do...while tiếp tục tiến hành khối mệnh lệnh trước rồi mới nhất tổ chức đánh giá ĐK giới hạn. Có tức là, khối mệnh lệnh trong tầm lặp do...while luôn luôn luôn luôn được thực đua tối thiểu một thứ tự, trong những khi vòng lặp while thì hoàn toàn có thể sẽ không còn tiến hành thứ tự nào là cả.

Cú pháp:

do
{
    {Khối_lệnh};
}
while ({Điều_kiện_dừng});

Quy trình tiến hành vòng lặp:

  • Bước 11 - {Khối_lệnh}: {Khối_lệnh}| sẽ tiến hành thực đua trước tiên.
  • Bước 22 - {Điều_kiện_dừng}: Kiểm tra {Điều_kiện_dừng}, nếu như biểu thức logic trả rời khỏi thành quả true thì nối tiếp con quay quay trở lại bước 1,1, ngược lại thì giới hạn vòng lặp.

Ví dụ:

#include <iostream>
using namespace std;
    
int main()
{   
    int S = 0, i = 1;
    do
    {
        S = S + i;
        i = i + 5;
    }
    while (S <= 100);
        
    cout << "Tổng S là: " << S;
        
    return 0;
} 

Đầu tiên lịch trình sẽ tạo phát triển thành nhị phát triển thành S = 0i = 1. Khi vô vòng lặp, trước tiên lịch trình tiếp tục tính S = S + i, tiếp theo gán i = i + 5 rồi mới nhất đánh giá ĐK S <= 100. Nếu ĐK vẫn đang sẵn có thành quả là true thì nối tiếp tiến hành lại khối mệnh lệnh, tái diễn cho đến khi phát triển thành SS nhận độ quý hiếm to hơn 100100 thì vòng lặp tạm dừng.

Kết trái ngược in rời khỏi khi chạy lịch trình là:

Tổng S là 112

Sơ đồ dùng quy trình thực hiện:

Xem thêm: mao sơn tróc quỷ nhân truyện tranh

IV. Vòng lặp lồng nhau

Cú pháp C++ được cho phép người tiêu dùng hoàn toàn có thể lồng nhiều vòng lặp vô nhau. Khi bại, ứng với từng thứ tự lặp của vòng lặp phía bên ngoài thì vòng lặp bên phía trong sẽ tiến hành tiến hành đầy đủ số thứ tự lặp của chính nó. Dưới đấy là một số trong những ví dụ:

1. Lồng vòng lặp for

Cú pháp:

for ({Khởi_tạo_biến_đếm_1}; {Điều_kiện_dừng_1}; {Tăng_giảm_biến_đếm_1})
{
    for ({Khởi_tạo_biến_đếm_2}; {Điều_kiện_dừng_2}; {Tăng_giảm_biến_đếm_2})
    {
        {Khối_lệnh_2};
	...
    }
       
    {Khối_lệnh_1};
    ...
}

Ví dụ: Chương trình sau đây dùng nhị vòng lặp for lồng nhau nhằm kiểm điểm số ước vẹn toàn dương của từng số vẹn toàn dương kể từ 11 cho tới 1010:

#include <iostream>
#include <cmath>

using namespace std;
    
int main()
{   
    for (int i = 1; i <= 10; ++i) // Duyệt những số i từ là một cho tới 10.
    {
        int cnt_divisors = 0; // Số ước của i.
        for (int j = 1; j <= i; ++j) // Duyệt tìm hiểu những ước của i.
            if (i % j == 0) 
                ++cnt_divisors;
            
        cout << "Số ước của " << i << " là: " << cnt_divisors << endl;
    }
        
    return 0;
} 

Biên dịch và chạy lịch trình bên trên tiếp tục đã cho ra kết quả:

Số ước của một là 1
Số ước của 2 là 2
Số ước của 3 là 2
Số ước của 4 là 3
Số ước của 5 là 2
Số ước của 6 là 4
Số ước của 7 là 1
Số ước của 8 là 4
Số ước của 9 là 3
Số ước của 10 là 4

2. Lồng vòng lặp while

Cú pháp:

while ({Điều_kiện_1})
{
    while ({Điều_kiện_2})
    {
        {Khối_lệnh_2};
	...
    }
        
    {Khối_lệnh_1};
    ...
}

Ví dụ: Đặt F(N)F(N) là tổng những số kể từ 11 cho tới N,N, lịch trình sau đây dùng nhị vòng lặp while lồng nhau nhằm in rời khỏi những độ quý hiếm F(1),F(2),..,F(5)F(1), F(2),.., F(5):

#include <iostream>
#include <cmath>

using namespace std;
    
int main()
{   
    int i = 1; 
    while (i <= 5)
    {
	int j = 1, f = 0;
	while (j <= i)
	{
	    f += j;
	    ++j;
	}

	cout << "F(" << i << " = " << f << endl; 

	++i; // Tăng i lên nhằm tính F(i) tiếp sau.
    }
        
    return 0;
} 

Biên dịch và chạy lịch trình, tao nhận được thành quả là:

F(1) = 1
F(2) = 3
F(3) = 6
F(4) = 10
F(5) = 15

3. Lồng vòng lặp do...while

Cú pháp:

do
{
    {Khối_lệnh_1};
        
    do 
    {
       {Khối_lệnh_2};
	...
    }
    while ({Điều_kiện_2});
    ...
}
while ({Điều_kiện_1});

Ví dụ: Đặt F(N)F(N) là tổng những số kể từ 11 cho tới N,N, lịch trình sau đây dùng nhị vòng lặp do...while lồng nhau nhằm in rời khỏi những độ quý hiếm F(1),F(2),..,F(5)F(1), F(2),.., F(5):

#include <iostream>
#include <cmath>

using namespace std;
    
int main()
{   
    int i = 1; 
    do
    {
	int j = 1, f = 0;
	do
	{
	    f += j;
	    ++j;
	}
	while (j <= i);

	cout << "F(" << i << " = " << f << endl; 

	++i; // Tăng i lên nhằm tính F(i) tiếp sau.
    }
    while (i <= 5);
   
    return 0;
} 

Biên dịch và chạy lịch trình, tao nhận được thành quả là:

F(1) = 1
F(2) = 3
F(3) = 6
F(4) = 10
F(5) = 15

4. Lồng vòng lặp lếu hợp

Cú pháp:

for ({Khởi_tạo_biến_đếm_1}; {Điều_kiện_dừng_1}; {Tăng_giảm_biến_đếm_1})
{
    while ({Điều_kiện_2})
    {
        {Khối_lệnh_2};
        
        do
        {
            {Khối_lệnh_3};
	    ....
        }
        while ({Điều_kiện_3});
	...
    }
        
    {Khối_lệnh_1};
    ...
}

Ví dụ: Chương trình sau đây lồng nhị vòng lặp forwhile nhằm tính tổng 1!+2!++10!1! + 2! + \cdots + 10!:

#include <iostream>
#include <cmath>

using namespace std;
    
int main()
{   
    int sum = 0; // Biến lưu tổng 1! + 2! + ... + 10!
    for (int i = 1; i <= 10; ++i)
    {
	int j = 1, factorial = 1;
	while (j <= i)
	{
	    factorial *= j;
	    ++j;
	}

	sum += factorial;
    }
   
    cout << sum;
} 

Biên dịch và chạy lịch trình, tao nhận được thành quả là:

4037913

V. Các mệnh lệnh breakcontinue

1. Lệnh break

Tác dụng: Sử dụng nhằm ngắt vòng lặp. Khi gặp gỡ mệnh lệnh break, vòng lặp đang được chứa chấp mệnh lệnh này sẽ tức thì tức thời bị ngắt bao gồm khi {Điều_kiện_dừng} vẫn đang được nhận độ quý hiếm true.

Cú pháp:

break;

Ví dụ:

#include <iostream>
using namespace std;
    
int main()
{
    int S = 0;
    for (int i = 1; i <= 15; ++i)
    {    
        S = S + i;

        cout << i << endl;

        if (S > 10) // Nếu S > 10 thì giới hạn vòng lặp luôn luôn.
            break;
    }
        
    cout << "Tổng S là: " << S;
        
    return 0;
}    

Biên dịch và chạy lịch trình tiếp tục cho tới kết quả:

1
2
3
4
5
Tổng S là: 15

Ta thấy tuy nhiên vòng lặp đem ĐK giới hạn là i <= 15, tuy nhiên khi tới i = 5 thì vòng lặp đã trở nên tạm dừng vì thế ĐK S = 10 đã nhận được độ quý hiếm true và mệnh lệnh break tiếp tục đẩy mạnh tính năng.

Sơ đồ dùng hoạt động:

2. Lệnh continue

Tác dụng: Sử dụng nhằm bỏ lỡ một thứ tự lặp. Khi gặp gỡ mệnh lệnh continue, toàn cỗ phần mệnh lệnh bên dưới mệnh lệnh này (thuộc nằm trong khối lệnh) sẽ ảnh hưởng bỏ lỡ và đem đến thứ tự lặp tiếp sau trong tầm lặp bại. Đối với vòng lặp for, mệnh lệnh continue tiếp tục điều khiển và tinh chỉnh cho tới phần {Tăng_giảm_biến_đếm}; còn so với mệnh lệnh whiledo...while thì mệnh lệnh continue tiếp tục điều khiển và tinh chỉnh cho tới phần {Điều_kiện_dừng}.

Cú pháp:

continue;

Ví dụ:

#include <iostream> 
using namespace std; 
    
int main () 
{ 
    int a = 10; 
    do 
    { 
       if (a == 15) // Nếu a = 15 thì bỏ lỡ toàn cỗ đoạn mệnh lệnh bên dưới.
       { 
          a = a + 1; 
          continue; 
       } 
           
       cout << "Gia tri cua a la: " << a << endl; 
       a = a + 1; 
    }
    while(a < 20); 
        
    return 0; 
}

Biên dịch và chạy lịch trình bên trên tiếp tục đã cho ra thành quả là:

Giá trị của a là 10
Giá trị của a là 11
Giá trị của a là 12
Giá trị của a là 13
Giá trị của a là 14
Giá trị của a là 16
Giá trị của a là 17
Giá trị của a là 18
Giá trị của a là 19

Ta thấy độ quý hiếm a=15a = 15 đã trở nên bỏ lỡ tổn thất vì thế mệnh lệnh continue.

Sơ đồ dùng hoạt động:

VI. Vòng lặp vô hạn

Đôi khi vô lịch trình, tất cả chúng ta tiếp tục gặp gỡ nên những tình huống vòng lặp bị lặp vô hạn thứ tự, kéo theo lịch trình ko thể trả rời khỏi thành quả. Như vậy là vì thuật toán của tất cả chúng ta đã trở nên sơ sót ở nơi nào đó tạo nên ĐK giới hạn của vòng lặp ko lúc nào hoàn toàn có thể đạt cho tới độ quý hiếm false. Cùng kiểm tra ví dụ sau:

Xem thêm: truyện chàng rể quyền thế

for (int i = 1; i <= 10; ++i)
{
    S = S + i;
    i = 1;
}
    
cout << S;

Biên dịch đoạn code này sẽ không còn trả rời khỏi được thành quả, lý do là vì thế ở từng thứ tự lặp, phát triển thành ii lại được gán lại vày 11 vô khối mệnh lệnh, kéo theo ii ko lúc nào đạt giá tốt trị to hơn 1010 cả. Vì vậy cần thiết rất là xem xét yếu tố này trong những khi design giải thuật.

Vòng lặp vô hạn nhiều khi cũng có thể có ích, ví dụ trong số tình huống như thiết kế viên ko thể xác lập được số thứ tự lặp nhằm xử lý một logic nào là bại (như vô quy trình nhập tài liệu kể từ tệp tin nhưng mà ko biết trước số loại chẳng hạn). Lúc này cần dùng cho tới vòng lặp vô hạn, và những dạng thông thường được sử dụng tiếp tục là: while (true), for( ; ;), while (1),...Khi ĐK của vòng lặp for bị vứt trống rỗng, nó sẽ bị khoác tấp tểnh nhận độ quý hiếm true.

VII. Tài liệu tham ô khảo

  • https://quantrimang.com/vong-lap-trong-cplusplus-156189
  • https://vietjack.com/cplusplus/vong_lap_trong_cplusplus.jsp
  • https://www.softwaretestinghelp.com/loops-in-cpp/

©️ Tác giả: Vũ Quế Lâm kể từ Viblo