42. 제어문 연습 - 별출력
제어문의 문법을 보면 어렵지 않아요.
그런데 실제 프로그래밍에서 사용하려면 논리를 전개해는 것이 어려워요.
다양한 문제를 해결하면서 조금씩 숙련시킬 수 있어요.
간단한 제어문 연습을 해 봐요.
먼저 속이 빈 정사각형을 출력하는 것을 해 봐요.
최종 사용자가 정수를 입력하면 입력한 정수에 맞게 속이 빈 정사각형을 출력하는 거예요.
물론 화면의 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. 다음처럼 입력한 정수의 높이에 맞게 산봉우리를 출력하는 프로그램을 작성하시오.