while 문은 C#의 반복문이다.

 

구조로 따지면 아래와 같이 돌아간다. 조건이 있고 참이면 반복 거짓이면 종료. 반복문은 크게 while 과 for문으로 나눠진다. while 은 특정 조건을 유지하는 동안 돌아가는 방식으로 사용하고, for 문은 반복횟수가 주어지는 곳에 사용된다. 그러나 코드 작성에 꼭 정해진 방식이 있는 것은 아니다.

 

while문

while 문

 

가장 기본적인 방법은 카운터를 설정하고 while의 조건식을 돌리는 방법이다. 정수형 변수로 카운트를 0부터 9까지 돌려본다.

using System;

namespace CSharpBasic
{
    class Program
    {
        static void Main(string[] args)
        {
            int count = 0;

            while (count < 10)
            {
                Console.WriteLine(count);
                count++;
            }
        }
    }
}

카운터

0부터 시작하는 것에 의아해 할 수도 있다. 컴퓨터의 시스템이 사람의 수체계와 다른 것은 0을 인식하는 것에 있다. 0과 1만 인식하는 PC는 0이 하나의 저장소나 기준이 된다. 메모리 주소도 xxxx 0000번지 부터 시작한다.

 

사람은 보통 0번지 같은 것을 주소로 잘 사용하지 않는다.

 

0부터 9까지를 10번의 loop 로 인식하는 것은 기계와의 인식차이를 줄일 수 있게 해주는 하나의 생각이다.

 

카운터를 그대로 사용하면서  1부터 10까지 더하려면 아래와 같은 코드를 사용한다

        static void Main(string[] args)
        {
            int count = 0;
            int sum = 0;

            while(count < 10)
            {
                count++;
                sum += count;
            }
            Console.WriteLine(sum);
        }

count++ 는 스스로 1 증가한 값을 저장하는 단항연산자이다. 즉 첫 루프에 0으로 들어와서 바로 1로 바뀐다. sum에는 1이 저장된다.

 

a += b;

 

이 표현식은 a = a + b 와 같다. 코드를 줄여서 사용했을 뿐 똑같은 의미다.

 

while 문의 조건식이 count == 10 에 도달하면 false를 리턴받는다. while문은 더 이상 루프하지 않고 괄호밖으로 종료하여 Console.WriteLine 이 실행되게 된다.

 

결과값 : 55

 

1부터 10까지 더하면 55이다. 이것은 암산으로도 풀 수있는 문제긴 하다.

 

     1  2  3  4  5  6  7  8  9 10

  + 10  9  8  7  6  5  4  3  2  1
  --------------------------------
    11 11 11 11 11 11 11 11 11 11 
    
    11 * 10 / 2 = 55 혹은
    11 * 5 = 55

 

*while 루프 동안 일어나는 일

- 짧은 시간동안 많은 일이 일어난다. while 루프에 머리가 복잡해서 정리가 안되면 한번쯤 이렇게 정리해보는 것도 도움이 된다.

count count++ while(count<10) sum
0 1 True 1
1 2 True 3
2 3 True 6
3 4 True 10
4 5 True 15
5 6 True 21
6 7 True 28
7 8 True 36
8 9 True 45
9 10 False 55

 

C#에서 while 문의 실력을 보려고 1부터 10억까지 더하기를 한다. 측정하기 위해 Stopwatch 클래스를 사용한다. 측정단위인 밀리초는 1000분의 1초이다. 1000 밀리초가 1초다.

 

컴퓨터의 내부에서 저 위의 과정 10억번을 통과해야 하는 일이다.

 

using System;
using System.Diagnostics;

namespace CSharpBasic
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch st1 = new Stopwatch();
            st1.Start();

            long count = 0;
            long sum = 0;

            while(count < 1_000_000_000)
            {
                count++;
                sum += count;
            }
            st1.Stop();
            long ms1 = st1.ElapsedMilliseconds;

            Console.WriteLine($"while 문을 {count}회 반복하여 누산할 시 실행시간 : " +
                              $"{ms1} 밀리초");
            Console.WriteLine($"누산한 값: {sum}");
        }
    }
} 

C# Whlie 문 10억까지 누산하기

 

파이썬 1억까지 누산

 

*동일 PC로 1억까지 23초 걸리고 정확도가 떨어졌던 것에 비하면 역시 C의 계승자 C#이 월등하다. 단순 비교로 100배 정도 빠른 것 같다. 다만 자료형이 커지면 스피드는 더 떨어질수가 있다. 큰수를 다루는 일과 작은 수를 다루는 일은 또 차이가 난다.

 

파이썬 코딩 2-3 | 제어문 | while문

while로 유명한 영어문장이 많이 있다. 산드라 블록 주연의 while you were sleeping 이란 클래식 영화가 있다. While you were sleeping Trailer while you were sleeping classic trailer 당시 한글로는 당신이..

digiconfactory.tistory.com

 

do while 문

 

do while 문은 문법의 형식에 대한 차이다. do 한번은 실행한다. 단지 그 차이를 명시한 것이다.

 

        static void Main(string[] args)
        {
            int count = 10;

            do
            {
                Console.WriteLine(count);
                count++;
            } while (count < 10);
        }

이 예제는 시작도 전에 이미 조건문이 false 가 되어있다. 그래도 한번 do 한다는 것이다. 한번은 실행해야할 블록이 있을 때 사용한다. 문법의 마지막에 ; 세마이콜론을 찍는 것에 주의한다.

while break문

  static void Main(string[] args)
        {
            int num = 0;
            int sum = 0;

            while(num < 30)
            {
                num++;
                sum += num;
                if (num % 10 == 0) break;
            }
            Console.WriteLine(sum);
        }

while문의 또다른 종료법이다. while문 내에서 특정 조건에 도달하면 while문 자체를 종료한다. 위 코드의 결과값은 55이다. num 카운터가 10이 되었을 때 종료한다. 이런 식으로 사용하는 것 보다는 보통 GUI 프로그램에서 이벤트 리스닝을 받고 종료해야 한는 앱들에게 사용된다.

 

그 밖에 온도나 속도가 얼마 이상 도달할 때 종료시킨다던지, 다양한 상황에 응용할 수 있다.

 

while continue문

continue 문을 만나면 종료하지 않고 다시 조건식으로 돌아간다. continue 다음에 있는 코드블록의 부분은 실행되지 않기때문에 다른 방식으로 프로그램의 흐름을 제어할 수 있다.

 

아래 예제는 1부터 20까지 홀수만 더하는 예제이다. 1부터 20까지 홀수의 합계가 100이 된다는 것을 처음 알았다 ㅎㄷㄷㄷ;;

        static void Main(string[] args)
        {
            int num = 0;
            int sum = 0;

            while(num < 20)
            {
                num++;
                if (num % 2 == 0) continue;
                sum += num;
                Console.WriteLine("홀수 : " + num);
            }
            Console.WriteLine("합계 : " + sum);
        }

 

홀수 덧셈

 

       1  3  5  7  9 11 13 15 17 19
    + 19 17 15 13 11  9  7  5  3  1
   ----------------------------------
      20 20 20 20 20 20 20 20 20 20
      
   * 20 * 10 / 2 = 100
    

 

공유하기

facebook twitter kakaoTalk kakaostory naver band