/* * Copyright (c) 2012, 烟台大学计算机学院 * All rights reserved. * 作 者: 刘同宾 * 完成日期:2012 年 11 月 30 日 * 版 本 号:v1.0 * * 输入描述: * 问题描述: 编写程序判断某年某月某日这一年中是第几天。 * 程序输出: * 问题分析:略 * 算法设计:略 */ #include<iostream> using namespace std; int main() { int f(int year,int month,int day); //函数声明 int leap(int year);//函数声明 int t=0,s=0,i; int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //定义一数组 12个月的天数 int b[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年 int year,month,day; cout<<"请输入年月日:"<<endl; while(1) //循环 若输入错误 ,重新输入 { cin>>year>>month>>day; if(f(year,month,day)) //调用 判断是否输入合法 函数 { if(leap(year)) //调用判断是否是闰年的函数 { for(i=0;i<=month-2;i++) { t=t+b[i]; //之前月 天数的叠加 } s=t+day; } else { for(i=0;i<=month-2;i++) { t=t+a[i]; } s=t+day; } cout<<"这是这一年的第"<<s<<"天!"<<endl; break; } else { cout<<"输入错误请重新输入:"<<endl; } } return 0; } //判断输入是否合法! int f(int year,int month,int day) { int days(int year,int month,int day); if(year>0) { if(month>=1&&month<=12) { if(days(year,month,day)) { return true; } else return false; } else return false; } else return false; } //判断输入的天 是否合法! int days(int year,int month,int day) { int leap(int year); if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day>0&&day<=31) { return true; } } else if(month==2||month==4||month==6||month==9||month==11) { if(day>0&&day<=30) { return true; } } else { if(leap(year)) { if(day>0&&day<=29) { return true; } } else { if(day>0&&day<=28) { return true; } } } } //判断是否为闰年! int leap(int year) { if(year%4==0&&year%100!==0||year%400==0) { return true; } else return false; }