| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 433 人关注过本帖
标题:[求助]简化代码 日期问题
只看楼主 加入收藏
菜鸟笨鸟
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-9-2
收藏
 问题点数:0 回复次数:7 
[求助]简化代码 日期问题

题目:用户输入一个year(年)一个month(月)和一个day(日)
用函数实现求出这个日期是这一年的第几天
函数的原型为 int getDay(int year,int month,int day)
函数的返回值为第几天.
红色部分是对用户输入的限制 比如用户输入了 某年13月38日就是非法的 这个部分
我感觉自己做的麻烦了 有没有简单点的

#include<stdio.h>
int getDay(int year,int month,int day);
void main()
{
int year,month,day,s,leap;
printf("请您输入您要查询的年月日:\n");

printf("请您输入年:");//输入年
scanf("%d",&year);
if(year%400==0||(year%4==0)&&(year%100==0))//判断是否是闰年
leap=1;
else
leap=0;

printf("请您输入月:");//输入月
scanf("%d",&month);
if(month<1||month>12)//判断月份合法性
printf("月份无效\n");

printf("请您输入日:");//输入日
scanf("%d",&day);
switch(month)//判断天数的合法性
{

case 4: //这些月份每月对多30天
case 6:
case 9:
case 11:
if(day<1||day>30)
printf("本月份最多30天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
break;
case 2: //2月份闰年最多29天
if(leap==1)
{
if(day<1||day>29)
printf("闰年本月份是最多29天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
}
if(leap==0) //2月份非闰年最多28天
{
if(day<1||day>28)
printf("非闰年本月份最多28天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
}
break;
default: //剩下的月份最多31天
if(day<1||day>31)
printf("本月份最多31天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
}

}

int getDay(int year,int month,int day)//判断这个日期是第几天
{
int n;
switch(month)
{
case 1:n=0;break;
case 2:n=31;break;
case 3:n=59;break;
case 4:n=90;break;
case 5:n=120;break;
case 6:n=151;break;
case 7:n=181;break;
case 8:n=212;break;
case 9:n=243;break;
case 10:n=273;break;
case 11:n=304;break;
case 12:n=334;break;
default:printf("您输入的月份有错误!\n");
}

if((month>2)&&(year%400==0||(year%4==0)&&(year%100==0)))//输入的月份大于2同时又是闰年多加一天
return(n+day+1);
else
return(n+day);
}

[此贴子已经被作者于2006-10-15 23:13:38编辑过]

搜索更多相关主题的帖子: 代码 
2006-10-15 23:02
honkerman
Rank: 2
等 级:新手上路
威 望:4
帖 子:3078
专家分:0
注 册:2006-8-25
收藏
得分:0 

如果结果大于365~~报错~闰年同理~~


" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
2006-10-15 23:11
honkerman
Rank: 2
等 级:新手上路
威 望:4
帖 子:3078
专家分:0
注 册:2006-8-25
收藏
得分:0 
一定要在输入过程中验证的话,当我没说好了~~

" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
2006-10-15 23:12
honkerman
Rank: 2
等 级:新手上路
威 望:4
帖 子:3078
专家分:0
注 册:2006-8-25
收藏
得分:0 
#include<stdio.h>
void main()
{
int day,month,year,i,days=0;
int mn[]={0,31,28,30,30,31,30,31,31,30,31,30,31};
printf("Input year,month,day:\n");
scanf("%d%d%d",&year,&month,&day);
if((year%4==0&&year%100!=0)||(year%400==0))
mn[2]=29;
for(i=0;i<month;i++)
days=mn[i]+days;
days=day+days;
if(days>366)
printf(" error Date");
else
printf("It is the %dth day of the year!\n",days);
}
不知道验证的对不·~

" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
2006-10-15 23:20
菜鸟笨鸟
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-9-2
收藏
得分:0 
我试一下哈~!!~!

偶是大菜鸟~!
2006-10-15 23:26
菜鸟笨鸟
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-9-2
收藏
得分:0 
有个问题输入 2月30也可以算出来

偶是大菜鸟~!
2006-10-15 23:37
honkerman
Rank: 2
等 级:新手上路
威 望:4
帖 子:3078
专家分:0
注 册:2006-8-25
收藏
得分:0 

当然能显示了~小于365天嘛~~还要加点别的,自己想想吧~~


" target="_blank">God Bless You[GLOW=255,#00ff00,2]My Friends![/GLOW]
2006-10-15 23:41
计院人
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-10-15
收藏
得分:0 
我看了一下,如果你输入的时候月份大于12的话,这个时候输出月份错误并返回应该要好些吧,就是把void main()改成int main(),把
if(month<1||month>12)
printf("月份无效\n");
改成 if(month<1||month>12)
{printf("月份无效\n");
return 0;
}
这样的话当输出月份超出的时候就直接返回,不用再输入天数和进行后面的计算了

2006-10-16 13:07
快速回复:[求助]简化代码 日期问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018157 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved