반응형

printf("Welcome, Let's C Language.");  // 초등학생도 쉽게 이해시켜주는 C언어 글을 포스팅합니다.

 

안녕하세요. 비전공자 출신 SW Test 엔지니어 Crush on Study입니다. 

이번 글에서는 조건에 따라 다른 화면을 출력시킬 수 있도록 해주는 '조건문'에 대해 배워보겠습니다.

 

Q. 먼저 이전 시간에 배운 내용을 잠깐 복습해봅시다.

A. 1) 조건문 if / else / else if에 대해 배웠습니다.

- 프로그램이 어떤 특정 트리거에 의해서만 수행되는걸 원할 때 우리는 조건문을 통해 구현하기로 했습니다. if와 else if는 선언할 때, 옆에 조건식을 함께 적어준 다음  조건이 맞을 때, 수행할 구문을 아래 적어놔주었습니다. else는 '이 밖의 모든 것' 이라는 의미로 if와 else if에서 지정한 조건 이외의 모든 경우에 해당할 때  수행할 구문을 적어줍니다.

따라서, else는 조건식을 따로 적지 않는다고 배웠습니다.

 

2) 논리 연산자에 대해 배웠습니다.

- 조건문을 구현하고자 할 때, 항상 따라붙는 연산자들입니다. == 는 동치를 !=는 불일치를 &&는 AND를 ||는 OR을 의미합니다. 추가로 산술 연산자 중에서도 조금 생소한 개념인 %에 대해 배웠습니다. %는 나눗셈을 할 때, 몫이 아닌 나머지 값만을 출력하고자 할 때 사용합니다. 보통 %은 홀수,짝수를 구분하고자 할 때 자주 사용합니다.

 

딱 보고 기억 나는게 없다. 하면 바로 이 전글을 참고하세요.

https://crush-on-study.tistory.com/209

 

[C언어] #3. 조건문 if , else if , else / 논리 연산자

printf("Welcome, Let's C Language."); // 초등학생도 쉽게 이해시켜주는 C언어 글을 포스팅합니다. 안녕하세요. 비전공자 출신 SW Test 엔지니어 Crush on Study입니다. 이번 글에서는 조건에 따라 다른 화면을..

crush-on-study.tistory.com

3중 for 반복문

// # 4. 반복문 강의입니다.

#include <stdio.h>

int main()
{
    int x,y,z;

    for (x=1; x<=5; x++)
    {
        for (y=1; y<x; y++)
        {
            for (z=1; z<y; z++)
            {
                printf("z's %d, ",z);
            }
            printf("\n");
            printf("y's %d -> ",y);
        }
        printf("\n");
        printf("------- x's %d ------- ",x);
    }
    return 0;
}

자, 갑자기 뭔가 괴랄해졌습니다. 이게... 이게 대체 뭐야!! 하겠지만. 그 누구보다도 for문을 쉽게 설명해드리겠습니다.

 

일단 우리가 직장에 다니고 있다 생각합시다. 월~금까지는 대부분의 직장인분들이 근무를 할겁니다.

즉, 5일간은 동일한 업무시간을 갖는다고 가정할 때, 이를 C언어로 표현한다면

printf("월요일입니다. 일 합시다.");
printf("화요일입니다. 일 합시다.");
printf("수요일입니다. 일 합시다.");
printf("목요일입니다. 일 합시다.");
printf("금요일입니다. 일 합시다.");

이렇게 나타낼 것입니다. 아, 근데 365일로 늘어난다하면 printf문을 365번이나 받아 적어야 합니다. 여간 귀찮은 일이 아닙니다. 그래서 등장한게 반복문입니다. 제목에 적은 바와 같이 반복문은 크게 3가지 유형으로 자주 쓰는데요.

 

첫번째로 볼 것이 for문입니다.

1. for문
for문의 구조를 먼저 봅시다. 제가 소스코드에 적은 내용을 보면요. for 옆에 여러가지 식들이 보입니다. 하나하나 구조를 살펴보겠습니다.

for ( 변수 초기값 선언, 변수에 대한 조건식, 변수의 증감식)
이런 식으로 나와있는데요. 제 소스코드를 보면 앞에서 x,y,z라는 정수형 자료타입의 변수들을 선언해 놨습니다.
그리고 제일 먼저 x의 초기값을 1이라고 정해놨습니다.

그러면 이제 x는 1을 시작점으로 해서 몇번까지 반복할 것인가? 를 추가로 정해줘야 합니다.  이게 변수에 대한 조건식입니다.
보시면 저는 1을 시작으로 해서 5까지의 범위 조건을 지정해놨습니다. 그러면 이제 1에서부터 5까지의 범위가 결정이 되었으니 어떤식으로 증감을 줄 것인지 고려해야 합니다.

저는 x를 1씩 증가시키기 위해서 x++ 라고 설정을 했습니다. 

* 주의해야할 점. for문에서 구조를 짤 때, 초기값 선언과 조건식은 쓰고나서 세미콜론 ; 을 적어줘야 합니다. 하지만 증감식의 경우는 세미콜론을 찍어주지 않습니다.

 

** ++라는 것은 증감 연산자의 한 종류입니다. 제가 미처 설명을 안한 부분인데 잠깐 이 의미를 보고자 합니다.

x = x+1;

위의 소스코드를 봅시다. 제가 x = x+1; 이라고 적었습니다. 근데 수학을 한번이라도 접하신 분들은 이게 맞는 식이에요? 라는 의문을 가질 것입니다.  예. 적어도 프로그래밍에서는 위의 식은 성립합니다.

x = x+1를 설명하기 위한 그림

프로그래밍에서는 일반적으로  '오른쪽에서 왼쪽으로 읽는다.' 라고 생각하셔도 됩니다. 즉, x = x+1라는 것은

오른쪽에 있는 x+1를  왼쪽에 있는 x라는 박스에 넣는다. 라고 생각하시면 됩니다. 자, 그럼 간단한 소스코드를 한번 짜보겠습니다.

x = x+1를 설명하기 위한 소스코드
결과값

저는 x에다가 5라는 값을 입력했습니다. 그 후, x의 값을 출력하기 전에  x = x+1을 적어두었습니다.

그래서 x = 5가  처음에 오른쪽에 있는 x + 1의 x에 들어갔습니다. 그 후, 오른쪽의 x+1을  왼쪽에 x라는 박스에다 집어 넣었습니다. 그래서 값이 6으로 나온 것입니다.

이처럼 변수의 값이 1씩 증가하는 식인 x=x+1을 보다 간단히 표현한 것이 x++입니다. ++는 1씩 증가해라. 라는 의미인데요. 그러면 눈치 빠르신 분들은 --는 당연히 1씩 감소해라! 라는 연산자임을 알게 됩니다.

 

자, 그러면

for (int i =1; i<=5; i++)
{
	printf("%d ",i);
 }
 
 return 0;

이 소스코드를 출력하면 1 2 3 4 5로 출력됨을 알 수 있습니다. 그럼 이중 for문은 뭘까요?

2중 for문을 설명하기 위한 그림

바로 이 그림을 보면 이해가 됩니다. 

x는 제가 소스코드를 작성할 때, 제일 먼저 구현한 첫번째 for문의 변수입니다. 1부터 시작한다할 때 쭉 값이 이어질텐데요. 이제 바로 아래에 y변수에 대한 for문을 입력했고 조건식에 y<x라고 적어두었습니다.

 

이 경우는 x=1일 경우 y는 0만이 해당됩니다. 근데, 제 소스코드를 보시면 y변수의 시작점을 1이라 잡았습니다.

즉, x=1만 출력되고 그 아래 y는 출력되지 않습니다.

 

그러면 x=2일 경우를 봅시다. x=2로 넘어갈 때, y<x에 맞는 값은 y=1입니다. 따라서, y=1까지만 출력됩니다.

그러면 x=3일 때는요? y<x 조건식에 따르면 y=1,2가 해당됩니다. 따라서 y=1, y=2까지만 출력됩니다.

마찬가지로 x=4라면 y=1,2,3이 해당 될 것입니다.  3중, 4중이 되어도 동일한 규칙이 적용될 것입니다.

마치 고등학교 때 배운 수열같은 개념이죠.

 

조건식을 꼭 y<x로 안해도 됩니다. y<=x라고 하면

 

x=1 , y=1

x=2, y=1,2

x=3, y=1,2,3

 

이런 식으로 출력이 되겠군요.

 

 

퀴즈

Q1. 다음 아래와 같은 결과값을 출력하는 소스코드를 작성해보세요. (이중 for문으로 구현할 것)

반응형

+ Recent posts