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