| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1075 人关注过本帖
标题:关于万年历源代码的几个问题
只看楼主 加入收藏
hunterwolf
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2008-6-25
收藏
 问题点数:0 回复次数:6 
关于万年历源代码的几个问题
#include <stdio.h>
#include <conio.h>
#include<dos.h>

void calendar(int,int);
int leapyear(int);
int week(int,int,int);
int monthday[12]={31,28,31,30,31,30,31,31,30,31,30,31};

int main()
{
struct date d;
getdate(&d);
printf("Today is %d year %d month %d day\n",d.da_year,d.da_mon,d.da_day);
calendar(d.da_year,d.da_mon-1);
system("pause");
return 0;
}
void calendar(int year,int month)
{
int d,i,s,c;
char x;
while(month>11) {
month-=12;
year++;
}
while(month<0) {
year--;
month+=12;
}
if(leapyear(year)) monthday[1]=29;
printf("%d %d\n",year,month+1);
printf("S  M  T  W  T  F  S\n\n");
s=week(year,month+1,1);
for(i=0; i<3*s; i++ ) printf(" ");
c=s;
for(d=1;d<=monthday[month];d++)
{
if(c>6)
{
printf("\n");
c=0;
}
c++;
printf("%d",d);
printf("%s",(d<10)?"  ":" ");
}
printf("\n");
printf("nextmonth :N lastmonth :P quit :any keys.     Choose: ");
x=getch();
printf("%c\n",x);
if(x=='N' || x=='n')
{
calendar(year,month+1);
}
else if(x=='P' || x=='p')
{
calendar(year,month-1);
}
else
{
printf("Thank you !\n");
return;
}
}

int leapyear(int year)
{
return ((year%4==0 && year%100!=0) || (year%4==0 && year%400==0));
}

int week(int y,int m,int d)
{
if((m==1)||(m==2))
{
m+=12;
y--;
}
return ((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7;
}

return ((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7的值返回到s=week(year,month+1,1); 中的哪个实参中?或者说应该怎么返回?
void calendar(int,int); 和int week(int,int,int); 的括号里为什么是2个和3个int?
printf("Today is %d year %d month %d day\n",d.da_year,d.da_mon,d.da_day); 中后面为什么是d.da_year,d.da_mon,d.da_day?是struct date d的固定格式吗?
s=week(year,month+1,1); 中最后一个1是什么意思?
for(d=1;d<=monthday[month];d++) 中为什么是monthday[month]?[]里面为什么是month?而不是12?
c=0; 和c++; 的作用是什么?
麻烦各位高人了~!先谢谢了!
搜索更多相关主题的帖子: 源代码 万年历 
2008-06-30 01:18
vistaxpxpxp111
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-6-30
收藏
得分:0 
沙safa
2008-06-30 01:33
vistaxpxpxp111
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-6-30
收藏
得分:0 
return ((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7的值返回到s=week(year,month+1,1); 中的哪个实参中?或者说应该怎么返回?

((d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)+1)%7运算完之后答案给s

void calendar(int,int); 和int week(int,int,int); 的括号里为什么是2个和3个int?
那个是声明函数用的 week(int y,int m,int d) 这里才是真的 傳函数值哦

s=week(year,month+1,1); 中最后一个1是什么意思?
week(int y,int m,int d) 给d=1

for(d=1;d<=monthday[month];d++) 中为什么是monthday[month]?[]里面为什么是month?而不是12?
c=0; 和c++; 的作用是什么?

for(d=1;d<=monthday[month];d++)//不同月份,日子不同的
當然拉 d意思是日 因為每个月的日子都不同有时31,28等等

c=0把0给c c++等於 c=c+1;
2008-06-30 01:46
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
/*****************************************************************
** HighlightCodeV3.1 software by yzfy(雨中飞燕) http:// **
*****************************************************************/
#include <stdio.h>

int DayOfWeek(int y, int m, int d)
{
   
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    y -= m < 3;
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

int IsLeapYear(int year)
{
   
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}

int DayOfMonth(int y,int m)
{
   
if (m==2) return 28 + IsLeapYear(y);
    return 30 + ((m%2)==(m<8));
}

int main()
{
   
int y,m,d,w,mc;
    while (scanf("%d %d",&y,&m)==2 && y>=0 && m>0 && m<=12)
    {
        
printf(" S  M  T  W  T  F  S\n");
        if (w=DayOfWeek(y,m,1))
        {
            
mc=DayOfMonth(y,(m+10)%12+1);
            for (d=mc-w+1;d<=mc;d++)
                printf("%2d ",d);
        }
        
mc=DayOfMonth(y,m);
        for (d=1;d<=mc;d++)
            printf("%2d%c",d,(w=(w+1)%7)?' ':'\n');
        if (w) for (d=1;w<7;w++,d++)printf("%2d ",d);
        putchar('\n');
    }
   
return 0;
}


觉得好玩,随手写了个,楼主看看?

[[it] 本帖最后由 StarWing83 于 2008-6-30 04:26 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-06-30 04:10
bianchengfeng
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2008-3-1
收藏
得分:0 
回复 4# StarWing83 的帖子
强!!
2008-06-30 10:25
海纳百川
Rank: 1
来 自:湖北荆州
等 级:新手上路
帖 子:186
专家分:5
注 册:2007-10-2
收藏
得分:0 
这不错强啊

2008-06-30 11:07
bianchengfeng
Rank: 1
等 级:新手上路
帖 子:79
专家分:0
注 册:2008-3-1
收藏
得分:0 
短小精悍
2008-06-30 20:24
快速回复:关于万年历源代码的几个问题
数据加载中...
 
   



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

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