C语言编程:输入某年某月某日判断这一天是一年的第几天的程序是是什么?

2024-11-15 14:04:55
推荐回答(2个)
回答(1):

#include

//返回指定年月日是对应年度的第几天
int getDays(int month,int day);
int isRunnian(int year);

int main(int argc,char* argv[])
{
int year=0;
int month=0;
int day=0;

printf("请输入年月日格式示例20140101\n");
scanf("%4d%2d%2d",&year,&month,&day);

//简化后的条件,是闰年且月份大于二,则返回天数加一,否则直接返回函数值
int days = getDays(month,day);
if (days==0){
printf("您输入的日期格式无效。\n");
return 0;
}
if (isRunnian(year) && month >2){
printf("输入日期是对应年份的第%d天",days+1);
}else{
printf("输入日期是对应年份的第%d天",days);
}
return 0;
}

//循环实现
int getDays(int month,int day){
int NUMBER[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int result=day;
if (month >12){ //避免出现数组越界情况
return 0;
}
for (int i=0;i< month-1;i++){//数组下标是从零开始
result+= NUMBER[i];
}
return result;
}

int isRunnian(int year){
//闰年的条件
//一:年度是400的整数倍,则是闰年
//二:年度能被4整除且不能被100整除
return year%4 ==0 && year%100 !=0 || year%400 ==0;
}

回答(2):

#include
int main()
{
int day,month,year,sum=0,leap;
printf("输入年月日如2019 7 12\n");
scanf("%d %d %d",&year,&month,&day);
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day;
if((year%400==0||(year%4==0&&year%100!=0))&&month>2)
sum++;
printf("这是这一年的第%d天。",sum);
return 0;
}
方法2
#include
int day_of_year(int (*p)[13],int year,int month,int day)
{
int i,leap;
leap=(year%100!=0 && year%4 ==0||year%400 ==0);
for(i=1;iday+=*(*(p+leap)+i);
return day;
}
main()
{
static int day_tab[][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",day_of_year(day_tab,a,b,c));
}