输入某年某月某日,输出这是今年的第几天,C语言问题
3个回答
展开全部
输入年月日三个值,先累加该年之前各个月的每月天数,最后累加日期天数即可获取结果。
一、算法设计:
1、输入年月日三个值;
2、为保证程序健壮性,可以对三个值的合法性进行判断,只对合法数据进行操作;
3、累加之前各月天数;
4、累加当前日值;
5、输出结果。
二、注意点:
可以使用数组存储各个月份的天数,用循环累加。需要注意的是闰年的判断。对于闰年,2月要多加一天。
三、参考代码:
#include <stdio.h>
int main()
{
int mdays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//十二个月的天数。
int y,m,d,r=0,i;
scanf("%d%d%d",&y,&m,&d);
if(y%400==0 || (y%4==0 && y %100 != 0))//闰年。
mdays[1] = 29;//设置闰年二月值。
if(y<0 || m<=0 || m>12 || d<=0 || d>mdays[m-1])//输入非法。
{
printf("输入年月日不合法\n");//提示并退出。
return -1;
}
for(i = 0; i < m-1; i ++)//累加之前各个月。
r+=mdays[i];
r+=d;//累加日期值。
printf("%d\n",r);//输出结果。
return 0;
}
一、算法设计:
1、输入年月日三个值;
2、为保证程序健壮性,可以对三个值的合法性进行判断,只对合法数据进行操作;
3、累加之前各月天数;
4、累加当前日值;
5、输出结果。
二、注意点:
可以使用数组存储各个月份的天数,用循环累加。需要注意的是闰年的判断。对于闰年,2月要多加一天。
三、参考代码:
#include <stdio.h>
int main()
{
int mdays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};//十二个月的天数。
int y,m,d,r=0,i;
scanf("%d%d%d",&y,&m,&d);
if(y%400==0 || (y%4==0 && y %100 != 0))//闰年。
mdays[1] = 29;//设置闰年二月值。
if(y<0 || m<=0 || m>12 || d<=0 || d>mdays[m-1])//输入非法。
{
printf("输入年月日不合法\n");//提示并退出。
return -1;
}
for(i = 0; i < m-1; i ++)//累加之前各个月。
r+=mdays[i];
r+=d;//累加日期值。
printf("%d\n",r);//输出结果。
return 0;
}
展开全部
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("对不起,输入错误的日期!");break;
}
这段代码设计很巧妙
但是你的问题也就是出在这段代码上
看到case
2和case
3没?
在case
2的时候,你没有对于day进行检查,所以你不知道30,31是合法的
在case
3的时候,你没有对于year进行检查,所以你没有办法知道
是+59还是58
所以你应该一开始先增加day的检查
if (day <= 0 || day > 31)
printf("Error Day!!!")
if (mouth == 2 && day > 29)
printf("Error Day!!!")
{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("对不起,输入错误的日期!");break;
}
这段代码设计很巧妙
但是你的问题也就是出在这段代码上
看到case
2和case
3没?
在case
2的时候,你没有对于day进行检查,所以你不知道30,31是合法的
在case
3的时候,你没有对于year进行检查,所以你没有办法知道
是+59还是58
所以你应该一开始先增加day的检查
if (day <= 0 || day > 31)
printf("Error Day!!!")
if (mouth == 2 && day > 29)
printf("Error Day!!!")
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序挺好,错就错在下面判断闰年对于计算结果没有起作用,所以只要修改一处即可:
将倒数第二句
if(er==1&&month>2);
改为:
if(month>2)
sum+=er;
即可。
将倒数第二句
if(er==1&&month>2);
改为:
if(month>2)
sum+=er;
即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询