C语言实现万年历

C语言实现万年历

实现的基本思路:
我们以2015年2月份为例,首先我们需要求出基底(以1900年1月1日为基底,当时是周一)到2015年2月1日有多少天,除以7求余数后得到2月1号为星期几(天数直接减的话需要加一后再求余数),然后判断2015是否为闰年,在判断2015年2月(闰年2月有29天)有多少天,根据所得数据便可以输出2015年2月的日历。(提示天数加空格满七换行

#include<stdio.h> 
int main(){
	int year,month,week;
	printf("请输入年(如2021 5)月:");
	scanf("%d %d",&year,&month); 
	int isrun(int year);
	int what_week(int year,int month);
	int month_days(int month,int year );
	int year_days(int year);
	void outMonthDays(int Year,int Month);
	//week = what_week(year,month);
	//printf("%d",week);
	outMonthDays(year,month);
	return 0;
}
int isrun(int year){//判断是否是闰年 
	if(year%4 == 0 &&year%100 !=0||year%400==0)
		return 1;
	return 0;
}
int month_days(int month,int year ){//判断这个月有多少天 
	
	switch(month){
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:return 31;
			case 4:
			case 6:
			case 9:
			case 11:return 30;
			case 2:if(isrun(year))return 29;else return 28;

	}
} 
 int year_days(int year){//判断该年有多少天 
 	if(isrun(year))
 		return 366;
 	else 
 		return 365;
 } 
 int what_week(int year,int month){/*判断这个月的一号是周几, 
  此方法一1900年1月为基底计算,如果需要使用更久以前的日期,请修改此处	*/
  int days,week = 1;
  for(int i=1900;i<year;i++)
  	days += year_days(i);
   
  for(int i = 1;i<month;i++)
  	days += month_days(i,year);
  week = (days%7)+1 ;
  return week;
}
 void outMonthDays(int year,int month){
 	//将日历以格式化的形式进行打印 
  int weekday,row;
  weekday = what_week(year,month);
  //printf("%d\n",weekday);
  printf("\t\t%d年%d月日历\n",year,month);
  printf("\t一\t二\t三\t四\t五\t六\t日\n");//日历头 
  for(int i=1;i<what_week(year,month);i++){
  	printf("         ");//空格 
  	row++;
  }
  	
  for(int i = 1;i<=month_days(month,year);i++){
  	printf("\t%d",i);//日期 
  	row++;
  	if(row%7 == 0)
  		printf("\n");
  }

}

这个是新人第一次在C站发表文章,后记还会发表一些学习中遇到的问题,喜欢的小伙伴可以点个关注支持一下!谢谢~~

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值