while 반복문에 이어 for 반복문이다. 반복문은 이 두개를 능숙하게 사용할 수 있다면 충분하다.

 

for문의 경우 생각보다 능숙해지는데 시간이 걸릴 수도 있다. while 보다 형태가 조금 복잡하기 때문이다. 그러나 원리를 이해하게 되면 매일매일 쓰게 될 것이다. for문은 적은 코드로도 복잡한 알고리즘을 구현할 수 있게 해준다.

 

아래 그림은 for문의 독장하는 과정을 표현하고 있다.

 

(Fundamentals of Computer Programming with CSharp 발췌: free license 웹사이트는 포스팅 마지막에 표시)

for 흐름도

A는 int i 초기화를 한다. B의 조건식을 검사한 후, true 참이면 D의 코드블록을 실행시킨다. 마지막 문장에서 C를 실행시킨다. (카운터의 증감) 다시 B로 돌아가서 조건식을 검사한다.  참이면 반복하고 거짓 false 이면 for 반복문을 마친다.

기본 for루프

 

* 좀 더 간단한 예제로 들여다보자. for문의 처리되는 과정을 하나씩 들여다보는게 개념을 잡는데 도움이 된다.

using System;

namespace CSharpBasic
{
    class Program
    {
        static void Main(string[] args)
        {
            for(int i = 0; i < 5; i++)
            {
                Console.WriteLine("Hello, Sir!");
            }
        }
    }
} 

특히 카운터가 0에서 시작하고 반복횟수는 n-1 의 식을 사용하기 때문에 직관적이지 않다. 시작점과 종료점이 헷갈릴 때는 아래 처럼 직접 for문을 세어보면 이해가 빠르다. 0에서 5에 불과한 구간이지만 0에서 1000이건, 0에서 10억이건 원리는 똑같다.

i i < 5 code
0 true Hello, Sir!
1 true Hello, Sir!
2 true Hello, Sir!
3 true Hello, Sir!
4 true Hello, Sir!
5 false  

 

중첩 for 루프 (nested for loop)

기본 for 루프를 이해한 후에는 중첩 for 루프를 본다.

 

using System;

namespace CSharpBasic
{
    class Program
    {
        static void Main(string[] args)
        {
            for(int i = 0; i < 3; i++)
            {
                for(int j=0; j < 2; j++)
                {                
                    Console.WriteLine("Hello, Sir!");
                }
            }
        }
    }
} 

i 가 0,1,2 에서 3번, j가 0,1에서 2번 루프했다는 것은 총 6번 실행했다는 것이다.

 

*인덱스를 대입하여 출력해보면 더 자세히 알 수 있다.

        static void Main(string[] args)
        {
            for(int i = 2; i < 4; i++)
            {
                for (int j = 1; j < 7; j++)
                {
                    Console.WriteLine($"{i} x {j} = {i*j}");
                }
            }
        }

 

바깥의 루프는 2에서 (4-1)까지 2번 돌고 안쪽의 루프는 1에서(7-1)까지 6번 돈다.

 

실행 결과는 아래 도표 처럼 볼 수 있다. i는 j 의 실행이 다 끝날 때까지 기다린다. i의 사이클과 j의 사이클은 다르다.

i j i * j
2 1 2
2 4
3 6
4 8
5 10
6 12
3 1 3
2 6
3 9
4 12
5 15
6 18

 

for 문의 continue문 break 문

continue와 break문은 while 포스팅에서 다루었다. 기본적인 기능은 똑같다. if문의 어떤 조건을 통과하면 통과하거나 continue 종료한다 break. Console.Readline 메소드는 키보드 입력을 받는다. 이때 받는 데이터를 인티저(정수형)로 변경하기 위해서 스태틱 메소드 int.Parse을 사용한다. (int32 구조체)

 

        static void Main(string[] args)
        {
            int num = int.Parse(Console.ReadLine());

            int sum = 0;
            for (int i = 1; i <= num; i += 2)
            {
                if (i % 2 == 0)
                {
                    continue; // break 문을 넣으면 for문을 종료한다.
                }
                sum += i;
            }
            Console.WriteLine("sum = " + sum);
        }

 

짝수인 경우에는 누산을 통과한다. => 홀수만 합산한다.

 

40까지 홀수의 합

 

foreach 문

foreach 문은 for문의 확장판이다. C#의 이런 방식은 Visual Basic 에서 영향을 받았으나 python java 등 다른 언어에도 있는 개념이다. collection 이나 iterable 같은 자료형들에 있는 요소들의 수만큼 반복하면서 그 저장된 내용을 가져온다. 인덱스가 없는 자료형도 가져올 수 있다.

 

            int[] score = { 80, 62, 76, 77, 55 };
            
            foreach(int a in score)
            {
                Console.WriteLine(a);
            }
            
            string[] fruit = { "apple", "orange", "kiwi", "banana", "mango" };
            
            foreach (var item in fruit)
            {
                Console.WriteLine(item);
            }

문법을 보면 자료형의 안에 있는 in 값들을 가져와서 변수에 대입한다.

 

var 처럼 형태가 정해지지 않은 자료형으로도 사용이 가능하다.

 

foreach

for문은 응용하는 것이 중요하다. 반복문은 인간의 한계를 넘어선 연산을 할 수 있게 해주는 도구이다.

https://introprogramming.info/

 

Introduction to Programming with C# / Java Books

Книгата “Въведение в програмирането с Java” е безплатно ръководство по програмиране на Java с уроци, задачи за упражнения и насоки за решения.

introprogramming.info

 

공유하기

facebook twitter kakaoTalk kakaostory naver band