谢鱼_123 2023-04-08 14:13 采纳率: 69.2%
浏览 22
已结题

设计函数days( )函数实现第1题的计a)用结构体成员作为形式参数。 b)用结构体变量作为形式参数。 c)用指向结构体变量的指针作为形式参数。

设计函数days( )函数实现第1题的计算。由主函数将日期(年月日)传递给days( )函数,计算后将日子数传回主函数输出。要求三种实现方式:
a)用结构体成员作为形式参数。
b)用结构体变量作为形式参数。
c)用指向结构体变量的指针作为形式参数。

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2023-04-08 17:23
    关注

    以下内容部分参考ChatGPT模型:


    思路:

    1. 首先定义一个结构体类型Date,包含年、月、日三个成员。

    2. 编写函数days( ),用于计算日期距离1900年1月1日的天数。可以使用循环结构,根据年份判断是否是闰年,然后累加月份天数和日数即可。

    3. 编写主函数,分别测试三种实现方式。对于第一种方式,直接将结构体成员作为参数传递;对于第二种方式,先定义一个结构体变量,将日期赋值给结构体变量,再将结构体变量作为参数传递;对于第三种方式,先定义一个结构体指针变量,将指针指向结构体变量,再将指针作为参数传递。

    示例代码:

    #include <stdio.h>
    
    typedef struct Date {
        int year;
        int month;
        int day;
    } Date;
    
    // 计算日期距离1900年1月1日的天数
    int days(Date date) {
        int monthDays[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; // 每个月份的天数
        int days = 0;
        for (int y = 1900; y < date.year; y++) { // 计算年份之间的天数
            if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) { // 判断是否是闰年
                days += 366;
            } else {
                days += 365;
            }
        }
        for (int m = 1; m < date.month; m++) { // 计算月份之间的天数
            if (m == 2 && (date.year % 400 == 0 || (date.year % 4 == 0 && date.year % 100 != 0))) { // 判断闰年二月天数
                days += 29;
            } else {
                days += monthDays[m-1];
            }
        }
        days += date.day - 1; // 加上当月的天数
        return days;
    }
    
    int main() {
        // 测试第一种方式:结构体成员作为参数
        Date date1 = {2022, 7, 17};
        int days1 = days(date1);
        printf("%d\n", days1);
    
        // 测试第二种方式:结构体变量作为参数
        Date date2 = {2022, 7, 18};
        int days2 = days(date2);
        printf("%d\n", days2);
    
        // 测试第三种方式:指向结构体变量的指针作为参数
        Date date3 = {2022, 7, 19};
        Date *pDate = &date3;
        int days3 = days(*pDate);
        printf("%d\n", days3);
    
        return 0;
    }
    

    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月17日
  • 已采纳回答 4月9日
  • 创建了问题 4月8日

悬赏问题

  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数