| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 939 人关注过本帖
标题:指教,计算某年的某一天.哪些可以省略?
只看楼主 加入收藏
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
 问题点数:0 回复次数:17 
指教,计算某年的某一天.哪些可以省略?
#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
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

这个问题我最近已经讲过了,你可以翻翻这页或者下页的帖子


淘宝杜琨
2006-02-13 23:18
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
两个switch语句 可以多加个变量合并 ,会简略些.

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-02-13 23:20
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
我这样好像更易读一点,如果合在一块更不易读.

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

最好的域名、虚拟主机、VPS  www.
2006-02-13 23:25
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 

你这样写不仅代码效率不高,而且编译后生成的EXE会变长~~


淘宝杜琨
2006-02-13 23:32
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
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
写小程序的时候要保证正确性,如果比较大的程序就考虑数据结构和算法,至于
代码写法的优化,可能不会有很大的成效.

when i want to ask anyone,i will ask myself first.
2006-02-14 00:27
吸血鬼王
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2005-12-17
收藏
得分:0 
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就足够了。
2006-02-14 08:21
cordier
Rank: 2
等 级:论坛游民
威 望:1
帖 子:449
专家分:14
注 册:2006-2-9
收藏
得分:0 
我给点建议
如果用户输入2000-4-31会如何
4月份是没有31号的。
对于数据正确性方面,楼主没有考虑清楚!!!!

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



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

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