2401_83754279 2024-05-21 11:08 采纳率: 89.7%
浏览 2
已结题

将一个程序写入另一个程序中,使之成功运行

将第一个程序写入第二个程序的void calculateFutureDate()中,使之成为第二个程序的功能


#include <stdio.h>
#include <time.h>
// 函数声明
void print_weekday(int day_of_week);
int main() {
    // 用户输入的日期格式:dd/mm/yyyy
    char input_date[11];
    printf("请输入日期(格式:dd/mm/yyyy): ");
    scanf("%s", input_date);
    // 解析日期字符串
    int day = (input_date[0] - '0') * 10 + (input_date[1] - '0');
    int month = (input_date[3] - '0') * 10 + (input_date[4] - '0');
    int year = (input_date[6] - '0') * 1000 + (input_date[7] - '0') * 100 +
               (input_date[8] - '0') * 10 + (input_date[9] - '0');
    // 创建结构体表示用户输入的日期
    struct tm date_input = { .tm_mday = day, .tm_mon = month - 1, .tm_year = year - 1900 };
    // 将struct tm转换为时间戳
    time_t timestamp_input = mktime(&date_input);
    // 获取当前时间的时间戳
    time_t timestamp_now = time(NULL);
    // 计算两个时间戳之间的差值(单位:秒)
    double seconds_diff = difftime(timestamp_now, timestamp_input);
    // 转换为天数
    int days_diff = (int)(seconds_diff / (60 * 60 * 24));
    // 获取当前星期几(0代表周日,1代表周一,以此类推)
    struct tm now = *localtime(&timestamp_now);
    int weekday_now = now.tm_wday;
    // 输出结果
    printf("从输入日期到今天共有 %d 天。\n", days_diff);
    print_weekday(weekday_now);
    return 0;
}
// 打印星期几的函数
void print_weekday(int day_of_week) {
    switch (day_of_week) {
        case 0:
            printf("是星期日。\n");
            break;
        case 1:
            printf("是星期一。\n");
            break;
        case 2:
            printf("是星期二。\n");
            break;
        case 3:
            printf("是星期三。\n");
            break;
        case 4:
            printf("是星期四。\n");
            break;
        case 5:
            printf("是星期五。\n");
            break;
        case 6:
            printf("是星期六。\n");
            break;
        default:
            printf("错误的星期数值。\n");
            break;
    }
}


#include <stdio.h>
#include <stdlib.h>

int isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
int daysInMonth(int month, int year) {
    switch (month) {
        case 2: return isLeapYear(year) ? 29 : 28;
        case 4: case 6: case 9: case 11: return 30;
        default: return 31;
    }
}
void printMonth(int year, int month) {
    int days = daysInMonth(month, year);
    int startDay = 1; // Assuming the first day is always Sunday
    // Print month header
    printf("%d-%02d ", year, month);
    // Print days of the week header
    printf("Sun Mon Tue Wed Thu Fri Sat\n");
    // Print leading spaces for the first day of the month
    for (int i = 0; i < startDay; i++) {
        printf("    ");
    }
    // Print days of the month
    for (int day = 1; day <= days; day++) {
        printf("%3d", day);
        if ((startDay + day - 1) % 7 == 0) {
            printf("\n");
        }
    }
}

void printMenu();
void calculateFutureDate();
void printYearCalendar(int year);
void printMonthCalendar(int year, int month);
int main()
{
    int choice;
    do {
        printMenu();
        printf("请输入您的选择(1-3),或者输入其他数字退出程序:");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                calculateFutureDate();
                break;
            case 2: {
                int year;
                printf("请输入年份:");
                scanf("%d", &year);
                printYearCalendar(year);
                break;
            }
            case 3: {
                int year, month;
                printf("请输入年份和月份:");
                scanf("%d %d", &year, &month);
                printMonth(year, month); 
                break;
            }
            default:
                printf("谢谢使用,再见!\n");
                return 0;
        }
    } while (1);
    return 0;
}

void printMenu() {
    printf("\n==== 日历问题 ====\n");
    printf("1. 计算未来天数和星期\n");
    printf("2. 打印年历\n");
    printf("3. 打印月历\n");
}
void calculateFutureDate() {
}

void printYearCalendar(int year) {
    for (int month = 1; month <= 12; month++) {
        printMonth(year, month);
        printf("\n");
    }
}

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-21 11:08
    关注

    引自免费微信小程序:皆我百晓生

    要在第二个程序中添加第一个程序的功能,你需要将calculateFutureDate()函数中的代码复制到第二个程序的相应位置。下面是修改后的代码,其中我在calculateFutureDate()函数中插入了第一个程序的逻辑。

    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int isLeapYear(int year) {
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
    int daysInMonth(int month, int year) {
        switch (month) {
            case 2: return isLeapYear(year) ? 29 : 28;
            case 4: case 6: case 9: case 11: return 30;
            default: return 31;
        }
    }
    void printMonth(int year, int month) {
        int days = daysInMonth(month, year);
        int startDay = 1; // Assuming the first day is always Sunday
        // Print month header
        printf("%d-%02d ", year, month);
        // Print days of the week header
        printf("Sun Mon Tue Wed Thu Fri Sat\n");
        // Print leading spaces for the first day of the month
        for (int i = 0; i < startDay; i++) {
            printf("    ");
        }
        // Print days of the month
        for (int day = 1; day <= days; day++) {
            printf("%3d", day);
            if ((startDay + day - 1) % 7 == 0) {
                printf("\n");
            }
        }
    }
    
    void printMenu();
    void calculateFutureDate();
    void printYearCalendar(int year);
    void printMonthCalendar(int year, int month);
    int main()
    {
        int choice;
        do {
            printMenu();
            printf("请输入您的选择(1-3),或者输入其他数字退出程序:");
            scanf("%d", &choice);
            switch (choice) {
                case 1:
                    calculateFutureDate();
                    break;
                case 2: {
                    int year;
                    printf("请输入年份:");
                    scanf("%d", &year);
                    printYearCalendar(year);
                    break;
                }
                case 3: {
                    int year, month;
                    printf("请输入年份和月份:");
                    scanf("%d %d", &year, &month);
                    printMonth(year, month); 
                    break;
                }
                default:
                    printf("谢谢使用,再见!\n");
                    return 0;
            }
        } while (1);
        return 0;
    }
    
    void printMenu() {
        printf("\n==== 日历问题 ====\n");
        printf("1. 计算未来天数和星期\n");
        printf("2. 打印年历\n");
        printf("3. 打印月历\n");
    }
    
    void calculateFutureDate() {
        // 用户输入的日期格式:dd/mm/yyyy
        char input_date[11];
        printf("请输入日期(格式:dd/mm/yyyy): ");
        scanf("%s", input_date);
        // 解析日期字符串
        int day = (input_date[0] - '0') * 10 + (input_date[1] - '0');
        int month = (input_date[3] - '0') * 10 + (input_date[4] - '0');
        int year = (input_date[6] - '0') * 1000 + (input_date[7] - '0') * 100 +
                   (input_date[8] - '0') * 10 + (input_date[9] - '0');
        // 创建结构体表示用户输入的日期
        struct tm date_input = { .tm_mday = day, .tm_mon = month - 1, .tm_year = year - 1900 };
        // 将struct tm转换为时间戳
        time_t timestamp_input = mktime(&date_input);
        // 获取当前时间的时间戳
        time_t timestamp_now = time(NULL);
        // 计算两个时间戳之间的差值(单位:秒)
        double seconds_diff = difftime(timestamp_now, timestamp_input);
        // 转换为天数
        int days_diff = (int)(seconds_diff / (60 * 60 * 24));
        // 获取当前星期几(0代表周日,1代表周一,以此类推)
        struct tm now = *localtime(&timestamp_now);
        int weekday_now = now.tm_wday;
        // 输出结果
        printf("从输入日期到今天共有 %d 天。\n", days_diff);
        print_weekday(weekday_now);
    
        // 函数声明
        void print_weekday(int day_of_week);
        
        // 定义print_weekday函数
        void print_weekday(int day_of_week) {
            switch (day_of_week) {
                case 0:
                    printf("是星期日。\n");
                    break;
                case 1:
                    printf("是星期一。\n");
                    break;
                case 2:
                    printf("是星期二。\n");
                    break;
                case 3:
                    printf("是星期三。\n");
                    break;
                case 4:
                    printf("是星期四。\n");
                    break;
                case 5:
                    printf("是星期五。\n");
                    break;
                case 6:
                    printf("是星期六。\n");
                    break;
                default:
                    printf("错误的星期数值。\n");
                    break;
            }
        }
    }
    

    这个修改后的代码将第一个程序的功能整合到了calculateFutureDate()函数中。现在,当用户在第二个程序中选择"1. 计算未来天数和星期"时,它会执行与第一个程序相同的操作。注意,由于print_weekday函数在calculateFutureDate()内部定义,因此无需在外部再次声明。

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

报告相同问题?

问题事件

  • 系统已结题 5月29日
  • 已采纳回答 5月21日
  • 创建了问题 5月21日