42. 제어문 연습 – 별출력

C언어 – 반복문, 별출력
00:20 반복문
01:14 [실습] while문 1에서 100까지 합계 구하기
02:30 [실습] do while문 1에서 100까지 합계 구하기
03:11 [실습] do while문 음수 입력 전까지 합계 구하기
04:34 [실습] for문 1에서 100까지 합계 구하기
05:43 별출력
05:51 [실습] 별출력 - 속이 빈 정사각형 출력

제어문의 문법을 보면 어렵지 않아요.
그런데 실제 프로그래밍에서 사용하려면 논리를 전개해는 것이 어려워요.
다양한 문제를 해결하면서 조금씩 숙련시킬 수 있어요.

간단한 제어문 연습을 해 봐요.

먼저 속이 빈 정사각형을 출력하는 것을 해 봐요.

최종 사용자가 정수를 입력하면 입력한 정수에 맞게 속이 빈 정사각형을 출력하는 거예요.
물론 화면의 X좌표의 폭과 Y좌표의 폭이 서로 달라 정사각형처럼 보이지는 않아요.

논리를 먼저 생각하세요.
정수를 입력받는 것이 제일 먼제 해야 할 일겠죠.

scanf_s("%d",&n);//입력

그리고 입력한 정수만큼 정사각형을 출력해야 되겠죠.

따라서 입력한 정수만큼 반복 수행하는 구문이 필요하겠네요.

for(line=1;line<=n;line++)//line: 1~n
{
    //line에서 해야 할 일
}

맨 위줄과 아래 줄은 같은 일을 수행하고 나머지 줄도 같은 일을 수행하겠네요.

for(line=1;line<=n;line++)//line: 1~n
{
    if((line==1)||(line==5))//line is 1 or n
    {
        //line에서 해야 할 일
    }
    else//거짓
    {
    }
}

그리고 맨 위줄과 맨 아래 줄은 별을 입력한 정수만큼 출력해요.
이 때 출력할 별의 수는 입력한 정수만큼이예요.
따라서 입력한 정수만큼 별을 출력하는 반복문이 필요해요.

for(star=1; star<=n;star++)
{
    putchar('*');
}

나머지 줄은 맨 앞에 별을 출력하고 입력한 정수 -2 만큼의 공백을 출력하고 다시 별을 출력해야겠죠.

물론 줄을 구분하기 위한 개행문자도 출력해야겠죠.

putchar('*');//별1
for(space=1;space<=(n-2);space++)//공백 n-2
{
    putchar(' ');
}
putchar('*');//별1

이처럼 해야 할 일이 무엇인지 파악하는 과정이 필요해요.

//속이 빈 정사각형
// 입력
// 5
//출력
// *****       1 별5, 개행
// *      *        2 별1, 공백3, 별1, 개행
// *      *        3 별1, 공백3, 별1, 개행
// *      *        4 별1, 공백3, 별1, 개행
// *****       5 별5, 개행

//line: 1~n
    //line is 1 or n 가 참
        //별 n
    //line is 1 or n 가 거짓
        //별1, 공백(n-2), 별1
    //개행

#include <stdio.h> 
int main(void)
{
    int n;
    int line,space,star;   

    scanf_s("%d",&n);//입력
    for(line=1;line<=n;line++)//line: 1~n
    {
        if((line==1)||(line==5))//line is 1 or n 가 참
        {
            for(star=1; star<=n;star++)
            {
                putchar('*');
            }         
        }
        else//line is 1 or n 가 거짓
        {
            putchar('*');//별1
            for(space=1;space<=(n-2);space++)//공백 n-2
            {
                putchar(' ');
            }
            putchar('*');//별1            
        }   
        putchar('\n');//개행
    }
    return 0;
}

다음의 기본 연습을 직접 해 보세요.
생각보다 많은 시간이 걸릴 수도 있어요.
바로 개발 도구에 코딩을 하는 것보다 전체적인 논리를 종이게 기술하는 등의 작업을 먼저 해 보세요.
그리고 논리를 파악한 후에 구현하는 것이 비용을 줄일 수도 있어요.
◈ 기본 연습 (정답 바로가기)
1. 다음처럼 입력한 정수 높이의 삼각형을 출력하는 프로그램을 작성하시오.

2. 다음처럼 입력한 정수의 높이에 맞게 다이아몬드를 출력하는 프로그램을 작성하시오.

3. 다음처럼 입력한 정수의 높이에 맞게 산봉우리를 출력하는 프로그램을 작성하시오.