鱼C论坛

 找回密码
 立即注册
查看: 1965|回复: 0

[技术交流] 万年历

[复制链接]
发表于 2017-5-15 23:05:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
来自git
  1. #include "stdio.h"
  2. #include <stdlib.h>
  3. long int f(int year,int month)
  4. {/*f(年,月)=年-1,如月<3;否则,f(年,月)=年*/
  5.         if(month<3) return year-1;
  6.         else return year;
  7. }

  8. long int g(int month)
  9. {/*g(月)=月+13,如月<3;否则,g(月)=月+1*/
  10.         if(month<3) return month+13;
  11.         else return month+1;
  12. }

  13. long int n(int year,int month,int day)
  14. {
  15.   /*N=1461*f(年、月)/4+153*g(月)/5+日*/
  16.         return 1461L*f(year,month)/4+153L*g(month)/5+day;
  17. }

  18. int w(int year,int month,int day)
  19. {
  20.   /*w=(N-621049)%7(0<=w<7)*/
  21.         return(int)((n(year,month,day)%7-621049L%7+7)%7);
  22. }

  23. //上面是计算哪一年的几月几日是星期几
  24. int date[12][6][7];
  25. int day_tbl[ ][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
  26.                     {31,29,31,30,31,30,31,31,30,31,30,31}};
  27. int main()
  28. {int sw,leap,i,j,k,wd,day;
  29. int year;/*年*/
  30. char title[]="SUN MON TUE WED THU FRI SAT";
  31. system("cls");
  32. printf("Please input the year whose calendar you want to know: ");/*输入年*/
  33. scanf("%d%*c",&year);/*输入年份值和掠过值后的回车*/
  34. sw=w(year,1,1);//sw是星期几0 - 6
  35. leap=year%4==0&&year%100||year%400==0;/*判闰年*/
  36. for(i=0;i<12;i++)
  37.         for(j=0;j<6;j++)
  38.                 for(k=0;k<7;k++)
  39.                         date[i][j][k]=0;/*日期表置0*/
  40. for(i=0;i<12;i++)/*一年十二个月*/
  41.         for(wd=0,day=1;day<=day_tbl[leap][i];day++)
  42.         {/*将第i+1月的日期填入日期表*/
  43.          date[i][wd][sw]=day;
  44.         sw=++sw%7;/*每星期七天,以0至6计数*/
  45.         if(sw==0) wd++;/*日期表每七天一行,星期天开始新的一行*/
  46.         }

  47.         printf("\n|==================The Calendar of Year %d =====================|\n|",year);
  48. for(i=0;i<6;i++)
  49. {/*先测算第i+1月和第i+7月的最大星期数*/
  50.         for(wd=0,k=0;k<7;k++)/*日期表的第六行有日期,则wd!=0*/
  51.                 wd+=date[i][5][k]+date[i+6][5][k];
  52.         wd=wd?6:5;
  53.         printf("%2d  %s  %2d  %s |\n|",i+1,title,i+7,title);
  54.         for(j=0;j<wd;j++)
  55.         {
  56.                 printf("   ");/*输出四个空白符*/
  57.                 /*左栏为第i+1月,右栏为第i+7月*/
  58.                 for(k=0;k<7;k++)
  59.                         if(date[i][j][k])
  60.                                 printf("%4d",date[i][j][k]);
  61.                         else printf("    ");
  62.                 printf("     ");/*输出十个空白符*/
  63.                 for(k=0;k<7;k++)
  64.                         if(date[i+6][j][k])
  65.                                 printf("%4d",date[i+6][j][k]);
  66.                         else printf("    ");
  67.                 printf(" |\n|");
  68.         }
  69.         //scanf("%*c");/*键入回车输出下一个月的日历*/

  70. }
  71. puts("=================================================================|");
  72. puts("\n Press any key to quit...");
  73. system("pause");return 0;
  74. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 16:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表