【C】万年历

用C语言实现一个万年历

一、如何实现一个万年历

①要实现万年历,首先你得知道每年的1月1日是星期几

这里要用到一个数学公式(这里不做数学证明)

w = d+2*m+3*(m+1)/5+y+y/4-y/100+y/400;

②要判断一年是否为闰年,关系到输出2月的天数

③写一个年份数组,然后输出,并且在周六(当然是你的每周最后一天)过后换行

二、代码块

#include<stdio.h>
int TheFirstDay(int y) //计算1月1日星期几
{	
	int m = 13,d = 1;
	int w;
	y--;
	w = d+2*m+3*(m+1)/5+y+y/4-y/100+y/400;
	w=w%7+1;
	printf("w = %d",w);
	return w;
}
int IsLeapYear(int year)//判断是否为闰年
{
	return ((year%4==0&&year%100!=0)||year%400==0);		
}
void Print_year()//打印一年的日历
{		
	int year = 0;
	int day = 0; 
	int count = 0;//一行7个,根据count取余来换行
	int kong = 0;//月历中第一行空的格数
	int month[12]={31,28,31,30,31,30,31,31,30,31,30,31} ;//月份数组,记录每月天数
	printf("请输入年份:");
	scanf("%d",&year);
	count = TheFirstDay(year);//判断是否为闰年
	if(IsLeapYear(year)==1)
		month[1]+=1;//闰年的二月加一天
	for(int i = 0; i<12; i++)//打印每个月的月历。从1月到12月
	{	
		printf("\n========%d月=========",i+1); 
		printf("\n日 一 二 三 四 五 六\n"); 
		kong = count%7;
		while(kong)	
		{
			printf("   ");
			kong--;
		}
		for(int j=1;j<=month[i];j++)
		{	
			printf("%2d ",j);
			count++;//每输出一个,count就+1
			if(count%7==0)//count到7就输出换行符“\n”
			{
				printf("\n");
				count = 0;
			}	
    	}
	}
}

int main()
{		

	Print_year();
	return 0;
}

三、运行结果


今天是2016.6.12星期日,咦。对啦



-------------------->>>C++实现万年历及查询节日功能



  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值