首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求两个日期的天数,刚刚学C语言,求帮助

2013-11-18 
求两个日期的天数,刚学C语言,求帮助#includestdio.h#includemath.hint leap(int )int cmonth(int )i

求两个日期的天数,刚学C语言,求帮助
#include<stdio.h>
#include<math.h>
int leap(int );
int cmonth(int );
int cyear(int );
int main()
{
int y1,y2,m1,m2,d1,d2,b,e,day;
  do
  {printf("\ny1=");scanf("%d",&y1);
   if(y1>3000 || y1<1900) printf("\nerror");
   }while(y1>3000 || y1<1900);
   do
  {printf("\nm1="); scanf("%d",&m1);
   if(m1>12 || m1<1) printf("\nerror");
   }while(m1>12 || m1<1);
   do
   {printf("\nd1="); scanf("%d",&d1);
   if(d1>cmonth(b)) printf("\nerror");
   }while(cmonth(b)<d1);
   d1=d1+e;
   printf("\nday1=%d",d1);
   do
   {printf("\ny2="); scanf("%d",&y2);
   if(y2<1900 || y2>3000) printf("\nerror");
   }while(y2>3000 || y2<1900);
   do
   {printf("\nm2="); scanf("%d",&m2);
   if(m2>12 || m2<1) printf("\nerror");
   }while(m2>12 || m2<1);
   do
   {printf("\nd2="); scanf("%d",&d2);
   if(d2>cmonth(b)) printf("\nerror");
   }while(d2>cmonth(b));
  d2=d2+e;  day=cyear(day);
   printf("day2=%d",d2);
   printf("day=%d",day);
return 0;
   }

int leap(int year)
{
if((year%4==0 && year%100!=0) || (year%400==0))
   return 366;
   else
   return 365;
 }
  int cyear(int y)
 { int leap(int);
 int d,day=0,y1,y2;
  for(y=y1;y2>y;y++)
   {if(leap(y)==366)
d=366;
else
d=365;
day=d+day;}
return day;
}

   int cmonth(int m)
   {        int leap();int b,i,e,y;
   for(i=0;m>i;i++)
   if(i==2)
 {if( leap(y)==366)
b=29;
else
b=28;
  }
  else
  {
 if((i>7 && i%2==0) || (i<8 && i%2!=0))
  b=31;
  else
  b=30;
  }e=e+b;
  return e;

  }

这个程序没完成,不知道怎么计算,函数调用也不知道怎么调用,求帮助,求改造 C C++
[解决办法]


#include <stdio.h>

int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};                  /*储存12个月的天数*/
void main()
{
 int spec_year(int);
 void scan(int *year,int *month,int *day);
 long com_year(int y1,int y2);
 int com_month(int y1,int m1,int y2,int m2);
 int com_day(int y1,int m1,int d1,int y2,int m2,int d2);

 int year1,month1,day1;
 int year2,month2,day2;

 long sum=0;
 int k=0;

 /*输入两个日期,做合法性检查*/ 
 printf("Enter the first date,like 1988 11 30:");
 scan(&year1,&month1,&day1);
 printf("Enter the second date,like 1988 11 30:");
 scan(&year2,&month2,&day2);

 /*当输入的第一个日期比第二个日期大时,将二者对换*/ 
 if((year1>year2)
[解决办法]
((year1==year2)&&(month1>month2))
[解决办法]
((year1==year2)&&(month1==month2)&&(day1>day2)))
 {
  int temp;
  temp=year1;year1=year2;year2=temp;
  temp=month1;month1=month2;month2=temp;
  temp=day1;day1=day2;day2=temp;
 }

 /*计算两个日期之间的天数*/
 sum+=com_year(year1,year2);                                /*计算两个年份之间的天数*/
 sum+=com_month(year1,month1,year2,month2);                 /*计算两个月份之间的天数*/
 sum+=com_day(year1,month1,day1,year2,month2,day2);         /*计算两天之间的天数*/

 /*输出*/
 printf("There are %ld days between them.\n",sum);
}

void scan(int *year,int *month,int *day)                          /*输入日期函数,合法性判断*/


{
 int k=0;
 do
 {
  if(k!=0)
   printf("\nWrong date!\n");
  k++;
  /*printf("Please write down the day,like 1988 11 30:");*/
  scanf("%d%d%d",year,month,day);
  if(spec_year(*year))
   mon[1]=29;
 }while(*day>mon[*month-1]
[解决办法]
*month>13
[解决办法]
*year<1900
[解决办法]
*year>3000);
 mon[1]=28;
}

long com_year(int y1,int y2)                                      /*计算两个年份之间的天数*/
{
 int i;
 long sum=0; 
 for(i=y1+1;i<y2;i++)
 {
  if(spec_year(i))
   sum+=366;
  else
   sum+=365;   
 }
 return sum; 
}

int com_month(int y1,int m1,int y2,int m2)                       /*计算两个月份之间的天数*/
{
 int i;
 int sum=0;
 if(y1!=y2)
 {
  if(spec_year(y1))
  {
   mon[1]=29;
  }
  if(m1!=m2)
  {
   for(i=m1;i<12;i++)
  {
   sum+=mon[i];    
  }
  mon[1]=28;

  if(spec_year(y2))
  {
   mon[1]=29;
  }

  for(i=0;i<m2-1;i++)
  {
   sum+=mon[i];   
  }
  mon[1]=28;
  }
  else
  {
  for(i=m1-1;i<12;i++)
  {
   sum+=mon[i];    
  }
  mon[1]=28;

  if(spec_year(y2))
  {
   mon[1]=29;
  }

  for(i=0;i<m2-1;i++)
  {
   sum+=mon[i];   
  }
  mon[1]=28;
  }
 }
 else
 { 
  if(spec_year(y1))
  {
   mon[1]=29;  
  }
  for(i=m1;i<m2-1;i++)
  {
   sum+=mon[i];
  }  
  mon[1]=28;
 } 
 return sum; 
}

int com_day(int y1,int m1,int d1,int y2,int m2,int d2)             /*计算两天之间的天数*/
{
 int i;
 int sum=0;
 
 if(m1!=m2)
 {
  if(spec_year(y1))
  {
   mon[1]=29;  
  } 
  
  sum+=(mon[m1-1]-d1); 
  
  sum+=d2;
  
  mon[1]=28; 
 }
 else
 {
  sum+=d2-d1;
  
 }
 
 return sum;
}

int spec_year(int year)                                           /*判断是否为闰年*/
{
 if((year%400==0)
[解决办法]
((year%4==0)&&(year%100!=0)))
  return 1;
 else
  return 0;
}

热点排行