본문 바로가기
c언어 강좌

[C언어 왕초보 탈출 강좌] 선택 구조

by 두뇌향상중 2023. 5. 11.
반응형
C언어를 독학하시는 분들을 위해 포스팅합니다.
이 글은 완전 처음 접하는 왕초보 분들을 위한 강좌입니다.
가급적 자주 포스팅하겠습니다.

 

지난 포스팅에 이어,

알고리즘을 구현하기 위한 제어 구조 중 선택 구조에 대해 살펴보도록 하겠습니다.

 

우리는 이미 이전 글에서,

선택 구조에 대한 개념에 대해 간단히 접한 적이 있습니다.

 

관계연산자와 논리연산자에 대한 예제를 살펴볼 때,

선택 구조의 형태의 순서도를 보았습니다.

그때가 기억나지 않으신다면, 잠시 보고 오셔도 괜찮습니다.

선택 구조는 기본적으로 선택의 갈림길에서,

Yes or No를 선택합니다.

그리고 각자 그에 따른 다른 길을 가게 됩니다.

 

선택 구조는 다음의 3가지의 형태로 표현될 수 있습니다.

1. if

    if(조건문)
        처리문

실제 코드를 통한 예제를 볼까요?

계속해서 구구단을 통해 여러 가지 개념을 활용해 보도록 합시다.

 

순차구조에서 출력했던 2단을 출력하는 코드를 약간 변형하여,

원하는 단을 입력하고, 그 단에 대한 결과를 출력하는 코드입니다.

다만 2단부터 출력하고 싶으므로,

조건문은 "1단보다 큰", if(dan > 1)로 정했습니다.

#include <stdio.h>

int main()
{
    int dan = 0;
    int index = 1;

    printf("<multiplication table>\n\nEnter numbers: ");
    scanf("%d", &dan);

    if(dan > 1)
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
    
    return 0;
}

이 코드에 대한 결과는 다음과 같습니다.

반응형

2. if ~ else

    if(조건문)
    	처리문1
    else
    	처리문2

이 구조는 조건문에 해당하지 않을 경우에도 처리해 주는 경우입니다.

마찬가지로 위 예제 코드에서, 조건문에 해당하지 않을 경우를 위한 처리과정도 넣어보겠습니다.

#include <stdio.h>

int main()
{
    int dan = 0;
    int index = 1;

    printf("<multiplication table>\n\nEnter numbers: ");
    scanf("%d", &dan);

    if(dan > 1){	//if문에 속하려면 중괄호로 묶어주어야 합니다. 중괄호 시작
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
    }			//중괄호 끝
    //조건에 속하지 않을 경우 처리 과정 추가
    else		
        printf("Please input number more than 2!\n");
    
    return 0;
}

위 1번 구조의 예제와 비교해 보면, else 구문만 추가되었습니다.

이를 실행시켜 볼까요?

우선 2 미만의 값을 넣어서 else 구문이 잘 동작하는지 확인했고,

다시 실행해서 3을 입력하여, 구구단 3단을 출력했습니다.

3. if ~ else if ~ else if ~ else

    if(조건문1)
    	처리문1
    else if(조건문2)
        처리문2
    else if(조건문3)
        처리문3
    else
    	처리문4

 

이 구조는 여러 개의 조건문들과 그에 따른 처리과정을 표현할 때 사용합니다.

예제를 볼까요?

#include <stdio.h>

//상수 정의: 짝수면 2, 홀수면 3
#define EVEN 2
#define ODD 3

int main()
{
    int dan = 0;
    int index = 1;
    int type = EVEN;   
	
    //dan과 type을 입력받기로 합니다.
    //type이 짝수이면, 구구단의 홀수 번호는 숨깁니다.
    //type이 홀수이면, 구구단의 짝수 번호는 숨깁니다.
    //type이 0이면, 전체 다 보여주고, 그 밖에는 아무것도 출력하지 않습니다.
    printf("Condition of input number for <multiplication table>\n");
    printf("1. When it is an even number, hide the odd number.\n");
    printf("2. When it is an odd number, hide the even number\n");
    printf("3. When it is 0, the entire is displayed.\n");
    printf("4. The others, there is no output.\n\n");

    printf("<multiplication table>\n\nEnter 'numbers', 'type': ");
    scanf("%d %d", &dan, &type);	//dan과 type을 입력합니다.
    
    //type이 0일 경우 전체 다 출력합니다.
    if(type == 0){
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
    }
    //짝수이면, 홀수 index를 가립니다.
    else if(type == EVEN){
        index = index + 1;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
    }
    //홀수이면, 짝수 index를 가립니다.
    else if(type == ODD){
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
        index = index + 2;
        printf("%d x %d = %d\n", dan, index, dan*index);
    }
    //줄만 출력합니다.
    else
        printf("------------------------");
    
    return 0;
}

복잡해 보이지만,

여러 조건을 주기 위해, 이전 예제에서 type의 개념을 넣어서 짝수와 홀수로 구분해 보았습니다.

이를 출력하면 다음과 같습니다.

반복구조를 아직 배우지 않았기 때문에,

모든 처리과정을 지나고 나면 프로그램이 종료가 됩니다.

그래서 여러 번 실행하여 위와 같이 보입니다.

 

else if 구문은 하나만 혹은 무한대로 넣을 수 있고,

else 또한 넣어도 되고, 안 넣어도 됩니다.

(간혹, 이 부분에 대해 질문하는 학생들도 있어서...)

 

자!

이제 다양한 예제를 풀어보셔야 좀 더 익숙해지겠죠?

마찬가지로 백준 사이트에서 조건문에 해당되는 곳의 링크를 남깁니다.

시간이 걸리더라도 꼭 해결하고 다음으로 넘어가시길 바랍니다.

안되더라도 포기하지만 않는다면, 언젠가는 잘 실행되는 날이 옵니다.

꼭 실행에 성공하셔서, 작게나마 성취감을 느끼시길 바라며 이번 포스팅을 마칩니다.

 

반응형

댓글