鱼C论坛

 找回密码
 立即注册
查看: 2976|回复: 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
文件操作应该怎么弄呀
  1. #include <stdio.h>

  2. int main(void)
  3. {
  4.         FILE *fp = fopen("output.txt", "w");
  5.         fprintf(fp, "hello world!\n");
  6.         fclose(fp);
  7.         return 0;
  8. }
复制代码


把你想写的内容通过fprintf写到文件
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

  7.         for (i = 1; i <= yeara - 1; i++)
  8.         {
  9.             if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
  10.                 a = 366;
  11.             else
  12.                 a = 365;
  13.             s = s + a;
  14.         }
  15.         return s;
  16.    
  17. }
  18. int where(int yearb, int monb) //判断每月天数
  19. {
  20.     int tian;
  21.     switch (monb)
  22.     {
  23.     case 1:            tian = 31; break;
  24.     case 2:
  25.         if (yearb % 4 == 0 && yearb % 100 != 0 || yearb % 400 == 0)
  26.             tian = 29;
  27.         else
  28.             tian = 28;
  29.         break;
  30.     case 3:            tian = 31; break;
  31.     case 4:            tian = 30; break;
  32.     case 5:            tian = 31; break;
  33.     case 6:            tian = 30; break;
  34.     case 7:            tian = 31; break;
  35.     case 8:            tian = 31; break;
  36.     case 9:            tian = 30; break;
  37.     case 10:        tian = 31; break;
  38.     case 11:        tian = 30; break;
  39.     case 12:        tian = 31; break;
  40.     default:
  41.         printf("输入日期不存在");
  42.         main();
  43.     }
  44.     return tian;
  45. }
  46. void when(int day)    //判断输入日期是星期几
  47. {
  48.     switch (day)
  49.     {
  50.     case 1:            printf("该日为星期一\n"); break;
  51.     case 2:            printf("该日为星期二\n"); break;
  52.     case 3:            printf("该日为星期三\n"); break;
  53.     case 4:            printf("该日为星期四\n"); break;
  54.     case 5:            printf("该日为星期五\n"); break;
  55.     case 6:            printf("该日为星期六\n"); break;
  56.     case 7:            printf("该日为星期日\n"); break;
  57.     }
  58. }
  59. void why(int month, int day)  //公历节日判断
  60. {
  61.     if (month == 1)
  62.         if (day == 1)
  63.             printf("该日是元旦\n");
  64.         else
  65.             printf("该日不是公历节日!\n");
  66.     if (month == 3)
  67.     {
  68.         switch (day)
  69.         {
  70.         case 8:        printf("该日是国际妇女节\n");    break;
  71.         case 12:    printf("该日是植树节\n");        break;
  72.         default:    printf("该日不是公历节日!\n"); break;
  73.         }
  74.     }
  75.     if (month == 4)
  76.         if (day == 5)
  77.             printf("该日是清明节\n");
  78.         else
  79.             printf("该日不是公历节日!\n");
  80.     if (month == 5)
  81.     {
  82.         switch (day)
  83.         {
  84.         case 1:        printf("该日是劳动节\n");            break;
  85.         case 4:        printf("该日是五四青年节\n");        break;
  86.         default:    printf("该日不是公历节日!\n");        break;
  87.         }
  88.     }
  89.     if (month == 6)
  90.         if (day == 1)
  91.             printf("该日是儿童节\n");
  92.         else
  93.             printf("该日不是公历节日!\n");
  94.     if (month == 7)
  95.         if (day == 1)
  96.             printf("该日是中国建党节\n");
  97.         else
  98.             printf("该日不是公历节日!\n");
  99.     if (month == 8)
  100.         if (day == 1)
  101.             printf("该日是建军节\n");
  102.         else
  103.             printf("该日不是公历节日!\n");
  104.     if (month == 9)
  105.     {
  106.         switch (day)
  107.         {
  108.         case 3:            printf("该日是抗日战争胜利纪念日\n");    break;
  109.         case 10:        printf("该日是教师节\n");                break;
  110.         default:        printf("该日不是公历节日!\n");            break;
  111.         }
  112.     }
  113.     if (month == 10)
  114.         if (day == 1)
  115.             printf("该日是国庆节\n");
  116.         else
  117.             printf("该日不是公历节日!\n");
  118. }
  119. void output_year()        //年份输出
  120. {
  121.     int year, d, di, did, z, j;

  122.         printf("请输入年份(eg:2015):");
  123.         scanf_s("%d", &year);
  124.         z = total(year);
  125.         if (year > 2040 || year < 1940)
  126.         {
  127.             printf("查询范围为1940年到2040年");
  128.             main();
  129.         }
  130.         else
  131.         {
  132.         for (j = 1; j <= 12; j++)
  133.         {
  134.             d = z % 7;
  135.             printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
  136.             printf("        %d月份\n", j);
  137.             printf("sun mon tue wed thu fri sat\n");
  138.             if (d < 6)
  139.                 for (di = 1; di <= d + 1; di++)
  140.                     printf("    ");
  141.             for (did = 1; did <= where(year, j); did++)
  142.             {
  143.                 printf("%d", did);
  144.                 if (did < 10)
  145.                     printf("   ");
  146.                 else
  147.                     printf("  ");
  148.                 if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(year, j))
  149.                     printf("\n");
  150.             }
  151.             z = z + where(year, j);
  152.         }

  153.         main();
  154.     }
  155. }
  156. void  output_month()    //年月输出
  157. {
  158.     int year, m, n, d, di, did, j, Z, D;
  159.     printf("请输入所查日历的年月(eg:2015 01):");
  160.     scanf_s("%d%d", &m, &n);
  161.     if (m > 2040 || m < 1940)
  162.     {
  163.         printf("查询范围为1940年到2040年");
  164.         main();
  165.     }
  166.     else
  167.     {
  168.         Z = total(m);
  169.         for (j = 1; j <= n - 1; j++)
  170.         {
  171.             D = where(m, j);
  172.             Z = Z + D;
  173.         }
  174.         d = Z % 7;
  175.         printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
  176.         printf("        %d月份\n", n);
  177.         printf("sun mon tue wed thu fri sat\n");
  178.         if (d < 6)
  179.             for (di = 1; di <= d + 1; di++)
  180.                 printf("    ");
  181.         for (did = 1; did <= where(m, n); did++)
  182.         {
  183.             printf("%d", did);
  184.             if (did < 10)
  185.                 printf("   ");
  186.             else
  187.                 printf("  ");
  188.             if (did == 6 - d || (did - 6 + d) % 7 == 0 || did == where(m, n))
  189.                 printf("\n");
  190.         }
  191.         main();
  192.     }
  193. }
  194. void  output_day()        //年月日输出
  195. {
  196.     int d, h, j, k, l, x, y, z, Z, Z1, D, jian, judge;
  197.     time_t timep;
  198.     struct tm* p;
  199.     time(&timep);    //系统时间获取
  200.     p = localtime(&timep);  //此函数获得的tm结构体的时间,是已经进行过时区转化为本地时间
  201.     printf("请输入年月日(eg:2015 01 01):");
  202.     scanf("%d%d%d", &x, &y, &z);
  203.     if (x > 2040 || x< 1940)
  204.     {
  205.         fprintf("查询范围为1940年到2040年");
  206.         main();
  207.     }
  208.     else
  209.     {
  210.         judge = where(x, y);
  211.         if (judge < z || y>12)
  212.             printf("输入日期不存在!");
  213.         else
  214.         {
  215.             Z = total(x);
  216.             for (j = 1; j <= y - 1; j++)
  217.             {
  218.                 D = where(x, j);
  219.                 Z = Z + D;
  220.             }
  221.             Z = Z + z;
  222.             h = 1900 + p->tm_year;//时间赋值
  223.             k = 1 + p->tm_mon;
  224.             l = 1 + p->tm_mday;
  225.             Z1 = total(h);
  226.             for (j = 1; j <= k - 1; j++)
  227.             {
  228.                 D = where(k, j);
  229.                 Z1 = Z1 + D;
  230.             }
  231.             Z1 = Z1 + l;
  232.             jian = Z1 - Z;
  233.             printf("输入日期距今有%d天\n", jian);
  234.             d = Z % 7;
  235.             when(d);
  236.             why(y, z);
  237.         }
  238.         main();
  239.     }
  240. }
  241. int main()
  242. {
  243.     int number;
  244.     printf("\n\n*************查询方式************* \n");
  245.     printf("*        1.查询某年的日历        * \n");
  246.     printf("*        2.查询某月的日历        * \n");
  247.     printf("*        3.查询特定的日期        * \n");
  248.     printf("*        4.查询特定的农历        * \n");
  249.     printf("*        5.查询结束--退出        * \n");
  250.     printf("********************************** \n");
  251.     do
  252.     {
  253.         printf("请输入查询方式:");
  254.         scanf_s("%d", &number);
  255.         switch (number)
  256.         {
  257.         case 1:         output_year();  break;
  258.         case 2:         output_month(); break;
  259.         case 3:         output_day();   break;
  260.         case 4:         printf("暂时未实现"); break;
  261.         case 5:         break;
  262.         default:        printf("输入错误!\n--------------\n"); break;
  263.         }
  264.     } while (number != 1 && number != 2 && number != 3 && number != 4);

  265. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

第三个国历转换为农历犹豫过于复杂老师决定取消,现在就差第四点了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

java写的,我试试看能不能改成C语言的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm,我想问的是文件的存储。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是怎么把我输出来的结果存进一个文件里
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

emmm,学了,但是听不太懂,所以来求助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

文件操作应该怎么弄呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. int main(void)
  3. {
  4.         FILE *fp = fopen("output.txt", "w");
  5.         fprintf(fp, "hello world!\n");
  6.         fclose(fp);
  7.         return 0;
  8. }
复制代码


把你想写的内容通过fprintf写到文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdbool.h>

  4. static size_t month_days[] = {29, 30};
  5. static size_t days_month [][12] = {
  6.     {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
  7.     {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
  8. };
  9. static size_t datas[][17] = {
  10.     {23, 3, 2, 17, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0},
  11.     {41, 0, 4, 23, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1},
  12.     {30, 7, 5, 28, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1},
  13.     {49, 0, 6, 33, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
  14.     {38, 0, 0, 38, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
  15.     {26, 6, 2, 44, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0},
  16.     {45, 0, 3, 49, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
  17.     {35, 0, 4, 54, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
  18.     {24, 4, 5, 59, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
  19.     {43, 0, 0, 5, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1},
  20.     {32, 0, 1, 10, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1},
  21.     {21, 2, 2, 15, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
  22.     {40, 0, 3, 20, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
  23.     {28, 7, 5, 26, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
  24.     {47, 0, 6, 31, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1},
  25.     {36, 0, 0, 36, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
  26.     {26, 5, 1, 41, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
  27.     {44, 0, 3, 47, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1},
  28.     {33, 0, 4, 52, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
  29.     {23, 3, 5, 57, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
  30.     {42, 0, 6, 2, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
  31.     {30, 8, 1, 8, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},
  32.     {48, 0, 2, 13, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0},
  33.     {38, 0, 3, 18, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
  34.     {27, 6, 4, 23, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
  35.     {45, 0, 6, 29, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0},
  36.     {35, 0, 0, 34, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
  37.     {24, 4, 1, 39, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
  38.     {43, 0, 2, 44, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
  39.     {32, 0, 4, 50, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
  40.     {20, 3, 5, 55, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
  41.     {39, 0, 6, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0},
  42.     {29, 7, 0, 5, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
  43.     {47, 0, 2, 11, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
  44.     {36, 0, 3, 16, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0},
  45.     {26, 5, 4, 21, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1},
  46.     {45, 0, 5, 26, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
  47.     {33, 0, 0, 32, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1},
  48.     {22, 4, 1, 37, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
  49.     {41, 0, 2, 42, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1},
  50.     {30, 8, 3, 47, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1},
  51.     {48, 0, 5, 53, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1},
  52.     {37, 0, 6, 58, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
  53.     {27, 6, 0, 3, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0},
  54.     {46, 0, 1, 8, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0},
  55.     {35, 0, 3, 14, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1},
  56.     {24, 4, 4, 19, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
  57.     {43, 0, 5, 24, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1},
  58.     {32, 10, 6, 29, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1},
  59.     {50, 0, 1, 35, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
  60.     {39, 0, 2, 40, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1},
  61.     {28, 6, 3, 45, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0},
  62.     {47, 0, 4, 50, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
  63.     {36, 0, 6, 56, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0},
  64.     {26, 5, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1},
  65.     {45, 0, 1, 6, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0},
  66.     {34, 0, 2, 11, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0},
  67.     {22, 3, 4, 17, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
  68.     {40, 0, 5, 22, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0},
  69.     {30, 8, 6, 27, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1},
  70.     {49, 0, 0, 32, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1},
  71.     {37, 0, 2, 38, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
  72.     {27, 5, 3, 43, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1},
  73.     {46, 0, 4, 48, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1},
  74.     {35, 0, 5, 53, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1},
  75.     {23, 4, 0, 59, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
  76.     {42, 0, 1, 4, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
  77.     {31, 0, 2, 9, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0},
  78.     {21, 2, 3, 14, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1},
  79.     {39, 0, 5, 20, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1},
  80.     {28, 7, 6, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1},
  81.     {48, 0, 0, 30, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1},
  82.     {37, 0, 1, 35, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1},
  83.     {25, 5, 3, 41, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
  84.     {44, 0, 4, 46, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1},
  85.     {33, 0, 5, 51, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
  86.     {22, 4, 6, 56, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
  87.     {40, 0, 1, 2, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0},
  88.     {30, 9, 2, 7, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
  89.     {49, 0, 3, 12, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1},
  90.     {38, 0, 4, 17, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0},
  91.     {27, 6, 6, 23, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1},
  92.     {46, 0, 0, 28, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0},
  93.     {35, 0, 1, 33, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
  94.     {24, 4, 2, 38, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1},
  95.     {42, 0, 4, 44, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1},
  96.     {31, 0, 5, 49, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0},
  97.     {21, 2, 6, 54, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1},
  98.     {40, 0, 0, 59, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1},
  99.     {28, 6, 2, 5, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0},
  100.     {47, 0, 3, 10, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1},
  101.     {36, 0, 4, 15, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1},
  102.     {25, 5, 5, 20, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0},
  103.     {43, 0, 0, 26, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1},
  104.     {32, 0, 1, 31, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0},
  105.     {22, 3, 2, 36, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0}
  106. };

  107. bool is_leap_year(size_t year)
  108. {
  109.     if(year % 400 == 0)
  110.         return true;
  111.     if(year % 100 == 0)
  112.         return false;
  113.     if(year % 4 == 0)
  114.         return true;
  115.     return false;
  116. }

  117. size_t day_of_year(size_t year, size_t month, size_t day)
  118. {
  119.     const static size_t day_of_month[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  120.     size_t days = 0;
  121.     for(size_t i = 0; i < month - 1; ++i)
  122.         days += day_of_month[i];
  123.     days += day;
  124.     if(is_leap_year(year))
  125.         ++days;
  126.     return days;
  127. }

  128. void print_gregorian_calendar(size_t year, size_t month, size_t day)
  129. {
  130.     size_t index = year - 1936;
  131.     //month += 1;
  132.     size_t end_index = month;
  133.     if(datas[index][1] != 0 && month > datas[index][1])
  134.         ++end_index;
  135.     ssize_t day_num = 0;
  136.     for(size_t i = 0; i < (end_index - 1); ++i)
  137.         day_num += month_days[datas[index][4 + i]];
  138.     day_num += day;
  139.     day_num += datas[index][0];
  140.     ssize_t year_days = 365;
  141.     if(is_leap_year(year))
  142.         year_days = 366;
  143.     if(day_num > year_days) {
  144.         ++year;
  145.         day_num -= year_days;
  146.     }
  147.     size_t day_of_month[12];
  148.     memcpy(day_of_month, days_month[0], sizeof(size_t) * 12);
  149.     if(is_leap_year(year))
  150.         memcpy(day_of_month, days_month[1], sizeof(size_t) * 12);
  151.     month = 1;
  152.     size_t i;
  153.     for(i = 0; i < 12; ++i) {
  154.         day_num -= day_of_month[i];
  155.         if(day_num <= 0)
  156.             break;
  157.         ++month;
  158.     }
  159.     day = day_of_month[i] + day_num;
  160.     printf("%lu - %lu - %lu\n", year, month, day);
  161. }

  162. void print_lunar_calendar(size_t year, size_t month, size_t day)
  163. {
  164.     if(year < 1936 || year > 2028)
  165.         return;
  166.     size_t index = year - 1936;
  167.     size_t day_year = day_of_year(year, month, day);
  168.     size_t days;
  169.     if(day_year >= datas[index][0]) days = day_year - datas[index][0];
  170.     else {
  171.         --index;
  172.         --year;
  173.         days = day_of_year(year, 12, 31) + day_year - datas[index][0];
  174.     }
  175.     size_t i;
  176.     size_t day_num = 0;
  177.     month = 1;
  178.     for(i = 0; i < 13; ++i) {
  179.         day_num += month_days[datas[index][i + 4]];
  180.         if(day_num >= days)
  181.             break;
  182.         ++month;
  183.     }
  184.     day = month_days[datas[index][i + 4]] - (day_num - days);
  185.     if(datas[index][1] != 0 && month > datas[index][1])
  186.         --month;
  187.     printf("%lu - %lu - %lu\n", year, month, day);
  188. }

  189. int main(void)
  190. {
  191.     print_gregorian_calendar(2020, 7, 19);
  192.     print_lunar_calendar(2020, 7, 19);
  193.     return 0;
  194. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

谢谢大佬
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 17:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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