鱼C论坛

 找回密码
 立即注册
查看: 4241|回复: 8

[技术交流] 万年历

[复制链接]
发表于 2011-2-14 02:02:46 | 显示全部楼层 |阅读模式

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

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

x
用C语言写了一个万年历出来,我是新手,请大家多多指教指教。
有什么不足或者语法毛病的可以指出来。

  1. #include<stdio.h>

  2. year_days(int date[3])     /*计算由公元1年到本年的日数*/
  3. {
  4.         int days,a,b;
  5.         a=(date[0]-1)/4+(date[0]-1)/400-(date[0]-1)/100;
  6.         b=date[0]*365;
  7.         days=a+b;
  8.         return days;
  9. }
  10. month_days(int date[3])     /*计算由1月开始到本月的日数*/
  11. {
  12.         if(date[1]==1)return 0;
  13.         if(date[1]==2)return 31;
  14.         if(date[1]==3)return 59;
  15.         if(date[1]==4)return 90;
  16.         if(date[1]==5)return 120;
  17.         if(date[1]==6)return 151;
  18.         if(date[1]==7)return 181;
  19.         if(date[1]==8)return 212;
  20.         if(date[1]==9)return 243;
  21.         if(date[1]==10)return 273;
  22.         if(date[1]==11)return 304;
  23.         if(date[1]==12)return 334;
  24. }

  25. get_days(int date[3])    /*计算总日子数*/
  26. {
  27.         int year_days(int);
  28.         int month_days(int);
  29.         int days;
  30.         days=year_days(date)+month_days(date)+date[2];
  31.         if(date[0]%100!=0&&date[0]%4==0||date[0]%400==0)
  32.                 if(date[1]>2)days++;
  33.         return days;
  34. }
  35. get_mondays(int date[3])   /*计算每月的日数*/
  36. {
  37.         if(date[1]==1)return 31;
  38.         if((date[2]%100!=0&&date[2]%4==0||date[2]%400==0)&&date[1]==2)return 29;
  39.         if(date[1]==2)return 28;
  40.         if(date[1]==3)return 31;
  41.         if(date[1]==4)return 30;
  42.         if(date[1]==5)return 31;
  43.         if(date[1]==6)return 30;
  44.         if(date[1]==7)return 31;
  45.         if(date[1]==8)return 31;
  46.         if(date[1]==9)return 30;
  47.         if(date[1]==10)return 31;
  48.         if(date[1]==11)return 30;
  49.         if(date[1]==12)return 31;
  50. }
  51. main()
  52. {
  53.         int get_days(int); /*声明函数*/
  54.         int get_mondays(int);
  55.         int date[3],days,mondays;
  56.         int i;                           
  57.         printf("please Please enter a date\n"); /*输入年月日*/
  58.         printf("year:");
  59.         scanf("%d",&date[0]);
  60.         printf("month:");
  61.         scanf("%d",&date[1]);
  62.         printf("day:");
  63.         scanf("%d",&date[2]);
  64.     days=get_days(date);
  65.         mondays=get_mondays(date);
  66.         printf("          %d/%d/%d\n",date[0],date[1],date[2]);
  67.         printf("=============================\n");
  68.         printf(" sun mon tue wed thu fri sat\n");
  69.         for(i=1;i<=(days-date[2])%7;i++)    /*总日数减去日再除7求余,可以计算出每月开头空了的天数*/
  70.         {       
  71.                 printf("    ");
  72.         }
  73.         for(i=1;i<=mondays;i++)
  74.         {   
  75.                 if(i<10)printf(" ");
  76.                 if(i==date[2])
  77.                         printf("[%d]",i);
  78.                 else
  79.                         printf(" %d ",i);
  80.             if((days-date[2]+i)%7==0)
  81.                         printf("\n");
  82.         }
  83.         printf("\n");
  84.         system("pause");
  85. }
复制代码
未命名.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 13:30:05 | 显示全部楼层
回复 1# xyq038558


    膜拜、源码最好设置回复可见!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 13:31:02 | 显示全部楼层
挺厉害的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-14 13:35:30 | 显示全部楼层
回复 3# yuyuhongss


    呵呵,大家彼此交流!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-2-14 16:13:30 | 显示全部楼层
嘻嘻,不错哦~最好再来个printf("I love xxx");
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-2-14 22:26:11 | 显示全部楼层
回复 5# 小甲鱼


    好的,下次就加上“printf("I Love fishc!")”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-1 23:10:16 | 显示全部楼层
本帖最后由 nbceshi 于 2011-3-1 23:13 编辑

好像没有考虑闰年
附上我的,嘿嘿

  1. #include <stdio.h>

  2. void main()
  3. {
  4.         int yy, mm, dd, y, i;                        //yy是年,mm是月,dd是日,y是周几,i是计数。
  5.         printf("请输入年份: ");
  6.         scanf("%d", &yy);
  7.         printf("请输入月份: ");
  8.         scanf("%d", &mm);
  9.         if (mm == 2)
  10.         {
  11.                 if(yy%4 == 0 && yy%100 != 0 || yy%400 == 0 )
  12.                 {        
  13.                         dd = 29;
  14.                 }
  15.                 else
  16.                 {
  17.                         dd = 28;
  18.                 }
  19.         }
  20.         else
  21.         {
  22.                 dd=30 + mm%2;
  23.         }
  24.         
  25.         switch (mm)
  26.         {
  27.                 case 1: i = 6; break;
  28.                 case 2: i = 2; break;
  29.                 case 3: i = 2; break;
  30.                 case 4: i = 5; break;
  31.                 case 5: i = 0; break;
  32.                 case 6: i = 3; break;
  33.                 case 7: i = 5; break;
  34.                 case 8: i = 1; break;
  35.                 case 9: i = 4; break;
  36.                 case 10: i = 6; break;
  37.                 case 11: i = 2; break;
  38.                 case 12: i = 4; break;
  39.         }
  40.         if((yy%4 == 0 && yy%100 !=0 || yy%400 == 0) && mm <=2)
  41.         {
  42.                 i -= 1;
  43.         }
  44.         y = (1.25 * (yy%100)) / 1 + 1 + i;
  45.         y = y%7;
  46.         i = y;

  47.         printf(" 日 一 二 三 四 五 六\n");
  48.         for( ;y > 0; y--)
  49.         {
  50.                 printf("   ");
  51.         }
  52.         y = i;
  53.         for(i = 1 ; i <= dd; i++)
  54.         {
  55.                 if((i + y - 1)%7 == 0)
  56.                 {
  57.                         printf("\n");
  58.                 }
  59.                 printf("%3d",i);
  60.         }
  61. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-3-11 10:20:09 | 显示全部楼层
特地前来膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2014-3-15 14:29:39 | 显示全部楼层
不错不错,如果在家点颜色就漂亮了,颜色只需要几句哦!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 01:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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