C/C++学习:判断某日是当年第几天
2015-02-22 20:43
806 查看
问题
学期末两周实训,老师布置若干题目。其中,第一题为:判断某日是当年第几天。问题描述:用结构体表示日期,输入一个日期(年、月、日),计算从输入这年的1月1日到输入的日期的总天数days并输出。
解题
1. 设计结构体
结构体中包含三个成员,分别为整型的年、月、日。struct date{ int year;//年 int month;//月 int day;//日 };
2.日期输入设计
这里按照常规日期格式:年用四位数字表示,月、日用两位数字表示。故使用语句”%4d%2d%2d”来截取相应数量的数字赋值给结构体成员。scanf("%4d%2d%2d",&data.year, &data.month, &data.day);
3.天数计算
从输入的日期可知(如20141222),12月只过了22日,不足一个月。所以,我们可以先对1-11月的天数进行求和。 注:下述代码中数组m记录平年每个月的天数,方便起见从1号下标开始使用。int total_day = 0;//初始化变量 int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //除当月之外的月份天数加和,直至一月 for(i = data.month-1;i >= 1;i--) total_day += m[i];
1-11月的天数求和完毕后,就可将12月的天数加到总天数中,该步骤可与在1-11月求和前进行。
//当月天数加和 total_day += data.day;
上述操作都是以平年的天数进行求和的。若输入的年份为闰年且求解的日期在3月或以上,则需要补多一天(即2月29日)。注:闰年判断见第四点。
if( (data.year % 4 == 0 && data.year % 100 != 0) || (data.year % 400 == 0) ){ if(data.month > 2){ total_day += 1; } }
4.闰年判断
闰年的条件有两个,满足任意一个即为闰年。-1.年份能被4整除,且不能被100整除
-2.年份能被400整除
if((data.year<1 or data.year>9999) && (data.month<1 or data.month>12)&& (data.day<1 or data.day>12)){ //该年为闰年时的执行语句 }
5.合法性检查
//输入合法性检查 if(data.year<1 && data.year>9999 && data.month<1 && data.month>12 && data.day<1 && data.day>12){ //不合法时的执行语句 } else{ //合法时的执行语句 }
附完整代码:
/*========================================
Module Name:判断某日是当年第几天
Module Date:20141222
Module Auth:CLyoko
Description:用结构体表示日期,输入一个日期(年、月、日),计算从输入这年的1月1日到输入的日期的总天数days并输出。
Other:
Revision History:
Date Rel Ver. Notes
20141222 1.0 创建程序
==========================================*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
struct date{
int year;
int month;
int day;
}data;
int main(int argc, char *argv[])
{
int m[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int total_day = 0;
int i=0;
while(1)
{
system("cls");
//初始化总天数以开始新的计算
total_day = 0;
cout<<" 计算总天数\n";
cout<<"请输入日期(例20140523):";
//按格式获取年月日信息
scanf("%4d%2d%2d",&data.year, &data.month, &data.day);
//输入合法性检查
if((data.year<1 or data.year>9999) && (data.month<1 or data.month>12)&& (data.day<1 or data.day>12)){
cout<<"输入不合法\n";
system("pause");
}
else{
//除当月之外的月份天数加和,直至一月
for(i = data.month-1;i >= 1;i--)
total_day += m[i];
//当月天数加和 total_day += data.day;
//当年若为闰年则总天数+1
if( (data.year % 4 == 0 && data.year % 100 != 0) || (data.year % 400 == 0) ){ if(data.month > 2){ total_day += 1; } }
cout<<"该日期到这年1月1日的总天数为:"<<total_day<<endl;
system("pause");
}
}
return 0;
}
转载请保留作者信息。
作者: CLyoko
文章网址: http://blog.csdn.net/clyoko/article/details/43908647
相关文章推荐
- 函数入门实例、九宫格实例、判断某日是当年的第几天实例
- 【学习笔记】判断某年某月某天是当年的第几天?
- c++ 判断第几天 源码(控制台)
- [C++学习笔记] 链表应用1判断一个集和是否为另一个集合的子集
- C#习题之输入年月日判断是当年第几天
- 输入一个年月日,判断是当年的第几天
- switch case应用-输入年月日判断当年第几天
- 判断某日是该年第几天
- 判断某天为当年第几天的demo
- C++|C++学习笔记|二、判断与循环
- C++ 实现判断一个输入日期是星期几,是一年中的第几天
- 输入一个日期,判断是当年的第几天
- C++练习之 判断某一天是该年的第几天
- 学习C/C++语言:判断是否为闰年
- [c++学习] dowhile 输入两个string ,判断较大的.---ShinePans
- 【C/C++学习笔记】判断一个点是否在多边形内部的例子
- ★输入某年某月某日,判断这一天是这一年的第几天? C/C++
- C++反汇编学习笔记1——选择判断语句
- C++学习笔记:不用sizeof判断int类型占用几个字节
- c++学习课时二 简单的判断&&循环