| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 895 人关注过本帖
标题:c万年历
只看楼主 加入收藏
请问你好吗
Rank: 2
等 级:论坛游民
帖 子:64
专家分:51
注 册:2011-11-27
结帖率:81.48%
收藏
已结贴  问题点数:4 回复次数:3 
c万年历

#include <stdio.h>
void main()
{
void print_head(int x,int y);       /*打印头文件*/
void print_month(int x,int y);      /*打印月历*/
int days_of_month(int x,int y);
                           
int leap(int x,int y);            
int i,days,year,month,firstday;
char choose;
    do
   {
printf ("\n\请输入年份(0000~9999):\n\n");
scanf ("%d",&year);
   if (year<0||year>9999) printf ("警告:错误,请重新输入!");}
    while (year<0||year>9999);
    printf ("\n\n");
    do
      {
printf ("请输入月份(0~12)\n\n\n");
        scanf ("%d",&month);
   if (month<=0||month>12) printf ("WANNING:ERROR,please input again!");}
    while (month<=0||month>12);
    printf ("\n\n");



    days=days_of_month(year,month);      
    firstday=leap(year,month);
    print_head(year,month);
    print_month(firstday,days);

    choose=getchar();
    printf ("\n\n\n");
    printf("would you like to continue(y/n):\n\n");  
    scanf("%c",&choose);
    if (choose=='y'||choose=='Y') main();
}

days_of_month(int x,int y)
{
int z;
switch (y)
{case 1:
  case 3:
  case 5:
  case 7:
  case 8:
  case 10:
  case 12: z=31;break;
  case 4:
  case 6:
  case 9:
  case 11: z=30;break;
  case 2:
   {if ((x%4==0&&x%100!=0)||(x%400==0)) z=29;
     else z=28;break;
   }
   }
return z;
}


leap(int x,int y)
{
int z,i,moday;
z=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7;    //请问这行什么意思?
for (i=1;i<y;i++)
  {
    moday=days_of_month(x,i);      
   z=(z+moday)%7;
  }
return z;
}

void print_head(int x,int y)
{
printf ("\n\n********************************************************************************\n\n");
printf ("\t\t\t\t%d       %d\n\n",x,y);
printf ("\t\t\t SUN MON TUE WED THU FRI SAT\n");
printf ("\t\t\t");
}

void print_month(int x,int y)
{
int i;
char space[7]={' '};
for (i=1;i<=x;i++)
    printf ("%4c",space[i]);
for (i=1;i<=y;i++)
    {if ((i+x)%7==1) printf ("\n\t\t\t%4d",i);
      else printf ("%4d",i);}
printf ("\n\n********************************************************************************\n\n");
}
搜索更多相关主题的帖子: 月历 万年历 include 打印头 
2011-12-21 16:57
yeliming
Rank: 2
等 级:论坛游民
帖 子:23
专家分:23
注 册:2011-12-9
收藏
得分:1 
看%7,应该是求星期几。
x,y应该是年月,由年月得到当月1号是星期几。

这肯定是一个很有技巧的公式。
2011-12-21 17:24
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:1 
有点长

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-12-21 17:40
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:1 
回复 楼主 请问你好吗
z=(x+(x-1)/4-(x-1)/100+(x-1)/400)%7;    //请问这行什么意思?
这个z是某年1月1日是星期几。z等于几就是星期几
for (i=1;i<y;i++)
  {
    moday=days_of_month(x,i);      
   z=(z+moday)%7;
  }
这个z是这年每个月第一天是星期几。
这个程序是以公元1年1月1日是星期1为原点的。我认为不宜有公元0年出现。

梅尚程荀
马谭杨奚







                                                       
2011-12-21 20:25
快速回复:c万年历
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014401 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved