简单实现一个日历

思路:1.首先你必须给一个基准年 ,在给出这一年的某一天,是星期几     例如 2000 1 1 星期6
          2.那如何求2000  2 1是星期几呢?(1月1号的星期6+一月的天数)%7      要考虑平年闰年 2月天数不一样 
          3.那如何求2001 1 1是星期几?(2000年的一月一号+2000年的天数)%7 要考虑平年闰年天数不一样
         根据以上规律,要求出某年某月的日历,按照步骤3,只要先求出某年的1月1号星期几,再求出这一年某月的1号是星期几           即可.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int IsLeapYear ( int year )
{
	if ( (year % 4)==0 && (year % 100)!=0 || (year % 400)==0 )
		return 1;
	else
		return 0;

}

int main ( )
{
	int months[2][13] =
	{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
	0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	int base_year=2000;
	int base_weak = 6;
	int year;
	int month;
	printf ( "year-month" );
	scanf ( "%d%d", &year, &month );
	//求出当前年一月一号星期几
	int i;
	int total_days = 0;
	for ( i = base_year; i < year; i++ )
	{
		total_days += (365 + IsLeapYear ( i ));
	}
	int year_first = (total_days +base_weak ) % 7;
    total_days = 0;
	for ( i = 1; i < month; i++ )
	{
		total_days += months[IsLeapYear ( year )][i];
	}
	int month_first = (total_days + year_first) % 7;//当前月一号是星期几
   printf ( "sun mon tue wed tus fri sat\n" );
		for ( i = 0; i < month_first; i++ )
		{
			printf ( "    " );
		}
	for ( i = 1; i <= months[IsLeapYear ( year )][month]; i++ )
	{
		printf ( "%4d", i );
		if ( (month_first + i) % 7 == 0 )
		{
			printf ( "\n" );
		}

	}
	
	system ( "pause" );
	return 0;

}

猜你喜欢

转载自blog.csdn.net/baidu_37964044/article/details/80102215
今日推荐