您的位置:首页 > 编程语言 > C语言/C++

C语言用结构体求所给日期是一年第几天

2013-08-03 19:13 197 查看
#include <stdio.h>
#include <string.h>
#include <assert.h>
typedef struct date
{
int year;
int month;
int day;
}DATE;
int days[12]={0};
int main()
{
DATE date;
int valid=0;int which_day;
do
{
printf("请输入某天日期值(年,月,日),输入(0,0,0)代表结束\n");
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
valid=isvalid(date);
//printf("valid=%d\n",valid);
if(valid==1)
{
which_day=whichday(date);
printf("%d-%d-%d是%d年的第%d天\n",date.year,date.month,date.day,date.year,which_day);
}
else printf("您的输入有误\n");
}
while(date.year!=0||date.month!=0||date.day!=0);
return 0;
}
int isleap(const int year_input)//是否是闰年
{
int is_leap;
assert(year_input>=0&&year_input<=9999);

if(year_input%4==0&&year_input%100!=0)
is_leap=1;
else if(year_input%400==0)
is_leap=1;
else
is_leap=0;
return is_leap;
}
int isvalid(DATE date_input)//判断输入的日期是否有效
{
int is_valid=0;int is_leap;
is_leap=isleap(date_input.year);
days[0]=31;
days[2]=31; days[3]=30;
days[4]=31; days[5]=30;
days[6]=31; days[7]=31;
days[8]=30; days[9]=31;
days[10]=30;days[11]=31;
switch(is_leap)
{
case 1:days[1]=29;break;
case 0:days[1]=28;break;
}
if(date_input.year>=0&&date_input.year<=9999)
if(date_input.month>=1&&date_input.month<=12)
if(date_input.day>=0&&date_input.day<=days[date_input.month-1])
is_valid=1;
else is_valid=0;
return is_valid;
}
int whichday(DATE date)//求是第几天
{
int i;int sum=0;
if(date.month==1)
sum=date.day;
else
{
for(i=0;i<date.month-1;i++)
{
sum=sum+days[i];
}
sum=sum+date.day;
}
return sum;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: