1 #include <stdio.h> 2 3 4 void Wnl(int y); 5 6 int main(void) 7 { 8 int year; 9 printf("请输入年份(大于1990):"); 10 scanf("%d", &year); 11 Wnl(year); //调用函数Wnl打印当年日历 12 return 0; 13 } 14 15 /* 16 函数功能:打印日历 17 函数形参:年份 18 函数返回值:无 19 备注:无 20 */ 21 void Wnl(int y){ 22 // 1 2 3 4 5 6 7 8 9 10 11 12 23 //31 28 31 30 31 30 31 31 30 31 30 31 24 int mon; 25 int rn = 0; //闰年标志 26 int sum = 0;//存储天数 27 int mon_one_day = 0;//知道每个月第一天的星期几 28 int mon_days = 0;//保存每个月的总天数 29 int i, j = 0; 30 int k = 0; 31 32 int w = (y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400) % 7; //记录所求年份第一天的星期数 33 34 if( (y%4 ==0)&&(y%100 != 0) || (y%400 == 0) ) //闰年 35 { 36 rn = 1; 37 } 38 39 for(mon = 1; mon <= 12; mon++) 40 { 41 42 sum = 0; //总天数 43 mon_days = 0; //每个月的天数 44 mon_one_day = 0; //用于记录每个月的第一天的星期数 45 j = k; 46 47 switch(mon)//记录每个月的天数 48 { 49 case 12: mon_days = 31; break; 50 case 11: mon_days = 30; break; 51 case 10: mon_days = 31; break; 52 case 9: mon_days = 30; break; 53 case 8: mon_days = 31; break; 54 case 7: mon_days = 31; break; 55 case 6: mon_days = 30; break; 56 case 5: mon_days = 31; break; 57 case 4: mon_days = 30; break; 58 case 3: mon_days = 31; break; 59 case 2: mon_days = 28 + rn; break; //加上闰年(0或1) 60 case 1: mon_days = 31; break; 61 } 62 63 switch(mon) //记录从1月到当前月份的总天数 64 { 65 case 12: sum += 30; 66 case 11: sum += 31; 67 case 10: sum += 30; 68 case 9: sum += 31; 69 case 8: sum += 31; 70 case 7: sum += 30; 71 case 6: sum += 31; 72 case 5: sum += 30; 73 case 4: sum += 31; 74 case 3: sum += 28 + rn; 75 case 2: sum += 31; 76 case 1: sum += 0; 77 } 78 79 sum += (w-1); //减去当天 80 mon_one_day = sum % 7; //每个月第一天的星期数 81 82 /*********打印***********/ 83 printf("/***********%d月**************/\r\n", mon); 84 printf(" 一 二 三 四 五 六 日\r\n"); 85 86 87 for(i = 0 ; i < mon_one_day; i++) //对齐 88 { 89 printf(" "); 90 j++; 91 } 92 93 for(i = 1; i <= mon_days; i++) 94 { 95 printf("%4d", i); //对齐 96 j++; 97 if(j%7 == 0) //每7天换行 98 { 99 printf("\r\n"); 100 } 101 } 102 103 printf("\r\n"); 104 } 105 }
注:该程序可以作为C语言基本语句的作业题
注:switch语句中如果没有break,运行完所跳转语句后会继续运行之后的语句,例如
运行:
int i = 1,sum = 0;
switch(i){
case 1: sum += 1; case 2: sum += 2; case 3: sum += 3; }
后,sum的值为0+1+2+3 = 6