C语言 输入年月日 输出是这一年的第几天

C语言
输入年月日
输出是这一年的第几天一下是我的代码
#include<stdio.h>
int Dayofyear(int year,int month,int day);
int main()
{
int year,month,day,i;
printf("请输入年月日");
scanf("%4d,%2d,%2d",&year,&month,&day);//输入年月日
i=Dayofyear(year,month,day);
printf("%4,%2d,%2d 是这一年的第%5d天",year,month,day,i);
return 0;

}
//计算这是这一年的第几天
int Dayofyear(int year,int month,int day)
{
int m=0;
if((year%4==0)&&(year%100!=0)&&(month>2))
{
m=m+1;
}
if (month==1)
m=day;
else if(month==2)
m=day+31;
else if(month==3)
m=day+31+28;
else if(month==4)
m=day+31+28+31;
else if(month==5)
m=day+31+28+31+30;
else if(month==6)
m=day+31+28+31+30+31;
else if(month==7)
m=day+31+28+31+30+31+30;
else if(month==8)
m=day+31+28+31+30+31+30+31;
else if(month==9)
m=day+31+28+31+30+31+30+31+31;
else if(month==10)
m=day+31+28+31+30+31+30+31+31+30;
else if(month==11)
m=day+31+28+31+30+31+30+31+31+30+31;
else if(month==12)
m=day+31+28+31+30+31+30+31+31+30+31+30;
return m;

}

在线等
到底哪里有问题啊

1、首先打开vc6.0, 新建一个vc项目。

2、添加头文件和main函数。

3、定义day、month、year、sum、leap 五个变量。

4、使用 scanf给定义的变量赋值。

5、使用switch语句,先计算某月以前的月份的总天数。

6、使用sum, 加上某天的天数。

7、判断是不是闰年。

8、如果是闰年且月份大于2, 总天数应该加一天。

9、使用printf打印sum。

10、运行程序。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-10

网友这边有提供答案了

https://zhidao.baidu.com/question/136639146227615485.html

追问

一会看看

第2个回答  2017-12-10

如图,第一个错误在输入年月日时发生


应改为如下


明显计算结果还是错误的。我决定帮你彻底改正此程序。(等会追答)

追答

不好意思搞错,用逗号也可以但要按逗号分割

请追问,我追答给你源码。你的程序在闰月的计算上有错误

源代码在网页端可查看:根据你写的,应该如下修改。

int main()
{
int year,month,day,i;
printf("请输入年月日(以逗号隔开,回车键确认):\n");
scanf("%d,%d,%d",&year,&month,&day);//输入年月日
i=Dayofyear(year,month,day);
printf("%d,%d,%d 是%d年的第%d天\n",year,month,day,year,i);
return 0;
}
//计算这是这一年的第几天
int Dayofyear(int year,int month,int day)
{
int m; //m无需赋初值
if(month==1) m=day;
else if(month==2) m=day+31;
else{ //month>2
if(month==3)
m=day+31+28;
else if(month==4)
m=day+31+28+31;
else if(month==5)
m=day+31+28+31+30;
else if(month==6)
m=day+31+28+31+30+31;
else if(month==7)
m=day+31+28+31+30+31+30;
else if(month==8)
m=day+31+28+31+30+31+30+31;
else if(month==9)
m=day+31+28+31+30+31+30+31+31;
else if(month==10)
m=day+31+28+31+30+31+30+31+31+30;
else if(month==11)
m=day+31+28+31+30+31+30+31+31+30+31;
else if(month==12)
m=day+31+28+31+30+31+30+31+31+30+31+30;
//先求完再判断闰年(否则你后面重新赋值,前面m+1就无效了)
if((year%4==0)&&(year%100!=0))m++;
}
return m;
}

源代码都在网页端发,请用网页端查看(手机也不适合编程)
下面是我的改进法,还包括检验日期有效性的功能,比楼下链接的更强大

如图带日期校验功能的代码如下:(请网页端查看),其实我也可以写成类或结构体,这才是C++的正确应用,但由于时间关系,和这个悬赏的分数不成比例,(请你理解)

由于被“网友采纳”无法发网页版的代码,代码如下。
#include
int DayOfyear(int year,int month,int day);
int main()
{
int year,month,day,i;
while(1){//循环方便不断验证
printf("请输入年月日(以逗号隔开,回车键确认):\n");
scanf("%d,%d,%d",&year,&month,&day);//输入年月日
i=DayOfyear(year,month,day);
if(i>0)
printf("%d,%d,%d 是%d年的第%d天\n",year,month,day,year,i);
else
printf("输入的日期:%d,%d,%d 非法!\n",year,month,day);
}
return 0;
}
//计算这是这一年的第几天(带验证非法日期功能!)
int DayOfyear(int year,int month,int day)
{
if(year12 || day Days[month]){ return -1;} //竟然超过下一月的首日(返回非法!)
Count+=add; //若为闰年要将少算1天要加回去!
return Count;
}
}

你的写法1-12月一个个来if效率很低,那位链接的写法也不高明,也要多次判断。最好解法一定是用数组(在实际汇编代码中,数组初始化不需要专门赋值,而是存在程序代码的数据中,用变址寻址直接取得,时间复杂度O(1),如果你学了《数据结构》就知道了。)

楼主闰年的判定写错了(我照抄也写错了)此行改为如下:
if((year%4==0)&&(year%100!=0 || year%400==0)){ add=1; //是闰年

追问

太谢谢你啦 ⋐(ల◕◡◕ల)⋑

本回答被提问者和网友采纳
相似回答