当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 15 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 自己用c写的一个日期计算程序[问题在尴尬中解决-_-!!!]
帖子发表于 : 2007-12-03 23:44 
头像

注册: 2007-11-22 14:15
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
说起来写这个程序的目的有点搞笑。当时上课的时候。忽然想计算我和我女朋友在一起有好多天了。于是就写了一个程序。如下:
代码:
#include<stdio.h>
int CountDate(int month,int day);//日期的计算函数
int leap(int year);//闰年计算函数
int main()
{
   int Fyear,Fmonth,Fday,Byear,Bmonth,Bday;//定义的年月日。F开头 的是起始日期。B开头的是结束日期
   int flag=1;//定义循环的标志
   int Fdate,Bdate,result;//定义的结果变量Fdate,Bdate表示一年中过了多少天
   do
   {   flag++;
              //如果输入出错。就会打印这个。      
      if(flag>2)
      {
         printf("your date has error!");
      }
      printf("please input Start date(format is Year,Month,Day):\n");

      scanf("%d,%d,%d",&Fyear,&Fmonth,&Fday);
      
      printf("please intput Finally date(fomat is Year,Month,Day):\n");

      scanf("%d,%d,%d",&Byear,&Bmonth,&Bday);

      flag++;
   }while((Fyear>Byear)||(Fyear==Byear&&Fmonth>Bmonth)||(Fyear==Byear&&Fmonth==Bmonth&&Fday>Bday));//这些都是出错的条件。起始日期必须小于结束日期
   
   Fdate=CountDate(Fmonth,Fday);//计算一年中过了多少天
   
   if(leap(Fyear)&&Fmonth>=3)//如果是闰年。就+1
   Fdate=Fdate+1;


   Bdate=CountDate(Bmonth,Bday);//计算一年中过了多少天

   if(leap(Byear)&&Bmonth>=3)
   Bdate=Bdate+1;//如果是闰年。就+1
   
   if(Fyear!=Byear)
   {result=365*(Byear-Fyear)-Fdate+leap(Fyear)+Bdate;}//这个的意思比较难说。如果Fyear不等于Byear,365*结束年数与起始年数的差等于一个总天数。再减去起始日期过了多少天+是否为闰年+结束日期过了多少天。-_-!!!(各位到底看懂没有。。。。)
   else
   {
      result=Bdate-Fdate;//这个就是如果起始年数等于结束年数。那么就直接用结束的日期过的天数减去起始日期过的天数。
   }

   printf("OK!\n");
   printf("-----------------------------------------\n");
   printf("|               |\n");
   printf("|   the sum is   %d day           |\n",result);
   printf("|                                       |\n");
   printf("-----------------------------------------\n");
   return 0;
}
//计算这一年中这个日期过了多少天
int CountDate(int month,int day)
{
   int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
   int i;
   for(i=1;i<month;i++)
      day+=day_tab[i];
   return(day);

}
//闰年的计算 函数。是闰年返值为1。
int leap(int year)
{
   int leap;
   leap=year%4==0&&year%100!=0||year%400==0;
   return leap;
}
[/code]

我现在想。如果我能再加上一个功能。就是给个日期然后写个数。然后推算出以后的日期就好了。向前和向后两种。各位高手们看这个怎么实现。或者能把我这个程序改进一下也行。。。。。。。


最后由 linquid 编辑于 2007-12-04 23:11,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-12-04 0:03 

注册: 2006-09-20 19:56
帖子: 768
送出感谢: 0 次
接收感谢: 1
参见time.h
mktime及localtime函数。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-12-04 9:58 

注册: 2007-11-29 15:58
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
我汗


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-12-04 10:45 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
代码:
#include <time.h>
#include <stdio.h>
int main(void)
{
        struct tm tm1, tm2;//tm1和tm2为你所需要的两个日期。
        int seconds;
        tm1.tm_mday = 6;
        tm1.tm_mon = 6;
        tm1.tm_year = 90;
        tm1.tm_hour=0;
        tm1.tm_min=0;
        tm1.tm_sec=0;
        tm2.tm_mday = 3;
        tm2.tm_mon = 4;
        tm2.tm_year = 92;
        tm2.tm_hour=0;
        tm2.tm_min=0;
        tm2.tm_sec=0;
        seconds = mktime(&tm2) - mktime(&tm1);//如果要算现在到tm1的时间可以直接用time(NULL) - mktime(&tm1)
        printf("There are %d days between 6/6/90 and 4/3/92.\n", seconds / 24 /60 / 60);
        return 0;
}


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-12-04 10:47 
头像

注册: 2006-02-27 20:19
帖子: 599
地址: works system
送出感谢: 0 次
接收感谢: 0 次
直接把前几天回答别人的那个作业题复制过来了,呵呵


_________________
东西路,南北走
十字路口人咬狗
拿起狗来打砖头
砖头咬了狗一口
图片


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-12-04 13:40 
头像

注册: 2005-06-01 21:32
帖子: 191
送出感谢: 0 次
接收感谢: 0 次
还以前楼主是帮女友写了个经期计算器~~


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-12-04 13:40 
头像

注册: 2005-06-01 21:32
帖子: 191
送出感谢: 0 次
接收感谢: 0 次
还以为是楼主是帮女友写了个经期计算器~~


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-12-04 13:44 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
leros_H 写道:
还以为是楼主是帮女友写了个经期计算器~~


有这东西的
代码:
$ aptitude show cycle
软件包: cycle
新: 是
状态: 未安装
版本号: 0.3.1-6
优先级: 可选
部分: universe/utils
维护者: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>
未压缩尺寸: 455k
依赖于: python (>= 2.3), python-support (>= 0.2), python-wxgtk2.6
描述: calendar program for women
 Cycle is a calendar for women. Given a cycle length or statistics for several
 periods, it can calculate the days until menstruation, the days of "safe" sex,
 the fertile period, and the days to ovulations, and define the d.o.b. of a
 child. It allows the user to write notes and helps to supervise the
 administration of hormonal contraceptive tablets.
 
 Possibilities of the program:
 * Calculate days of menstruation, based on the length of the cycle or on
   statistics of previous periods.
 * Calculate days of "safe" sex, fertile period and day to ovulations.
 * Definition of D.O.B. (Date Of Birth) of a child
 * Allows to write notes.
 * Helps to supervise reception of hormonal contraceptive tablets.
 * Multiple users allowed. Data is protected by a password for every user.
   
 NOTE: This program is not a reliable contraceptive method. It does neither help
 to prevent sexual transmision diseases like AIDS. It is just an electronic
 means of keeping track of some of your medical data and extract some
 statistical conclusions from them. You cannot consider this program as a
 substitute for your gynecologist in any way.
 
 Homepage: http://cycle.sourceforge.net/


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-12-04 16:35 
头像

注册: 2007-11-22 14:15
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
你们这群小子。。。。。。。我比你们还晕。。。。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-12-04 22:18 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
代码:
#include <time.h>
#include <stdio.h>
int main(void)
{
    struct tm tm1;
    tm1.tm_mday = 23;
    tm1.tm_mon = 12;
    tm1.tm_year = 104;
    tm1.tm_hour = 17;
    tm1.tm_min = 30;
    tm1.tm_sec = 0;
    double seconds = difftime(time(NULL),mktime(&tm1));
    printf("There are %d days between 12/23/2004 and now.\n", (int)(seconds / 3600 / 24));
    return 0;
}


代码:
$ ./a.out
There are 1045 days between 12/23/2004 and now.


时间过得真快


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-12-04 22:31 

注册: 2007-11-14 11:04
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
不是安全期啊


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-12-04 22:32 
头像

注册: 2007-04-28 21:38
帖子: 1026
送出感谢: 0 次
接收感谢: 0 次
ls可以你可以写一个的
不过我可不敢用。。。


_________________
thinkpad x61 2G DDR no cdrom
--------------------------------------------
ABS学习中
sed学习中
awk学习中
perl学习中
新手描述不清,老手猜测不到,胡乱指挥一通,后果难以预料


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-12-04 22:35 

注册: 2007-12-04 22:17
帖子: 9
地址: 江苏南京
送出感谢: 0 次
接收感谢: 0 次
管它安不安全,日了再说


_________________
身在L营心在W


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2007-12-04 22:55 

注册: 2007-11-14 11:04
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
12楼,那你就用for循环写一个自己用吧[/code]


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-12-04 23:10 
头像

注册: 2007-11-22 14:15
帖子: 47
送出感谢: 0 次
接收感谢: 0 次
我开始怀疑我是不是进错论坛了。。。。。。。。。。。。。。。登录这个论坛我没用代理阿。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 15 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译