y_arduino 发表于 2020-11-4 11:38:24

C语言作业

【问题描述】

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

⑴ intleap( inty );

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

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

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

【输入形式】

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

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

【输出形式】

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

【样例输入】

2008-2-10

4-29

【样例输出】

0

jackz007 发表于 2020-11-4 14:43:15

本帖最后由 jackz007 于 2020-11-5 20:20 编辑

#include <stdio.h>

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

int days(int y , int m , int d)
{
      int b = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , k , r ;
      for(r = d , k = 1 ; k < m ; k ++) r += b                                 ;
      if(leap(y) && m > 2) r ++                                                       ;
      return r                                                                        ;
}

main(void)
{
      int y , m0 , d0 , m , d , r                   ;
      scanf("%d-%d-%d" , & y , & m0 , & d0)         ;
      scanf("%d-%d" , & m , & d)                  ;
      r = (days(y , m , d) - days(y , m0 , d0)) % 5 ;
      if(r < 3) printf("1\n")                     ;
      else printf("0\n")                            ;
}

Dadong丶 发表于 2020-11-4 17:54:57

#include<stdio.h>

int leap(int);                                                                        //判断是否闰年i=1 为闰年, i=0 为平年。
int days(int, int, int);                                                //计算当前日期,是该年的第几天。
int i;
int leap(int y)
{
        if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0))
        {
                i = 1;
        }
        else
        {
                i = 0;
        }
        return i;
}
int days(int y, int m, int d)
{
        int day = 0;
        if (i == 1)
        {
                int a = { 0,31,60,91,121,152,182,213,244,274,305,335 };
                int j = 0;
                for (j; j <= m; j++)
                {
                        if (m == j)
                        {
                                day = d + a;
                        }
                }
        }
        if (i == 0)
        {
                int a = { 0,31,59,90,120,151,181,212,243,273,304,334 };
                int j = 0;
                for (j; j <= m; j++)
                {
                        if (m == j)
                        {
                                day = d + a;
                        }
                }
        }
        return day;
}


int main(void)
{
        int year, a, b;                                                                //定义起始日期的年月日。
        int c, d;                                                                        // 定义现在的月,日。
        int max, mid;                                                                //max=开始日期是这一年的第几天。   mid=当前日期是这一年的第几天,两个相减为从开始日期到现在的天数。
        int z;                                                                                //max与mid相减。从开始到现在的天数。
        printf("输入开始日期(例如年-月-日):\n");
        scanf_s("%d-%d-%d", &year, &a, &b);
        printf("输入判断日期(例如月-日):\n");
        scanf_s("%d-%d", &c, &d);                                        //   c>=a,if c==a, { d>=b }
        leap(year);
        max=days(year, a, b);
        mid=days(year, c, d);
        z = max - mid;
        if (z % 5 == 1 || z % 5 == 2 || z % 5 == 3)
        {
                printf("打鱼!");                                                //这里直接打印打鱼。
        }
        else if (z % 5 == 0 || z % 5 == 4)
        {
                printf("晒网!");                                                //这里直接打印晒网。
        }
        return 0;
}

乐乐学编程 发表于 2020-11-4 23:43:20

来学习一下

y_arduino 发表于 2020-11-5 15:46:47

Dadong丶 发表于 2020-11-4 17:54


方便理解,好评‘

Dadong丶 发表于 2020-11-5 21:53:27

y_arduino 发表于 2020-11-5 15:46
方便理解,好评‘

感谢支持!继续努力。{:5_109:}
页: [1]
查看完整版本: C语言作业