解题思路:
计算到目标日期天数,再对一周进行取模,得到的便是星期。输出星期前面空格时也很简单,就是上一题个月月末的星期。每个月的天数则可以用这个月的减去上个月的天数得到。
注意事项:
每周有7天,排列大于7天时需要换行。
另外,从每周的第一天从周末开始。
参考代码:
//1493: 任意年月日日历输出 #include <stdio.h> int countDay(long year, long month) { long i, day = 0, days = 0; if( month < 1 ) { year --; month = 12; } for( i = 2007; i < year; i++) { if( ( i % 4 == 0 && i % 100 != 0 ) || ( i % 400 == 0) ) day++; } days = ( year - 2007 ) * 365 + day; if( ( year % 4 == 0 && i % 100 != 0 ) || ( i % 400 == 0) ) { switch(month) { case 12: days += 31; case 11: days += 30; case 10: days += 31; case 9: days += 30; case 8: days += 31; case 7: days += 31; case 6: days += 30; case 5: days += 31; case 4: days += 30; case 3: days += 31; case 2: days += 29; case 1: days += 31; } } else { switch(month) { case 12: days += 31; case 11: days += 30; case 10: days += 31; case 9: days += 30; case 8: days += 31; case 7: days += 31; case 6: days += 30; case 5: days += 31; case 4: days += 30; case 3: days += 31; case 2: days += 28; case 1: days += 31; } } return days; } int main() { long year, month, days, day = 0, i, date = 0; scanf("%ld %ld", &year, &month); days = countDay(year, month); printf("---------------------\n"); printf(" Su Mo Tu We Th Fr Sa\n"); printf("---------------------\n"); // 从上一月开始计算月末 if( year == 2007 && month == 1) { date = 0; } else date = countDay(year, month - 1) % 7; date++; // 注意,日历表从周日开始 for( i = 0 ; i < date; i++ ) { printf(" "); } for( i = 1; i <= ( countDay(year, month) - countDay(year, month - 1) ); i++) { printf("%3ld", i); date ++; if(date == 7) { printf("\n"); date = 0; } } if(date != 0) printf("\n"); printf("---------------------"); }
0.0分
0 人评分
陶陶摘苹果2 (C语言代码)浏览:650 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:653 |
C语言训练-8除不尽的数 (C语言代码)浏览:1469 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:620 |
母牛的故事 (C语言代码)浏览:625 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:487 |
C语言程序设计教程(第三版)课后习题9.10 (C语言代码)浏览:660 |
幸运数 (C++代码)浏览:2982 |
C二级辅导-阶乘数列 (C语言代码)浏览:1831 |
C语言程序设计教程(第三版)课后习题7.3 (C++代码)浏览:483 |