【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
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include int main (void) { int year,month,j,i,day1,day2,one1,one2,w; printf("enter a year:"); scanf("%d",&year); printf("\n\n"); printf("---------------------%d---------------------\n\n",year); one1=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+1)%7; for(month=1;month<=12;month+=2) { printf(" ",month,year); printf(" \n",month+1,year); printf("-------------------- --------------------\n"); printf("日 一 二 三 四 五 六 日 一 二 三 四 五 六\n"); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day1=31;break; case 4: case 6: case 9: case 11:day1=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day1=29; else day1=28; } for(j=1;j<=one1;j++) { if(one1==7) break; else printf(" "); } for(i=1;i<=7-one1;i++) printf("%2d ",i); printf(" "); switch(month+1) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day2=31;break; case 4: case 6: case 9: case 11:day2=30;break; default:if(!(year%4)&&(year0)||!(year%400)) day2=29; else day2=28; } one2=(one1+day1)%7; for(j=1;j<=one2;j++) { if(one2==7) break; if(j!=7) printf(" "); } for(i=1;i<=7-one2;i++) printf("%2d ",i); printf("\n"); for(i=8-one1;i<=14-one1;i++) printf("%2d ",i); printf(" "); for(i=8-one2;i<=14-one2;i++) printf("%2d ",i); printf("\n"); for(i=15-one1;i<=21-one1;i++) printf("%2d ",i); printf(" "); for(i=15-one2;i<=21-one2;i++) printf("%2d ",i); printf("\n"); for(i=22-one1;i<=28-one1;i++) printf("%2d ",i); printf(" "); for(i=22-one2;i<=28-one2;i++) printf("%2d ",i); printf("\n"); for(i=29-one1;i<=35-one1&&i<=day1;i++) printf("%2d ",i); printf(" "); for(w=1;w<=35-day1-one1;w++) printf(" "); for(i=29-one2;i<=35-one2&&i<=day2;i++) printf("%2d ",i); printf("\n"); for(i=36-one1;i<=day1;i++) printf("%2d ",i); for(w=1;w<=35-day1-one1;w++) printf(" "); if(day1==31&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); if(day1==30&&(one1==4||one1==3||one1==2||one1==1||one1==7)) printf(" "); for(i=36-one2;i<=day2;i++) printf("%2d ",i); printf("\n-------------------- --------------------\n\n"); printf("\n"); one1=(one2+day2)%7; } printf("---------------------%d---------------------\n",year); getchar(); printf("按任意键退出"); getchar(); return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值