上官洛栖 发表于 2020-3-13 14:50:19

C语言课设作业不会做,求救!!

11、年历显示
输入一个年份,屏幕上显示该年的日历情况,具体显示格式可以灵活设置,以美观、实用为基本要求。输入的年份限制在1940-2040年之间。
功能要求:
(1)输入年月,屏幕上显示该月的日历;
(2)输入年月日,屏幕显示距今天还有多少天,星期几,是否是公历节日等;
(3)查询某年某月某日的农历日期;
(4)将查询情况以日志的形式保存到相应磁盘文件中,并随时可查。
第四项不知该新建一个怎样的新函数来实现。
感谢大佬们!!!

人造人 发表于 2020-3-13 15:11:10

“不会做”
是哪一个程度的不会做?
能写几个函数就写几个函数,把你写的贴出来,看看是帮你补完剩下的,还是给你提供思路
你不要告诉我,你是一个字母也动不了手的

上官洛栖 发表于 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();
    }
}
voidoutput_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();
    }
}
voidoutput_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);

}

上官洛栖 发表于 2020-3-13 15:18:41

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

第三个国历转换为农历犹豫过于复杂老师决定取消,现在就差第四点了{:5_106:}

人造人 发表于 2020-3-13 15:56:34

http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
这是我找到的唯一一个靠谱的

java写的,我试试看能不能改成C语言的

上官洛栖 发表于 2020-3-13 16:07:52

人造人 发表于 2020-3-13 15:56
http://blog.sina.com.cn/s/blog_a5a96e940102vaqd.html
这是我找到的唯一一个靠谱的



emmm,我想问的是文件的存储。。

人造人 发表于 2020-3-13 16:15:06

上官洛栖 发表于 2020-3-13 16:07
emmm,我想问的是文件的存储。。

?

上官洛栖 发表于 2020-3-13 16:30:03

人造人 发表于 2020-3-13 16:15
?

就是怎么把我输出来的结果存进一个文件里

人造人 发表于 2020-3-13 16:49:04

上官洛栖 发表于 2020-3-13 16:30
就是怎么把我输出来的结果存进一个文件里

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

上官洛栖 发表于 2020-3-13 17:08:02

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

emmm,学了,但是听不太懂,所以来求助

上官洛栖 发表于 2020-3-13 19:43:59

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

文件操作应该怎么弄呀

人造人 发表于 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写到文件

人造人 发表于 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 [] = {
    {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[] = {
    {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 = {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;
    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 != 0 && month > datas)
      ++end_index;
    ssize_t day_num = 0;
    for(size_t i = 0; i < (end_index - 1); ++i)
      day_num += month_days];
    day_num += day;
    day_num += datas;
    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;
    memcpy(day_of_month, days_month, sizeof(size_t) * 12);
    if(is_leap_year(year))
      memcpy(day_of_month, days_month, sizeof(size_t) * 12);
    month = 1;
    size_t i;
    for(i = 0; i < 12; ++i) {
      day_num -= day_of_month;
      if(day_num <= 0)
            break;
      ++month;
    }
    day = day_of_month + 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) days = day_year - datas;
    else {
      --index;
      --year;
      days = day_of_year(year, 12, 31) + day_year - datas;
    }
    size_t i;
    size_t day_num = 0;
    month = 1;
    for(i = 0; i < 13; ++i) {
      day_num += month_days];
      if(day_num >= days)
            break;
      ++month;
    }
    day = month_days] - (day_num - days);
    if(datas != 0 && month > datas)
      --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;
}

上官洛栖 发表于 2020-3-13 21:54:00

人造人 发表于 2020-3-13 20:57
把你想写的内容通过fprintf写到文件

谢谢大佬
页: [1]
查看完整版本: C语言课设作业不会做,求救!!