이문제를 풀어주세요... 두뇌가헷갈림..ㅠ c언어
글쓴이: maguro****@Naver / 작성시간: 토, 2017/02/18 - 11:53오후
조건문을 사용하여 년도와 월을 입력하면 그 달의 날 수를 (ex 3월 -> 31일) 출력하는 프로그램을 만들어 보자. 단, 윤년의 경우도 고려해야 한다. 윤년 규칙은 년도가 4의 배수가 되는 해로 한다.
첫 줄에는 "Which year and month? Please input in YYYY MM"을 출력한다.
둘째 줄에는 연도와 월을 YYYY MM 형식으로 입력받는다. (ex. 2012년 3월 -> 2012 03)
셋째 줄에는 그 달의 날 수를 출력한다. 만약 1~12월 사이의 월이 입력되지 않았다면 "Error! Please input month from 1 to 12"를 출력한다.
코드 작성해주시길 바랍니다 언어는 c 언어입니다
Forums:


네이버에 물어보세요.
네이버에 물어보세요.
라고 하면 불친절한 답변이겠죠.
https://wiki.kldp.org/wiki.php/DocbookSgml/Beginner_QA-KLDP 읽어보셔요.
The C programming Language 책 읽어보면 답이 나오긴 하는데 그냥 가르쳐 드리면 공부 안 할 거죠?
http://alvand.basu.ac.ir/~dezfoulian/files/Programming/Prentice%20Hall%20-%20The%20C%20Programming%20Language-%20Brian%20W.%20Kernighan,%20Dennis%20M.%20Ritchie,%202nd%20ed.,%20ISBN%20.pdf
에서 답을 찾아보셔요.
힌트를 좀 더 드리면 윤년은 영어로 leap year
세벌 https://sebuls.blogspot.kr/
참고해보세요. 정확한지 확인해보시기 바랍니다.
잘못 알고 있을 수 도 있으니. 정확한 내용은 확인해보시기 바랍니다. //컴파일러 환경에 따라서. #include 지정이 필요 할 수 있습니다. #include <stdio.h> #include <stdlib.h> #if 0 C와 C++은 학원.직업학교.책.등에서 배우실 수 있구요. 정보처리 자격증'에서도 배우실 수 있습니다. 보통 날 수'는 이렇습니다. 주먹 마디'를 세어서 확인하죠. 1 2 3 4 5 6 7 8 9 10 11 12 31 28 31 30 31 30 31 31 30 31 30 31 //★조건문을 사용하여 년도와 월을 입력하면, 그 달의 날 수를(ex 3월 -> 31일) 출력하는 프로그램을 만들어 보자. 조건문을 사용해서 년도와 월을 입력한다는 건. 말이 이상합니다. if()는 조건문인데. 조건문은 입력을 할 수 없습니다. 년도와 월을 입력받고. 조건문으로 비교하여. 그 달의 날 수 를(ex 3월 -> 31일) 출력하는 프로그램을 만들어 보자. 이런 표현이 어울릴겁니다. scanf() 는 문자와 숫자를 입력받을 수 있습니다. 각 함수에 용도와 인자값.리턴값.오류값을 확인하는것은 중요합니다.구글.네이버.MSDN 등의 문서를 참고해보세요. http://blog.naver.com/skatn9752/220789823632 http://www.cplusplus.com/reference/cstdio/scanf/ http://itguru.tistory.com/36 https://msdn.microsoft.com/ko-kr/library/9y6s16x1.aspx https://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm http://ith.kr/chair/c/c1701.html //★단, 윤년의 경우도 고려해야 한다. 윤년 규칙은 년도가 4의 배수가 되는 해로 한다. C언어 윤년(leap year)인 년도 구하기 http ://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=248743590&qb=7Jyk64WE&enc=utf8§ion=kin&rank=4&search_sort=0&spq=0 태양력의 오차를 줄이기 위한 방법, 윤년! http ://cafe.naver.com/cjinvariant/32290 윤년'은 4의 배수'인데. 4의 배수가 되는 연도 중에서 100으로 나누어 떨어지는 연도를 제외한 나머지해가 윤일이 있는 윤년입니다. 단 예외 적으로 100으로 나누어 떨어지는 연도 중에서 400으로 나누어 떨어지는 해는 다시 윤몀으로 합니다. 윤년'이면. 2월 28일에 +1일을 더하라는 말 같네요. BOOL bLeap = false; if (year % 4 == 0) //4의 배수가 되는 연도 중에서 { if (year % 100 == 0) //100으로 나누어 떨어지는 연도 { if (year % 400 == 0) //400으로 나누어 떨어지는 해 { printf("%d\n", year); bLeap = true; } } else //제외한 { printf("%d\n", year); //윤년 bLeap = true; } } //★첫 줄에는 "Which year and month? Please input in YYYY MM"을 출력한다. printf("Which year and month? Please input in YYYY MM\n"); //★둘째 줄에는 연도와 월을 YYYY MM 형식으로 입력받는다. (ex. 2012년 3월 -> 2012 03) scanf("%d %d", nYYYY, nMM); //★셋째 줄에는 그 달의 날 수를 출력한다. printf("%d", n); //★만약 1~12월 사이의 월이 입력되지 않았다면 "Error! Please input month from 1 to 12"를 출력한다. //★코드 작성해주시길 바랍니다 언어는 c 언어입니다 #endif int main() { printf("Which year and month? Please input in YYYY MM\n"); int nYYYY = 0; int nMM = 0; scanf("%d %d", &nYYYY, &nMM); printf("입력된 값 : %d %d\n", nYYYY, nMM); if (1 <= nMM && nMM <= 12) { } else { printf("Error!Please input month from 1 to 12\n"); return 0; } //그 달의 날 수. //1 2 3 4 5 6 7 8 9 10 11 12 //31 28 31 30 31 30 31 31 30 31 30 31 int nDay[13] = { -1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int i = 0; for (i = 0; i < 13; i++) { if (i == 0) { printf(" [index:%d day:%d] ", i, nDay[i]); printf("i가 0인 경우는 배열인덱스 번호와 달월을 맞추기 위해. 사용하지 않습니다.\n"); } else { printf(" [index:%d day:%d]\n", i, nDay[i]); } } bool bLeap = false; if (nYYYY % 4 == 0) //4의 배수가 되는 연도 중에서 { if (nYYYY % 100 == 0) //100으로 나누어 떨어지는 연도 { if (nYYYY % 400 == 0) //400으로 나누어 떨어지는 해 { // printf("%d\n", nYYYY); //윤년 bLeap = true; } } else //제외한 { // printf("%d\n", nYYYY); //윤년 bLeap = true; } } if (bLeap == true && nMM == 2) { printf("날수 %d (윤년)+1일 추가함.\n", nDay[nMM]+1); } else { printf("날수 %d\n", nDay[nMM]); } return 0; } //주의 사항 //컴파일러 버전에 따라서. bool 과 true 는 BOOL 과 TRUE 로 다르게 표시되거나 값을 확인해보셔야 합니다. //x86과 x64 컴파일러에 따라서 다른 경우도 있을 수 있으니. 확인해보셔야 합니다. //scanf() 혹은 각 함수의 용도. 인자값. 리턴값. 오류값을 모두 확인해 보시기 바랍니다. //각 변수에 초기화를 항상 확인해 보셔야 합니다. //C 에서는 변수 선언을 항상 맨 위에 하셔야 합니다. C++은 어디든 변수 선언이 가능합니다. //변수 배열갯수를 넉넉하게 해주시는것이 좋습니다. //if() 조건문에서 != 보다는 == 을 사용하시면. 알아보기 편합니다. {}로 항상 구분해주셔야 알아보기 편합니다.----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
지나가다 보여서 댓글 달아봅니다
#include <stdio.h> int main(void) { int year, month; printf("Which year and month? Please input in YYYY MM\n"); scanf_s("%d %d", &year, &month); if (1 <= month && month <= 12) { if (month == 2) { if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) { printf("29\n"); } else { printf("28\n"); } } else { printf("29\n"); } } else { printf("28\n"); } } else if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) { printf("31\n"); } else if (month == 4 || month == 9 || month == 11) { printf("30\n"); } } else { printf("Error! Please input month from 1 to 12\n"); } return 0; }아마 틀릴겁니다..
저도 프로그래밍 공부 막 시작한 참인데 한참을 머리 싸매고 있었네요 ㅋㅋㅋ
두번째 else if의 조건에서
6월이 빠졌네요 ㅠㅠ
이런 질문 개발자들에 실례가 되는 질문입니다.
선배한테 학교 숙제 코드 알려 달라는 수준의 질문은 아무래도 다들 싫어 하겠죠..
아무리 간단한 문제여도.. 해 볼수 있는걸 최대한 해보고..
이부분에서 에러가 나는데 도움을 요청합니다.. 라는 식이라면
누구나 기쁘게 도와주죠..
요런 질문은 피하시는게 좋습니다.
나중에 취직도 힘들어 집니다..
프로그래밍 능력보다
프로그래밍 능력보다 인성과 사회생활부터 배우셔야겠습니다.
이런 코드 짜는 질문 자체는 지양해야겠지만
윗 분께서들 많이 답을 달아주셨는데, 문득 최대한 깔끔하고 간소하게 해보면 어떨까 싶어서 선배님들께서 짠 코드를 조금 다듬어보았습니다.
#include <stdio.h> #define MAX_MONTH 12 int main() { int LastDayOfMonth[MAX_MONTH] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int yyyy, mm; printf("Which year and month? Please input in YYYY MM\n"); scanf_s("%d %d", &yyyy, &mm); if (mm < 1 || 12 < mm) { printf("Error! Please input month from 1 to 12\n"); return -1; } if (mm == 2) { /* 윤년의 조건 Case 1. 서기 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. Case 2. Case 1의 경우 중 100으로 나누어 떨어지는 해는 평년으로 한다. Case 3. Case 2의 경우 중 400으로 나누어 떨어지는 해는 다시 윤년으로 한다. */ if (yyyy % 4 == 0) // Case 1 { if (yyyy % 100 == 0) // Case 2 { if (yyyy % 400 == 0) // Case 3 { LastDayOfMonth[1] = 29; // Case 3 적용 } } else { LastDayOfMonth[1] = 29; // Case 1 적용 } } } // index가 0부터 시작 이므로 월을 index로 변경시 -1을 빼준다. printf("%d", LastDayOfMonth[mm - 1]); return 0; }조금 더 간단히 할 수도 있어요. 4의배수만 생각하면
조금 더 간단히 할 수도 있어요. 4의배수만 생각하면 됨. 100의 배수 400의 배수 생각하지 말고요.
왜냐고요? 처음의 문제를 보셔요.
조건문을 사용하여 년도와 월을 입력하면 그 달의 날 수를 (ex 3월 -> 31일) 출력하는 프로그램을 만들어 보자. 단, 윤년의 경우도 고려해야 한다. 윤년 규칙은 년도가 4의 배수가 되는 해로 한다.
라고 되어 있으니까요.
세벌 https://sebuls.blogspot.kr/
흠. 그 부분만큼은 질문자님이 스스로 깨닫고 고쳐볼
흠. 그 부분만큼은 질문자님이 스스로 깨닫고 고쳐볼 수 있도록 다들 쉬쉬하고 있던 것 아니었나요?
Blind copy를 잡을 수 있는 좋은 아이디어라고 생각했는데요. :)
댓글 달기