| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 937 人关注过本帖
标题:指教,计算某年的某一天.哪些可以省略?
只看楼主 加入收藏
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
还有
case12
好像用不到

2006-02-14 08:45
天晶子剑
Rank: 1
等 级:新手上路
帖 子:77
专家分:0
注 册:2006-2-13
收藏
得分:0 

对以上程序,如果输入2004-1-4日会怎么样。是不是多算了一天?SB才会问2004-4-31
main()
{
int day,month,year,sum,leap;
printf("\\nplease input year,month,day\\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))
  leap=1;
 else
  leap=0;
if(leap==1&&month>2)
sum++;
printf("It is the %dth day.",sum);}

2006-02-14 09:41
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

如果要考虑周到,要做的事情实在太多了。
你还要验证用户的输入是否仅仅为无符号的整数,这个时候推荐你用gets()函数来接受用户的输入,然后对字符串进行格式化操作
恩~还得考虑的程序自动修复的能力。就是说一旦用户的错误输入让程序产生错误,你要使得你的程序能经受住这个错误,并且能自动修复。
如果你还考虑到黑客的溢出攻击,推荐你使用fgets()函数来接受用户的输入


淘宝杜琨
2006-02-14 11:22
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
以下是引用吸血鬼王在2006-2-14 8:21:00的发言:
if ((1000<=x.y&&x.y<=9999)&&(0<x.m&&x.m<=12)&&(0<x.d&&x.d<=31)==1)这里==1可以省掉。另外你的x.m<=12,那就不会存在case 12了吧。还有
if ((x.y%4==0)&&((x.y%400==0)||(x.y%100==1)==0))这样判断润年好像不对吧。最后我觉得还要以省掉变量j;只用i就足够了。

^_^ case 12 是多余的....


if ((x.y%4==0)&&((x.y%400==0)||(x.y%100==1)==0))

润年的条件是符合下列条件之一..
1.能被4整除且被400整除.
2.能被4整除且不被100整除.

i替换成j ,,^_^ ...的确可以.


最好的域名、虚拟主机、VPS  www.
2006-02-14 12:33
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
以下是引用cordier在2006-2-14 8:43:00的发言:
我给点建议
如果用户输入2000-4-31会如何
4月份是没有31号的。
对于数据正确性方面,楼主没有考虑清楚!!!!

^_^ 的确是,如果输入 4-31 多算一天了...^_^


最好的域名、虚拟主机、VPS  www.
2006-02-14 12:37
rxb8178585
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-2-12
收藏
得分:0 

这算出来的结果是总天数呀!

2006-02-15 16:21
zushuboderen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2005-12-24
收藏
得分:0 

#define leep(year) (!(year%400)||(!(year%4)&&year%100))
main()
{
int sum;

struct { int y;
int m;
int d;
}sc;


printf ("Please Input Date (YYYY-MM-DD) : ");
scanf ("%d-%d-%d",&sc.y,&sc.m,&sc.d);


switch(sc.m) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59+leep(sc.y);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+sc.d; /*再加上某天的天数*/
printf("It is the %dth day.",sum);
getch();
}


没有考虑输入数据的准确性等问题呵呵
还有那个使用次数问题我也没加进去运行通过了


冷静点............. 耐心点.............
2006-02-15 17:54
吸血鬼王
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-12-17
收藏
得分:0 
以下是引用Fjcyz在2006-2-14 12:33:00的发言:
if ((x.y%4==0)&&((x.y%400==0)||(x.y%100==1)==0))

润年的条件是符合下列条件之一..
1.能被4整除且被400整除.
2.能被4整除且不被100整除.

能被400整除当然能被4整除了,所以第一个条件可以写成能被400整除就可以了。
然后结合你的这两个条件,你写的判断语句还是错的。自己仔细看一下。
另外你的程序在处理1月份的日期会出错,先想一下为什么?

2006-02-16 08:34
快速回复:指教,计算某年的某一天.哪些可以省略?
数据加载中...
 
   



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

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