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

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

以下内容部分参考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;
}

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


#include <stdio.h>

struct date {
    int year;
    int month;
    int day;
};

// 使用结构体成员作为形式参数
int days(struct date dt) {
    int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int days = 0;

    // 计算当前年份之前的所有天数
    for (int i = 1; i < dt.year; i++) {
        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
            days += 366;  // 闰年有366天
        } else {
            days += 365;  // 平年有365天
        }
    }

    // 计算当前年份当前月份之前的所有天数
    for (int i = 1; i < dt.month; i++) {
        days += days_in_month[i-1];
    }

    // 如果是闰年并且月份大于等于3月,则2月要加1天
    if ((dt.year % 4 == 0 && dt.year % 100 != 0 || dt.year % 400 == 0) && dt.month >= 3) {
        days++;
    }

    // 加上当前月份的天数
    days += dt.day;

    return days;
}

// 使用结构体变量作为形式参数
int days2(struct date *dt_ptr) {
    int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int days = 0;

    // 计算当前年份之前的所有天数
    for (int i = 1; i < dt_ptr->year; i++) {
        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
            days += 366;  // 闰年有366天
        } else {
            days += 365;  // 平年有365天
        }
    }

    // 计算当前年份当前月份之前的所有天数
    for (int i = 1; i < dt_ptr->month; i++) {
        days += days_in_month[i-1];
    }

    // 如果是闰年并且月份大于等于3月,则2月要加1天
    if ((dt_ptr->year % 4 == 0 && dt_ptr->year % 100 != 0 || dt_ptr->year % 400 == 0) && dt_ptr->month >= 3) {
        days++;
    }

    // 加上当前月份的天数
    days += dt_ptr->day;

    return days;
}

// 使用指向结构体变量的指针作为形式参数
int days3(struct date *dt_ptr) {
    int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    int days = 0;

    // 计算当前年份之前的所有天数
    for (int
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7645313
  • 除此之外, 这篇博客: 【C语言】写一个函数接收两个日期, 如果两个日期相同,则返回0, 如果第一个日期晚于第二个日期,则返回1, 如果第一个日期早于第二个日期,则返回-1。中的 前言 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 给定如下定义:
    struct date_rec
    {
    int day ;
    int month ;
    int year ;
    };
    写一个函数接收两个日期,
    如果两个日期相同,则返回0,
    如果第一个日期晚于第二个日期,则返回1,
    如果第一个日期早于第二个日期,则返回-1。
    并编写main函数测试它。
    **输入格式要求:"%d%d%d" 提示信息:“请输入当前日期(年 月 日):”
    **输出格式要求:“当前日期:%d年%d月%d日!\n” “第一个日期晚于第二个日期!” “第一个日期早于第二个日期!” “两个日期相同!”
    程序运行示例如下:
    请输入当前日期(年 月 日):2012 9 10↙
    请输入当前日期(年 月 日):2013 7 10↙
    当前日期:2012年9月10日!
    当前日期:2013年7月10日!
    第一个日期早于第二个日期!