首页 > 代码库 > 【C语言】练习5-8
【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\n",day_of_year(1988, 3, 1)); month_day(1988, 61, &month, &day); printf("month = %d, day = %d\n", month, day);}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。