【C语言程序设计】日期函数,日期处理函数!

2023-05-16

定义一个表示日期的结构体类型,再分别定义函数完成下列功能:

    ✿ 计算某一天是对应年的第几天,这一年一共多少天;

    ✿ 计算两个日期之间相隔的天数。两个日期由键盘输入。

 

算法思想

设定结构体类型表示日期类型名为 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 的变量。

不管你是转行也好,初学也罢,进阶也可,如果你想学编程,进阶程序员~

【值得关注】我的 编程学习交流俱乐部!【点击进入】

全栈程序员正在等你加入~

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【C语言程序设计】日期函数,日期处理函数! 的相关文章

  • MySQL配置SSL访问-WEB配置JDBC支持SSL

    WEB配置JDBC支持SSL Connector J 可以使用 SSL 加密 JDBC 驱动程序和服务器之间通信的所有数据 xff08 初始握手除外 xff09 启用连接加密会带来性能损失 xff0c 其严重程度取决于多种因素 xff0c
  • MySQL配置SSL访问-ETL配置JDBC支持SSL

    创建用户 SSL TLS 选项 除了基于用户名和凭据的常规身份验证之外 xff0c MySQL 还可以检查 X 509 证书属性 要为 MySQL 帐户指定 SSL TLS 相关选项 xff0c 请使用REQUIRE指定一个或多个tls o
  • Python 使用docx库操作word文档中的表格单元格内容

    1 导入库 from docx import Document 2 加载word文档对象 doc 61 Document path 3 定位表格 获取所有表格对象 tables 61 doc tables 获取word中第一个表格对象 ta
  • 人工智能导论(6)——机器学习(Machine Learning)

    文章目录 一 概述二 重点内容三 思维导图四 重点知识笔记1 概述1 1 基本概念1 2 机器学习的分类 2 常见有监督学习算法2 1 线性回归2 2 多项式回归2 3 支持向量机2 4 k 最近邻分类2 5 朴素贝叶斯2 6 决策树2 7
  • Ubuntu 22.04 Anaconda和jupyter notebook安装问题

    安装Anaconda的安装问题是 xff1a conda command not found 在terminal 输入 vim bashrc conda 初始化在最末端 xff0c 把带 都删除即可 前提是 xff0c 安装时候已经设置了路
  • 人工智能导论(10)——机器人(Robot)

    文章目录 一 概述二 重点内容三 思维导图四 重点知识笔记机器人分类工业机器人服务机器人一般机器人智能机器人机器人与人工智能 一 概述 机器人是靠自身动力和控制能力来实现各种功能的一种机器 本文将人工智能 34 机器人 34 基础知识整理为
  • Numpy系列(八):函数库之5傅里叶变换函数

    Numpy系列目录 文章目录 一 简介二 思维导图三 傅里叶变换基础知识1 傅里叶级数2 复数形式傅里叶级数3 傅里叶变换4 离散傅里叶变换 四 Numpy快速傅里叶变换1 标准FFT1 1 一维离散FFT1 2 一维离散FFT反变换1 3
  • Matplotlib系列(五):三维绘图

    Matplotlib系列目录 文章目录 一 简介二 思维导图三 Matplotlib三维图形1 绘制3d图形2 基本三维图像2 1 3d折线图2 2 3d散点图2 3 3d柱形图2 4 3d火柴图2 5 3d误差图 3 三维曲面3 1 3d
  • Seaborn系列(三):分布统计绘图(distribution)

    Seaborn系列目录 文章目录 1 分布统计绘图API概述2 displot单变量分布图 直方图 核密度 累积分布 2 1 displot函数绘制单变量分布图2 2 displot直方图kde图同时叠加绘制2 3 displot绘图同时叠

随机推荐