zoukankan      html  css  js  c++  java
  • 【C语言】练习5-8

    •  题目来源:《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
    ",day_of_year(1988, 3, 1));
        month_day(1988, 61, &month, &day);
        printf("month = %d, day = %d
    ", month, day);
    }
  • 相关阅读:
    数据库自增ID归零
    JAVA中的接口和抽象类(转)
    谈如何学习linux (转)
    如何编译安装源码包软件(转)
    每天对着电脑46小时的人必看
    JAVA错误处理大集合
    5月15号项目总结
    让程序在Windows CE系统启动时自动运行
    wince.net4.2问题
    触摸屏定位校准
  • 原文地址:https://www.cnblogs.com/ningvsban/p/3813418.html
Copyright © 2011-2022 走看看