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站发表文章,后记还会发表一些学习中遇到的问题,喜欢的小伙伴可以点个关注支持一下!谢谢~~