简单实现一个日历

本文将指导你如何从头开始构建一个简单的日历应用程序。通过这个过程,你将了解基本的日历功能实现,包括查看不同月份的日期、标记特定日期以及添加事件。无论你是初学者还是希望巩固基础的开发者,这都是一个很好的实践项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路: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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值