c语言:关于某年某月的月历打印制作
发布网友
发布时间:2022-05-25 17:06
我来回答
共1个回答
热心网友
时间:2023-11-23 05:04
#include <stdio.h>
int main(void)
{
int i,j,k,m,mon,y;
int day(int n,int m);//函数的声明
int month(int n,int y);
int year(int y);
printf("Please input one year after year 1900 you want to know:");
scanf("%d",&y);
if(y<1900)//我以1900年为基础算的,所以1900年以前查不了。
printf("I can't tell you this year ^_^\n");
else
{
i=year(y);//年处理函数,判断是否是闰年,这个函数的返回值是本年的第一天是周几
printf("The year is %d \n",y);
for(mon=1;mon<=12;mon++)
{
j=month(mon,y);//月处理函数,这个函数返回的是每个月需要扣除的天数。
k=day(i,j);//日处理函数,需要传递的参数是这个月的第一天是周几i,还有这个月需要扣除的天数j。
i=k;
}
}
return 0;
}
int year(int y)//判断是否是闰年
{
int x,i,j=0;
for(i=1900;i<y;i++)//在这里,我用的是1900年为基础来推断的,如果想查得更久远点,可以以公元元年为基础
{
if((i%4==0)&&(i%100!=0))
j++;
else if(i%400==0)
j++;//只要是闰年j就加1,这个是为了算天数的时候补上闰年多的那天
}
x=((y-1900)*365+1+j)%7;//这个就是判断查询年份1月号是周几
return x;//返回的这个x就是本年第一天是周几
}
int month(int n,int y)//这个函数是用来处理月份的
{
printf("============%d.%d=============\n",y,n);
if(n==1||n==3||n==5||n==7||n==8||n==10||n==12)//我设置每个月有31天,所以这几个月返回的需要扣除的天数就是0
return 0;//返回的是需要扣除的天数,这几个月不需要扣除
else if(n==4||n==6||n==9||n==11)
return 1;//这几个月需要扣除一天
else if(n==2)//2月真是麻烦,需要单独处理。如果是闰年就扣除2天,如果不是就扣除3天
{
if((y%4==0)&&(y%100!=0))
return 2;
else if(y%400==0)
return 2;
else return 3;
}
}
int day(int n,int m)//这个是日处理函数
{
int i,day[31],k;
for(i=0;i<31;i++)
day[i]=i+1;
printf("Sun Mon Tues Wed Thu Fri Sat\n");//打印出上面的周数,英问简写好象有错误,大家自己看下就行了
if(n<7)
for(i=0;i<n;i++)
printf(" ");
for(i=0;i<31-m;i++)
{
printf("%-5d",day[i]);
if((i+1+n)%7==0)//每7天就换一行重新开始输出
printf("\n");
}
printf("\n");
k=(31-m+n)%7;
return k;
}
以前写的一个小程序,你参考一下吧。
参考资料:http://blog.chinaunix.net/u/31780/showart_246173.html