c语言实现的计算某年某月某天距其年初已经流逝的多少天

#include<stdio.h>

struct data

{
int year;
int month;
int day;
};
//*****判断闰年函数
int leap(int a)
{
if(a%4==0 && a%100!=0 || a%400==0)
{
return 1;
}
return 0;

//****计算天数函数
int number(int year,int m,int d)
{
  int sum=0,i,j;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //平年月份天数
  int b[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //闰年月份天数
  if(leap(year) == 1)
{
for(i=0; i<m-1; i++)
{
sum += b[i];
}
}
else
{
for(j=0; j<m-1;j++)
{
sum += a[j];
}
}
sum += d;
return sum;
}

int main()
{
int n = 0;
struct data dt;
int arr[10] ={0};
int len = sizeof(arr)/sizeof(arr[0]);
int i = 0;
printf("请输入年月日,结束输入请点击ctrl+z+Enter显示结果\n");
while(scanf("%d/%d/%d",&dt.year,&dt.month,&dt.day) != EOF)
{
//********这一串都是判断输入的数据是否满足客观真理
if(dt.month>0 && dt.month<13 && dt.day>0 && dt.day<32 ) 
{

if(dt.day < 30 && (dt.month == 4 || dt.month == 6 || dt.month == 9 || dt.month == 11))
{
n = number(dt.year,dt.month,dt.day);
arr[i] = n;
i++;
}
else if(dt.day<32 && (dt.month == 1 || dt.month == 3 ||dt.month == 5 ||dt.month == 7 || dt.month == 8 ||dt.month == 10 ||dt.month == 12))
{
n = number(dt.year,dt.month,dt.day);
arr[i] = n;
i++;
}
else if(leap(dt.year) == 1 && dt.month == 2 && dt.day < 29)
{
n = number(dt.year,dt.month,dt.day);
arr[i] = n;
i++;

else if(leap(dt.year) == 0 && dt.month == 2 && dt.day < 28)
{
n = number(dt.year,dt.month,dt.day);
arr[i] = n;
i++;

else
{
printf("您的输入有误!请重新输入\n");
}
}
else
{
printf("您的输入有误!请重新输入\n");
}

}
for(int j=0;j<len;j++)
{
if(arr[j] != 0)
{
printf("%d\n",arr[j]);
}
}

return 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值