C 언어 달력 만들기 | [혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력 상위 105개 답변

당신은 주제를 찾고 있습니까 “c 언어 달력 만들기 – [혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://th.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 한빛미디어 이(가) 작성한 기사에는 조회수 2,821회 및 좋아요 9개 개의 좋아요가 있습니다.

c 언어 달력 만들기 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력 – c 언어 달력 만들기 주제에 대한 세부정보를 참조하세요

※ 추천합니다!
– 학부 강의를 수강했지만, C 프로그래밍에 여전히 아쉬움이 있는 전공자
– 학원이나 과외로 따로 C 언어를 배우기에는 시간과 여건이 부족한 현직 개발자
– C 프로그래밍에 관심이 있는 일반인 누구나
※ 이 동영상은 『혼자 공부하는 C 언어』 책 내용을 토대로 제작되었습니다.
▶ 도서 자세히 보기 : http://bit.ly/2qCGGzV
▶ 저자에게 질문하기 : https://cafe.naver.com/thisisc
▶ 혼공 커뮤니티 : http://hongong.hanbit.co.kr/c%EC%96%B8%EC%96%B4/

c 언어 달력 만들기 주제에 대한 자세한 내용은 여기를 참조하세요.

달력 프로그램 만들기 완전정복!

달력 프로그램 구성 사용자에게 출력하고 싶은 년도와 달을 입력하도록 하고, 달력을 출력 … #8 C / C++ 함수 기본 / 표준 함수 / 사용자 정의 함수.

+ 자세한 내용은 여기를 클릭하십시오

Source: cwithvisual.tistory.com

Date Published: 6/1/2022

View: 972

c언어 달력 출력 프로그램을 만들어 봅시다. – 강아지의 코딩공부

c언어 교재에 단골로 나오는 소재는, 달력을 예쁘게 출력하는 것입니다. 처음 접해보면 어려울 수도 있는데요. 기능을 잘 쪼개고 들어가면 됩니다.

+ 더 읽기

Source: codingdog.tistory.com

Date Published: 12/3/2022

View: 4178

[C언어 과제] 달력 출력하기 – 코카콜라

두 번째 C언어 과제로 달력을 출력하는 프로그램을 짰다. 윤년 규칙은 1) 4년으로 나누어지는 해는 윤달(2월은 29일)이 있다.

+ 여기에 표시

Source: cokacola.tistory.com

Date Published: 10/24/2021

View: 6099

C언어) 달력 만들기(1/2) 기본

C언어) 달력 만들기(1/2) 기본. 쫑드기 2020. 3. 23. 01:03. 달력을 만들기 위해선 윤년과 윤일을 알아야 합니다! 윤년이란? 태양의 주기가 365일이 아니라 365.2422 …

+ 더 읽기

Source: hi-pinpoint.tistory.com

Date Published: 3/27/2021

View: 3016

[C언어] C언어로 달력 만들기. 달력 출력하기. – 안산드레아스

C언어로 간단하게 달력 만드는 코드이다. 필요하면 수정해서 사용한다. 전처리기에 #define 에 달의 일수가 30인지 31일 인지 정하면 된다.

+ 여기에 표시

Source: ansan-survivor.tistory.com

Date Published: 8/14/2022

View: 3144

[c] C언어로 달력만들기! – 길덕근불로그

C 언 어 로 달 력 만 들 기 코드는 인터넷보고 대충 짜봤는데 엄청 헷갈린다…ㅠㅠ 달력만드는것도 정말 쉬운게 아니구나 하고 한번더 느낀거 같다.

+ 여기를 클릭

Source: togll.tistory.com

Date Published: 8/18/2021

View: 4877

주제와 관련된 이미지 c 언어 달력 만들기

주제와 관련된 더 많은 사진을 참조하십시오 [혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력
[혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력

주제에 대한 기사 평가 c 언어 달력 만들기

  • Author: 한빛미디어
  • Views: 조회수 2,821회
  • Likes: 좋아요 9개
  • Date Published: 2020. 2. 22.
  • Video Url link: https://www.youtube.com/watch?v=6kq2nnP-JeY

달력 프로그램 만들기 완전정복!

달력 프로그램 만들기

달력 프로그램 구성

사용자에게 출력하고 싶은 년도와 달을 입력하도록 하고, 달력을 출력해준다.

여러 개의 함수로 구성되어 있으며 긴 코드를 작성하는 연습을 할 수 있다.

여러 함수 설명 다음 맨 마지막에 총 코드를 합쳐 놓았다.

예시

달력 프로그램 출력 예시

만약 함수에대해 궁금하면 간단히 정리한 이 글을 참고하면 된다.

https://cwithvisual.tistory.com/entry/%ED%91%9C%EC%A4%80-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EC%9D%98-%ED%95%A8%EC%88%98

[문제]

year와 month를 전달 받아 해당 달을 출력하는 printMonth함수,

year와 month를 전달 받아 해당 월의 타이틀을 출력하는 printMonthTitle함수,

month를 전달 받아 해당 월을 출력하는 printMonthName함수,

year와 month를 전달 받아 요일과 일을 출력하는 printMonthBody함수,

year와 month를 전달 받아 시작하는 요일을 정수로 반환하는 getStartDay함수,

year와 month를 전달 받아 1800 혹은 1900년도부터 해당 월까지의 일을 더하여 반환하는 getTotalNumberOfDays함수,

year와 month를 전달 받아 해당월에 몇일이 있는지 반환하는 getNumberOfDaysInMonth함수,

year를 전달받아 윤년인지 확인하는 isLeapYear함수를 구현하세요.

(단, 1800년 1월 1일은 수요일)

main함수는 다음과 같다. (수정 시 0점처리)

int main(void){ int year, month; scanf(“%d”, &year); scanf(“%d”, &month); printMonth(year, month); return 0; }

(단, 입력 받는 년도는 1900보다 큽니다.)

[풀이]

먼저 문제에 적힌대로 각 함수의 원형을 적어준다. 작성해야 할 함수가 많으면 일다 문제에 맞게 원형들을 적은 뒤에 생각하면 접근하기 편한 경우도 있다. 나는 이런 방식이 편해서 일단은 원형을 쭉 적어준 다음에 하나씩 접근하면서 함수를 작성하는 편이다.

//함수의 원형 //해당 월을 출력하는 함수 void printMonth(int year, int month); //월과 년도(ex. April, 1998)를 출력하는 함수 void printMonthTitle(int year, int month); //달의 영어 이름을 출력하는 함수 void printMonthName(int month); //해당 월을 출력하는 함수 void printMonthBody(int year, int month); //해당 월의 시작하는 날을 찾는 함수 int getStartDay(int year, int month); //1800년 1월 1일 부터 며칠이 되는지 계산하는 함수 int getTotalNumberOfDays(int year, int month); //해당 월에 며칠이 있는지 확인하는 함수 int getNumberOfDaysInMonth(int year, int month); //윤년인지 확인하는 함수 int isLeapYear(int year);

우선 main함수를 보자.

int main(void){ int year, month; scanf(“%d”, &year); scanf(“%d”, &month); printMonth(year, month); return 0; }

main함수(문제에 주어짐)에서 보면 작성해야 할 함수는 printMonth(year, month)함수이다.

이 함수는 해당 월을 출력하는 함수이다. 다음과 같이 달력의 title과 body로 함수 안의 내용을 나눌 수 있다.

달력 프로그램 printMonth

void printMonth(int year, int month) { // 달의 Title부분 printMonthTitle(year, month); // 달의 Body부분 printMonthBody(year, month); }

그러면 우리가 작성해야할 함수는 보다싶이 printMonthTitle함수와 printMonthBody함수이다.

우선 printMonthTitle 함수부터 생각해보자.

printMonthTitle

이 부분은 입력 받는 year와 month에 따라 다른 월과 년도를 출력하면 되는 부분이다. 그 외에 다른 부분은 같다.

예를 들면, April, 1998을 출력하는 부분이다.

//월과 년도를 출력하는 함수 void printMonthTitle(int year, int month) { //월을 이름으로 바꿔주는 부분 ex. 4 -> April printMonthName(month); printf(” %d

“, year); // 년도 출력 printf(“—————————–

“); // 변하지 않는 부분 (title과 body를 나누는 부분) printf(” Sun Mon Tue Wed Thu Fri Sat

“); // 변하지 않는 부분 (요일) }

여기서 또 작성해야 할 함수가 보이는데 printMonthName 함수이다.

이 함수는 달의 영어이름을 출력하는 함수이다. ex. 4 -> April

그렇다면 숫자에 따라 출력하는 이름이 달라지니 switch함수를 이용해서 작성하는 것이 편하다.

void printMonthName(int month) { switch (month) { case 1: printf(“January”); break; case 2: printf(“February”); break; case 3: printf(“March”); break; case 4: printf(“April”); break; case 5: printf(“May”); break; case 6: printf(“June”); break; case 7: printf(“July”); break; case 8: printf(“August”); break; case 9: printf(“September”); break; case 10: printf(“October”); break; case 11: printf(“November”); break; case 12: printf(“December”); break; } }

여기까지해서 title부분의 함수 작성은 끝났다. 이제 body부분을 작성해보자.

printMonthBody

printMonthBody 함수는 해당 월을 출력하는 함수이다. 해당 월의 시작하는 날로부터 요일에 맞게 해당 월의 끝까지 출력이 되는 것이다. 따라서 해당 월의 시작 날의 요일을 을 알아햐 하고 첫 날을 해당하는 요일에 맞게 출력하기 위해 공간을 채워야 한다.

void printMonthBody(int year, int month) { // 해당 월의 시작하는 날 int startday = getStartDay(year, month); // 1800년 1월 1일 부터 며칠이 되는지 계산 int numberofdaysinmonth = getNumberOfDaysInMonth(year, month); // 첫 날 이전의 공간 채우기 for (int i = 0; i < startday; i++) printf(" "); // 공백 4칸 // 첫 날부터 마지막 날까지 출력 for (int i = 1; i <= numberofdaysinmonth; i++) { printf("%4d", i); // 요일 별 공백은 4칸임 if ((i + startday) % 7 == 0) printf(" "); // 요일의 한 줄을 채웠으면 그 다음줄로 넘어가야 함 } } 그러면 여기서 또 작성해줘야 하는 함수가 getStartDay와 getNumberOfDaysInMonth가 있다. getStartDay부터 봐보자. 이 함수는 해당 월의 시작하는 날의 요일을 찾는 함수이다. 1800년 1월 1일이 수요일인 것을 참고하면 다음과 같이 요일에 해당하는 숫자를 얻을 수 있다. getStartDay 즉, 1800년 1월 1일로부터 총 며칠이 지났는지 알면 해당 월의 시작하는 날이 몇요일인지 알 수 있다. int getStartDay(int year, int month) { int startday1800 = 3; // 1800년 1월 1일은 수요일 int totalnumberofdays = getTotalNumberOfDays(year, month); // 1800년 1월 1일로부터 해당하는 년도와 월까지 날의 합 return (startday1800 + totalnumberofdays) % 7; } 이 함수에서 또 필요한 것이 1800년 1월 1일 부터 며칠이 되는지 계산하는 getTotalNumberOfDays함수가 필요하다. int getTotalNumberOfDays(int year, int month) { int total = 0; // 총 합을 담아줄 변수 선언 // 해당하는 년도 이전해까지의 모든 날의 합 ex. 1998년이라면 1800년 1월 1일 부터 1997년 12월 31일까지 for (int i = 1800; i < year; i++) { if (isLeapYear(i)) total += 366; // 윤년일 경우 366일 else total += 365; // 평년일 경우 365일 } // 해당하는 달의 이전까지의 모든 날의 합 ex. 4월이라면 1월 1일 부터 3월 31일까지 for (int i = 1; i < month; i++) total = total + getNumberOfDaysInMonth(year, i); return total; // 1800년 1월 1일 부터 며칠이 되는지 계산한 값을 반환 } 그러면 또 작성해줘야 하는 함수가 보이는데 바로 윤년인지 확인해주는 함수이다. isLeapYear는 윤년인지 확인하는 함수인데 윤년은 다음과 같다. 4로 나누어 떨어지는 년도는 윤년, 4로 나누어 떨어지더라도 100으로 나누어 떨어지면 평년, 4로 나누어 떨어지고, 100으로 나누어 떨어지나, 400으로 나누어 떨어지면 윤년이다. 즉, 윤년인 경우만 정리하면 다음과 같이 쓸 수 있다. ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) 이 조건식을 이용하여 isLeapYear 함수를 다음과 같이 나타낼 수 있다. 윤년이면 1을 평년이면 0을 반환하게 했는데, 이는 윤년이 평년보다 하루가 많은 것과 1은 참을 뜻하고 0은 거짓을 뜻하는 것을 참고했다. int isLeapYear(int year) { // 윤년일 경우 1을 반환 if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) return 1; // 평년일 경우 0을 반환 else return 0; } 이제 또 작성해야 할 함수를 보면 getNumberOfDaysInMonth 함수가 남았다. getNumberOfDaysInMonth 함수는 해당 월에 며칠이 있는지 확인하는 함수이다. int getNumberOfDaysInMonth(int year, int month) { // 1, 3, 5, 7, 8, 10, 12 월의 경우 31일까지 있다. if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) return 31; // 4, 6, 9, 11 월의 경우 30일까지 있다. if (month == 4 || month == 6 || month == 9 || month == 11) return 30; // 2월인 경우 윤년이면 29일, 평년이면 28일까지 있다. if (month == 2) { if (isLeapYear(year) == 1) return 29; else return 28; } } 여기까지해서 달력 프로그램에 사용될 함수들을 적어봤다. 정리할겸 printMonthBody 함수를 다시 보면 이해가 완벽히 될 것이다. printMonthBody void printMonthBody(int year, int month) { // 해당 월의 시작하는 날 int startday = getStartDay(year, month); // 1800년 1월 1일 부터 며칠이 되는지 계산 int numberofdaysinmonth = getNumberOfDaysInMonth(year, month); // 첫 날 이전의 공간 채우기 for (int i = 0; i < startday; i++) printf(" "); // 공백 4칸 // 첫 날부터 마지막 날까지 출력 for (int i = 1; i <= numberofdaysinmonth; i++) { printf("%4d", i); // 요일 별 공백은 4칸임 if ((i + startday) % 7 == 0) printf(" "); // 요일의 한 줄을 채웠으면 그 다음줄로 넘어가야 함 } } 코드를 총 합치면 다음과 같다. #include //함수의 원형 void printMonth(int year, int month); void printMonthTitle(int year, int month); void printMonthName(int month); void printMonthBody(int year, int month); int getStartDay(int year, int month); int getTotalNumberOfDays(int year, int month); int getNumberOfDaysInMonth(int year, int month); int isLeapYear(int year); //year와 month를 전달 받아 해당 월을 출력 -> title, body void printMonth(int year, int month) { printMonthTitle(year, month); printMonthBody(year, month); } //월과 년도를 출력 void printMonthTitle(int year, int month) { printMonthName(month); printf(” %d

“, year); printf(“—————————–

“); printf(” Sun Mon Tue Wed Thu Fri Sat

“); } //month를 전달 받아 해당 달의 영어 이름을 출력 void printMonthName(int month) { switch (month) { case 1: printf(“January”); break; case 2: printf(“February”); break; case 3: printf(“March”); break; case 4: printf(“April”); break; case 5: printf(“May”); break; case 6: printf(“June”); break; case 7: printf(“July”); break; case 8: printf(“August”); break; case 9: printf(“September”); break; case 10: printf(“October”); break; case 11: printf(“November”); break; case 12: printf(“December”); break; } } //year와 month를 전달 받아 요일과 일을 출력 void printMonthBody(int year, int month) { int startday = getStartDay(year, month); int numberofdaysinmonth = getNumberOfDaysInMonth(year, month); for (int i = 0; i < startday; i++) printf(" "); for (int i = 1; i <= numberofdaysinmonth; i++) { printf("%4d", i); if ((i + startday) % 7 == 0) printf(" "); } } // 해당 월의 시작하는 날이 몇 요일인지 찾는 함수 int getStartDay(int year, int month) { int startday1800 = 3; int totalnumberofdays = getTotalNumberOfDays(year, month); return (startday1800 + totalnumberofdays) % 7; } // 1800년 1월 1일 부터 며칠이 되는지 계산 int getTotalNumberOfDays(int year, int month) { int total = 0; for (int i = 1800; i < year; i++) { if (isLeapYear(i)) total += 366; else total += 365; } for (int i = 1; i < month; i++) total = total + getNumberOfDaysInMonth(year, i); return total; } //year와 month를 전달 받아 해당월에 몇일이 있는지 int getNumberOfDaysInMonth(int year, int month) { if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) return 31; if (month == 4 || month == 6 || month == 9 || month == 11) return 30; if (month == 2) { if (isLeapYear(year) == 1) return 29; else return 28; } } //year를 전달받아 윤년인지 확인 int isLeapYear(int year) { if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) return 1; else return 0; } int main(void) { int year, month; // 년도 입력 printf("year : "); scanf("%d", &year); // 월 입력 printf("month : "); scanf("%d", &month); printMonth(year, month); return 0; }

c언어 달력 출력 프로그램을 만들어 봅시다.

반응형

c언어 교재에 단골로 나오는 소재는, 달력을 예쁘게 출력하는 것입니다. 처음 접해보면 어려울 수도 있는데요. 기능을 잘 쪼개고 들어가면 됩니다. 코딩 테스트에서도 기능을 잘 쪼개고 들어가는 것은 굉장히 유용한 스킬 이니, 익혀 두시면 좋습니다.

일단, 간단한 플로우 먼저 그려봅시다.

복잡해 보이지만, 사실 yyyy년 mm월 1일의 요일과, yyyy년 mm월이 몇 일까지 있는지만 구하면 어렵지 않게 출력할 수 있음을 알 수 있습니다. 이 기능들을 또 쪼개 보겠습니다. yyyy년 mm월 1일의 요일을 알기 위해서는 기준이 되는 날의 요일을 알아야 합니다. 다음에, 월별로 몇 일까지 있는지를 알아야 합니다. 그래야, 기준 요일로부터 몇 일만큼 지났는지를 누적할 수 있기 때문입니다.

해당 기능을 구현하기 위해서 필요한 기능을 따로 정리해 보았습니다. 다음에 월별 날 수는 어떻게 구할까요? 12개의 월밖에 없으니, 그냥 배열로 저장해도 될 겁니다. 문제는 윤년인 경우에 2월은 29일까지 늘어난다는 점입니다. 그러면, 2월은 28일까지 있다고 저장을 해 놓고 윤년이라면 그 값에 1을 더하기만 하면 됩니다.

월별 날 수를 구하기 위해 필요한 것은, 윤년인지 판단하는 메소드임을 알 수 있습니다. 그런데, yyyy년 mm월이 몇 일까지 있을까는 또 어떤가요?

역시 월별 날 수를 구해야 함을 알 수 있습니다. 중복된 부분인가요? 이 부분을 모듈화 하면 됩니다.

먼저, get_day_of_month입니다. 이것은 yyyy년 mm월의 날 수를 구합니다. 36번째 줄에서, 월별로 몇 개의 일이 있는지를 초기화 합니다. 37번째 줄에서, leaf year이면 day_of_month[2]에 1을 추가합니다.

그러면, is_leaf_year 함수로 yyyy가 윤년인지 판단을 하면 되겠네요. 자바에서는 윤년을 고려하지 않은 월별 일 수를 필드로 선언해 두고, 2월의 날 수를 리턴하려고 할 때, 윤년이라면, 윤년을 고려하지 않은 2월 일 수인 28에 1을 더한 29를 리턴하면 됩니다. 그러면, 이러한 로직은 어디에 쓸까요?

yyyy년 mm월 1일의 요일을 구할 때도 쓸 수 있습니다. 1년 1월 1일이 월요일이라는 것을 알고 있다면요.

get_day에서도 써먹을 수 있습니다. 이것은 yyyy년 mm월 1일의 요일을 구하는 것입니다. 기준 일로부터 yyyy년 mm월 1일이 얼마만큼 지났느냐도 사실은, YYYY년 MM월의 일 수의 누적합이기 때문입니다. 32번째 줄에 (1 + past) % 7이 문제인데요. 1을 리턴하면 월요일, 2를 리턴하면 화요일, … , 6을 리턴하면 토요일이라는 의미입니다.

이해하기 어려워 보이는데요. 가독성을 어떻게 하면 개선할 수 있을지는 고민해 보시는 것도 좋을 듯 싶어요. 어찌 되었던 핵심은, 기능별로 쪼개서, 모듈화를 시켰다는 것이고 , 공통 부분을 함수로 빼 버렸다는 점입니다. 그리고 한 함수에 하나의 기능을 담으려고 했다는 것 도 중요하게 볼 만 합니다. 네이밍만 고친다면요.

여기까지 구현하셨다면, 출력하는 부분은 크게 어렵지 않습니다.

yyyy년 mm월 1일의 시작 요일을 구하고, yyyy년 mm월의 일 수를 구합니다. 그리고 나서, print_cal 함수를 호출합니다.

15번째 줄에, 요일을 표시합니다. 다음에, 16번째 줄에 보면, start_day까지 빈 공백 4개를 출력하는데요. start_day가 0이면 일요일, 1이면 월요일, … , 6이면 토요일을 의미합니다. 만약에 1일이 일요일부터 시작이라면 16번째 for loop를 돌지 않을 겁니다. 월요일이라면? 1번 도니까 4칸이 공백으로 있을 겁니다. 즉, 빈 칸을 만드는 작업을 합니다.

다음에, 18번째 부터가 문제인데요. 이것도 크게 어렵지 않습니다. 중요한 것은 21번째 줄에서 ke % 7의 값이 6이라면, 개행을 출력한다는 것인데요. 이는 ke % 7의 값이 6인 경우, 토요일이기 때문입니다. 실행 결과를 보겠습니다.

1993년 2월을 출력해 보았습니다.

잘 나왔음을 알 수 있습니다. 1995년 5월을 출력하면 어떨까요?

프로그램의 출력 결과는 위와 같습니다.

일치하네요. 전체 소스코드는 링크에 있습니다.

반응형

[C언어 과제] 달력 출력하기

두 번째 C언어 과제로 달력을 출력하는 프로그램을 짰다.

윤년 규칙은

1) 4년으로 나누어지는 해는 윤달(2월은 29일)이 있다.

2) 그러나 100년으로 나누어지는 해는 윤달이 없다.

3) 그러나 400년으로 나누어지는 해는 윤달이 있다. 이 규칙을 만족해야만 그 해가 윤년(2월은 29일)이고

아닌 경우에는 평년(2월은 28일)이다.

출력물은 다음과 같다.

윤년인지 아닌지 확인하는 부분은 함수를 따로 선언했고,

해당 년, 해당 달의 1일이 무슨 요일인지 만을 계산하여 출력했다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #include < stdio.h > int isyoon( int ); int main() { int year; // 사용자 입력 변수 int month; // 사용자 입력 변수 int i; // for문용 변수 int j; // for문용 변수 int k; // 저장용 변수 int sum = 0 ; // 현재의 모든 일 계산 변수 int chk = 0 ; // 윤년 확인 변수 int basicyear[ 12 ] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; // 기본 1~12월 일수 printf ( “출력할 년,달 입력 ex)2018 03 : ” ); scanf ( “%d %d” , & year, & month); //알고리즘 //윤달 확인 if (isyoon(year)) { chk = 1 ; basicyear[ 1 ] + + ; } else chk = 0 ; //0년부터 작년까지 며칠인지 셈 sum = 365 ; for (i = 1 ;i < year;i + + ) { if (isyoon(i)) sum + = 366 ; else sum + = 365 ; } //입력한 달까지 며칠인지 for (i = 0 ;i < month - 1 ;i + + ) { sum + = basicyear[i]; } //1월1일 무슨 요일인지 계산 k = sum % 7 ; //출력 printf ( "SUN\tMON\tTUS\tWED\tTHU\tFRI\tSAT " ); printf ( "=================================================== " ); //시작 요일에 맞춰 정렬 for (j = 0 ;j < k;j + + ) { printf ( "\t" ); } for (i = 1 ;i < = basicyear[month - 1 ];i + + ) { printf ( "%d\t" , i); if (k = = 6 ) { k = - 1 ; printf ( " " ); } k + + ; } printf ( " " ); } int isyoon( int a) { if ((a % 4 = = 0 ) & & ! (a % 100 = = 0 ) | | (a % 400 = = 0 )) { return 1 ; } else { return 0 ; } } Colored by Color Scripter cs 출력 부분은 일월화수목금토 형태로 출력하기 때문에 일요일은 0으로 설정하고 토요일은 6으로 설정한 뒤 토요일에 해당되는 일을 출력하면 엔터를 적용해주었다.

C언어) 달력 만들기(1

달력을 만들기 위해선 윤년과 윤일을 알아야 합니다!

윤년이란?

태양의 주기가 365일이 아니라 365.2422이라고 합니다. 이 작은 숫자가 몇 백 년 쌓이게 된다면 날짜가 밀리게 됩니다. 그래서 4년에 한 번씩 ‘윤일’을 둬서 1년을 366일로 만든 것입니다. 그게 바로 ‘윤일’이 들어간 ‘윤년’입니다.

윤일이란?

윤일이 들어가면 2월 28일에 하루를 더한 2월 29일이 됩니다.

윤달이란?

양력과 음력 사이에 날짜 차이 조정을 위해 음력에 추가시킨 달입니다. 음력 표기가 되어 있는 달력을 보면 4월 23일에 (음) 4월1일 이라고 표시되어 있는데, 5월 23일에는 (윤) 4월 1일이라고 되어 있습니다. 이게 바로 윤달입니다.

(2020년 양력 기준 5월 23일 ~ 6월 21일)

< 윤년을 구하는 방법 >

① 4년으로 나누어떨어지는 해는 윤년으로 한다.

② 그중에서 100으로 나누어떨어지는 해는 평년으로 한다. ③ 다만 400으로 나누어떨어지는 해는 다시 윤년으로 정한다. 이걸 종합해보면 (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0) 이런 식을 구할 수 있습니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 #include < stdio.h > #include < stdbool.h > bool Leap_year( int year); // Leap_month() 윤년 확인 함수 int main( void ) { int year,month; //년도, 월 int sum = 365 ; //총 날짜 수 int start_date = 0 ; //1일이 어디서부터 시작될지 결정하는 변수 int i; //for문 반복용 변수 int total_days[ 12 ] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; //달마다 총 날짜 수 //2월은 28일, 7,8월은 날짜 수 같음 주의! printf ( “Please enter the desired year : ” ); //원하는 년도를 입력해주시오. scanf ( “%d” , & year); printf ( “Please enter the desired month : ” ); //원하는 달을 입력해주시오. scanf ( “%d” , & month); if (Leap_year(year)) { total_days[ 1 ] + + ; //윤년이므로 2월에 총 날짜 수를 1더해줌 } for (i = 1 ; i < year; i + + ) //0년부터 입력한 년도까지 날짜를 모두 더함 { if (Leap_year(i)) { sum + = 366 ; } else { sum + = 365 ; } } for (i = 0 ; i < month - 1 ; i + + ) { sum + = total_days[i]; } start_date = sum % 7 ; //모두 더한 날짜를 7일단위로 나누어 나머지를 구함 printf ( " SUN\tMON\tTUS\tWED\tTHU\tFRI\tSAT " ); printf ( "=================================================== " ); for (i = 0 ; i < start_date; i + + ) //어디서부터 1일을 시작할지 결정 { printf ( "\t" ); } for (i = 1 ; i < = total_days[month - 1 ]; i + + ) //날짜 나열 { printf ( "%d\t" ,i); if (start_date = = 6 ) { printf ( " " ); //start_date가 6이 되면 7일이 한 줄에 모두 채워지기 때문에 그다음 줄로 개행시켜줘야 함 start_date = 0 ; // 0으로 초기화해서 다음 줄부터 다시 시작 } else { start_date + + ; } } printf ( " " ); return 0 ; } bool Leap_year( int year) { if ((year % 4 = = 0 ) & & (year % 100 ! = 0 ) | | (year % 400 = = 0 )) // 본문에서 설명. { return true ; } else { return false ; } } http://colorscripter.com/info#e " target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter http://colorscripter.com/info#e” target=”_blank” style=”text-decoration:none;color:white”> cs

출력 결과

앞으로 추가해 볼 기능

1) 달력 넘기기

2) 커서 위치 옮겨서 달력 중앙으로 보내기

3) 영어로 무슨 달인지 나타내기

아직 초보라 오류도 많이 나고 제가 느끼기엔 복잡했지만 천천히 하다 보니까 해결하게 됐습니다.

간단한 프로그래밍이지만 뿌듯합니다.

보완할 점이나 틀린 부분 있으면 피드백 부탁드립니다. 좋은 하루 보내세요!

[C언어] C언어로 달력 만들기. 달력 출력하기.

반응형

C언어로 간단하게 달력 만드는 코드이다.

필요하면 수정해서 사용한다.

전처리기에 #define 에 달의 일수가 30인지 31일 인지 정하면 된다.

#include #define START_DAY 1 // 첫째날이 수욜(3) #define DAYS_OF_MONTH 31 // 달의 일수 31일까지 int main(void) { int day, date; printf(“===========================

“); printf(“일 월 화 수 목 금 토

“); printf(“===========================

“); for (day = 0; day < START_DAY; day++) // 1일 시작전까지는 공백으로 체움. day=0 일욜~day=7 토욜 { printf(" "); } for (date = 1; date <= DAYS_OF_MONTH; date++) // DAYS~초기값 31 { if (day == 7) { printf(" "); day = 0; } day++; printf("%2d ", date); } printf(" "); return 0; } (결과) 반응형

[c] C언어로 달력만들기!

반응형

C 언 어 로 달 력 만 들 기

코드는 인터넷보고 대충 짜봤는데 엄청 헷갈린다…ㅠㅠ

달력만드는것도 정말 쉬운게 아니구나 하고 한번더 느낀거 같다.

자꾸 2020년 2월을 입력하면 1이 맨앞으로 이동하는데 고칠수 있는법을 한번더 생각해봐야겠다.

코드

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #include < stdio.h > #define leapyear(year) ((year)% 4 = = 0 & & ( (year)% 100 ! = 0 | | (year)% 400 = = 0 )) //윤년판정매크로 int main() { int year,month; int totalday[] = { 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; int lastyear,day,i; printf ( “몇년 몇월을 출력 하시겠습니까? : ” ); scanf ( “%d %d” , & year, & month); if (month = = 2 & & leapyear(year)) totalday[ 2 ] = 29 ; lastyear = year – 1 ; day = (lastyear + (lastyear / 4 ) – (lastyear / 100 ) + (lastyear / 400 ) + 1 )% 7 ; //0:일 1:월 2:화 3:수 …. for (i = 0 ;i < month;i + + ) { day + = totalday[i]; } day = day% 7 ; printf ( " %d년 %d일 " ,year,month); printf ( " 일\t월\t화\t수\t목\t금\t토 " ); for (i = i - day;i < totalday[month];i + + ) { if ((i + day)% 7 = = 0 ) printf ( " " ); if (i < 0 ) printf ( " \t" ); else printf ( "%2d\t" ,i + 1 ); } } Colored by Color Scripter cs 결과값 결과값. 반응형

키워드에 대한 정보 c 언어 달력 만들기

다음은 Bing에서 c 언어 달력 만들기 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력

  • 프로그래밍
  • C언어
  • C언어 배우기
  • C언어 책
  • C언어 책 추천
  • C언어 기초
  • C언어 강의
  • C언어 강좌
  • C언어 입문
  • C언어 무료 강의
  • 혼자 공부하는 c언어
  • 혼공 c언어
  • 서현우
[혼자 #공부하는 #C언어] #04 #달력프로그램3-총 #일 #수와 #요일 #출력


YouTube에서 c 언어 달력 만들기 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [혼자 공부하는 C언어] 04 달력프로그램3-총 일 수와 요일 출력 | c 언어 달력 만들기, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  택시 운전사 1080P 토렌트 | 편의점 여직원에게 오히려 역으로 강X 당하게 된 강도... 극소름 주의 ㄷㄷ (결말포함) 76 개의 정답

Leave a Comment