Chu kỳ. Các toán tử vòng lặp cho, while, do…while

Thẻ: Chu kỳ C. vòng lặp C. Lặp lại với hậu điều kiện. Vòng lặp với điều kiện tiên quyết. Đạp xe với người ghi chép. trong khi. làm trong khi. vì. phá vỡ. Tiếp tục

Giới thiệu. Vòng lặp với điều kiện tiên quyết.

Khi giải quyết các vấn đề thực tế, luôn nảy sinh nhu cầu lặp lại một hành động với số lần nhất định hoặc cho đến khi đạt được một điều kiện nhất định. Ví dụ: hiển thị danh sách tất cả người dùng, xếp mặt phẳng bằng họa tiết, thực hiện các phép tính trên từng phần tử của mảng dữ liệu, v.v. Trong C, ba loại vòng lặp được sử dụng cho các mục đích sau: với điều kiện tiên quyết, hậu điều kiện và chu kỳ có bộ đếm (mặc dù đây là tên có điều kiện, vì có thể không có bộ đếm).

Bất kỳ vòng lặp nào cũng bao gồm phần thân và kiểm tra điều kiện để kết thúc vòng lặp này. Phần thân của vòng lặp là tập hợp các lệnh phải được lặp lại. Mỗi lần lặp lại vòng lặp được gọi là một lần lặp.

Hãy xem xét một vòng lặp có điều kiện tiên quyết.

Int i = 0; trong khi tôi< 10) { printf("%d\n", i); i++; }

Vòng lặp này chạy miễn là điều kiện được chỉ định sau là đúng từ khóa trong khi. Phần thân của vòng lặp gồm hai dòng, một dòng in một số, dòng thứ hai thay đổi số đó. Rõ ràng vòng lặp này sẽ được thực hiện 10 lần và hiển thị
0
1
2
3
và cứ thế cho đến 9 giờ.

Điều rất quan trọng là điều kiện thoát khỏi vòng lặp phải được thỏa mãn tại một thời điểm nào đó, nếu không vòng lặp sẽ xảy ra và chương trình sẽ không hoàn thành. Ví dụ

Int i = 0; trong khi tôi< 10) { printf("%d\n", i); }

Vòng lặp này không thay đổi biến i, biến này được dùng để xác định điều kiện dừng, do đó vòng lặp sẽ không kết thúc.

Int i = 0; while (i > 0) ( printf("%d\n", i); i++; )

Trong chương trình này, tất nhiên, vòng lặp sẽ kết thúc, nhưng do thực hiện một hành động không chính xác, vòng lặp sẽ được thực hiện hơn 10 lần. Vì C không giám sát việc tràn biến nên bạn sẽ phải đợi cho đến khi biến tràn và trở thành nhỏ hơn 0.

Int tôi; trong khi tôi< 10) { printf("%d\n", i); i++; }

Ví dụ này có hành vi không xác định. Vì biến i không được khởi tạo trước nên nó lưu trữ rác, một giá trị không xác định trước. Với các nội dung khác nhau của biến i, hành vi sẽ thay đổi.

Nếu phần thân của vòng lặp while chứa một câu lệnh thì có thể bỏ qua dấu ngoặc nhọn.

Int i = 0; trong khi tôi< 10) printf("%d\n", i++);

Ở đây chúng ta tăng biến i khi gọi hàm printf. Phong cách mã hóa này nên tránh. Việc thiếu dấu ngoặc nhọn, đặc biệt là khi bắt đầu tập luyện, có thể dẫn đến sai sót. Ngoài ra, mã khó đọc hơn và các dấu ngoặc đơn bổ sung không làm tăng nhiều danh sách.

Vòng lặp có hậu điều kiện.

Vòng lặp hậu điều kiện khác với vòng lặp while ở chỗ điều kiện được kiểm tra sau khi vòng lặp hoàn thành, nghĩa là vòng lặp sẽ được lặp lại ít nhất một lần (không giống như vòng lặp while, có thể không được thực thi chút nào). Cú pháp vòng lặp

Thực hiện (thân vòng lặp) while(điều kiện);

Ví dụ trước sử dụng vòng lặp do sẽ trông như thế này

Int i = 0; làm ( printf("%d\n", i); i++; ) while(i< 10);

Hãy xem một ví dụ về cách sử dụng vòng lặp với một điều kiện sau và một điều kiện trước. Giả sử chúng ta cần tích hợp một hàm.

Cơm. 1 Tích phân số của hàm∫ a b f x d x

Tích phân là tổng của các số vô cùng nhỏ. Chúng ta có thể biểu diễn tích phân dưới dạng tổng và chỉ cần thay thế các giá trị vô cùng nhỏ bằng các giá trị nhỏ.

∫ a b f x d x = ∑ i = a b f i h

Công thức cho thấy rằng thực tế chúng ta đã chia diện tích bên dưới biểu đồ thành nhiều hình chữ nhật, trong đó chiều cao của hình chữ nhật là giá trị của hàm tại điểm và chiều rộng là bước của chúng ta. Bằng cách cộng diện tích của tất cả các hình chữ nhật, chúng ta thu được giá trị của tích phân với một số sai số.

hình chữ nhật bên trái" src="/images/c_loop_ectangles_left.png" alt="Tích hợp số của một hàm theo phương thức
hình chữ nhật bên trái"> Рис. 2 Численное интегрирование функции методом!}
hình chữ nhật bên trái

Gọi hàm số cần tìm là x 2 . Chúng ta sẽ cần các biến sau. Đầu tiên, một bộ tích lũy tổng để lưu trữ tích phân. Thứ hai là ranh giới trái và phải của a và b, thứ ba là bước h. Chúng ta cũng cần giá trị hiện tại của đối số hàm x.

Để tìm tích phân cần phải đi từ Một trước b với một số bước h, rồi cộng vào tổng diện tích hình chữ nhật có cạnh f(x)h.

#bao gồm #bao gồm int main() ( double sum = 0,0; double a = 0,0; double b = 1,0; double h = 0,01; double x = a; while (x< b) { sum += x*x * h; x += h; } printf("%.3f", sum); getch(); }

Chương trình xuất ra 0,328.

∫ 0 1 x 2 d x = x 3 3 | 0 1 = 1 3 ≈ 0,333

Nếu nhìn vào biểu đồ, bạn có thể thấy điều đó mỗi khi chúng ta tìm thấy giá trị của hàm ở điểm bên trái. Vì vậy, phương pháp tích phân số này được gọi là phương pháp hình chữ nhật bên trái. Tương tự, bạn có thể lấy giá trị đúng. Khi đó sẽ là phương pháp hình chữ nhật phù hợp.

Trong khi(x< b) { x += h; sum += x*x * h; } hình chữ nhật bên phải" src="/images/c_loop_ectangles_right.png" alt="Tích hợp số của một hàm theo phương thức
hình chữ nhật bên phải"> Рис. 3 Численное интегрирование функции методом!}
hình chữ nhật bên phải

Số tiền trong trường hợp này sẽ bằng 0,338. Phương pháp hình chữ nhật bên trái và bên phải không chính xác lắm. Trên thực tế, chúng ta đã tính gần đúng đồ thị trơn của hàm tăng đơn điệu bằng biểu đồ. Nếu bạn suy nghĩ một chút, thì phép tính gần đúng có thể được thực hiện không chỉ bằng cách tính tổng các hình chữ nhật mà còn bằng cách tính tổng các hình thang.

hình thang" src="/images/c_loop_integral_trapezium.png" alt="Tích hợp số của một hàm theo phương thức
hình thang"> Рис. 4 Численное интегрирование функции методом!}
hình thang

Phép tính gần đúng hình thang thực chất là phép tính gần đúng từng phần theo các đường cong bậc nhất (ax+b). Chúng tôi kết nối các điểm trên biểu đồ bằng cách sử dụng các đoạn đường. Bạn có thể làm cho nó phức tạp hơn bằng cách nối các điểm không phải bằng các đoạn mà bằng các đoạn parabol, thì đây sẽ là phương pháp của Simpson. Nếu chúng ta phức tạp hóa mọi thứ hơn nữa, chúng ta sẽ chuyển sang nội suy spline, nhưng đó lại là một cuộc trò chuyện rất dài khác.

Hãy quay trở lại với con cừu của chúng ta. Hãy xem xét 4 chu kỳ.

Int i = 0; trong khi (i++< 3) { printf("%d ", i); } int i = 0; while (++i < 3) { printf("%d ", i); } int i = 0; do { printf("%d ", i); } while(i++ < 3); int i = 0; do { printf("%d ", i); } while(++i < 3);

Nếu bạn chạy các ví dụ này, bạn sẽ thấy các vòng lặp được thực hiện từ hai đến bốn lần. Điều này đáng được chú ý vì việc thay đổi bộ đếm vòng lặp không chính xác thường dẫn đến sai sót.

Điều thường xảy ra là chúng ta cần thoát khỏi vòng lặp mà không cần đợi cờ được nâng lên hoặc giá trị của biến thay đổi. Đối với những mục đích này, toán tử được sử dụng phá vỡ khiến chương trình thoát khỏi vòng lặp hiện tại.

Hãy quyết định nhiệm vụ đơn giản. Người dùng nhập số cho đến khi nhập số 0, sau đó số lớn nhất đã nhập sẽ hiển thị. Có một nhược điểm. Không biết người dùng sẽ nhập bao nhiêu số. Do đó, chúng ta sẽ tạo một vòng lặp vô hạn và sẽ thoát khỏi nó bằng toán tử phá vỡ. Bên trong vòng lặp, chúng ta sẽ nhận dữ liệu từ người dùng và chọn số lượng tối đa.

#bao gồm #bao gồm int main() ( int num = 0; int max = num; printf("Để thoát, nhập 0\n"); /*vòng lặp vô tận*/ while (1) ( printf("Xin vui lòng nhập số: "); scanf("%d", &num); /*điều kiện để thoát khỏi vòng lặp*/ if (num == 0) ( break; ) if (num > max) ( max = num; ) ) printf("số tối đa là % d ", tối đa); getch(); )

Hãy để tôi nhắc bạn rằng không có kiểu Boolean đặc biệt nào trong C. Số được sử dụng thay thế. Số 0 là sai, tất cả các giá trị khác đều đúng. Vòng lặp while(1) sẽ chạy mãi mãi. Điểm thoát duy nhất khỏi nó là điều kiện

Nếu (số == 0)

Trong trường hợp này, chúng tôi thoát khỏi vòng lặp với phá vỡ; Để bắt đầu, chúng tôi đặt mức tối đa là 0. Người dùng nhập một số, sau đó chúng tôi kiểm tra xem nó có bằng 0 hay không. Nếu nó không bằng 0 thì chúng ta so sánh nó với mức tối đa hiện tại.

Vòng lặp vô hạn được sử dụng khá thường xuyên vì dữ liệu đầu vào không phải lúc nào cũng được biết trước hoặc nó có thể thay đổi trong khi chương trình đang chạy.

Khi chúng ta cần bỏ qua phần thân vòng lặp nhưng vẫn tiếp tục thực hiện vòng lặp, chúng ta sử dụng toán tử Tiếp tục. Một ví dụ đơn giản: người dùng nhập mười số. Tìm tổng của tất cả các số dương anh ta đã nhập.

#bao gồm #bao gồm int main() ( int i = 0; int PositiveCnt = 0; float sum = 0.0f; đầu vào float; printf("Nhập 10 số\n"); while (i< 10) { i++; printf("%2d: ", i); scanf("%f", &input); if (input <= 0.0) { continue; } sum += input; positiveCnt++; } printf("Sum of %d positive numbers = %f", positiveCnt, sum); getch(); }

Ví dụ này có vẻ hơi xa vời, mặc dù nhìn chung nó phản ánh ý nghĩa của toán tử Tiếp tục. Trong ví dụ này biến tích cựcCnt là bộ đếm các số dương, Tổng số tiền và đầu vào- biến tạm thời để nhập số.

Đây là một ví dụ khác. Người dùng cần nhập số nguyên lớn hơn 0 và nhỏ hơn 100. Cho đến khi nhập đủ số theo yêu cầu, chương trình sẽ tiếp tục thăm dò.

Thực hiện ( printf("Xin vui lòng nhập số: "); scanf("%d", &n); if (n< 0 || n>100) ( printf("số sai, thử lại\n"); continue; ) else ( break; ) ) while (1);

vòng lặp for

Một trong những vòng lặp được sử dụng phổ biến nhất là vòng lặp truy cập. . Cú pháp của nó

Vì(<инициализация>; <условие продолжения>; <изменение счётчика>){ <тело цикла> }

Ví dụ: hãy in bình phương của một trăm số đầu tiên.

Int tôi; với (i = 1; tôi< 101; i++) { printf("%d ", i*i); }

Một trong những điều tuyệt vời về vòng lặp for là nó có thể hoạt động với nhiều thứ hơn là chỉ số nguyên.

Số nổi; for (num = 5.3f; num > 0f; num -= 0.2) ( printf("%.2f ", num); )

Vòng lặp này sẽ in các số từ 5,3 đến 0,1. Vòng lặp for có thể thiếu một số "khối" mã, ví dụ: nó có thể thiếu phần khởi tạo, kiểm tra (khi đó vòng lặp trở nên vô hạn) hoặc thay đổi bộ đếm. Đây là một ví dụ với tích phân được thực hiện bằng cách sử dụng bộ đếm

#bao gồm #bao gồm int main() ( double sum = 0,0; double a = 0,0; double b = 1,0; double h = 0,01; double x; for (x = a; x< b; x += h) { sum += x*x * h; } printf("%.3f", sum); getch(); }

Chúng ta hãy nhìn vào một đoạn mã

Đôi x ; với (x = a; x< b; x += h) { sum += x*x * h; }

Nó có thể được thay đổi như thế này

Đôi x = a; vì(; x< b; x+=h) { sum += x*x*h; }

Hơn nữa, việc sử dụng toán tử phá vỡ, bạn có thể loại bỏ điều kiện và viết

Đôi x; for (x = a;; x += h)( if (x>b)( break; ) sum += x*x*h; )

Đôi x = a; for (;;)( if (x > b)( break; ) sum += x*x*h; x += h; )

Ngoài ra, bằng cách sử dụng toán tử ",", bạn có thể di chuyển một số hành động

Đôi x ; với (x = a; x< b; x += h, sum += x*x*h) ;

LƯU Ý: Mặc dù có thể thực hiện việc này nhưng vui lòng không làm điều này! Điều này làm giảm khả năng đọc mã và dẫn đến các lỗi nhỏ.

Hãy quyết định một số vấn đề thực tế phức tạp hơn. Chúng ta có hàm f(x). Hãy tìm đạo hàm cực đại của nó trên đoạn thẳng. Làm thế nào để tìm đạo hàm của một hàm số? Rõ ràng, theo định nghĩa). Đạo hàm của hàm số tại một điểm là tang của góc tiếp tuyến.

F x ′ = d x d y

Lấy một điểm trên đường cong có tọa độ (x; f(x)), tiến lên một bước h, ta được điểm (x+h, f(x+h)), khi đó đạo hàm sẽ là

D x d y = f (x + h) - f x (x + h - x) = tan α

Đó là tỷ lệ giữa một mức tăng nhỏ của hàm với một mức tăng nhỏ của một đối số. Một người đọc chú ý có thể hỏi tại sao chúng ta tiến về phía trước trong một hàm số mà không lùi lại. Thôi chúng ta quay lại thôi

D x d y = f x - f (x - h) h = tan β

Lấy trung bình cộng của hai giá trị này, ta được

F(x + h) - f(x - h) 2h

Nói chung, bây giờ nhiệm vụ trở nên tầm thường: chúng ta đi từ điểm Mộtđến điểm b và chúng tôi tìm thấy giá trị tối thiểuđạo hàm, cũng như điểm mà tại đó đạo hàm có giá trị này. Để giải quyết, chúng ta sẽ cần, như trong bài toán tích phân, các biến cho ranh giới của vùng tìm kiếm Mộtb, giá trị hiện tại x và bước h. Ngoài ra, cần có giá trị tối đa giá trị tối đa và phối hợp maxX giá trị tối đa này. Để làm việc, lấy hàm x sin x

#bao gồm #bao gồm #bao gồm int main() ( double a = 0; double b = 3.0; double h = 0,001; double h2 = h * 2.0; double maxVal = a*sin(a); double maxX = a; double curVal; double x; // Chúng ta đi qua toàn bộ vùng từ a đến b // và tìm cực đại của đạo hàm bậc nhất // ​Sử dụng hàm x*sin(x) cho (x = a; x< b; x += h) { curVal = ((x+h)*sin(x+h)-(x-h)*sin(x-h))/h2; if (curVal >maxVal) ( maxVal = curVal; maxX = x; ) ) printf("max value = %.3f at %.3f", maxVal, maxX); getch(); )

Ở đầu ra, chương trình tạo ra giá trị tối đa = 1,391 tại 1,077

Giải pháp số cho kết quả tương tự (có lỗi) như chương trình của chúng tôi.

Vòng lồng nhau

Hãy xem một ví dụ trong đó các vòng lặp được lồng vào nhau. Hãy hiển thị bảng nhân.

#bao gồm #bao gồm #bao gồm int main() ( int i, j; // Với mỗi i for (i = 1; i< 11; i++) { // Выводим строку из произведения i на j for (j = 1; j < 11; j++) { printf("%4d", i*j); } // После чего переходим на dòng mới printf("\n"); ) getch(); )

Trong ví dụ này, trong vòng lặp đầu tiên thông qua biến Tôi vòng lặp thứ hai lồng nhau trên biến j. Trình tự các hành động như sau: đầu tiên chúng ta bước vào chu trình bằng cách Tôi, sau đó cho hiện tại Tôi Các số được xuất ra 10 lần liên tiếp. Sau này, bạn cần phải đi đến một dòng mới. Bây giờ hãy chỉ xuất các phần tử nằm dưới đường chéo chính

Với (i = 1; tôi< 11; i++) { for (j = 1; j < 11; j++) { if (j >i) ( break; ) printf("%4d", i*j); ) printf("\n"); )

Như bạn có thể thấy, người vận hành phá vỡ cho phép bạn chỉ thoát khỏi vòng lặp hiện tại. Ví dụ này có thể được viết lại như sau

Với (i = 1; tôi< 11; i++) { for (j = 1; j <= i; j++) { printf("%4d", i*j); } printf("\n"); }

Trong trường hợp này, chúng tôi sử dụng bộ đếm vòng lặp đầu tiên trong vòng lặp lồng nhau.

Ru-Cyrl 18-hướng dẫn Sypachev S.S. 14-04-1989 [email được bảo vệ] Stepan Sypachev sinh viên

Vẫn chưa rõ ràng? – viết câu hỏi vào hộp thư

Vòng lặp được sử dụng để lặp đi lặp lại các đoạn mã. Khả năng lặp lại một số đoạn mã nhất định là một trong những nhiệm vụ chính và đồng thời quan trọng mà lập trình viên phải giải quyết. Ví dụ: hầu hết các chương trình hoặc trang web đều sử dụng vòng lặp để hiển thị thông tin hoặc thông báo tin tức. Nghĩa là, trong những tác vụ như vậy, cần phải liên tục thực hiện các thao tác đọc và ghi, đồng thời để không trùng lặp cùng một mã, các vòng lặp sẽ ra tay giải cứu. Các vòng lặp khá đơn giản để khai báo trong mã, nhưng chúng hoàn thành các nhiệm vụ phức tạp chỉ với sự lặp lại đơn giản.

Để bắt đầu tìm hiểu về vòng lặp, hãy đảm bảo bạn hiểu rõ về khái niệm trong ngôn ngữ lập trình C. Bởi vì điều này sẽ rất quan trọng trong việc sử dụng chu trình, bởi vì trong chu trình, cũng giống như trong chu trình, có các biểu thức điều kiện. Có ba loại vòng lặp trong ngôn ngữ C: for, while, do while. Mỗi người trong số họ có ứng dụng cụ thể của riêng mình. Tất cả chúng được mô tả dưới đây.

Vòng lặp được sử dụng phổ biến nhất là vòng lặp for, cấu trúc của nó như sau:

For (/*khởi tạo một biến; điều kiện; thay đổi giá trị của một biến*/) ( // phần thân của vòng lặp (đây là mã sẽ được lặp lại) )

Việc khởi tạo biến cho phép bạn khai báo một biến và gán giá trị cho biến đó hoặc gán giá trị cho biến hiện có. Thứ hai, giá trị của biến này cho chương trình biết điều kiện vòng lặp là đúng hay sai. Và miễn là điều kiện của vòng lặp đúng thì vòng lặp sẽ tiếp tục lặp lại. Biến điều khiển phải được thay đổi bằng cách nào đó, nếu không vòng lặp sẽ vô tận, ví dụ: bạn có thể cập nhật nó như thế này: i++ , i = i + 2 hoặc thậm chí i = Random(5) . Xin lưu ý rằng mỗi phần trong tiêu đề vòng lặp được phân tách bằng dấu chấm phẩy, điều này rất quan trọng. Cũng lưu ý rằng mỗi phần có thể để trống, mặc dù dấu chấm phẩy vẫn còn đó. Nếu điều kiện không trống thì nó sẽ đánh giá là đúng và vòng lặp sẽ được thực thi cho đến khi có điều gì đó làm cho điều kiện vòng lặp thành sai. Hãy xem một ví dụ đơn giản về việc sử dụng vòng lặp for.

#bao gồm int main() ( int i; /* Vòng lặp sẽ chạy cho đến khi tôi< 10, при этом после каждой итерации переменная i будет инкрементироваться(увеличиваться на 1)*/ for (i = 0; i < 10; i++) { /* Имейте ввиду что условие проверяется перед каждым повторением, то есть работа цикла остановится когда переменная i будет равна 10*/ printf("%d\n", i); } getchar(); }

Thực tế, kết quả của chương trình:

0 1 2 3 4 5 6 7 8 9

Chương trình này là một ví dụ rất đơn giản về việc sử dụng vòng lặp. biến i được gán bằng 0 và khi i nhỏ hơn 10, giá trị của biến i được in trên màn hình, sau đó một biến được thêm vào biến i và mọi thứ được lặp lại cho đến khi điều kiện trở thành sai. Hãy nhớ rằng giá trị của biến i được tăng lên sau khi mã trong phần thân vòng lặp chạy lần đầu tiên.

Vòng lặp while là một vòng lặp rất đơn giản, đây là cấu trúc của nó:

While (/*condition*/) ( // phần thân của vòng lặp - đây là đoạn mã cần được lặp lại)

Phần thân vòng lặp bắt đầu thực thi nếu điều kiện vòng lặp đúng. Điều kiện là một biểu thức Boolean, chẳng hạn như x == 1 hoặc x! = 7 (x không bằng 7). Nghĩa là, điều kiện có thể hoàn toàn là bất cứ thứ gì - bất kỳ sự kết hợp nào của các biểu thức logic. Đây là một ví dụ về điều kiện ghép - x == 3 || x > 10 , điều kiện này sẽ đúng nếu x bằng ba hoặc x lớn hơn 10. Lưu ý rằng while có phần khởi tạo hoặc phần sửa đổi biến được điều khiển, vì vậy trước khi sử dụng vòng lặp này, trước tiên bạn cần khai báo biến đó sẽ được kiểm tra trong vòng lặp điều kiện và trong phần thân vòng lặp thay đổi giá trị của biến này. Thực ra, hãy xem một ví dụ đơn giản sử dụng vòng lặp while:

#bao gồm int main() ( int var = 0; /* hãy chắc chắn khai báo biến trước */ while (var< 10) { /* пока значение переменной var меньше 10 */ printf("%d\n", var); var++; /* обновляем значение в переменной var(если этого не делать, то условие цикла всегда будет истинным, тогда цикл будет - бесконечным) */ } getchar(); }

Vì vậy, chúng ta đã xem xét một ví dụ khác về việc sử dụng vòng lặp và như bạn có thể thấy, không có gì phức tạp trong ví dụ này. Chỉ cần tưởng tượng rằng vòng lặp luôn bắt đầu lặp lại đoạn mã nằm trong phần thân của vòng lặp. Ngay khi câu lệnh cuối cùng trong thân vòng lặp được thực thi, điều kiện của vòng lặp sẽ được kiểm tra. Nếu điều kiện vẫn đúng thì vòng lặp tiếp tục hoạt động, nếu điều kiện sai thì vòng lặp sẽ thoát.

Có một loại vòng lặp khác - do while. Vòng lặp này hữu ích khi bạn cần thực thi mã ít nhất - 1 lần. Hãy nhìn vào cấu trúc của nó:

Thực hiện ( // nội dung vòng lặp ) while (/*condition*/);

Cấu trúc rất đơn giản, như bạn có thể thấy, điều kiện nằm ở cuối vòng lặp và theo đó, điều kiện sẽ được kiểm tra sau khi mã trong thân vòng lặp được thực thi. Lưu ý rằng điều kiện được kiểm tra ở cuối vòng lặp chứ không phải ở đầu vòng lặp, do đó khối mã trong phần thân vòng lặp sẽ được thực thi ít nhất một lần. Nếu điều kiện đúng, vòng lặp sẽ nhảy trở lại điểm bắt đầu và thực hiện lại. Vòng lặp do while gần giống như vòng lặp while, ngoại trừ phần thân của vòng lặp được đảm bảo sẽ được thực thi ít nhất một lần. Vòng lặp while trước tiên kiểm tra điều kiện và sau đó thực thi khối mã trong phần thân vòng lặp, tất nhiên nếu điều kiện đúng, trong khi vòng lặp do while trước tiên thực thi mã trong phần thân vòng lặp rồi kiểm tra điều kiện, và nếu nó là đúng thì nó tiếp tục chạy. Một ví dụ về vòng lặp do while được hiển thị bên dưới:

#bao gồm int main() ( int i = 0; do ( /* In tin nhắn và thoát */ printf("Xin chào! Tôi đang thực hiện vòng lặp while\n"); ) while (i != 0); getchar() ; )

Lưu ý dấu chấm phẩy ở cuối vòng lặp, bạn nên đặt dấu chấm phẩy đó luôn như ví dụ trên. Rất thường xuyên không có dấu chấm phẩy này, dẫn đến lỗi biên dịch. Chỉ chu trình này kết thúc bằng dấu chấm phẩy; các chu trình còn lại không có gì ở cuối ngoại trừ dấu ngoặc đơn đóng. Lưu ý rằng trong ví dụ trên, vòng lặp này sẽ được thực thi một lần vì thông báo được in trước và sau đó điều kiện của vòng lặp được kiểm tra.

Để bắt đầu sử dụng vòng lặp, bạn cần biết chúng là gì, chúng có thể làm gì và tại sao chúng lại cần thiết trong các tập lệnh. Vòng lặp là một khối mã cho phép bạn lặp lại một số hành động (hướng dẫn) nhất định trong một số lần nhất định. Mỗi lần thực hiện riêng lẻ (một hoặc nhiều lần lặp lại) của một chuỗi lệnh trong vòng lặp được gọi là lần lặp.

Mỗi chu kỳ bao gồm hai phần chính. Việc đầu tiên xác định khi nào nên dừng thực hiện vòng lặp. Thứ hai là đoạn mã chương trình thực tế thực hiện các hành động cần thiết, có thể bao gồm một lệnh đơn hoặc một số lệnh được đặt trong dấu ngoặc nhọn.

Mã chương trình Vòng lặp thực hiện cho đến khi biểu thức điều kiện vòng lặp trả về TRUE. Để tránh vòng lặp vô hạn sẽ quay mãi mãi, mã trong thân vòng lặp phải khiến biểu thức điều kiện trả về FALSE tại một thời điểm nào đó. Khi điều này xảy ra, vòng lặp sẽ ngừng chạy và việc thực thi sẽ tiếp tục từ dòng mã ngay sau vòng lặp.

trong khi lặp lại

Vòng lặp while là loại vòng lặp đơn giản nhất trong PHP. Cú pháp của nó là:

Dưới đây là ví dụ về vòng lặp while có phần thân được thực thi 10 lần:

\n"; $num++; ) ?>

Trước khi vòng lặp bắt đầu, giá trị của biến $num được đặt thành 1 (giá trị có thể là bất kỳ). Điều này được gọi là khởi tạo một biến đếm. Mỗi lần phần thân của vòng lặp được thực thi, giá trị của biến $num sẽ tăng lên một đơn vị bằng cách sử dụng gia số $num++. Giá trị biểu thức ($num<= 10) проверяется каждый раз перед итерацией цикла. После десяти итераций условное выражение вернет значение FALSE (так как значение переменной $num уже будет не меньше или равно 10) и работа цикла прекратится. В том случае, если условное выражение while будет равно FALSE с самого начала, тело цикла ни разу не будут выполнено.

Hầu hết các vòng lặp đều có các biến đếm tương tự như $num . Thông thường, các biến có tên i, j và k đóng vai trò là bộ đếm vòng lặp, mặc dù để làm cho mã chương trình dễ hiểu hơn, bạn nên đặt cho bộ đếm nhiều tên mô tả hơn.

thực hiện vòng lặp while

Vòng lặp do while rất giống với vòng lặp while, ngoại trừ việc biểu thức điều kiện được kiểm tra ở cuối vòng lặp chứ không phải ở đầu vòng lặp. Cú pháp cho vòng lặp này là:

Có hai điểm khác biệt giữa vòng lặp do while và vòng lặp while thông thường. Đầu tiên, vòng lặp do while yêu cầu cả từ khóa do (để đánh dấu sự bắt đầu của vòng lặp) và từ khóa while (để đánh dấu sự kết thúc của vòng lặp và chỉ định một điều kiện). Thứ hai, không giống như vòng lặp while, vòng lặp do while kết thúc bằng dấu chấm phẩy. Loại vòng lặp này hữu ích khi phần thân của vòng lặp phải được thực thi ít nhất một lần, bất kể giá trị của biểu thức điều kiện là gì.

Hãy thử thực hiện các hành động tương tự như trong ví dụ trước:

\n"; $num++; ) trong khi ($num<= 10); ?>

Thông thường, khi lập trình các tác vụ, điều cần thiết là phải thực hiện cùng một chuỗi lệnh nhiều lần. Quá trình này được gọi là tuần hoàn. Một thuật toán trong đó trình tự cụ thể các lệnh lặp lại nhiều lần với dữ liệu đầu vào mới được gọi là tuần hoàn.

Để thực hiện quy trình tuần hoàn, ngôn ngữ lập trình sử dụng vòng lặp. Ngôn ngữ lập trình C/C++ có các toán tử vòng lặp dễ sử dụng.

2. Các loại toán tử vòng lặp trong C++

Có 3 loại toán tử vòng lặp trong C++:

  • vòng lặp for;
  • vòng lặp while với điều kiện tiên quyết;
  • vòng lặp do...while với hậu điều kiện.

Mỗi toán tử vòng lặp có các tính năng ứng dụng riêng. Bất kỳ câu lệnh vòng lặp nào ở trên đều có thể được thay thế bằng câu lệnh khác.

3. Vòng lặp For. Dạng tổng quát của câu lệnh vòng lặp for

Trong C++, vòng lặp for có thể được triển khai và ứng dụng rất rộng rãi. Vòng lặp for còn được gọi là vòng lặp có tham số.

Dạng tổng quát của câu lệnh vòng lặp for là:

vì ( khởi tạo ; sự biểu lộ ; sự phát triển ) { // ... }
  • khởi tạo – một thao tác gán để thiết lập giá trị ban đầu biến vòng lặp. Biến này là bộ đếm điều khiển hoạt động của vòng lặp. Số lượng biến kiểm soát vòng lặp for, có thể là hai hoặc nhiều hơn;
  • sự biểu lộ– biểu thức điều kiện kiểm tra giá trị của biến vòng lặp. Ở giai đoạn này, việc thực hiện tiếp theo của chu trình được xác định;
  • sự phát triển– xác định giá trị của biến vòng lặp sẽ thay đổi như thế nào sau mỗi lần lặp.

Vòng lặp for chạy cho đến khi giá trị sự biểu lộ bằng đúng. Ngay khi giá trị của biểu thức trở thành sai, vòng lặp sẽ dừng thực thi và câu lệnh theo sau vòng lặp for sẽ được thực thi.

4. Ví dụ về sử dụng toán tử vòng lặp for

Ví dụ 1. Tìm tổng của tất cả các số nguyên từ 100 đến 300.

// tổng các số từ 100 đến 300 tổng số nguyên; int tôi; tổng = 0; với (i = 100; tôi<=300; i++) sum = sum + i; // sum = 40200

Ví dụ 2. Cho một số tự nhiên N. Tính số tiền:

Một đoạn mã giải quyết vấn đề này.

// s = 1 + 1/2 + 1/3 + ... + 1/n int n; nổi s = 0; int tôi; // nhập giá trị n n = 4; với (i = 1; tôi<=n; i++) s = s + 1.0/i; // s = 2.08333

Trong ví dụ này, để lấy giá trị thực, thay vì nhập số 1 (kiểu số nguyên), số 1.0 (kiểu thực) được nhập. Hoạt động phân chia

mang lại một kết quả thực sự.

Ví dụ 3. Tính tổng

Một đoạn mã giải quyết vấn đề này.

phao s; int tôi; s = 0; for (i=50; i>=1; i--) s = i + Math::Sqrt(s); s = Toán::Sqrt(s); // s = 1,7579

Trong ví dụ này, giá trị bộ đếm Tôi trong vòng lặp for thay đổi theo thứ tự giảm dần. Giá trị này giảm đi 1 sau mỗi lần lặp của vòng lặp. Khi giải những bài toán như vậy, giá trị của bộ đếm vòng lặp phải thay đổi từ giá trị cuối cùng đến giá trị đầu tiên. Trong trường hợp này, từ 50 đến 1.

Các phép tính đã sử dụng hàm Sqrt() từ thư viện Math.

5. Có những lựa chọn nào để triển khai vòng lặp for?

Vòng lặp for có thể có một số cách triển khai. Số lượng biến điều khiển vòng lặp for có thể là một, hai hoặc nhiều hơn.

Vòng lặp for có thể thiếu bất kỳ phần tử tiêu đề vòng lặp nào:

  • khởi tạo;
  • sự biểu lộ;
  • sự phát triển.

Ví dụ một toán tử vòng lặp for có 2 biến điều khiển. Tìm ý nghĩa của sản phẩm:

D = (1 + cos(9)) (2 + cos(8)) … (9 + cos(1))

Một đoạn mã giải quyết vấn đề này.

// D = (1 + cos(9))*(2 + cos(8))* ... *(9 + cos(1)) int tôi, j; phao d; d = 1; với (i = 1, j = 9; i<=9; i++, j--) d = d * (i + Math::Cos(j));

Trong đoạn mã trên, vòng lặp for sử dụng hai biến thay đổi giá trị của chúng ( Tôi , j ).

6. Vòng lặp while. Hình thức chung

Vòng lặp while được gọi là vòng lặp tiền điều kiện. Dạng tổng quát của vòng lặp while như sau:

trong khi ( sự biểu lộ ) { // dãy các toán tử // ... }

Ở đâu sự biểu lộ– bất kỳ biểu thức hợp lệ nào trong C++. Chuỗi câu lệnh được thực hiện cho đến khi đạt điều kiện sự biểu lộ trả về đúng. Càng sớm càng sự biểu lộ trở thành bằng false, việc thực thi vòng lặp while bị chấm dứt và quyền điều khiển được chuyển sang câu lệnh tiếp theo sau vòng lặp while.

7. Ví dụ về sử dụng toán tử vòng lặp while

Ví dụ 1. Cho một số thực Một. Tìm số nhỏ nhất N, tại đó

Cân nhắc. Lúc đầu giá trị của tổng nhỏ hơn giá trị Một. Khi mỗi lần lặp trôi qua, giá trị của tổng sẽ tăng dần. Tại một thời điểm nào đó (tại một giá trị nào đó N) số tiền này sẽ trở nên cao hơn giá trị Một. Thời điểm này (có nghĩa là N) cần được sửa chữa. Tính toán N, vòng lặp while rất thuận tiện.

Một đoạn mã giải quyết vấn đề này.

thả nổi một; int n; số tiền thả nổi; // nhập giá trị a a = 2,2; n = 1; tổng = 1,0/n; trong khi (tổng< a) { n++; sum = sum + 1.0/n; } // n = 5; sum = 2.283334

Ví dụ 2. Một số tự nhiên được cho. Xác định số chữ số 3 trong đó.

Một đoạn mã giải quyết vấn đề này.

// số chữ số 3 trong số int n; // cho số tự nhiên int k; // số chữ số 3 trong số int t, d; // các biến bổ sung // nhập giá trị n n = 12343; t = n; // tạo một bản sao của n k = 0; trong khi (t>0) ( d = t % 10; // chọn chữ số cuối cùng nếu (d == 3) k++; t = t/10; // giảm độ sâu bit số) // k = 2

Trong ví dụ này, giá trị của số ban đầu sẽ được chia cho 10 ở mỗi lần lặp. Do đó, độ sâu bit của số sẽ giảm. Ở mỗi lần lặp, sử dụng phép toán % của ngôn ngữ C++, phần còn lại của phép chia cho 10 được lấy, tức là chữ số cuối cùng của số được xác định. Nếu chữ số này là 3 thì bộ đếm k được tăng thêm 1.

8. Dạng tổng quát của toán tử vòng lặp do…while

Nên sử dụng vòng lặp do...while trong trường hợp việc lặp lại cần được thực hiện ít nhất một lần. Không giống như vòng lặp for và while, trong vòng lặp do...while điều kiện được kiểm tra khi thoát khỏi vòng lặp (không phải khi vào vòng lặp). Vòng lặp do...while còn được gọi là vòng lặp hậu điều kiện.

Dạng tổng quát của câu lệnh vòng lặp do…while là:

LÀM ( // dãy các toán tử// ... ) trong khi ( sự biểu lộ );

Ở đâu sự biểu lộ– biểu thức điều kiện kiểm tra giá trị của biến vòng lặp. Ở giai đoạn này, việc thực hiện tiếp theo của chu trình được xác định.

Các dấu ngoặc nhọn trong vòng lặp này là tùy chọn.

Chu kỳ hoạt động như sau. Đầu tiên, phần thân của vòng lặp được thực thi. Sau đó giá trị được kiểm tra sự biểu lộ(biểu thức điều kiện). Nếu giá trị sự biểu lộ là true (true), phần thân của vòng lặp được thực thi lại. Một khi giá trị sự biểu lộ trở thành sai, quá trình thực thi vòng lặp dừng lại

9. Ví dụ về sử dụng toán tử vòng lặp do…while

Ví dụ. Sử dụng vòng lặp do…while, tìm giá trị của tổng:

S = 1 + 3 + … + 99

Một đoạn mã giải quyết vấn đề này.

// s = 1 + 3 + ... + 99 int t; int s; s = 0; t = 1; làm ( s = s + t; t = t + 2; ) trong khi (t<=99); // s = 2500
10. Các vòng lặp lồng nhau. Ví dụ về việc sử dụng

Các vòng lặp lồng nhau có thể được sử dụng, chẳng hạn như khi làm việc với mảng hai chiều (đa chiều) (về 0 một mảng, tính tổng, tích, v.v.).

Ví dụ 1. Tính toán sản phẩm

D = 1 · (1 + 2) · (1 + 2 + 3) · … · (1 + 2 + … + 9)

Một đoạn mã giải quyết vấn đề này.

// D = 1 * (1+2) * (1+2+3) * ... * (1+2+...+9) phao d; // kết quả là sản phẩm int tôi, j; // bộ đếm vòng lặp int s; // biến bổ sung d = 1; với (i = 1; tôi<=9; i++) { s = 0; for (j = 1; j<=i; j++) s = s + j; d = d * s; } // d = 2.571912E+09

Trong ví dụ này, trong vòng lặp for có bộ đếm Tôi chạy vòng lặp for với bộ đếm j .

Ví dụ 2. Cho một mảng hai chiều gồm các số nguyên có kích thước 6x9. Viết giá trị 5 cho tất cả các phần tử mảng.

int M; // mảng số nguyên hai chiều int tôi, j; với (i=0; tôi<6; i++) for (j=0; j<9; j++) M[i][j] = 5;
11. Vòng lặp vô tận là gì?

Vòng lặp vô hạn là vòng lặp không bao giờ kết thúc.

Khi lập trình các quy trình tuần hoàn, người lập trình có thể viết nhầm mã vòng lặp không bao giờ kết thúc.

Ngoài ra, đôi khi bạn muốn các vòng lặp chứa mã kết thúc đặc biệt bằng cách sử dụng câu lệnh break.

Ví dụ 1. Vòng lặp vô hạn với câu lệnh for:

vì (; ;) ( // dãy các toán tử C++. Tuyên bố lựa chọn chuyển đổi

Một trong những công cụ quan trọng nhất trong lập trình là vòng lặp. Chúng rất hữu ích trong trường hợp bạn cần làm điều gì đó một số lần nhất định.

Ví dụ: nếu có một nhiệm vụ như vậy, hãy hiển thị dòng “xin chào mọi người” 1000 lần. Sau đó, nếu không sử dụng vòng lặp, thứ nhất sẽ mất rất nhiều thời gian và thứ hai, nó trông sẽ không đẹp cho lắm. Đó là lý do tại sao bạn cần phải biết chu kỳ một cách hoàn hảo bởi vì chúng được sử dụng rất, rất thường xuyên.

Có bốn vòng lặp trong lập trình, đây là while, do-while, for và foreach. Mỗi cái đều có cú pháp riêng và mỗi cái được sử dụng trong một số trường hợp nhất định.

Các vòng lặp được sử dụng phổ biến nhất là for và foreach, tiếp theo là while và vòng lặp do-while rất hiếm.

Và chúng ta sẽ bắt đầu với vòng lặp while.

Cú pháp của vòng lặp while như sau:


Đầu tiên, chúng ta khai báo biến i, là một bộ đếm, và bên trong vòng lặp, chúng ta tăng bộ đếm này. Trong ngoặc đơn chúng ta viết điều kiện vào/ra vòng lặp.

Bình luận! Viết chính xác điều kiện thoát, nếu không có thể xảy ra một vòng lặp vô hạn và sau đó tập lệnh sẽ bị treo. Một chu trình như vậy có thể xảy ra nếu, ví dụ, chúng ta chỉ cần viết true trong điều kiện thoát.

Ví dụ: hãy in chuỗi "Xin chào mọi người!" 10 lần.

Var i = 0; while(i "); i++; )

Biến i có thể bắt đầu từ 0 hoặc 1 hoặc từ bất kỳ số nào khác.

Điều kiện thoát đồng thời là điều kiện vào. Vòng lặp hoạt động như sau: Đầu tiên, nó kiểm tra xem biến i có nhỏ hơn 10 hay không và nếu điều kiện đúng thì chúng ta vào vòng lặp, nếu không thì không. Trong trường hợp này, nếu biến i bằng 30 chẳng hạn thì vòng lặp sẽ không thực thi, vì 30 không nhỏ hơn 10.

Chúng ta bước vào chu trình, in dòng “Xin chào mọi người”, tăng bộ đếm và quay lại điều kiện, trong đó chúng ta kiểm tra lại xem giá trị của biến i có nhỏ hơn 10 hay không, sau đó chúng ta vào chu trình, nếu không thì chúng ta thoát khỏi nó. Và điều này xảy ra cho đến thời điểm điều kiện đầu vào trở thành sai, tức là giá trị của biến i sẽ là 10. 10 không nhỏ hơn 10 nên chúng ta không vào vòng lặp nữa mà đi tiếp.

Bình luận! Đừng quên tăng bộ đếm (i++), nếu không bạn sẽ gặp phải một vòng lặp vô hạn.

Chúng ta đã giải quyết xong vòng lặp while, bây giờ hãy chuyển sang vòng lặp do-while.

Cú pháp của vòng lặp do-while như sau:


Sự khác biệt giữa vòng lặp while và vòng lặp do-while là vòng lặp do-while có thể được thực thi ít nhất một lần, bất kể điều kiện, trong khi vòng lặp while sẽ không được thực thi nếu điều kiện sai.

Bình luận! Giống như vòng lặp while, đừng quên tăng bộ đếm i.

Hãy chuyển sang thực hành. Ví dụ: hãy tính tích của các số từ 1 đến 10.

Var i = 1; sản xuất var = 1; do( production *= i; i++; )while(i

Kết quả sẽ là số 3628800. Ở bước đầu tiên, chúng ta ngay lập tức bước vào vòng lặp, bất chấp điều kiện của nó, nơi hoạt động production *= i được thực hiện (điều này giống như production = production * 1). Sau đó chúng ta tăng bộ đếm. Sau khi tăng, nó có giá trị là 2. Và cuối cùng chúng ta kiểm tra điều kiện, nếu giá trị bộ đếm nhỏ hơn hoặc bằng 10 thì chúng ta chuyển sang lần lặp tiếp theo của vòng lặp, nếu không thì chúng ta thoát khỏi vòng lặp và đi tiếp. .

vòng lặp for

Như mình đã viết ở trên, vòng lặp for xảy ra khá thường xuyên nên bạn cần phải biết rõ về nó.

cú pháp vòng lặp for Kế tiếp:


Để hiểu rõ hơn, hãy giải quyết một vấn đề đơn giản. Giả sử chúng ta cần tính tổng các số từ 1 đến 1000 bằng vòng lặp for.

Tổng hợp = 0; for(var i = 1; i

Chúng ta lưu tài liệu, mở trên trình duyệt và thấy kết quả là 500500.

Bình luận! Nếu chỉ có một câu lệnh trong vòng lặp thì không cần thiết phải có dấu ngoặc nhọn.

Để chứng minh, hãy hiển thị một số chuỗi trên màn hình 5 lần, ví dụ “Xin chào!”

For(var i = 1; i

Bình luận! Sau khi vòng lặp được thực thi, giá trị cuối cùng vẫn còn ở biến i.

Bây giờ hãy giải quyết vấn đề phức tạp hơn một chút, ví dụ chúng ta cần in chuỗi "Xin chào" 100 lần. Và để tất cả những thứ này không xuất hiện trong một hàng, thì sau mỗi lần lặp thứ 10, chúng ta sẽ chuyển sang một dòng mới. Và cuối cùng chúng ta sẽ in ra giá trị của biến i.

For(var i = 1; i<= 100; i++){ document.write("привет!"); if(i % 10 == 0)  document.write("
"); ) document.write("

Biến i = " + i + "

"); // tôi = 101

vòng lặp foreach Thường được sử dụng để lặp qua các đối tượng và mảng. Vì vậy, tôi sẽ nói về nó trong bài viết mô tả cách làm việc với mảng.

tuyên bố phá vỡ nhằm mục đích thoát khỏi vòng lặp một cách mạnh mẽ.

Tiếp tục toán tử cho phép bạn ngắt vòng lặp hiện tại và chuyển sang vòng lặp tiếp theo.

Để hiểu rõ hơn, chúng ta cũng sẽ giải một bài toán đơn giản. Giả sử chúng ta muốn tính tổng các số lẻ từ 1 đến 20. Và khi đến lần lặp thứ 15, chúng ta sẽ thoát khỏi vòng lặp.

Tổng hợp = 0; for(var i = 1; i<= 20; i++){ //Пропускаем текущею итерацию цикла if(i % 2 == 0) continue; summa += i; //Выходим совсем из цикла. if(i == 15) break; document.write(i + ". Итерация
"); ) document.write("

tổng hợp= " + tổng hợp + "

"); //tổng ​​= 64

Chúng tôi lưu tài liệu, mở nó trong trình duyệt và xem kết quả.

Để thực hành, hãy thử thay đổi chữ viết để tính tổng các số chẵn.

Điều này kết thúc bài viết này. Bây giờ bạn biết Cú pháp của vòng lặp while, do-while, for và cách làm việc với chúng. Chúng tôi cũng đã gặp câu lệnh ngắt và tiếp tục.