1、万年历的C语言编程实现源程序:#include#includeint Isleapyear(int y)/*判断是否是闰年*/ if(y%4=0&y%100!=0)|(y%400=0)return 1;elsereturn 0;int Getdaysofmonth(int y,int m)/*确定某个月的天数*/int months13=0,31,28,31,30,31,30,31,31,30,31,30,31;if(Isleapyear(y)/*如果是闰年则2月份的天数改变为29*/months2=29;return monthsm;int Gettotaldays(int y,int m)
2、/*计算从1901年1月开始到给定年月的天数*/ int months13=0,31,28,31,30,31,30,31,31,30,31,30,31;int days=0;int i,j;if(Isleapyear(y) months2=29;for(i=1901;iy;i+)/*从1901年1月开始计算,累加y年之前的天数*/if(Isleapyear(i)days+=366;elsedays+=365;for(j=1;jm;j+)/*累加m月之后的天数*/days+=monthsj;return days;int Getfirstdayintable(int y,int m)/*计算给定
3、年月的第一天在日历表中的位置*/ int d;d=Gettotaldays(y,m);d=d+3;/*1901年1月1日是星期二,在日历中星期二是第三个位置*/ d=d%7;return d;void Showdate(int y,int m)/*显示日历*/int first;int d;int i,k;first=Getfirstdayintable(y,m);/*得到第一天在日历中的第一个位置*/d=Getdaysofmonth(y,m);/*得到这个月的天数*/ k=0;printf(-n);printf( SUN MON TUE WEN THU FRI STAn);for(i=1;ifirst;i+)/*打印第一天之前的空格*/ printf( );k+;/*k用于确定日历中是否回车*/for(i=1;i=d;i+)printf(%5d,i);/*每个具体的日期占5个字符的宽度*/k+;if(k=7)/*每行打印7个日期数字后回车*/ printf(n);k=0;printf(n-n);int main()int y,m;printf(Input year:);scanf(%d,&y);printf(Input month:);scanf(%d,&m);Showdate(y,m);return 0;