루프 중에 실행

Do while loop
루프 플로우 다이어그램 동안 실행

대부분의 컴퓨터 프로그래밍 언어에서 do while 루프는 코드 블록을 적어도 한 번 실행한 후 블록의 에 주어진 부울 조건에 따라 블록을 반복 실행하거나 실행을 중지하는 제어 흐름문입니다.

do while construction은 프로세스 기호와 조건으로 구성됩니다.우선, 블록내의 코드를 실행해, 조건을 평가한다.조건이 참일 경우 블록 내의 코드가 다시 실행됩니다.이 상태는 상태가 false가 될 때까지 반복됩니다.루프가 블록을 실행한 후 상태를 체크하는 동안 제어 구조는 종종 사후 테스트 루프라고도 합니다.블록 내의 코드가 실행되기 전의 상태를 테스트하는 while 루프와는 대조적으로 do-while 루프는 출구 조건 루프입니다.즉, 코드를 항상 먼저 실행하고 식 또는 테스트 조건을 평가해야 합니다.true일 경우 코드는 루프 본문을 다시 실행합니다.식이 true로 평가되는 한 이 프로세스는 반복됩니다.식이 false일 경우 루프는 종료되고 제어는 do-while 루프에 이어 스테이트먼트로 전송됩니다.즉, 스테이트먼트의 진위를 코드의 실행의 조건 선행으로서 설정하는 한편, do-while 루프는, 그 조건의 부정의 진위(false)에 의해 무효가 되는 동작의 계속적인 실행을 조건으로 한다.

조건이 항상 true로 평가되어 무한 루프가 생성될 수 있으며 경우에 따라서는 바람직한 경우도 있습니다.이러한 루프가 의도적으로 작성되면 일반적으로 루프의 종료를 허용하는 다른 제어 구조(브레이크 스테이트먼트 등)가 존재합니다.

언어에 따라 이 루프 유형에 따라 다른 명명 규칙을 사용할 수 있습니다.예를 들어 Pascal 언어 Lua 언어에는 제어식이 참일 때까지(그 후 종료될 때까지) 반복 루프가 있는 반면, "while" 루프는 제어식이 참일 때(그리고 식이 거짓이 되면 종료됨) 계속 실행됩니다.

동등한 구성

하다 {     작업();   } 하는 동안에 (조건.); 

와 동등하다

작업();  하는 동안에 (조건.) {     작업(); } 

이렇게 하면 do는...한편, loop은 초기 "루프 프라이밍"을 저장합니다.do_work();앞줄에 서서while고리.

continue 문을 사용하지 않는 한 위의 예는 기술적으로 다음과 같습니다(이러한 예는 일상적인 컴퓨터에서 사용되는 일반적인 스타일이나 현대적인 스타일이 아닙니다).

하는 동안에 (진실의) {    작업();    한다면 (!조건.) 브레이크.; } 

또는

루프 스타트:     작업();     한다면 (조건.) 에 가다 루프 스타트; 

루프 중 실행 시연

이 예제 프로그램에서는 do-while 루프에 대한 각 언어의 구문을 사용하여 5의 계수를 계산합니다.

액션 스크립트 3

변화하다 계산대: 인트 = 5; 변화하다 요인: 인트 = 1;  하다 {     요인 *= 계산대--; /* 곱한 다음 감소합니다.*/ } 하는 동안에 (계산대 > 0);  추적하다(요인); 

아다

와 함께 Ada.Integer_텍스트_IO;  절차. 요인      계산대   : 정수 := 5;     요인 : 정수 := 1; 시작한다.     고리         요인 := 요인 * 계산대;         계산대   := 계산대 - 1;         퇴장 언제 계산대 = 0;     끝. 고리;      아다.정수_텍스트_IO.놓다 (요인); 끝. 요인; 

기본의

초기 BASIC(GW-BASIC 등)에서는 WHIREN/WEND 구문을 사용했습니다.PowerB 등 최신 베이직ASIC은 DO WHI/WEND 및 DO/LOAP 구조를 모두 제공하며 DO WHILE/LOAP, DO/LOAP WHILE, DO/LOAP 등의 구문을 사용합니다(외부 테스트 없이 조건부 EX 포함).IT루프 내부 어딘가에 있습니다).일반적인 기본 소스 코드:

어둡다 요인 ~하듯이 정수 어둡다 계산대 ~하듯이 정수  요인 = 1 계산대 = 5  하다      요인 = 요인 * 계산대     계산대 = 계산대 - 1 고리 하는 동안에 계산대 > 0  인쇄 요인 

C#

인트 계산대 = 5; 인트 요인 = 1;  하다 {     요인 *= 계산대--; /* 곱한 다음 감소합니다.*/ } 하는 동안에 (계산대 > 0);  시스템..콘솔.기입선(요인); 

C

인트 계산대 = 5; 인트 요인 = 1;  하다 {     요인 *= 계산대--; /* 곱한 다음 감소합니다.*/ } 하는 동안에 (계산대 > 0);  인쇄물("5의 제곱은 %d입니다.\n", 요인); 

do-while(0) 스테이트먼트는 여러 스테이트먼트를 (복수가 아닌) 일반 스테이트먼트로 정리하는 방법으로 C 매크로에서도 일반적으로 사용됩니다.매크로 뒤에 필요한 세미콜론을 만듭니다.심플한 파서 및 프로그래머에게 보다 기능적인 외관을 제공할 뿐만 아니라 스코핑 문제를 회피할 수 있습니다.ifCERT C 코딩 표준 규칙 PRE10-C에서 [1]권장됩니다.

C++

인트 계산대 = 5; 인트 요인 = 1;  하다 {     요인 *= 계산대--; } 하는 동안에 (계산대 > 0);  표준::외치다 << > "5의 제곱은"<< > 요인 << > 표준::; 

CFScript

요인 = 1; 세어보세요 = 10;  하다 {     요인 *= 세어보세요--; } 하는 동안에 (세어보세요 > 1);  기입 출력(요인); 

D

인트 계산대 = 5; 인트 요인 = 1;  하다 {     요인 *= 계산대--; // 곱한 다음 감소합니다. } 하는 동안에 (계산대 > 0);  기입하다("5의 제곱은", 요인); 

포트란

기존 FORTRAN 77에서는 DO-WHILE 구조가 없지만 GOTO에서도 동일한 효과를 얻을 수 있습니다.

      정수CNT,사실       CNT=5       사실=1     1 계속하다.       사실=사실*CNT       CNT=CNT-1       한다면 (CNT.GT.0) 에 가다1       인쇄하다*,사실       끝. 

Fortran 90 이후에는 do-while 컨스트럭트도 없지만 키워드 do while을 사용하는 while 루프 컨스트럭트가 있기 때문에 실제로 for [2]루프와 동일합니다.

프로그램.요인 프로그램     정수 :: 계산대 = 5     정수 :: 요인 = 1          요인 = 요인 * 계산대     계산대 = 계산대 - 1          을 하다 (계산대 > 0) ! True 값은 루프 전에 테스트됩니다.         요인 = 요인 * 계산대         계산대 = 계산대 - 1     end do를 하다      인쇄물 *, 요인 종료 프로그램요인 프로그램 

자바

인트 계산대 = 5; 인트 요인 = 1;  하다 {     요인 *= 계산대--; /* 곱한 다음 감소합니다.*/ } 하는 동안에 (계산대 > 0);  시스템..나가..인쇄("5의 계승은" + 요인);  //============================================// // 아래 기능은 위와 동일하게 작동합니다.// //============================================//  인트 계산대 = 5; 인트 요인 = 1;  하는 동안에 (계산대 > 0){     요인 *= 계산대--; /* 곱한 다음 감소합니다.*/ }  시스템..나가..인쇄("5의 계승은" + 요인); 

자바스크립트

허락하다 계산대 = 5; // 카운터 및 요인 두 변수 선언 허락하다 요인 = 1;   하다 {     요인 *= 계산대--; //루프 대상 } 하는 동안에 (계산대 > 0); //루핑 조건  콘솔.로그.(요인); //결과 표시 

[3]

코틀린

변화하다 계산대 = 5 변화하다 요인 = 1 //이러한 코드 행은 위의 JavaScript 코드와 거의 동일하며, 유일한 차이점은 결과를 보여주는 키워드입니다. 하다 {     요인 *= 계산대-- } 하는 동안에 (계산대 > 0)  인쇄("5의 팩토리얼은$요인") 

[4]

파스칼

Pascal에는 do/while이 없고 repeat/until이 있습니다.도입부에서 설명한 바와 같이 반복/끝까지를 표현식이 아닌 실행 코드와 동등하다고 생각할 수 있습니다.

요인 := 1; 계산대 := 5; 따라하다    요인 := 요인 * 계산대;    계산대 := 계산대 - 1; // 오브젝트 파스칼에서는 dec(카운터)를 사용할 수 있습니다. 까지 계산대 = 0; 

PHP

$카운터 = 5; $140 = 1;  하다 {     $140 *= $카운터--; } 하는 동안에 ($카운터 > 0);  메아리치다 $140; 

PL/I

PL/IDO 문에는 테스트루프(까지 실행), 테스트 전 루프(while 실행) 및 for 루프의 기능이 포함됩니다.모든 함수는 하나의 문에 포함할 수 있습니다.이 예에서는 "do to" 구문만 보여 줍니다.

계수기 고정 이니셜(5), 요인 고정 이니셜(1)을 선언하고, (계수 <= 0), 요인 = 요인 * 계수기, 계수기 = 계수기 - 1; 끝; put(계수)을 선언합니다.

파이썬

Python에는 흐름 제어 구성 중에 특정 do가 없습니다.단, 동등한 것은 브레이크가 있는 while loop으로 구성할 수 있습니다.

계산대 = 5 요인 = 1  하는 동안에 진실의:     요인 *= 계산대     계산대 -= 1          한다면 계산대 == 0:         브레이크.      인쇄물(요인) 

라켓

다른 스킴 구현과 마찬가지로 Racket에서는 "named-let"이 루프를 구현하기 위한 일반적인 방법입니다.

#실패하다라켓 (정의하다 계산대 5) (정의하다 요인 1) (허락하다 고리 ()     (세트! 요인 (* 요인 계산대))     (세트! 계산대 (서브1 계산대))     (언제 (> 계산대 0) (고리))) (표시 요인) 

이것을 Racket의 while loop의 첫 번째 예시와 비교합니다.이름 있는 let도 인수를 사용할 수 있다는 점에 유의하십시오.

라켓과 스킴은 적절한 도루프도 제공합니다.

(정의하다(요인 n)     (하다((계산대 n (-계산대 1))         (결과 1 (*결과 계산대)))     ((=계산대 0) 결과) ; 조건을 정지하고 값을 반환합니다.     ; do-loop 본문이 비어 있습니다.     )) 

루비

계산대 = 10 요인 = 2  시작한다.   요인 *= 계산대   계산대 -= 2 끝. 하는 동안에 계산대 > 1  놓다 요인 

스몰토크

  카운터 요인 카운터 := 5. 요인 := 1. [counter > 0]인 동안참: [:= 요인 * 카운터. 카운터:= 카운터 - 1]스크립트 표시: factor printString

재빠르다

Swift 2.x 이후:[5]

변화하다 계산대 = 5 변화하다 요인 = 1  따라하다 {     요인 *= 계산대     계산대 -= 1 } 하는 동안에 계산대 > 0  인쇄물(요인) 

Swift 1.x:

변화하다 계산대 = 5 변화하다 요인 = 1  하다 {     요인 *= 계산대     계산대 -= 1 } 하는 동안에 계산대 > 0  인쇄(요인) 

Visual Basic.그물

어둡다 계산대 ~하듯이 정수 = 5 어둡다 요인 ~하듯이 정수 = 1  하다     요인 *= 계산대     계산대 -= 1  고리 하는 동안에 계산대 > 0  콘솔.기입선(요인) 

「 」를 참조해 주세요.

레퍼런스

  1. ^ "C multi-line macro: do/while(0) vs scope block". Stack Overflow.
  2. ^ "Microsoft visual basic". msdn.microsoft.com. Retrieved 21 January 2016.
  3. ^ "do...while". MDN Web Docs.
  4. ^ "Control Flow: if, when, for, while - Kotlin Programming Language". Kotlin.
  5. ^ "Control Flow — The Swift Programming Language (Swift 5.3)". docs.swift.org.

외부 링크