用C编程计算某日期是一年中第几天

/* 1.输入年月日,编写程序计算所输日期是当年的第几天 */
/* 2.已知列车隔日发车,且1/1/2006不发车(无ticket),如果所输入数据在此日期之后,则输出有没有车票,否则仅输出上一步结果。*/

/* month/date/year is which day of the year */
/* is there a ticket today(2006.01.01--yeath!)?? */

#include <stdio.h>

int year,month,date;

void input()
/* read input number and judge is it legal*/

 puts("please input year,month,date:");
 scanf("%d%d%d",&year,&month,&date);
 while(date>31||date<1||month>12||month<1)
 {
  puts("month OR date Wrong!!!");
  puts("please input year,month,date:");
  scanf("%d%d%d",&year,&month,&date);
 }

}
int isleapyear(int year)       
/* is the year a leapyear */
{if(year%4==0&&year%100!=0||year%400==0) return(1);
 else return(0);
}

int days(int year,int month,int date)
/* Calculate the days since Jan,1,year.(you input the "year") */
{int day;
 switch(month)
 {
  case 1:day=date;break;
  case 2:day=date+31;break;
  case 3:day=date+59;break;
  case 4:day=date+90;break;
  case 5:day=date+120;break;
  case 6:day=date+151;break;
  case 7:day=date+181;break;
  case 8:day=date+212;break;
  case 9:day=date+243;break;
  case 10:day=date+273;break;
  case 11:day=date+304;break;
  case 12:day=date+334;break;
  default:printf("Data error!!!");
 }
if(isleapyear(year)&&month>2) day+=1;
return(day);
}

int main(void)
{
 int i,m=0,n;
  /* "i" is a counter;"m" is the days since Jan,1,2006 ;"n"the days since Jan,1,year.*/
 input();

 n=days(year,month,date);

 if(year>2005)       /*is there a m ticket today which is later than 2006.01.20 */
 {
  for (i=2006;i<year;i++)
  /* add the days from 2006 to year-1.(if it is a leapyear add 366,or add 365)*/
   if(isleapyear(i)) m+=366;
   else m+=365;     

  m=m+n-days(2006,1,1);
 
  if(m%2==1)puts("Ticket:Yeath!!/n");
 
  else puts("Ticket:Sorry!!!/n");
 }

 printf("%d/%d/%d  day:%d/n",month,date,year,n);
 
 puts("Press anykey to quit!");
 
 getch();

return 0;
}

  PS:1.本人初学,不求其他只愿代码能够尽量简洁高效,欢迎各位多多批评、多多挑毛病^_^。加我QQ 505011298。

   2.文章全部为原创,过程中可能有些文章参考了某些文章的思路,但本人宗旨和目标只是:a.不如我之人可以向我学习b.希望高手可以对我指点一二,以求做到最好;c.资源共享;别无其他。
   3.TC2.0下通过。当然,解法很多,如果哪位找到更好方法的话,如若可以分享我将很荣幸。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值