1、 计算年份是否为闰年
#include<stdio.h>
/*******************************
* 函数功能:计算年份是否为闰年
* 函数名:isRUN
* 函数形参:int year
* 函数返回值类型:int
* 函数描述:闰年返回1,平年返回0
********************************/
int isRun(int year1)
{
if(year1%4==0&&year1%100!=0||year1%400==0)
{
return(1);
}
else
{
return(0);
}
2、计算某年某月有少天
/*******************************
* 函数功能:计算某年某月有少天
* 函数名:tian
* 函数形参:int year2,int moonth
* 函数返回值类型:int
* 函数描述:计算不同年份月份有几天
********************************/
int tian1(int year2 ,int month)
{
if(month==1|| month==3|| month==5|| month==7|| month==8|| month==10|| month==12)
{
return 31;
}
else if(month==4||month==6||month==9||month==11)
{
return 30;
}
else
{
if(isRun(year2)==1)
{
return 29;
}
else
{
return 28;
}
}
}
/*******************************
* 函数功能:计算某年某月某天是第几天
* 函数名:getDate
* 函数形参:int n, int y, int r
* 函数返回值类型:int
* 函数描述:计算某年某月某天是第几天 ,并返回天数
********************************/
int getDate(int n, int y,int r)
{
int x;
int sum = 0;
for(x=1;x<y;x++)
{
sum = sum + tian1(n ,x);
}
sum = sum + r;
return sum;
}
/*******************************
* 函数功能:距离1900年1月1日多少天
* 函数名:get_all_date
* 函数形参:int n,int y, int r
* 函数返回值类型:int
* 函数描述:距离1900年1月1日多少天
********************************/
int get_all_date(int n,int y, int r)
{
int i;
int sum = 0;
for (i=1900;i<n;i++)
{
int date;
if(isRun(i)==1)
{
date = 366;
}
else
{
date = 365;
}
sum = sum + date;
}
sum = sum + getDate(n,y,r);
return sum;
}
/*******************************
* 函数功能:计算某年某月某日是星期几 并且排序
* 函数名:week
* 函数形参:int n, int y, int r
* 函数返回值类型:int
* 函数描述:计算某年某月某日是星期几 并且排序
********************************/
int week(int n, int y, int r)
{
int res = get_all_date(n,y,r)%7;
return res;
}
/*******************************
* 函数功能:计算上个月的天数
* 函数名:lastMoonDate
* 函数形参:int n,int y,int r
* 函数返回值类型:int
* 函数描述:计算上个月的天数
********************************/
int lastMoonDate(int n,int y)
{
int sum = 0;
if(y>1&&y<=12)
{
sum = tian1(n,y-1);
}
else
{
sum =tian1(n-1,y+11);
}
return sum;
}
/*******************************
* 函数功能:计算下个月1号星期几
* 函数名:nextweek
* 函数形参:int n,int y
* 函数返回值类型:int
* 函数描述:
********************************/
int nextweek(int n,int y)
{
int sum;
int week;
if(y==12)
{
sum = get_all_date(n+1,1,1);
}
else if(y>=1||y<=11)
{
sum = get_all_date(n,y+1,1);
}
week = sum%7;
if(week==0)
{
week= 7;
}
return week;
}
/*******************************
* 函数功能:展示ui
* 函数名:ui
* 函数形参:int n, int y
* 函数返回值类型:int
* 函数描述:ui界面
********************************/
int ui(int n,int y)
{
printf(" %d年%d月\n",n,y);
printf(" 一 二 三 四 五 六 日\n");
return 0;
}
/*******************************
* 函数功能:日历
* 函数名:pai_xu
* 函数形参:int n,int y
* 函数返回值类型:int
* 函数描述:制作日历
********************************/
int pai_xu(int n,int y)
{
int i,j;
int c=0;
for(i=lastMoonDate(n,y)-week(n,y,1)+2;i<lastMoonDate(n,y)+1;i=i+1)
{
// if(week(n,y,1)>1&&week(n,y,1)<=7)//本月份1号是星期一则不输入上个月的日期
// {
c=c+1;
printf(" %d",i);
if(c%7==0)
{
printf("\n");
}
// }
}
for(j=1;j<=tian1(n,y);j++)
{
// if((week(n,y,1)+j-1)%7==0)//星期几 + 日期 - 1 % 7 == 0 就为星期日
// {
// printf(" %d\n",j);
// }
// else
// {
c=c+1;
printf(" %d",j);
if(c%7==0)
{
printf("\n");
}
// }
}
for(i=1;i<=42-tian1(n,y)-week(n,y,1)+1;i++)
{
// int x =nextweek(n,y);
if((x+i-1)%7==0) //星期几 + 日期 - 1 % 7 == 0 就为星期日
{
// printf(" %d\n",i);
// }
// else
// {
c++;
printf(" %d",i);
if(c%7==0)
{
printf("\n");
}
// }
}
return 0;
}
//可以利用计数思想,
/*******************************
* 函数功能:主函数
* 函数名:main
* 函数形参:
* 函数返回值类型:
* 函数描述:
********************************/
int main()
{
int year3;
int month2;
int date;
printf("输入年份:");
scanf("%d",&year3);
printf("输入月份:");
scanf(" %d",&month2);
printf("输入日期:");
scanf(" %d",&date);
printf("%d年%d月有:%d天\n",year3,month2,tian1(year3,month2));
printf("是%d年第%d天\n",year3,getDate(year3,month2,date));
printf("距距离1900年1月1日%d天\n",get_all_date(year3,month2,date));
printf("星期%d\n",week(year3,month2,1));
printf("上一个月有:%d天\n",lastMoonDate(year3,month2));
printf("下个月1号星期:%d\n",nextweek(year3,month2));
printf("",ui(year3,month2));
printf("",pai_xu(year3,month2));
return(0);
}