이문제를 풀어주세요... 두뇌가헷갈림..ㅠ c언어

maguro****@Naver의 이미지

조건문을 사용하여 년도와 월을 입력하면 그 달의 날 수를 (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 언어입니다

세벌의 이미지

네이버에 물어보세요.
라고 하면 불친절한 답변이겠죠.

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

shint의 이미지

잘못 알고 있을 수 도 있으니. 정확한 내용은 확인해보시기 바랍니다.
 
 
 
//컴파일러 환경에 따라서. #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&section=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() 조건문에서 != 보다는 == 을 사용하시면. 알아보기 편합니다. {}로 항상 구분해주셔야 알아보기 편합니다.

댓글 첨부 파일: 
첨부파일 크기
Package icon 윤달 (윤년) 을 C 로 구현.zip18.05 KB

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 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;
}

아마 틀릴겁니다..
저도 프로그래밍 공부 막 시작한 참인데 한참을 머리 싸매고 있었네요 ㅋㅋㅋ

ㅇㅇ의 이미지

6월이 빠졌네요 ㅠㅠ

ojwojwoj의 이미지

선배한테 학교 숙제 코드 알려 달라는 수준의 질문은 아무래도 다들 싫어 하겠죠..
아무리 간단한 문제여도.. 해 볼수 있는걸 최대한 해보고..
이부분에서 에러가 나는데 도움을 요청합니다.. 라는 식이라면
누구나 기쁘게 도와주죠..
요런 질문은 피하시는게 좋습니다.
나중에 취직도 힘들어 집니다..

twinwings의 이미지

프로그래밍 능력보다 인성과 사회생활부터 배우셔야겠습니다.

koreaphb의 이미지

윗 분께서들 많이 답을 달아주셨는데, 문득 최대한 깔끔하고 간소하게 해보면 어떨까 싶어서 선배님들께서 짠 코드를 조금 다듬어보았습니다.

#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의배수만 생각하면 됨. 100의 배수 400의 배수 생각하지 말고요.
왜냐고요? 처음의 문제를 보셔요.

조건문을 사용하여 년도와 월을 입력하면 그 달의 날 수를 (ex 3월 -> 31일) 출력하는 프로그램을 만들어 보자. 단, 윤년의 경우도 고려해야 한다. 윤년 규칙은 년도가 4의 배수가 되는 해로 한다.

라고 되어 있으니까요.

 의 이미지

흠. 그 부분만큼은 질문자님이 스스로 깨닫고 고쳐볼 수 있도록 다들 쉬쉬하고 있던 것 아니었나요?
Blind copy를 잡을 수 있는 좋은 아이디어라고 생각했는데요. :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.