关闭

【C】万年历

标签: C万年历
496人阅读 评论(0) 收藏 举报
分类:

用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++实现万年历及查询节日功能



3
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:130159次
    • 积分:3217
    • 等级:
    • 排名:第10630名
    • 原创:181篇
    • 转载:4篇
    • 译文:0篇
    • 评论:24条
    博客专栏
    文章分类
    最新评论