본문 바로가기
c언어 강좌

[C언어 왕초보 탈출 강좌] 반복 구조

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

포스팅을 자주 해야 하는데, 

개발일 하며, 개인적인 공부에, 여러 가지 가정 내 처리할 것들이 많아서인지;;;

생각만큼 자주 못해서 죄송합니다.

 

그나마 다행(?)인 것은,

아직 방문하시는 분들이 많지 않아서, 

저 또한 나태해지는 것 같습니다.

 

그래도, 어느덧 왕초보 강좌가 거의 정리가 되어가는 것 같아서,

나름 뿌듯합니다.

 

다시금 마음을 잡고 열심히 하겠습니다!!!

 

오늘은 지난 포스팅에 이어,

알고리즘을 표현하는 구조 중 마지막인 반복 구조에 대해 알아보도록 하겠습니다.

 

반복구조는 크게 두 가지 함수를 사용하여 표현할 수 있습니다.

for 구문과, while 구문입니다.

영어 문법에서, for 뒤에 시간이 나오면, for는 "~를 위하여"가 아닌, "~시간 동안"이라는 뜻으로 달리 해석됩니다.

while 또한 "~동안"이라는 뜻으로 사용됩니다.

반응형

1. for

for를 사용한 구문은,

for(초기값 ; 조건 ; 증감)의 형태로 씁니다.

예를 들면, 

for(int i = 0 ; i < 10 ; i++){
	printf("%d\n", i);
}

이 코드는,

0부터 시작해서 9까지 출력하는 코드입니다.

2. while

위의 예를 똑같은 결과를 보여주는 while로 표현해 보겠습니다.

while을 사용한 구문은,

초기값

while(조건)

    증감

으로 표현됩니다.

int i = 0;
while(i < 10){
	printf("%d\n", i);
    i = i + 1;
}

 

while 구문 옆에는 for문의 조건에 해당되는 내용이 오고,

초기값과 증감은 while의 앞 뒤에 각각 넣어주어야 합니다.

 

for와 while는 다음과 같은 순서도로 표현됩니다.

위 예제 코드를 이렇게 순서도로 표현할 수 있는데요,

마름모 형태가 마치 if의 조건문과 유사합니다.

조건에 따른 선택을 하기 때문에, 동일하게 마름모를 사용하지만,

순서도의 빨간색 화살표와 같이, "되돌아온다"는 부분이 다릅니다.

이 부분을 꼭 기억해 주시면 좋겠습니다.

3. 중첩반복

중첩반복은 반복 안에 또 반복이 되는 구조를 말합니다.

앞서 예제로 활용했던, 구구단을 중첩반복으로 사용하면 매우 편리하게 구현됩니다.

#include <stdio.h>

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

    for(int dan = 2 ; dan < 10 ; dan++){
        printf("< %d >\n", dan);
        for(int index = 2 ; index < 10 ; index++){
            printf("%d x %d = %d\n", dan, index, dan * index);
        }
    }

    return 0;
}

코드가 엄청 짧아졌습니다.

 

이 예제를 활용하여,

지난 선택구조의 마지막 예제에서 반복 구조를 사용하여 똑같이 구현해 보겠습니다.

#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을 입력합니다.
    
    if(type == 0){
        for(index=1 ; index < 10 ; index++)
            printf("%d x %d = %d\n", dan, index, dan*index);
    }
    //짝수이면, 홀수 index를 가립니다.
    else if(type == EVEN){
        for(index=2 ; index < 10 ; index+=2){
            printf("%d x %d = %d\n", dan, index, dan*index);
        }
    }
    //홀수이면, 짝수 index를 가립니다.
    else if(type == ODD){
        for(index=1 ; index < 10 ; index+=2){
            printf("%d x %d = %d\n", dan, index, dan*index);
        }
    }
    //줄만 출력합니다.
    else
        printf("------------------------");
    
    return 0;
}

여기에서 질문이 있을 수 있겠죠?

이 예제에서 사용된 증감의 표현은,

index++과 index+=2 가 있습니다.

 

index++ 는 index += 1과 같은 뜻입니다.

 

그럼 감소일 경우에는?

index-- 또는 index -= 1로 표현될 수 있겠습니다.

 

같은 맥락으로 증감을 2로 하고 싶다면,

 

위 예제와 같이,

index += 2로 할 수가 있겠습니다.

 

자 이제 마찬가지로,

다양한 예제를 다루어보면서 좀 더 익숙해져야겠습니다.

다음의 반복문 관련 예제 링크 남깁니다.

시간이 걸리더라도 꼭 풀어보시기 바랍니다.

 

 

반응형

댓글