| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 937 人关注过本帖
标题:指教,计算某年的某一天.哪些可以省略?
取消只看楼主 加入收藏
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
 问题点数:0 回复次数:5 
指教,计算某年的某一天.哪些可以省略?
#include "stdio.h"
main()
{
struct {int y;int m;int d;}x,y;
int i,j;
while (1)
{printf ("Please Input Date (YYYY-MM-DD) : ");
scanf ("%d-%d-%d",&x.y,&x.m,&x.d);
if ((1000<=x.y&&x.y<=9999)&&(0<x.m&&x.m<=12)&&(0<x.d&&x.d<=31)==1) break;
printf ("Error Year or Month or Date.\n");}
if ((x.y%4==0)&&((x.y%400==0)||(x.y%100==1)==1))
{
switch (x.m-1)
{
case 0:i=0;break;
case 1:i=31;break;
case 2:i=59;break;
case 3:i=90;break;
case 4:i=120;break;
case 5:i=151;break;
case 6:i=181;break;
case 7:i=212;break;
case 8:i=243;break;
case 9:i=273;break;
case 10:i=304;break;
case 11:i=334;break;
case 12:i=365;break;
default:printf ("Error Month\n");}
j=i+x.d;
printf ("Date is : %d",j);}
else
{
switch (x.m-1)
{
case 0:i=0;break;
case 1:i=31;break;
case 2:i=60;break;
case 3:i=91;break;
case 4:i=121;break;
case 5:i=152;break;
case 6:i=182;break;
case 7:i=213;break;
case 8:i=244;break;
case 9:i=274;break;
case 10:i=305;break;
case 11:i=335;break;
case 12:i=366;break;
default:printf ("Error Month\n");}
j=i+x.d;
printf ("Date is : %d",j);}
搜索更多相关主题的帖子: 指教 
2006-02-13 22:47
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 

多定义了一个Y的数据结构了...


最好的域名、虚拟主机、VPS  www.
2006-02-13 22:49
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
我这样好像更易读一点,如果合在一块更不易读.

代码长度跟EXE文件大小是不是有关.?

最好的域名、虚拟主机、VPS  www.
2006-02-13 23:25
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
#include "stdio.h"
main()
{
struct {int y;int m;int d;}x;
int i,j;
while (1)
{printf ("Please Input Date (YYYY-MM-DD) : ");
scanf ("%d-%d-%d",&x.y,&x.m,&x.d);
if ((1000<=x.y&&x.y<=9999)&&(0<x.m&&x.m<=12)&&(0<x.d&&x.d<=31)==1) break;
printf ("Error Year or Month or Date.\n");}
switch (x.m-1)
{
case 0:i=0;break;
case 1:i=31;break;
case 2:i=59;break;
case 3:i=90;break;
case 4:i=120;break;
case 5:i=151;break;
case 6:i=181;break;
case 7:i=212;break;
case 8:i=243;break;
case 9:i=273;break;
case 10:i=304;break;
case 11:i=334;break;
case 12:i=365;break;
default:printf ("Error Month\n");}
j=i+x.d;
if ((x.y%4==0)&&((x.y%400==0)||(x.y%100==1)==0))
j=j+1;
printf ("Date is : %d",j);}


^_^ 还可以优化么...

最好的域名、虚拟主机、VPS  www.
2006-02-13 23:47
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
快速回复:指教,计算某年的某一天.哪些可以省略?
数据加载中...
 
   



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

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