저번 C언어 삼각형 별찍기 과제에 이어서 이번에는 피라미드를 만들어 보았다.
1. 피라미드 만들기
(1, 2, 3.. 순서대로 피라미드 만들기)
별 뒤에 공백을 넣어서 하나씩 증가하는 피라미드를 만들었다.
#include <stdio.h>
int main(void)
{
int num, i, j;
// printf("정수를 입력하세요: ");
// scanf("%d",num);
for(i=0;i<10;i++)
//외부 for문: 개행의 역할. i는 0부터 10까지 반복한다. 반복할 때마다 1씩 증가한다.
{
for(j=0;j<10-i;j++) //내부 for문 첫번째. j는 0부터 10-i번까지 1씩 증가하며 반복한다.
{
printf(" "); //공백을 출력해 준다.
}
for(j=0;j<i+1;j++) //내부 for문 두번째. j는 0부터 i+1번까지 1씩 증가하며 반복한다.
{
printf("* "); //별을 출력해 준다.
}
printf("\n");
}
return 0;
}
1-2 홀수 피라미드 만들기
홀수는 2*n +1 순서로 별이 증가해서 1,3, 5, ... 순으로 증가할 수 있게 해 준다.
#include <stdio.h>
int main(void)
{
int num, i, j;
// printf("정수를 입력하세요: ");
// scanf("%d",num);
for(i=0;i<10;i++)
//외부 for문: 개행의 역할. i는 0부터 10까지 반복한다. 반복할 때마다 1씩 증가한다.
{
for(j=0;j<10-i;j++) //내부 for문 첫번째. j는 0부터 10-i번까지 1씩 증가하며 반복한다.
{
printf(" "); //공백을 출력해 준다.
}
for(j=0;j<2*i+1;j++) //내부 for문 두번째. j는 0부터 2*i+1번까지 1씩 증가하며 반복한다.
{
printf("*"); //별을 출력해 준다.
}
printf("\n"); //개행한다.
}
return 0;
}
2. 다이아몬드
다이아몬드는 피라미드 밑에 역삼각형 붙여서 만들어줬다.
#include <stdio.h>
int main(void)
{
int num, i, j, m, n; //정의
printf("정수를 입력하세요: ");
scanf("%d", &num); //num으로 사용자 입력 정수 받아줌
for(i=0;i<num;i++) //i는 0부터 시작, num까지 1씩 증가시켜줌
{
for(j=0;j<num-i;j++)
/*내행 for문 첫번째. 공백을 하나씩 감소시켜야 한다.
j는 0부터 시작, num-i까지 순서대로 공백을 입력시킨다.
-> 즉 i가 증가할수록 j의 값은 감소하므로, 공백의 수는 점점줄어든다.*/
{
printf(" "); //공백 출력
}
for(j=0;j<i+1;j++)
/*내행 for문 두번째. 별을 하나씩 증가시켜야 한다.
j는 0부터 시작, i+1까지 순서대로 별을 입력시킨다.
-> 즉 외부for문의 i가 1씩 증가할수록 j의 값은 1씩 커지므로 = 별의 수는 1씩 늘어난다. */
{
printf("* "); //별 출력
}
printf("\n"); //for문이 반복될 때마다 개행시켜준다.
}
for(m=num;m>0;m--) //m은 입력받은 숫자부터 시작, m이 0보다 클 때까지 하나씩 감소시키기
{
for(n=0;n<num-m+2;n++)
/* 내부for문 n은 0부터 시작. 공백은 하나씩 늘어나야 하니까 5-5 5-4 5-3..이 순서가 되야 한다.
-> 그래서 num-m해준다. m은 하나씩 줄어드니까!
그리고 다이아몬드 모양이 비뚫어지면 안되니까 숫자 두개를 더 추가시켜 준다. */
{
printf(" "); //공백 출력
}
for(n=0;n<m-1;n++)
/* 내부for문 두번째는 0부터 시작. 별을 출력하는 코드이다. 별은 하나씩 줄어들어야 한다.
m이 하나씩 줄어들기 때문에 m을 넣어 준다. 그런데 모양이 조금 이상해서 -1해줬다. */
{
printf("* "); //별 출력
}
printf("\n");
}
return 0;
}
3. 리본
리본은 어떻게 만들어야 할 지 몰라서
다이아몬드 -> 뒤집자 -> 모래시계 -> 그럼 모래시계 반전 시켜서 빈공간에 별 채우면 되겠네 하고 해봤더니
안된다
그래도 어쩌저찌 하니까 되었다. 구현해놓고 이해가 안 된다 ㅋ
그래서 이건 일단 고민을 더 해봐야겠음.
풍차 만들기에서 그냥 리본 모양으로 채웠다. 위의 고민은 더 해볼 생각이다.
//리본 만들기
#include <stdio.h>
int main(void)
{
int num, i, j, k, l, m, n;
for(i=0;i<5+1;i++)
{
for(j=0;j<i;j++)
{
printf("*");
}
for(k=0;k<5-i;k++)
{
printf(" ");
}
for(l=0;l<(5-i);l++)
{
printf(" ");
}
for(m=0;m<i;m++)
{
printf("*");
}
printf("\n");
}
for(i=0;i<5+1;i++)
{
for(j=0;j<5-i;j++)
{
printf("*");
}
for(k=0;k<i;k++)
{
printf(" ");
}
for(l=0;l<i;l++)
{
printf(" ");
}
for(m=0;m<5-i;m++)
{
printf("*");
}
printf("\n");
}
return 0;
}
4. 풍차 만들기
풍차를 만들기 너무 어려워서 삼각형 8개로 쪼갰다. 이게 맞게 하는건가..? 의구심이 들지만 그래도만들었는데 괜찮지않을까요 핫
숫자 8개 모음집
먼저 이것을 만들고 풍차와 리본을 만들었다.
//숫자풍차
#include <stdio.h>
int main(void)
{
int num, i, j, k, l, m, n;
for(i=0;i<5+1;i++)
{
for(j=0;j<i;j++)
{
printf("1");
}
for(k=0;k<5-i;k++)
{
printf("2");
}
for(l=0;l<(5-i);l++)
{
printf("3");
}
for(m=0;m<i;m++)
{
printf("4");
}
printf("\n");
}
for(i=0;i<5+1;i++)
{
for(j=0;j<5-i;j++)
{
printf("5");
}
for(k=0;k<i;k++)
{
printf("6");
}
for(l=0;l<i;l++)
{
printf("7");
}
for(m=0;m<5-i;m++)
{
printf("8");
}
printf("\n");
}
return 0;
}
첫번째 풍차
//리본 만들기
#include <stdio.h>
int main(void)
{
int num, i, j, k, l, m;
printf("정수를 입력하세요: ");
scanf("%d", &num);
for(i=0;i<num+1;i++)
{
for(j=0;j<i;j++)
{
printf(" ");
}
for(k=0;k<num-i;k++)
{
printf("*");
}
for(l=0;l<(num-i);l++)
{
printf(" ");
}
for(m=0;m<i;m++)
{
printf("*");
}
printf("\n");
}
for(i=0;i<num+1;i++)
{
for(j=0;j<num-i;j++)
{
printf("*");
}
for(k=0;k<i;k++)
{
printf(" ");
}
for(l=0;l<i;l++)
{
printf("*");
}
for(m=0;m<num-i;m++)
{
printf(" ");
}
printf("\n");
}
return 0;
}
두번째 풍차
//풍차2
#include <stdio.h>
int main(void)
{
int num, i, j, k, l, m;
printf("정수를 입력하세요: ");
scanf("%d", &num);
for(i=0;i<num+1;i++)
{
for(j=0;j<i;j++)
{
printf("*");
}
for(k=0;k<num-i;k++)
{
printf(" ");
}
for(l=0;l<(num-i);l++)
{
printf("*");
}
for(m=0;m<i;m++)
{
printf(" ");
}
printf("\n");
}
for(i=0;i<num+1;i++)
{
for(j=0;j<num-i;j++)
{
printf(" ");
}
for(k=0;k<i;k++)
{
printf("*");
}
for(l=0;l<i;l++)
{
printf(" ");
}
for(m=0;m<num-i;m++)
{
printf("*");
}
printf("\n");
}
return 0;
}
5. 보석
하는 중...
내 생각은 기울어진 별 삼각형 + 밑에 사각형 + 밑에 긴 삼각형 + 별 삼각형
하면 분명히 할 수 있을 듯 하다
근데 안됨 ㅎ
했다 ㅎㅎ
참내 이 별이 뭐라구 너무 예뻐보인다.
해결과정은 이렇게 그려서 유추해 보았다.
그림은 조잡하지만 도움이 많이 되었다.
회색 1 3 4 는 빈칸이고
노랑 2 5는 별이다.
이걸 숫자대로 쌓아갈 거다.
#include <stdio.h>
int main(void)
// 비스듬한 보석 만들기
{
int i, j, k;
// scanf("%d", &k);
for(i=0;i<10+1;i++) //i는 높이를 의미. 10이 될 때까지 하나씩 증가한다. 1부터 출력되게 하고 싶어서 1 더해줬다.
{
for(j=0;j<2*i;j++) //첫번째 삼각형 만들기. 삼각형은 경사가 좀 있게 *2로 설정. 공백은 2배씩 늘어난다.
{
printf(" "); //공백 출력
}
for(j=0;j<2*i-1;j++) //두번째 삼각형 만들기. 이 삼각형은 홀수 크기로 늘어나게 2*i-1만큼 늘어나게 했다.
{
printf("*"); //별 출력
}
printf("\n"); //개행
}
for(i=0;i<10;i++) //i는 높이를 의미. 10이 될 때까지 하나씩 증가한다.
{
for(j=0;j<2*10;j++) //세번째 사각형 만들기. 이 사각형 세로는 i이고 가로는 위에서 설정한 2*i만큼 해야 하므로 2*10을 넣는다.
{
printf(" "); //공백 출력
}
for(j=0;j<4*i+1;j++)
/*네번째 삼각형 만들기. 이 삼각형 밑변은 위에 1,2번 삼각형 가로합과 같으므로(그림에서 파란선)
(2*i) + (2*i-1) + 1 을 해 준다. +1을 하는 이유는 =이 안 붙기 때문이다. 하나 더 더해준다. */
{
printf(" "); //공백 출력
}
for(j=0;j<2*10-(2*i+1);j++)
/*다섯번째 삼각형 만들기. j는 점점 줄어들어야 하는데,
처음 시작하는 별의 갯수가 위의 마지막 별 갯수와 같으면 된다. 그러니까 19,17,15,,,3,1 순이다.
그럼 (짝수인 가로 - 홀수) 하면 계속 홀수의 값이 나온다. 두번째 외부for문에서 i는 계속 늘어나니까
여기서 2*i+1해주면 별이 점점 줄어들게 할 수 있다. 2*i-1을 하지 않은 이유는 별 하나까지 출력시키기 위해서~
(사실 하나씩 때려박아봄. 그래도 개념은 이해했으니 된 거 아닌가요? 하 -하 )
*/
{
printf("*"); //별 출력
}
printf("\n"); //개행
}
return 0;
}
+ 트리 만들기
삼각형 두개랑 사각형 하나 붙여서 만들었다.
귀엽다.
// 크리스마스 트리 만들기
#include <stdio.h>
int main(void)
{
int i, j, k, l, m, n;
for(i=0;i<10;i++)
{
for(j=i-1;j<11;j++)
{
printf(" ");
}
for(j=i;j<2*i+1;j++)
{
printf("* ");
}
printf("\n");
}
for(k=5;k<13;k++)
{
for(l=k;l<12;l++)
{
printf(" ");
}
for(l=k;l<2*k+1;l++)
{
printf("* ");
}
printf("\n");
}
for(m=0;m<7;m++)
{
for(n=0;n<9;n++)
{
printf(" ");
}
for(n=0;n<6;n++)
{
printf("*");
}
printf("\n");
}
return 0;
}
만들면서 든 생각
: 난 바보가 틀림없다. 이 돌아가지 않는 머리를 어쩌면 좋단 말인가
'개발공부 > C언어' 카테고리의 다른 글
C언어_함수를 사용하여 스무고개 숫자게임 만들기 (0) | 2023.03.29 |
---|---|
C언어_난수함수로 가위바위보 게임 만들기 (0) | 2023.03.27 |
C언어_다양한 구구단 출력 프로그램 만들기 (0) | 2023.03.25 |
C언어_간단한 계산기 만들기 (0) | 2023.03.25 |
C언어_if문 이용해서 자판기 만들기 (0) | 2023.03.24 |