首页 > 编程语言 > 详细

【C语言】练习5-8

时间:2014-07-07 19:10:39      阅读:403      评论:0      收藏:0      [点我收藏+]
  •  题目来源:《The C programming language》中的习题P92
  •  练习5-8: 一个日期转换的问题,把某月某日这种日期表示形式转换为某年中第几天的表示形式,反之亦然。例如,3月1日是非闰年的第60天,是闰年的第61天。在这里,我们定义下列两个函数以进行日期转换:函数day_of_year将某月某日的日期表示形式转换为某一年中的第几天的表示形式,函数month_day则执行相反的转换。

  代码实现

#include<stdio.h>

int daytab[2][13] = {
                    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  // 平年的月份
                    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},  // 闰年的月份
                    };
/* 把某月某日这种日期表示形式转换为某年中第几天 */
int day_of_year(int year, int month, int day){
    int result = 0;
    int flag = year%4 == 0 && year%100 != 0 || year%400==0; //判断是否为闰年。是则返回1,否则返回0
    int i = 0;
    // 错误检查
    if (year < 1752 || month < 1 || month > 12 || day < 1)
        return -1;
    if(day > daytab[flag][month]){
        return -1;
    }
    // 循环
    for(; i < month; i++){
        result += daytab[flag][i];
    }
    result += day;
    return result;
}

/* 把某年中第几天表示形式转换为某月某日这种日期形式 */
int month_day(int year, int theDays, int *pmonth, int *pday){
    int flag = year%4 == 0 && year%100 != 0 || year%400==0; //判断是否为闰年。是则返回1,否则返回0
    int i = 0;
    // 错误检查
    if (year < 1752 || theDays < 1){
        return -1;
    }
    if ((flag && theDays > 366) || (!flag && theDays > 365)){
        return -1;
    }
    for(; theDays > daytab[flag][i] && i <= 12 ; i++){
        theDays -= daytab[flag][i];
    }
    *pmonth = i;
    *pday = theDays;
    return 0;
}

/* 主函数 */
void main(){
    int month, day;
    printf("%d\n",day_of_year(1988, 3, 1));
    month_day(1988, 61, &month, &day);
    printf("month = %d, day = %d\n", month, day);
}

 

【C语言】练习5-8,布布扣,bubuko.com

【C语言】练习5-8

原文:http://www.cnblogs.com/ningvsban/p/3813418.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!