C언어_이중 반복문 심화

P4·2023년 5월 1일
0

C언어 기초

목록 보기
8/23
post-thumbnail

별로 피라미드 만들기

  • i는 줄바꿈, j는 *의 개수

    1. i가 1일때 j도 1, 따라서 *의 개수는 1개 --> 그 후 줄바꿈
    2. i가 2일때 j도 2, 따라서 *의 개수는 2개 --> 그 후 줄바꿈...
    3. i가 2일때 j도 2, 따라서 *의 개수는 2개 --> 그 후 줄바꿈...
  • 위 예시에서는 이해를 위해 i를 1부터 시작시켰지만, 아래 코드의 실제 동작은 0~4까지입니다.

예제코드 (정방향 별)

#include <stdio.h>

int main(void)
{

    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j <= i; j++)
        {
            printf("*"); 
            // 1. i가 1이니 j가 한 번 밖에 못돔 --> *이 한개
            // 2. i가 2니 j가 두 번 밖에 못돔 --> *이 두개
        }
        printf("\n"); // 줄바꿈
    }
}
  • 출력

    *
    **
    ***
    ****
    *****



역방향 별

  • i는 줄바꿈, j는 공백의 개수 + *의 개수, a는 층수

    1. i가 1일때 j도 1, 따라서 공백의 개수는 층-1개, *의 개수는 1개
    2. i가 2일때 j도 2, 따라서 공백의 개수는 층-2개, *의 개수는 2개
    3. i가 3일때 j도 3, 따라서 공백의 개수는 층-3개, *의 개수는 3개

예제코드 2 (역방향 별)

#include <stdio.h>

int main(void)
{

    int a;
    printf("Enter a number: ");
    scanf_s("%d", &a);

    for (int i = 0; i < a; i++) // a층만큼 쌓음
    {
        for (int j = i; j < a - 1; j++)
        {
            printf(" ");
            // 1. j가 1이 되면 10층일때 j는 0 ~ 8, 9개까지
            // 2. j가 2이 되면 10층일때 j는 1 ~ 8, 8개까지...
        }
        for (int j = 0; j <= i; j++)
        {
            printf("*"); // 얘는 그대로
        }
        printf("\n");
    }
}
  • 출력 (markdown 공백기호의 한계로 밀린것처럼 보이지만 실제로는 계단형입니다.)

            *
          **
        ***
      ****
    *****



계단형이 아닌 실제 피라미드형

  • 3층일 경우
    1. 공백 2칸, * 1칸, 공백 2칸
    2. 공백 1칸, * 3칸, 공백 1칸
    3. * 5칸
  • 이런식으로 작동해야 함

예제코드 3 (실제 피라미드)

  • 공백은 층마다 1칸씩 줄어듬

  • *은 층마다 2개씩 늘어남 --> i2+1i * 2 + 1 형태

#include <stdio.h> // standard input/output 이라는 뜻

int main(void)
{
    int floor;
    printf("층 수를 입력해주세요.");
    scanf_s("%d", &floor);

    for (int i = 0; i < floor; i++)
    {
        for (int j = i; j < floor - 1; j++)
        // 5층 기준
        // 1. i가 0일때는 0, 1, 2, 3 <-- 4개
        // 2. i가 1일때는 1, 2, 3... <-- 3개
        {
            printf(" ");
        }
        for (int k = 0; k < i * 2 + 1; k++)
        // 5층 기준
        // 1. i가 0일때는 0 (0 < 1) <-- 1개
        // 2. i가 1일때는 1 (0, 1, 2 < 3)... <-- 3개
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}
profile
지식을 담습니다.

0개의 댓글