| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 745 人关注过本帖
标题:凯撒日期怎么写!
只看楼主 加入收藏
呈哥
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-3-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
凯撒日期怎么写!
本人新手,请各位高手指教 凯撒日期怎么写。就是任意输入一个年月日 然后输出这个日期是这年的第几天
搜索更多相关主题的帖子: 年月日 
2012-03-21 19:02
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:3 
这个还是比较简单的,麻烦的地方就是闰年的问题。根据月份和日期就能计算出这一年已经过去的天数啊。
收到的鲜花
  • 呈哥2012-03-22 09:35 送鲜花  3朵  

。。。!!!)))000
2012-03-21 21:07
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:0 
这是我写的,给你做个参考。没仔细检测。
程序代码:
#include <stdio.h>
#include <stdbool.h>
int main(){
    int year;    //the year
    int mon;    //the month
    int day;    //the day 
    int dayOfYear = 0;   //day of the year
    bool leapYear;   //if the year is a leap year??
    
      printf("Please enter the data(YYYY-MM-DD): ");
      scanf("%d-%d-%d",&year,&mon,&day);
      while((mon < 1 || mon > 12)||(day < 0 || day > 31)){   //check the input
              printf("Enter error!Please enter again!\n\n");
              printf("Please enter the data(YYYY-MM-DD): ");
              scanf("%d-%d-%d",&year,&mon,&day);
      } 

    
    
    if((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)){//if the year is a leap year,then leapYear=true
        leapYear = true;
    }
    else{
        leapYear = false;
    }
    
    
    if(leapYear){   //if the year is a leap year
        if(mon == 1){
            dayOfYear == day;
        }
        else if(mon == 2){
            dayOfYear = 31 + day;
        }
        else if(mon > 2) {
            dayOfYear += 60;
            dayOfYear += day;
            for(int i = 3;i< mon;i++){
                if((i == 1)||(i == 3)||(i == 5)||(i == 7)||(i == 8)||(i == 10)||(i == 12)){
                  dayOfYear += 31;
                  }
                else if((i == 4)||(i == 6)||(i == 9)||(i == 11)){
                    dayOfYear += 30;
                }
          }
            
        }
        
    }
    
    else if(!leapYear){//if the year is not a leap year
        if(mon == 1){
            dayOfYear == day;
        }
        else if(mon == 2){
            dayOfYear = 31 + day;
        }
        else if(mon > 2) {
            dayOfYear += 59;
            dayOfYear += day;
            for(int i = 3;i< mon;i++){
                if((i == 1)||(i == 3)||(i == 5)||(i == 7)||(i == 8)||(i == 10)||(i == 12)){
                  dayOfYear += 31;
                  }
                else if((i == 4)||(i == 6)||(i == 9)||(i == 11)){
                    dayOfYear += 30;
                }
          }
            
        }
    }
    
    printf("The day of the year is: %d\n",dayOfYear);
} 
收到的鲜花
  • 呈哥2012-03-22 09:36 送鲜花  3朵  

。。。!!!)))000
2012-03-21 23:05
木头lbj
Rank: 7Rank: 7Rank: 7
来 自:黄山
等 级:黑侠
威 望:1
帖 子:269
专家分:527
注 册:2010-11-6
收藏
得分:0 
加点点数撒。。。
收到的鲜花
  • 呈哥2012-03-22 09:36 送鲜花  3朵  

。。。!!!)))000
2012-03-21 23:06
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:3 
可以自己写函数,也可以用库函数。
自己写大致意思就是循环着加一下。我写了一个,也没怎么测试,不保证正确,仅供参考吧。
程序代码:
#include <stdio.h>
#include <time.h>

int yday(int year, int mon, int mday)
{
    int res = 0;
    int mdays[13]    // 每个月的天数,mdays[0] 不用
    = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    if ( year % 4 == 0    // 是4的倍数,但不是 100 的倍数,或者是 400 的倍数
      && (year%100 !=0 || year%400 == 0) )
        ++mdays[2];    // 那么2月多一天。

    if (mon > 12 || mday > mdays[mon]) return -1;    // 如果给的天数比这个月应该有的天数多,不正确。

    int i;
    for (i = 1; i < mon; i++)
        res += mdays[i];    // 之前的月全部累计

    return res += mday;    // 加上这个月已过的天数就是最后结果。
}

int main(int argc, char *argv[])
{
    struct tm date;    // 用库函数计算 2012年3月22日话,
    date.tm_year = 2012 - 1900;    // 年是从 1900 年算起的。
    date.tm_mon = 3 - 1;    // 月是从 0 算起的。
    date.tm_mday = 22;    // 该月的第几天正常。是从 1 算起的。
    // 设置到 00:00:00 这个时间。
    date.tm_hour = date.tm_min = date.tm_sec = 0;

    mktime(&date);    // 这个函数会设置 tm 的其它域为合适的值。

    printf ("%d\n", yday(2012, 3, 22));
    printf ("%d\n", date.tm_yday+1);     // 该年的第几天也是从 0 算起的。

    return 0;
}




[ 本帖最后由 pangding 于 2012-3-22 01:26 编辑 ]
2012-03-22 01:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
设置 struct tm 一般来说比较费劲,C 标准库里没有专门的函数可以做这个工作。
如果编译器支持 POSIX 标准或者 XOpen 标准,那么会提供一些其它函数用来辅助设置 tm 结构。
收到的鲜花
  • 呈哥2012-03-22 09:36 送鲜花  1朵  
2012-03-22 01:40
呈哥
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-3-15
收藏
得分:0 
回复 2楼 木头lbj
嗯那地方我会写,就是没有整个思路
2012-03-22 09:34
zd1505675319
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:178
注 册:2011-11-4
收藏
得分:3 
还是版主的 短小
2012-03-22 10:05
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:3 
漂亮的代码……
2012-03-22 10:44
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:3 
以下是引用pangding在2012-3-22 01:21:38的发言:

可以自己写函数,也可以用库函数。
自己写大致意思就是循环着加一下。我写了一个,也没怎么测试,不保证正确,仅供参考吧。
#include <stdio.h>
#include <time.h>

int yday(int year, int mon, int mday)
{
    int res = 0;
    int mdays[13]    // 每个月的天数,mdays[0] 不用
    = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    if ( year % 4 == 0    // 是4的倍数,但不是 100 的倍数,或者是 400 的倍数
      && (year%100 !=0 || year%400 == 0) )
        ++mdays[2];    // 那么2月多一天。

    if (mon > 12 || mday > mdays[mon]) return -1;    // 如果给的天数比这个月应该有的天数多,不正确。

    int i;
    for (i = 1; i < mon; i++)
        res += mdays;    // 之前的月全部累计

    return res += mday;    // 加上这个月已过的天数就是最后结果。
}

int main(int argc, char *argv[])
{
    struct tm date;    // 用库函数计算 2012年3月22日话,
    date.tm_year = 2012 - 1900;    // 年是从 1900 年算起的。
    date.tm_mon = 3 - 1;    // 月是从 0 算起的。
    date.tm_mday = 22;    // 该月的第几天正常。是从 1 算起的。
    // 设置到 00:00:00 这个时间。
    date.tm_hour = date.tm_min = date.tm_sec = 0;

    mktime(&date);    // 这个函数会设置 tm 的其它域为合适的值。

    printf ("%d\n", yday(2012, 3, 22));
    printf ("%d\n", date.tm_yday+1);     // 该年的第几天也是从 0 算起的。

    return 0;
}

反反复复就这么几道题      我给楼主一个题目输入任意日期输出到2000-4-23共多少天

编程之路定要走完……
2012-03-22 13:55
快速回复:凯撒日期怎么写!
数据加载中...
 
   



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

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