IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言日期函数,日期处理函数 -> 正文阅读

[C++知识库]C语言日期函数,日期处理函数

定义一个表示日期的结构体类型,再分别定义函数完成下列功能:计算某一天是对应年的第几天,这一年一共多少天;计算两个日期之间相隔的天数。两个日期由键盘输入。

算法思想

设定结构体类型表示日期类型名为 Date,利用 typedef 将其定义为日期型类型名,有三个整型类型的成员分别表示年、月、日。

设定函数计算输入的日期是这一年的第几天。函数的形参为日期型变量,函数体中设定整型数组存放每个月的天数,二月份的天数为 28 天;设定函数判断年份是否为闰年以决定二月份的天数。根据输入的日期月份,在数组中将相应的月份天数求和,假日曰期即为天数。

设定函数完成两个日期的比较,比较形参 d 和 s 两个日期的大小。首先比较年,同年的比较月,同月的比较日。变量 start 保存输入的小的日期年份,end 保存输入日期大的年份,然后计算两个日期之间的天数。

程序由 6 个函数构成,yearday() 函数计算某年的天数,monthday() 函数计算某年二月份的天数,dayofyeaK() 函数计算某日期是某年的第几天,cmpdate() 函数比较两个日期的大小,interday() 函数计算两个日期之间的天数;dayofyear() 函数调用 monthday() 函数,interday() 函数调用 cmpdate() 函数、yearday() 函数、dayofyear() 函数;主函数调用 yearday() 函数、dayofyear() 函数、interday() 函数。

程序代码

#include <stdio.h>
#include <math.h>
typedef struct
{
    int year,month,day;
}Date;
int yearday(int year)
{
    int yday;
    if(year%4==0&&year%100!=0||year%400==0)
        yday=366;
    else
        yday=365;
    return yday;
}
int monthday(int year)
{
    int mday;
    if(year%4==0&&year%100!=0||year%400==0)
        mday=29;
    else
        mday=28;
    return mday;
}
int dayofyear(Date d)
{
    int i,total=0;
    int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    months[2]=monthday(d.year);
    for(i=1;i<d.month;i++)
        total=total+months[i];
    total=total+d.day;
    return total;
}
int cmpdate(Date d,Date s)
{
    int result;
    if(d.year==s.year)
    {
        if(d.month==s.month)
        {
            if(d.day==s.day)
            result=0;
            else result=d.day-s.day;
        }
        else result=d.month-s.month;
    }
    else result=d.year-s.year;
    return result;
}
int interday(Date d,Date s)
{
    int result,te,ts,total;
    int year,start,end,day;
    int i;
    result=cmpdate(d,s);
    if(result>0)
    {
        start=s.year;
        end=d.year;
        te=dayofyear(d);
        ts=dayofyear(s);
    }
    else if(result<0)
    {
        start=d.year;
        end=s.year;
        ts=dayofyear(d);
        te=dayofyear(s);
    }
    else return 0;
    if(start==end)
        return abs(te-ts);
    else
    {
        total=0;
        for(i=start;i<=end;i++)
        {
            day=yearday(i);
            if(i==start)
                total=total+day-ts;
            else if(i==end)
                total=total+te;
            else
                total=total+day;
        }
    }
    return total;
}
int main()
{
    Date d1,d2;
    int y,n;
    printf("input date:");
    scanf("%d%d%d",&d1.year,&d1.month,&d1.day);
    scanf("%d%d%d",&d2.year,&d2.month,&d2.day);
    y=yearday(d1.year);
    n=dayofyear(d1);
    printf("%d days %d\n",d1.year,y);
    printf("%d-%d-%d is the %d day.\n",d1.year,d1.month,d1.day,n);
    n=interday(d1,d2);
    printf("%d-%d-%d and %d-%d-%d distance ",d1.year,d1.month,d1.day,d2.year,d2.month,d2.day);
    printf("%d days\n",n);
    return 0;
}

调试运行结果

输入 2009 年 2 月 1 日和 2015 年 2 月 1 日,程序运行结果如下所示:

input date:2009 2 1 2015 2 1
2009 days 365
2009-2-1 is the 32 day.
2009-2-1 and 2015-2-1 distance 2191 days

总结

结构体变量作为函数参数可以有以下两种形式。

① 结构体变量的成员作为函数的实参,则对应定义函数的形参为普通变量或数组。如实例程序代码中的“y=yearday(d1.year);”“months[2]=monthday(d.year);”两条语句,调用函数的实参分别为结构体变量 d1 和 d 的成员 year;对应的被调用函数 yearday()、monthday() 的形参都为 int year,是普通的整型变量。

② 函数的实参为结构体变量,则对应函数的形参应该也是结构体变量,其传递方式和普通变量一样,采用的是值传递方式。如程序代码中的 dayofyear()、cmpdate() 和 interday() 函数的形参均为结构体 Date 的变量,在程序调用时实参也为结构体 Date 的变量。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:29:00  更:2021-09-22 14:29:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:20:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码