鱼C论坛

 找回密码
 立即注册
查看: 1741|回复: 5

[已解决]C语言作业

[复制链接]
发表于 2020-11-4 11:38:24 | 显示全部楼层 |阅读模式

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

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

x
【问题描述】

某渔人从y年a月b日起,实行“三天打鱼两天晒网”,判断同年c月d日(c>=a,若c==a,则d>=b)他在打鱼(输出1)还是在晒网(输出0)。y、a、b和c、d从键盘输入,格式为y-m-d和m-d。要求编写函数:

⑴ int  leap( int  y );

   y年为闰年,则返回1,否则返回0。

⑵ int  days( int y, int m, int d );

   返回y年m月d日是该年的第几天。

【输入形式】

从键盘输入开始日期,格式为:年-月-日。

从键盘输入要判断的日期,格式为:月-日。

【输出形式】

输出1(表示打鱼)或0(表示晒网)。

【样例输入】

2008-2-10

4-29

【样例输出】

0
最佳答案
2020-11-4 17:54:57
  1. #include<stdio.h>

  2. int leap(int);                                                                        //判断是否闰年  i=1 为闰年, i=0 为平年。
  3. int days(int, int, int);                                                //计算当前日期,是该年的第几天。
  4. int i;
  5. int leap(int y)
  6. {
  7.         if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
  8.         {
  9.                 i = 1;
  10.         }
  11.         else
  12.         {
  13.                 i = 0;
  14.         }
  15.         return i;
  16. }
  17. int days(int y, int m, int d)
  18. {
  19.         int day = 0;
  20.         if (i == 1)
  21.         {
  22.                 int a[12] = { 0,31,60,91,121,152,182,213,244,274,305,335 };
  23.                 int j = 0;
  24.                 for (j; j <= m; j++)
  25.                 {
  26.                         if (m == j)
  27.                         {
  28.                                 day = d + a[j];
  29.                         }
  30.                 }
  31.         }
  32.         if (i == 0)
  33.         {
  34.                 int a[12] = { 0,31,59,90,120,151,181,212,243,273,304,334 };
  35.                 int j = 0;
  36.                 for (j; j <= m; j++)
  37.                 {
  38.                         if (m == j)
  39.                         {
  40.                                 day = d + a[j];
  41.                         }
  42.                 }
  43.         }
  44.         return day;
  45. }


  46. int main(void)
  47. {
  48.         int year, a, b;                                                                //定义起始日期的年月日。
  49.         int c, d;                                                                        // 定义现在的月,日。
  50.         int max, mid;                                                                //max=开始日期是这一年的第几天。   mid=当前日期是这一年的第几天,两个相减为从开始日期到现在的天数。
  51.         int z;                                                                                //max与mid相减。从开始到现在的天数。
  52.         printf("输入开始日期(例如年-月-日):\n");
  53.         scanf_s("%d-%d-%d", &year, &a, &b);
  54.         printf("输入判断日期(例如月-日):\n");
  55.         scanf_s("%d-%d", &c, &d);                                        //   c>=a,  if c==a, { d>=b }
  56.         leap(year);
  57.         max=days(year, a, b);
  58.         mid=days(year, c, d);
  59.         z = max - mid;
  60.         if (z % 5 == 1 || z % 5 == 2 || z % 5 == 3)
  61.         {
  62.                 printf("打鱼!");                                                //这里直接打印打鱼。
  63.         }
  64.         else if (z % 5 == 0 || z % 5 == 4)
  65.         {
  66.                 printf("晒网!");                                                //这里直接打印晒网。
  67.         }
  68.         return 0;
  69. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-4 14:43:15 | 显示全部楼层
本帖最后由 jackz007 于 2020-11-5 20:20 编辑
  1. #include <stdio.h>

  2. int leap(int y)
  3. {
  4.         if(! (y % 4) && (y % 100) || ! (y % 400)) return 1 ;
  5.         else return 0                                      ;
  6. }

  7. int days(int y , int m , int d)
  8. {
  9.         int b[12] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , k , r ;
  10.         for(r = d , k = 1 ; k < m ; k ++) r += b[k - 1]                                 ;
  11.         if(leap(y) && m > 2) r ++                                                       ;
  12.         return r                                                                        ;
  13. }

  14. main(void)
  15. {
  16.         int y , m0 , d0 , m , d , r                   ;
  17.         scanf("%d-%d-%d" , & y , & m0 , & d0)         ;
  18.         scanf("%d-%d" , & m , & d)                    ;
  19.         r = (days(y , m , d) - days(y , m0 , d0)) % 5 ;
  20.         if(r < 3) printf("1\n")                       ;
  21.         else printf("0\n")                            ;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-4 17:54:57 | 显示全部楼层    本楼为最佳答案   
  1. #include<stdio.h>

  2. int leap(int);                                                                        //判断是否闰年  i=1 为闰年, i=0 为平年。
  3. int days(int, int, int);                                                //计算当前日期,是该年的第几天。
  4. int i;
  5. int leap(int y)
  6. {
  7.         if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
  8.         {
  9.                 i = 1;
  10.         }
  11.         else
  12.         {
  13.                 i = 0;
  14.         }
  15.         return i;
  16. }
  17. int days(int y, int m, int d)
  18. {
  19.         int day = 0;
  20.         if (i == 1)
  21.         {
  22.                 int a[12] = { 0,31,60,91,121,152,182,213,244,274,305,335 };
  23.                 int j = 0;
  24.                 for (j; j <= m; j++)
  25.                 {
  26.                         if (m == j)
  27.                         {
  28.                                 day = d + a[j];
  29.                         }
  30.                 }
  31.         }
  32.         if (i == 0)
  33.         {
  34.                 int a[12] = { 0,31,59,90,120,151,181,212,243,273,304,334 };
  35.                 int j = 0;
  36.                 for (j; j <= m; j++)
  37.                 {
  38.                         if (m == j)
  39.                         {
  40.                                 day = d + a[j];
  41.                         }
  42.                 }
  43.         }
  44.         return day;
  45. }


  46. int main(void)
  47. {
  48.         int year, a, b;                                                                //定义起始日期的年月日。
  49.         int c, d;                                                                        // 定义现在的月,日。
  50.         int max, mid;                                                                //max=开始日期是这一年的第几天。   mid=当前日期是这一年的第几天,两个相减为从开始日期到现在的天数。
  51.         int z;                                                                                //max与mid相减。从开始到现在的天数。
  52.         printf("输入开始日期(例如年-月-日):\n");
  53.         scanf_s("%d-%d-%d", &year, &a, &b);
  54.         printf("输入判断日期(例如月-日):\n");
  55.         scanf_s("%d-%d", &c, &d);                                        //   c>=a,  if c==a, { d>=b }
  56.         leap(year);
  57.         max=days(year, a, b);
  58.         mid=days(year, c, d);
  59.         z = max - mid;
  60.         if (z % 5 == 1 || z % 5 == 2 || z % 5 == 3)
  61.         {
  62.                 printf("打鱼!");                                                //这里直接打印打鱼。
  63.         }
  64.         else if (z % 5 == 0 || z % 5 == 4)
  65.         {
  66.                 printf("晒网!");                                                //这里直接打印晒网。
  67.         }
  68.         return 0;
  69. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-11-4 23:43:20 | 显示全部楼层
来学习一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-5 15:46:47 | 显示全部楼层

方便理解,好评‘
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 21:53:27 | 显示全部楼层
y_arduino 发表于 2020-11-5 15:46
方便理解,好评‘

感谢支持!继续努力。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-10 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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