본문 바로가기
C Programming/연습 문제

[C언어 연습문제]강좌 7. For Loop in C(C언어 for문)

by 희품 2019. 2. 27.
반응형


학습(Study) & 목표(Objective)

이번에는 반복문 중에서 for 문을 사용하여 문제를 해결해보려고 합니다. for 문은 반복적인 프로그래밍 구문을 실행할 수 있는 반복으로, 표현 식은 다음과 같습니다.

for ( <표현식1> ; <표현식2>; <표현식3>)

{

    <동작>

}

  • 표현식 1은 일반적으로, for 반복문이 종료되기 위한 플래그 조건을 제어하는 변수를 초기화하는 데 자주 사용됩니다.
  • 표현식 2는 반복문의 종료 조건을 검사합니다. 표현식2의 조건이 거짓으로 판단되면, 반복문의 반복은 종료됩니다.
  • 표현식 3은 플래그나 변수를 갱신하는 데 많이 사용됩니다.

for문의 예제코드

int i = 0;

for(i = 0; i < 10; i++)

{

...

}


과제(Task)

입력받은 두 정수[a, b] 사이의 값을 출력한다. 출력하려는 정수를 n이라고 했을 때, 다음 조건에 맞도록 출력하면 된다.


조건을 만족하면, 1은 "one", 2는 "two"와 같이, 소문자 영어로 출력한다.

조건을 만족하는 짝수이면, "even"을 출력한다.

조건을 만족하는 홀수이면, "odd"를 출력한다.



입력 형식(Input Format)

첫 번째 줄에 정수 a를 입력

두 번째 줄에 정수 b를 입력


제약 조건(Constraints)


출력 형식(Output Format)

위에 설명한 조건에 맞는 [a, b]에 대한 적절한 영어 표현식을 출력한다.



입력 예제(Sample Input)

8

11


출력 예제(Sample Output)

eight

nine

even

odd


주어진 코드

#include <stdio.h>
#include <stdlib.h>
int main() 
{
    int a, b;
    scanf("%d\n%d"&a, &b);
      // Complete the code.
    return 0;
}


해결된 코드


문자 포인터 배열로 0부터 10까지의 출력문자를 저장해서 for 문으로 출력하는 방법을 사용하시는 게 일반적인 것 같습니다.


#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    // C 언어의 특성대로, 최대한 호환성을 위해 indxe 변수를 별도로 선언
    int i = 0;
    
    // 사용할 변수들을 선언 및 초기화
    int a = 0, b = 0;    
    
    // 사용할 문구를 미리 문자 포인터의 배열에 문자열을 저장한다.
    char* represent[10= {"zero""one""two",
                            "three""four""five",
                            "six""seven""eight""nine"};
 
    // 조건에 맞는 2개의 정수를 입력받는다.
    scanf("%d\n%d"&a, &b);
 
    //== 반복문 수행 ==//
    // 초기값 a부터 b까지 순차적으로 정수 값을 증가(i++)
    // 시키면서 조건이 만족할 때까지 (i <= b)
    // 수행한다.
    for(i = a; i <= b; i++)
    {
        //== i가 9보다 크면, 지정된 문구 출력 ==//
        if(i > 9)
        {
            if(i % 2 == 0)
                printf("even\n");
            else
                printf("odd\n");
        }
        //== i가 9보다 작으면, 영어 소문자 출력 ==//
        else
        {
            // index와 저장된 문구가 동일하므로,
            // 아래처럼 배열 index를 그대로 사용해도 된다.
            // (단, 9보다클 때, 여기로 오면 프로그램에 문제가 발생한다)
            printf("%s\n", represent[i]); 
        }
    }
    return 0;
}


물론 아래와 같이 직관적인 코드를 사용하여 코딩 할 수도 있죠. 목적은 for 문을 사용하는 거니까요.

위와 같은 방법은 일반 문자 포인터 배열을 선언했는데, index 크기가 10으로 고정되어 있어, 특정한 경우에 위험할 수도 있습니다. 그렇게 따지고 봤을 때는, 아래와 같이 정답을 위한 일회성 코드도 안 좋다고 말할 수는 없는 거죠.

#include <stdio.h>
#include <stdlib.h>
 
int main(void
{
    int a = 0, b = 0;
    scanf("%d\n%d"&a, &b);
 
    int i = 0;
    for(i = a; i <= b; i++)
    {
        switch(i)
        {
        case 1:
            printf("one");
            break;
        case 2:
            printf("two");
            break;
        case 3:
            printf("three");
            break;
        case 4:
            printf("four");
            break;
        case 5:
            printf("five");
            break;
        case 6:
            printf("six");
            break;
        case 7:
            printf("seven");
            break;
        case 8:
            printf("eight");
            break;
        case 9:
            printf("nine");
            break;
        default:
            if(i % 2 == 0)
            {
                printf("even");
            }
            else
            {
                printf("odd");
            }
            break;
        } // end switch
        printf("\n");
    } // end for
 
    return 0;
}


for() 문을 사용하는 예제를 알아봤습니다.

자세한 설명이 필요하신 분은 댓글로 알려주세요~



반응형