鱼C论坛

 找回密码
 立即注册
查看: 2516|回复: 13

[已解决]C语言课设作业不会做,求救!!

[复制链接]
发表于 2020-3-13 14:50:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
11、年历显示
输入一个年份,屏幕上显示该年的日历情况,具体显示格式可以灵活设置,以美观、实用为基本要求。输入的年份限制在1940-2040年之间。
功能要求:
(1)输入年月,屏幕上显示该月的日历;
(2)输入年月日,屏幕显示距今天还有多少天,星期几,是否是公历节日等;
(3)查询某年某月某日的农历日期;
(4)将查询情况以日志的形式保存到相应磁盘文件中,并随时可查。
第四项不知该新建一个怎样的新函数来实现。
感谢大佬们!!!
最佳答案
2020-3-13 20:57:47
上官洛栖 发表于 2020-3-13 19:43
文件操作应该怎么弄呀
#include <stdio.h>

int main(void)
{
        FILE *fp = fopen("output.txt", "w");
        fprintf(fp, "hello world!\n");
        fclose(fp);
        return 0;
}

把你想写的内容通过fprintf写到文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-13 15:11:10 | 显示全部楼层
“不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的,还是给你提供思路
你不要告诉我,你是一个字母也动不了手的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-13 15:17:15 | 显示全部楼层
本帖最后由 上官洛栖 于 2020-3-13 15:39 编辑
人造人 发表于 2020-3-13 15:11
“不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的, ...
#pragma warning(disable : 4996)
#include <stdio.h>
#include <time.h>
int total(int yeara)  //计算公元一年一月一日到输入年份之前的总天数
{
    int i, s = 0, a;

        for (i = 1; i <= yeara - 1; i++)
        {
            if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
                a = 366;
            else
                a = 365;
            s = s + a;
        }
        return s;
    
}
int where(int yearb, int monb) //判断每月天数
{
    int tian;
    switch (monb)
    {
    case 1:            tian = 31; break;
    case 2:
        if (yearb % 4 == 0 && yearb % 100 != 0 || yearb % 400 == 0)
            tian = 29;
        else
            tian = 28;
        break;
    case 3:            tian = 31; break;
    case 4:            tian = 30; break;
    case 5:            tian = 31; break;
    case 6:            tian = 30; break;
    case 7:            tian = 31; break;
    case 8:            tian = 31; break;
    case 9:            tian = 30; break;
    case 10:        tian = 31; break;
    case 11:        tian = 30; break;
    case 12:        tian = 31; break;
    default:
        printf("输入日期不存在");
        main();
    }
    return tian;
}
void when(int day)    //判断输入日期是星期几
{
    switch (day)
    {
    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;
    case 7:            printf("该日为星期日\n"); break;
    }
}
void why(int month, int day)  //公历节日判断
{
    if (month == 1)
        if (day == 1)
            printf("该日是元旦\n");
        else
            printf("该日不是公历节日!\n");
    if (month == 3)
    {
        switch (day)
        {
        case 8:        printf("该日是国际妇女节\n");    break;
        case 12:    printf("该日是植树节\n");        break;
        default:    printf("该日不是公历节日!\n"); break;
        }
    }
    if (month == 4)
        if (day == 5)
            printf("该日是清明节\n");
        else
            printf("该日不是公历节日!\n");
    if (month == 5)
    {
        switch (day)
        {
        case 1:        printf("该日是劳动节\n");            break;
        case 4:        printf("该日是五四青年节\n");        break;
        default:    printf("该日不是公历节日!\n");        break;
        }
    }
    if (month == 6)
        if (day == 1)
            printf("该日是儿童节\n");
        else
            printf("该日不是公历节日!\n");
    if (month == 7)
        if (day == 1)
            printf("该日是中国建党节\n");
        else
            printf("该日不是公历节日!\n");
    if (month == 8)
        if (day == 1)
            printf("该日是建军节\n");
        else
            printf("该日不是公历节日!\n");
    if (month == 9)
    {
        switch (day)
        {
        case 3:            printf("该日是抗日战争胜利纪念日\n");    break;
        case 10:        printf("该日是教师节\n");                break;
        default:        printf("该日不是公历节日!\n");            break;
        }
    }
    if (month == 10)
        if (day == 1)
            printf("该日是国庆节\n");
        else
            printf("该日不是公历节日!\n");
}
void output_year()        //年份输出
{
    int year, d, di, did, z, j;

        printf("请输入年份(eg:2015):");
        scanf_s("%d", &year);
        z = total(year);
        if (year > 2040 || year < 1940)
        {
            printf("查询范围为1940年到2040年");
            main();
        }
        else
        {
        for (j = 1; j <= 12; j++)
        {
            d = z % 7;
            printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
            printf("        %d月份\n", j);
            printf("sun mon tue wed thu fri sat\n");
            if (d < 6)
                for (di = 1; di <= d + 1; di++)
                    printf("    ");
            for (did = 1; did <= where(year, j); did++)
            {
                printf("%d", did);
                if (did < 10)
                    printf("   ");
                else
                    printf("  ");
                if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(year, j))
                    printf("\n");
            }
            z = z + where(year, j);
        }

        main();
    }
}
void  output_month()    //年月输出
{
    int year, m, n, d, di, did, j, Z, D;
    printf("请输入所查日历的年月(eg:2015 01):");
    scanf_s("%d%d", &m, &n);
    if (m > 2040 || m < 1940)
    {
        printf("查询范围为1940年到2040年");
        main();
    }
    else
    {
        Z = total(m);
        for (j = 1; j <= n - 1; j++)
        {
            D = where(m, j);
            Z = Z + D;
        }
        d = Z % 7;
        printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        printf("        %d月份\n", n);
        printf("sun mon tue wed thu fri sat\n");
        if (d < 6)
            for (di = 1; di <= d + 1; di++)
                printf("    ");
        for (did = 1; did <= where(m, n); did++)
        {
            printf("%d", did);
            if (did < 10)
                printf("   ");
            else
                printf("  ");
            if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(m, n))
                printf("\n");
        }
        main();
    }
}
void  output_day()        //年月日输出
{
    int d, h, j, k, l, x, y, z, Z, Z1, D, jian, judge;
    time_t timep;
    struct tm* p;
    time(&timep);    //系统时间获取 
    p = localtime(&timep);  //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
    printf("请输入年月日(eg:2015 01 01):");
    scanf("%d%d%d", &x, &y, &z);
    if (x > 2040 || x< 1940)
    {
        fprintf("查询范围为1940年到2040年");
        main();
    }
    else
    {
        judge = where(x, y);
        if (judge < z || y>12)
            printf("输入日期不存在!");
        else
        {
            Z = total(x);
            for (j = 1; j <= y - 1; j++)
            {
                D = where(x, j);
                Z = Z + D;
            }
            Z = Z + z;
            h = 1900 + p->tm_year;//时间赋值
            k = 1 + p->tm_mon;
            l = 1 + p->tm_mday;
            Z1 = total(h);
            for (j = 1; j <= k - 1; j++)
            {
                D = where(k, j);
                Z1 = Z1 + D;
            }
            Z1 = Z1 + l;
            jian = Z1 - Z;
            printf("输入日期距今有%d天\n", jian);
            d = Z % 7;
            when(d);
            why(y, z);
        }
        main();
    }
}
int main()
{
    int number;
    printf("\n\n*************查询方式************* \n");
    printf("*        1.查询某年的日历        * \n");
    printf("*        2.查询某月的日历        * \n");
    printf("*        3.查询特定的日期        * \n");
    printf("*        4.查询特定的农历        * \n");
    printf("*        5.查询结束--退出        * \n");
    printf("********************************** \n");
    do
    {
        printf("请输入查询方式:");
        scanf_s("%d", &number);
        switch (number)
        {
        case 1:         output_year();  break;
        case 2:         output_month(); break;
        case 3:         output_day();   break;
        case 4:         printf("暂时未实现"); break;
        case 5:         break;
        default:        printf("输入错误!\n--------------\n"); break;
        }
    } while (number != 1 && number != 2 && number != 3 && number != 4);

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 15:18:41 | 显示全部楼层
人造人 发表于 2020-3-13 15:11
“不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的, ...

第三个国历转换为农历犹豫过于复杂老师决定取消,现在就差第四点了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 15:56:34 | 显示全部楼层
http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
这是我找到的唯一一个靠谱的

java写的,我试试看能不能改成C语言的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 16:07:52 | 显示全部楼层
人造人 发表于 2020-3-13 15:56
http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
这是我找到的唯一一个靠谱的

emmm,我想问的是文件的存储。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 16:15:06 | 显示全部楼层
上官洛栖 发表于 2020-3-13 16:07
emmm,我想问的是文件的存储。。

?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 16:30:03 | 显示全部楼层

就是怎么把我输出来的结果存进一个文件里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 16:49:04 | 显示全部楼层
上官洛栖 发表于 2020-3-13 16:30
就是怎么把我输出来的结果存进一个文件里

最简单的一种方法是 I/O重定向
当然也可以是文件操作,C语言的文件操作学了吗?

1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 17:08:02 | 显示全部楼层
人造人 发表于 2020-3-13 16:49
最简单的一种方法是 I/O重定向
当然也可以是文件操作,C语言的文件操作学了吗?

emmm,学了,但是听不太懂,所以来求助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-13 19:43:59 | 显示全部楼层
人造人 发表于 2020-3-13 16:49
最简单的一种方法是 I/O重定向
当然也可以是文件操作,C语言的文件操作学了吗?

文件操作应该怎么弄呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 20:57:47 | 显示全部楼层    本楼为最佳答案   
上官洛栖 发表于 2020-3-13 19:43
文件操作应该怎么弄呀
#include <stdio.h>

int main(void)
{
        FILE *fp = fopen("output.txt", "w");
        fprintf(fp, "hello world!\n");
        fclose(fp);
        return 0;
}

把你想写的内容通过fprintf写到文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-13 21:00:17 | 显示全部楼层
翻译完了
参考 http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
使用这个验证 https://gonglinongli.51240.com/
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

static size_t month_days[] = {29, 30};
static size_t days_month [][12] = {
    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
static size_t datas[][17] = {
    {23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0},
    {41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1},
    {30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1},
    {49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
    {38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
    {26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0},
    {45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
    {35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
    {24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
    {43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1},
    {32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1},
    {21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
    {40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
    {28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
    {47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1},
    {36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
    {26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
    {44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1},
    {33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
    {23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
    {42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
    {30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},
    {48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},
    {38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
    {27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
    {45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0},
    {35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
    {24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
    {43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
    {32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
    {20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
    {39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0},
    {29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
    {47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
    {36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0},
    {26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1},
    {45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
    {33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1},
    {22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
    {41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1},
    {30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1},
    {48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1},
    {37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
    {27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0},
    {46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0},
    {35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1},
    {24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
    {43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
    {32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1},
    {50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
    {39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1},
    {28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0},
    {47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
    {36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0},
    {26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1},
    {45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0},
    {34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0},
    {22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
    {40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
    {30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1},
    {49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1},
    {37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
    {27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1},
    {46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1},
    {35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1},
    {23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
    {42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
    {31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0},
    {21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
    {39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
    {28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
    {48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1},
    {37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1},
    {25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
    {44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
    {33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
    {22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
    {40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
    {30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
    {49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1},
    {38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
    {27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
    {46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0},
    {35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
    {24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
    {42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
    {31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
    {21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
    {40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
    {28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
    {47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1},
    {36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
    {25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
    {43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1},
    {32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0},
    {22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0}
};

bool is_leap_year(size_t year)
{
    if(year % 400 == 0)
        return true;
    if(year % 100 == 0)
        return false;
    if(year % 4 == 0)
        return true;
    return false;
}

size_t day_of_year(size_t year, size_t month, size_t day)
{
    const static size_t day_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    size_t days = 0;
    for(size_t i = 0; i < month - 1; ++i)
        days += day_of_month[i];
    days += day;
    if(is_leap_year(year))
        ++days;
    return days;
}

void print_gregorian_calendar(size_t year, size_t month, size_t day)
{
    size_t index = year - 1936;
    //month += 1;
    size_t end_index = month;
    if(datas[index][1] != 0 && month > datas[index][1])
        ++end_index;
    ssize_t day_num = 0;
    for(size_t i = 0; i < (end_index - 1); ++i)
        day_num += month_days[datas[index][4 + i]];
    day_num += day;
    day_num += datas[index][0];
    ssize_t year_days = 365;
    if(is_leap_year(year))
        year_days = 366;
    if(day_num > year_days) {
        ++year;
        day_num -= year_days;
    }
    size_t day_of_month[12];
    memcpy(day_of_month, days_month[0], sizeof(size_t) * 12);
    if(is_leap_year(year))
        memcpy(day_of_month, days_month[1], sizeof(size_t) * 12);
    month = 1;
    size_t i;
    for(i = 0; i < 12; ++i) {
        day_num -= day_of_month[i];
        if(day_num <= 0)
            break;
        ++month;
    }
    day = day_of_month[i] + day_num;
    printf("%lu - %lu - %lu\n", year, month, day);
}

void print_lunar_calendar(size_t year, size_t month, size_t day)
{
    if(year < 1936 || year > 2028)
        return;
    size_t index = year - 1936;
    size_t day_year = day_of_year(year, month, day);
    size_t days;
    if(day_year >= datas[index][0]) days = day_year - datas[index][0];
    else {
        --index;
        --year;
        days = day_of_year(year, 12, 31) + day_year - datas[index][0];
    }
    size_t i;
    size_t day_num = 0;
    month = 1;
    for(i = 0; i < 13; ++i) {
        day_num += month_days[datas[index][i + 4]];
        if(day_num >= days)
            break;
        ++month;
    }
    day = month_days[datas[index][i + 4]] - (day_num - days);
    if(datas[index][1] != 0 && month > datas[index][1])
        --month;
    printf("%lu - %lu - %lu\n", year, month, day);
}

int main(void)
{
    print_gregorian_calendar(2020, 7, 19);
    print_lunar_calendar(2020, 7, 19);
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-13 21:54:00 | 显示全部楼层
人造人 发表于 2020-3-13 20:57
把你想写的内容通过fprintf写到文件

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表