李子昂 2023-12-26 15:07 采纳率: 100%
浏览 13
已结题

用c语言题目内容:中国有句俗语:“三天打鱼两天晒网”,某人从1990年1月1日起开始“三天打鱼两天晒网”。问这个人在以后的某一天是在“打鱼”还是在“晒网”?(相关搜索:输入日期)

当输入日期为2018 11 11时显示是捕鱼
但是答案是晒网
实在是看不出来那里错了

#include<stdio.h>
#include<windows.h>
typedef struct
{
    int year;
    int month;
    int day;
} Date;
typedef enum {saiwang,dayu} Workstatus;
int monthdays(int year,int month)
{
    int days[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    if((year%4==0&&year%100!=0)||(year%400==0))
        days[2]=29;
    int day=days[month];
    return day;
}
int delta_T(Date start,Date end)
{
    int dayyears=(end.year-start.year)*365;
    int runyears=0;
    for(int i=start.year; i<end.year; i++)
    {
        if((i%4==0&&i%100!=0)||(i%400==0))
            runyears++;
    }
    int daymonths=0;
    for(int i=start.month; i<end.month; i++)
    {
        daymonths+=monthdays(end.year,i);
    }
    int days=end.day-start.day;
    int todays=dayyears+runyears+daymonths+days;
    return todays;
}
Workstatus workstatusoneday(Date start,Date end)
{
    int todays=delta_T(start,end);
    if(todays%5==0||todays%5==4)
    {
        Workstatus workstatus1=saiwang;
        return workstatus1;
    }
    else
    {
        Workstatus workstatus1=dayu;
        return workstatus1;
    }
}
void inputenddate(Date *end)
{
    puts("please input end date(xxxx xx xx):");
    int flag=1;
    while(flag)
    {
        int maxdays=0;
        Date temp= {0,0,0};
        int x=scanf("%d%d%d",&temp.year,&temp.month,&temp.day);
        if(x!=3)
        {
            puts("Data error,please input number(int)!\a");
            while(getchar()!='\n');
            continue;
        }
        else
        {
            if(temp.year<1990)
            {
                puts("year input error!(year>=1990)\a");
                while(getchar()!='\n');
                continue;
            }
            if(temp.month<=0||temp.month>12)
            {
                puts("month input error!(0<month<=12)\a");
                while(getchar()!='\n');
                continue;
            }
            else
                maxdays=monthdays(temp.year,temp.month);
        }
        if(temp.day<0||temp.day>maxdays)
        {
            printf("day input error!(0<day<=%d)\a\n",maxdays);
            while(getchar()!='\n');
            continue;
        }
        else
        {
            (*end).year=temp.year;
            (*end).month=temp.month;
            (*end).day=temp.day;
            flag=0;
        }
    }
}
int main()
{
    system("color 0c");
    Date start= {1990,1,1},end;
    int x=1;
    while(x)
    {
        inputenddate(&end);
        delta_T(start,end);
        Workstatus flag=workstatusoneday(start,end);
        if(flag==saiwang)
            printf("%-5d年 %-5d月 %-5d日 这天在晒网!\n",end.year,end.month,end.day);
        else
            printf("%-5d年 %-5d月 %-5d日 这天在捕鱼!\n",end.year,end.month,end.day);
        puts("Whether to continue,enter Y to continue,enter any other character!");
        fgetc(stdin);
        char ch=getchar();
        if(ch!='Y'&&ch!='y')
            x=0;
    }
    return 0;
}


  • 写回答

15条回答 默认 最新

  • 社区专家-Monster-XH 2023-12-26 15:29
    关注

    确定答案是在晒网?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(14条)

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 赞助了问题酬金15元 12月26日
  • 创建了问题 12月26日

悬赏问题

  • ¥20 白日门传奇少一个启动区服和启动服务器的快捷键,东西都是全的 , 他们说套一个出来就行了 但我就是弄不好,谁看看,
  • ¥15 昨天电脑装了matlab好像多了个虚拟盘,关机前还被舍友插了usb不知道干了什么,今天开机电脑就变这样了,求解答
  • ¥100 如何用js写一个游戏云存档
  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计