[나도코딩] 피라미드를 쌓아라

타키탸키·2021년 4월 14일
0

C언어(C, C++, C#)

목록 보기
2/14

🦿 개요

  • C언어의 반복문
    • For
    • While
    • Do While

🦿 ++

  • 하나의 프로젝트에 main이 여러 개 있으면 빌드 오류가 난다
    • 이전에 사용하던 파일의 main 함수 이름을 변경해주자
int a = 10;
printf("a는 %d\n", a);
a++;
printf("a는 %d\n", a);
a는 10
a는 11
  • ++
    • 연산자
    • 1씩 증가
int b = 20;
printf("b는%d\n", ++b);
printf("b는%d\n", b++);
printf("b는%d\n", b);
b는 21
b는 21
b는 22
  • b 앞에 있을 때는 ++을 먼저 하고 문장을 끝내라는 뜻
    • ++b = b = b + 1
  • b 뒤에 있을 때는 문장을 다 끝내고 나서 ++ 수행하라는 뜻
    • 그 다음 줄로 넘어갈 때, 1이 증가한다
    • 따라서, 아래의 b가 21이 아닌 22가 된다
int i = 1;
	printf("Hello World %d\n", i++);
	printf("Hello World %d\n", i++); 
	printf("Hello World %d\n", i++); 
Hello World 1
Hello World 2
Hello World 3
  • ++이 뒤에 있으므로 i 값을 먼저 출력하고 나서 i의 값을 1 늘려준다

🦿 for

for (int i = 1; i <= 10; i++)
{
	printf("Hello World %d\n", i);
}
Hello World 1
Hello World 2
Hello World 3
Hello World 4
Hello World 5
Hello World 6
Hello World 7
Hello World 8
Hello World 9
Hello World 10
  • for (선언; 조건; 증감) {}
    • i는 1이고, i가 10보다 작거나 같으면 반복해서 수행하고(출력하고) i를 1씩 늘려준다
    • 출력이 끝난 후, i는 1이 늘어나 2가 되고 2가 조건으로 들어간다
    • i가 10이 되서도 조건에 따라 출력을 하게 되고 그 다음 11이 되고 나서야 조건에서 걸러져 반복이 중단된다

🦿 while

int i = 1;
while (i <= 10)
{
	printf("Hello World %d\n", i++);
    //i++
}
  • while (조건) {}int i = 1;
  • while을 쓸 때는 변수 i 선언을 while문 밖에서 한다
  • 연산자는 while문 내에 작성한다
    • i가 10일 때까지는 조건을 통과하다가 연산자를 만나서 11이 되면 종료된다

🦿 Do while

int i = 1;
do {
	printf("Hello World %d\n", i++);
    //i++
} while (i<=10);
  • do {} while (조건);
  • 자리만 조금 바뀌었을 뿐, while과 거의 유사하다

🦿 2중 반복문

for (int i = 1; i <= 3; i++)
{
	printf("첫번째 반복문: %d\n", i);

	for (int j = 1; j <= 5; j++)
	{
		printf("    두번째 반복문: %d\n", j);
	}
}
첫번째 반복문: 1
    두번째 반복문: 1
    두번째 반복문: 2
    두번째 반복문: 3
    두번째 반복문: 4
    두번째 반복문: 5
첫번째 반복문: 2
    두번째 반복문: 1
    두번째 반복문: 2
    두번째 반복문: 3
    두번째 반복문: 4
    두번째 반복문: 5
첫번째 반복문: 3
    두번째 반복문: 1
    두번째 반복문: 2
    두번째 반복문: 3
    두번째 반복문: 4
    두번째 반복문: 5
  • for문 안의 for문
  • 순서
    • int i는 1부터 3까지 동작 수행
    • printf문 출력
    • for문 안 for문 진입
    • int j는 1부터 5까지 동작 수행
    • printf문 다섯 개 출력
    • 다음 i의 수 1 증가하고 i가 3이 될 때까지 위 과정 반복
// 구구단 프로그램

for (int i = 1; i <= 9; i++)
{
        printf("%ㅇ단 계산\n", i);
	for (int j = 1; j <= 9; j++)
	{
		printf("%d X %d = %d\n", i, j, i * j);
	}
}

🦿 2중 반복문 파헤치기

❗ 별 피라미드

// 별 피라미드

for (int i = 0; i < 5; i++)
{
	for (int j = 0; j <= i; j++)
	{
		printf("*");
	}
	printf("\n");
}
*
**
***
****
*****
  • j <= i
    • i가 늘어나는 만큼만 별의 개수 늘리기
    • i가 1이면 하나만, 2이면 둘만, ...
  • 변수를 따로 지정할 필요없이 "*"와 같이 쓸 수 있다
  • 첫번째 for문에서 개행을 해줘야 별표가 층별로 잘 나온다
    • 두번째 for문 안에서 하면 출력할 때마다 개행이 되기 때문이다

❗ 표로 확인하기

❗ 거꾸로 별 피라미드

// 거꾸로 별 피라미드

for (int i = 0; i < 5; i++)
{
	for (int j = i; j < 5 - 1; j++)
	{
		printf(" ");
	}
    for (int k = 0; k <= i; k++)
    {
		printf("*");
    }
    printf("\n")
}
    *
   **
  ***
 ****
*****
  • 공백을 알파벳으로 대체하여 생각해보자
    • 별이 하나일 때, 알파벳 네 개가 앞에 와야 한다
    • 따라서, 기존 코드에서 알파벳에 대한 반복문이 필요하다
    • 수가 점점 줄어드므로 시작 값을 i로 둔다
    • 맨 처음 필요한 알파벳 개수는 4개이므로 끝 값은 4보다 작아야 한다

🦿 피라미드를 쌓아라

int floor;
printf("몇 층으로 쌓겠느냐? ")
scanf_s("%d", &floor);

for (int i = 0; i < floor; i++)
{
    for (int j = i; j < floor - 1; j++)
    {
    	printf(" ");
    }
    for (int k = 0; k < i * 2 + 1; k++)
    {
    	printf("*");
    }
    printf("\n");
}
몇 층으로 쌓겠느냐? 5
    *
   ***
  *****
 *******
*********
  • 피라미드 모양으로 쌓으려면 별(*)이 1-3-5-7 등으로 늘어나야 한다
  • 위로 올라갈수록 생기는 공백을 알파벳으로 대체하여 생각해보자
    • 코드는 위와 동일
  • 별이 1부터 2씩 늘어나므로 i*2+1을 종료 조건으로 적어준다
* 출처: 나도코딩 "C 언어 무료 강의 (입문부터 게임 개발까지)"
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글