用C语言实现计算日期相关的问题一直是各个学校考研复试中重点问题,今天带大家实现一个小例子:给定两个日期,计算相隔的天数 输入:输入两组日期数据,格式为:xxxx xx xx(分别为年、月、日),计算相隔天数 示例:请输入第一个日期:2012 3 4 请输入第二个日期:2012 3 6 相隔天数为2 代码:
#define _CRT_SECURE_NO_WARNINGS //我用的是vs2013,使用scanf函 //数需要关闭安全检查,以后同理,不再赘述 #include<stdio.h>#include<stdlib.h>typedef struct DATE{ int year; int month; int day;}DATE; //定义日期结构体int isEqual (DATE date1, DATE date2); //判断两个日期是否相等int isrunyear (int year); //判断是否为闰年int month_day (int month, int year); //计算每月的天数int riqicha (DATE date1, DATE date2); //计算日期差int main (){ DATE date1, date2; PRintf ("请输入第一个日期:"); scanf ("%d%d%d", &date1.year, &date1.month, &date1.day); printf ("/n"); printf ("请输入第二个日期:"); scanf ("%d%d%d", &date2.year, &date2.month, &date2.day); printf ("/n"); //请输入第一个日期 //请输入第二个日期 //日期格式为:xxxx xx xx printf ("日期差为:%d", riqicha (date1, date2)); system ("pause"); //等待一下,如不加这句话程序完成之后会自动退 //出, 以后不再赘述 return 0;}int isEqual (DATE date1, DATE date2){ if (date1.year == date2.year&&date1.month == date2.month&&date1.day == date2.day) return 1; else return 0;}int isrunyear (int year){ if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0) /*判断一年是否为闰年的条件:是4的整数倍,不能是100的整数倍,可以是400的整数倍*/ return 1; else return 0;}int month_day (int month, int year){ switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: return isrunyear (year) ? 29 : 28; default: return -1; }}int riqicha (DATE date1, DATE date2){/*核心代码,请注意领悟思想,很多同学第一次看见本题时第一想法是先计算两个日期相隔多少年,再算月数,再将每月天数相加,再加多出来的日数,这种思想没有错误,但人类思考的工作太大,程序员都是懒惰的,尽量将工作交给计算机来做,本算法思想为:设置一个相隔天数num,初始为0,第一个日期没往后推一天,num自身加一,等到第一个日期和第二个日期相等时,num即为相隔天数*/ int num = 0; while (!isEqual (date1, date2)) { if (date1.day != month_day (date1.month, date1.year)) { date1.day++; } else { if (date1.month != 12) { date1.month++; date1.day = 1; } else { date1.year++; date1.month = 1; date1.day = 1; } } num++; } return num;}欢迎关注微信公众号:C语言二伟
新闻热点
疑难解答