求高手看下这个程序!
万年历:程序代码:
#include <stdio.h> void PrintMonth(int year, int month)//定义函数(有两个参数) { int preDays, preMonth, preYears, monthDays, i;//声明。。 前一月份,前一年份,一个月的天数 char Leap;//声明变量 闰年 preYears = year - 1;//计算前一年份 preDays = preYears * 365 + preYears / 4 - preYears / 100 + preYears / 400;//从公元元年到之前一年结束时的总天数 Leap = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) ? 1 : 0;//判断是否是闰年,是Leap=1否Leap=0 preMonth = month - 1;//前一月份 switch(preMonth) {//这部分是计算从公元元年到今年这个月的前一个月末总的天数(平年) case 1: preDays += 31; break; case 2: preDays += 59; break; case 3: preDays += 90; break; case 4: preDays += 120; break; case 5: preDays += 151; break; case 6: preDays += 181; break; case 7: preDays += 212; break; case 8: preDays += 243; break; case 9: preDays += 273; break; case 10: preDays += 304; break; case 11: preDays += 334; break; } if(preMonth >= 2 && Leap) preDays++;//由于上面是以平年算的一般情况,而此处月份(year)为3月份以上又为闰年所以2月有29天少加了一天 switch(month) {//根据输入的月份给出这个月的天数(平年) case 1: monthDays = 31; break; case 2: monthDays = 28; break; case 3: monthDays = 31; break; case 4: monthDays = 30; break; case 5: monthDays = 31; break; case 6: monthDays = 30; break; case 7: monthDays = 31; break; case 8: monthDays = 31; break; case 9: monthDays = 30; break; case 10: monthDays = 31; break; case 11: monthDays = 30; break; case 12: monthDays = 31; break; } if(month == 2 && Leap) monthDays++;//闰年2月29天 switch(month) {//输出月份 case 1: printf("1月"); break; case 2: printf("2月"); break; case 3: printf("3月"); break; case 4: printf("4月"); break; case 5: printf("5月"); break; case 6: printf("6月"); break; case 7: printf("7月"); break; case 8: printf("8月"); break; case 9: printf("9月"); break; case 10: printf("10月"); break; case 11: printf("11月"); break; case 12: printf("12月"); break; } printf(" %d", year);//输出年份 if(Leap) printf(" 闰年");//输出闰年,平年为一般情况 printf("\n日 一 二 三 四 五 六\n"); preDays %= 7;//开始是星期几 if(preDays < 6) for(i = 0; i <= preDays; i++) printf(" ");//在之前的空着的星期下打空格 for(i = 1; i <= monthDays; i++) { printf("%2d ", i); if((i + preDays) % 7 ==6) printf("\n");//一行满7个数就换行 } printf("\n"); } int main()//主函数 { int year, month;//声明年和月 for(;;) //死循环,查完一个年份后,还可继续查 { scanf("%d %d", &year, &month); //输入年份和月份 if(year <= 0 || month <= 0) break;//判断输入的年份和月份是否符合要求 PrintMonth(year, month);//调用函数PrintMonth() } return 0; }为什么当换行的时候是除以6而不是除以7啊!有点郁闷!还有一点小瑕疵!见图,为什么第一行不是对齐的啊? 以后再查询就是很规整的那样的啊?什么情况啊?
[ 本帖最后由 唏嘘草 于 2011-6-5 21:43 编辑 ]