분류 | 게시판 |
베스트 |
|
유머 |
|
이야기 |
|
이슈 |
|
생활 |
|
취미 |
|
학술 |
|
방송연예 |
|
방송프로그램 |
|
디지털 |
|
스포츠 |
|
야구팀 |
|
게임1 |
|
게임2 |
|
기타 |
|
운영 |
|
임시게시판 |
|
문제 : If else를 사용하여 주어진 연도가 윤년인지 아닌지 확인하라. 단, %를 3번이나 그 이하로 사용해야한다.
생각
- 윤년이 뭐더라... 4로 나눠떨어지는 그거 아닌가. 정확한 조건이 생각이 안나니 검색해보자
- 윤년은 4로 나누어지면서 100으로는 나누어 떨어지지 않는 년 (단, 400으로 나누어 떨어지는 년은 윤년으로 )
- 일단 기본적인 몸체부터 만들자
#include <stdio.h>
int main()
{
return 0;
}
- 일단 어떤 숫자가 윤년인지 아닌지를 검사해야 하니까. [어떤 숫자] 변수를 하나 지정하자. 연도니까 year 정도로 하면 되겠지?
#include <stdio.h>
int main()
{
int year;
return 0;
}
- 어... 그리고 사용자가 어떤 숫자를 [입력]하면 그게 윤년인지 아닌지 검사시켜줘야겠지. 입력부를 만들자
#include <stdio.h>
int main()
{
int year;
scanf("%d", &year);
return 0;
}
- 그런데 좀 예쁘지 않네. scanf로 [사용자가 숫자를 입력하기 이전에 안내문] 하나정도는 넣어줘야겠다.
- scanf앞쪽에 printf문을 하나 추가해주자.
#include <stdio.h>
int main()
{
int year;
printf("숫자를 입력하세요 : ");
scanf("%d", &year);
return 0;
}
- 좋아. 지금까지는 숫자를 입력하는 프로그램을 만들었군. 이제 본격적으로 윤년인지 아닌지 검사하는 부분을 추가해볼까?
- 윤년 검사를 어떻게 해야하지?
- 일단 윤년에 뭐가 있을까 미리 생각해볼까 대충 2004, 2008, 2012년은 윤년이고... 2100년은 윤년이 아니군.
- 윤년은 4로 나눠 떨어지면서 100으로는 나눠 떨어지지 않는수...
- 즉 (1) 4로 나눠 떨어진다. // (2) 100으로 나눠떨어지지 않는다.
- 두가지 조건을 동시에 '둘 다' 충족시켜야 윤년이군. 이걸 검사할 수 있도록 먼저 해보자.
- 4로 나눠 떨어지고 (and) 100으로 나눠떨어지지 않는다.
나눠 떨어진다는 것은 나누었을때 나머지가 0이라는 뜻이고
나눠 떨어지지 않는다는것은 나머지가 0이 아니라는 뜻이지.
- 나머지를 검사하는건 % 기호를 쓰면 되겠군
A%B라고 하면 A를 B로 나눴을때 나머지만 알려주는 기호지.
예를들어 100%3이라고 하면 결과값은 1이 나올꺼야.
- 4로 나눠 떨어진다라는 것은. 나머지가 생기지 않는다. 나머지가 0이다. year%4 == 0 이라는 뜻 이고
- 100으로 나눠 떨어지지 않는다는 것은 나머지가 생긴다. 나머지가 0이 아니다. year%100 != 0 이라는 뜻이지
- 이걸 동시에 충족시켜야 하니 이 조건을 and(&&)로 묶으면 되겠군
if ( year%4 == 0 && year%100 != 0 )
{
// 위 조건을 만족시키면 윤년 맞아!
}
else if
{
// 만족 안시키면 윤년 아니야!
}
이 정도로 구현할 수 있겠군. 본문에 추가해볼까?
#include <stdio.h>
int main()
{
int year;
printf("숫자를 입력하세요 : ");
scanf("%d", &year);
if ( year%4 == 0 && year%100 != 0 )
{
printf("윤년 맞아!");
}
else
{
printf("윤년 아니야!");
}
return 0;
}
- 그런데 아까 400으로 나눠 떨어지는건 윤년이 맞다고 했잖아. 뭐 이걸 구현하기는 식은죽 먹기군
if(year%400 == 0)
{
printf("윤년 맞아!")
}
- 그런데 고민이 생겨버렸군.
(ㄱ) if ( year%4 == 0 && year%100 != 0 )
{
printf("윤년 맞아!");
}
else
{
printf("윤년 아니야!");
}
(ㄴ) if ( year%400 == 0 )
{
printf("윤년 맞아!");
}
(ㄱ)과 (ㄴ) 어떤걸 먼저 검사해야 할까?
- 2400년을 예로 들어서 (ㄱ)을 먼저 검사한다고 해보자.
year%4 == 0 이부분은 충족하지만, year%100 != 0 이부분은 충족시키지 못하네.
둘다 동시에 충족해야 윤년이라고 했지? 즉, (ㄱ) 조건문은 2400년을 윤년으로 인식하지 않는군! 그러면 안되지!
즉... (ㄴ)을 먼저 검사해야 한다는 것이지. 그러고도 조건이 충족되지 않으면(else) (ㄱ)을 검사하게 하자.
#include <stdio.h>
int main()
{
int year;
printf("숫자를 입력하세요 : ");
scanf("%d", &year);
if ( year%400 == 0 ) // 400으로 나눴을때 나머지가 0인가?
{
printf("윤년 맞아!");
}
else // 이부분과 아래 if 부분은 붙일 수 있음 else if (yea... 이런 식으로
if ( year%4 == 0 && year%100 != 0 ) // 4로 나눴을때 나머지가 0이면서, 100으로 나눴을때는 나머지가 0이 아닌가?
{
printf("윤년 맞아!");
}
else
{
printf("윤년 아니야!");
}
return 0;
}
끝.
주어진 문제에서 %를 3번 이하로 쓰라고 했는데, mod의 %를 의미하는거라 생각합니다. ^^; 또는 문제에 연도를 제시해줬을거라 생각됩니다.
scanf의 %도 사용한걸로 치면... ㄷㄷ
누가 한번 돌려보시고 오류 부분 지적해주세요. 컴파일러가 없어서 핸드코딩에 가깝습...
죄송합니다. 댓글 작성은 회원만 가능합니다.