게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자러 가신 금치산자 님을 위한 윤년 프로그래밍 짜는법
게시물ID : computer_82022짧은주소 복사하기
작성자 : Fairytale
추천 : 5
조회수 : 601회
댓글수 : 3개
등록시간 : 2013/03/22 03:03:59

문제 : 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의 %도 사용한걸로 치면... ㄷㄷ

누가 한번 돌려보시고 오류 부분 지적해주세요. 컴파일러가 없어서 핸드코딩에 가깝습...

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호