| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 854 人关注过本帖
标题:一个关于计算星期的程序
只看楼主 加入收藏
数字帝国
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-5-24
收藏
 问题点数:0 回复次数:6 
一个关于计算星期的程序
下面这个程序是求任意一个日期的星期的,如:给定日期X年Y月Z日,求出它的星期
i:月份 a[i]:每月天数   k:若k=0,则x为闰年    t:闰年数    d:天数差
参照日期:1980.1.1——星期二

#include "stdio.h"
#include "math.h"
struct date
{
    int year;
    int month;
    int day;
};
int daies(int x,int y,int z)
{   
    enum weekday
    {mon=6,tue=0,wed,thu,fri,sta,sun};
    enum weekday week;
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int i,k,t,m=0,n,d;
    k=abs(x-1980)%4;
    if(k==0)
     a[1]=29;
    if(x==1980)
    {
        for(i=0;i<y;i++)
     m+=a[i];
     m=m+a[y-1];
        d=m+z-1;
        n=d%7;
    }
    if(x>1980)
    {    
       t=(x-1981)/4;    
        for(i=0;i<y;i++)
        m+=a[i];
        m=m-a[y-1];
       d=(x-1980)*365+m+z+t;
        n=d%7;    
    }
    if(x<1980)
    {    
        t=(1979-x)/4;
        for(i=y-1;i<12;i++)
        m+=a[i];
        m=m-a[11];
        d=(1979-x)*365+m+(31-z)+t;
        n=6-d%7;
    }
    week=(enum weekday)n;
    switch(week)
    {
        case mon:printf("星期一\n"); break;
        case tue:printf("星期二\n"); break;
        case wed:printf("星期三\n"); break;
        case thu:printf("星期四\n"); break;
        case fri:printf("星期五\n"); break;
        case sta:printf("星期六\n"); break;
        case sun:printf("星期天\n"); break;
    }
    return week;
}
main()
{
    struct date d;
    printf("输入年份:");
    scanf("%d",&d.year);
    printf("输入月份:");
    scanf("%d",&d.month);
    printf("输入日期:");
    scanf("%d",&d.day);
    printf("输出:\n");
    printf("%d年%d月%d日\n",d.year,d.month,d.day);
    daies(d.year,d.month,d.day);
}

此程序是用数组写的,好像有些繁琐。不知哪位高人能指导下,让它变简洁些
搜索更多相关主题的帖子: include 
2008-05-29 20:57
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 
楼主,我这有个程序,是我从别处看到的,我也不知道为什么这样写,但是我试了几组数据,确实是对的.

typedef unsigned char uint8;
typedef unsigned short uint16;

/*********************************************************************/
*  Name: mmi_dt_to_weekday
* DESCRIPTION : Function to compute current day of week.
* PARAMETERS
*  y  [IN]        Year of the date.    (example, 2008)
*  m  [IN]        Month of the date. (example, 2)
*  d  [IN]        Day of the date    (example, 28)
* RETURNS
*    index of day of week
**********************************************************************/

uint8 mmi_dt_to_weekday(uint16 y, uint8 m, uint8 d)
{
    if (m < 3)
    {
        m += 13;
        y--;
    }
    else
    {
        m++;
    }
    
    return (d + 26 * m / 10 + y + y / 4 - y / 100 + y / 400 + 6) % 7;
}

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2008-05-29 23:36
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
/*****************************************************************
** HighlightCodeV3.0 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 main()
{
   
char wd[]="SumMonTueWedThuFriSat";
    int y,m,d;
    while (scanf("%d %d %d",&y,&m,&d)!=EOF)
        printf("%.3s.\n",&wd[dayofweek(y,m,d)*3]);
}

https://bbs.bccn.net/redirect.php?tid=215777&goto=lastpost#lastpost
发现大家都不爱看老帖子………………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-30 12:01
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 
楼上的兄弟,确实没有看到你贴的老贴,不过你的算法合我贴的这个算法还是有不一样的哦。

如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2008-05-30 12:41
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
算法一样干嘛贴………………
不过原理都是一样的,有一个公式…………

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-30 12:57
数字帝国
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-5-24
收藏
得分:0 
2楼的兄弟,能解释一下你的算法不??
2008-05-30 17:05
切忌浮躁
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2008-5-28
收藏
得分:0 
他来了会解释的.
2008-05-30 23:29
快速回复:一个关于计算星期的程序
数据加载中...
 
   



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

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