论坛: 编程破解 标题: 请高手尽快帮忙好吗???编程题!!算天数! 复制本贴地址    
作者: gentleman [gentleman]    论坛用户   登录
main()
{
int year,year1,year2,leap,month1,month2,md1,md2,day1,day2,leap1,leap2,total;
  printf("input:year1,month1,day1,year2,month2,day2");
  scanf("%d,%d,%d,%d,%d,%d",&year1,&month1,&day1,&year2,&month2,&day2);
  leap=0;leap1=0;leap2=0;
  for(year=year1;year<=year2;year++)
    { if ((year%4==0 && year%100!=0)||(year%400==0))
        leap=leap+1;
    }
    switch(month1)
    { case 1: md1=day1;break;
      case 2: md1=day1+31;break;
      case 3: md1=day1+59;break;
      case 4: md1=day1+90;break;
      case 5: md1=day1+120;break;
      case 6: md1=day1+151;break;
      case 7: md1=day1+181;break;
      case 8: md1=day1+212;break;
      case 9: md1=day1+243;break;
      case 10: md1=day1+273;break;
      case 11: md1=day1+304;break;
      case 12: md1=day1+334;break;
    }
    switch(month2)
    { case 1: md2=day2;break;
      case 2: md2=day2+31;break;
      case 3: md2=day2+59;break;
      case 4: md2=day2+90;break;
      case 5: md2=day2+120;break;
      case 6: md2=day2+151;break;
      case 7: md2=day2+181;break;
      case 8: md2=day2+212;break;
      case 9: md2=day2+243;break;
      case 10: md2=day2+273;break;
      case 11: md2=day2+304;break;
      case 12: md2=day2+334;break;
      }
    if((year1%4==0&&year1%100!=0)||(year1%400==0))
    leap1=1;md1+=1;
    if((year2%4==0&&year2%100!=0)||(year2%400==0))
    leap2=1;md2+=1;
    if(month1<=3&&month2<=3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1;
    if(month1<=3&&month2>3)
    total=(year2-year1)+(md2-md1)+day2-day1+leap;
    if(month1>3&&month2<=3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1-leap2;
    if(month1>3&&month2>3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap2;
    if(month1=month2)
    total=day2-day1;
    printf("total=%d",total);
  』
为什么同一月份的天数可以算,而不同月份就只能算后面的天数了啊!!
我的switch有错吗???
急求救!!!

地主 发表时间: 11/15 14:32

回复: lwei889 [lwei889]   论坛用户   登录
main()
{
int year,year1,year2,leap,month1,month2,md1,md2,day1,day2,leap1,leap2,total;
clrscr();
  printf("input:year1,month1,day1,year2,month2,day2:");
  scanf("%d,%d,%d,%d,%d,%d",&year1,&month1,&day1,&year2,&month2,&day2);
  leap=0;leap1=0;leap2=0;
  for(year=year1;year<=year2;year++)
    { if ((year%4==0 && year%100!=0)||(year%400==0))
        leap=leap+1;
    }
    switch(month1)
    { case 1: md1=day1;break;
      case 2: md1=day1+31;break;
      case 3: md1=day1+59;break;
      case 4: md1=day1+90;break;
      case 5: md1=day1+120;break;
      case 6: md1=day1+151;break;
      case 7: md1=day1+181;break;
      case 8: md1=day1+212;break;
      case 9: md1=day1+243;break;
      case 10: md1=day1+273;break;
      case 11: md1=day1+304;break;
      case 12: md1=day1+334;break;
    }
    switch(month2)
    { case 1: md2=day2;break;
      case 2: md2=day2+31;break;
      case 3: md2=day2+59;break;
      case 4: md2=day2+90;break;
      case 5: md2=day2+120;break;
      case 6: md2=day2+151;break;
      case 7: md2=day2+181;break;
      case 8: md2=day2+212;break;
      case 9: md2=day2+243;break;
      case 10: md2=day2+273;break;
      case 11: md2=day2+304;break;
      case 12: md2=day2+334;break;
      }
    if((year1%4==0&&year1%100!=0)||(year1%400==0))
    {leap1=1;md1+=1;}      /*这个地方我认为应该有个大括号*/
    if((year2%4==0&&year2%100!=0)||(year2%400==0))
    {leap2=1;md2+=1; }    /*这个也应该有*/
    if(month1<=3&&month2<=3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1;
    if(month1<=3&&month2>3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap;    /*我想应该是 (year2-year1)*365 */
    if(month1>3&&month2<=3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1-leap2;
    if(month1>3&&month2>3)
    total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap2;
    if((month1==month2)&&(year1==year2))  /*如果是month1=month2,是赋值,则永远为真*/
    total=0;

    printf("total=%d",total);
    getch();
}

上面的注释是我发现的问题,但还有个问题,就是当你输入的两个日期正好相差一年的话,你看一下,结果是364,我想不对吧,你自己找毛病吧?
你的switch 没有毛病,出现问题的是你的判断语句!
我眼都花了,不找了,要休息了!

B1层 发表时间: 11/15 20:22

回复: gentleman [gentleman]   论坛用户   登录
谢谢了啊!!
我这个好像if太多了啊!!!猜是判断出错把!!
可能要改一下啊!!


B2层 发表时间: 11/15 22:56

回复: 286 [unique]   版主   登录
兄弟,下次再发这样程序的时候,先简单说明一下你的程序是干什么的。不然,谁知道你是作什么的?
你这样作太麻烦了。而且容易出错。
有一个time_t的结构,定义二个该结构的变量,然后调用difftime函数,可以得出两个时间之间的差,单位是秒,把该值除了24*60*60就得到天了。
你可以试试。我以前作过一个生物钟的程序,但后来源程序找不到了。


B3层 发表时间: 11/17 09:58

回复: zhoen889 [zhoen889]   论坛用户   登录
#include<iostream.h>
void main()
{
int year;//年份
int month;//月份
int day;//天数
int days;//计算天数
int leap;//判断是否匀年变量
int *p;//指针变量
int day_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,30},{0,31,29,31,30,31,30,31,31,30,31,30,30}};
cout<<"Input year,month,day:";
cin>>year>>month>>day;
leap=(year%4==0&&year%100!=0||year%400==0);
days=day;
for(p=day_tab[leap]+1;p<day_tab[leap]+month;p++)
days=days+(*p);
cout<<"Today is:"<<days<<endl;
}
我感觉c语言中的switch语句太过麻烦,虽然有的时候还不得不用。
下面是我用c++写的一个有关计算天数的程序,已经在vc中运行成功,请各位高手指教。
:)



[此贴被 zhoen889(zhoen889) 在 11月28日19时48分 编辑过]





[此贴被 zhoen889(zhoen889) 在 11月28日19时23分 编辑过]


[此贴被 zhoen889(zhoen889) 在 11月28日19时18分 编辑过]

B4层 发表时间: 11/27 19:25

回复: bluezzb [bluezzb]   论坛用户   登录
286真牛啊!


B5层 发表时间: 11/28 07:08

回复: ziaichen [ziaichen]   论坛用户   登录
你是想算两个日期之间的天数是多少吧?
其实你没必要那么麻烦的
定义一个数组int *day[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
然后再判断是否为闰年,定义一个记数变量,再用指针来判定,将两个日期转换为时间的任一单位来计量,最后进行计算和换算,就可以了.



[此贴被 ziaichen(ziaichen) 在 11月28日08时31分 编辑过]

B6层 发表时间: 11/28 07:58

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号