每天一道C语言编程(结构体的运用):这是一年的第几天?

定义一个结构体来存储日期(含年、月、日)。并设计一个函数,计算传入的结构体存储的日期是一年中的第几天

注意:
1.考虑非法日期,如“4月小”,那就不能有31号

2.考虑是否为闰年

代码如下

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

struct date
{
    short year;
    char month;
    char day;
};

bool isValid(int year, int month, int day)
{
    if(year<0 || month<1 || month>12 || day<1 || day>31)
        return false;
    
    if(month == 4 || month == 6 || month == 9 || month == 11)
    {
        if(day > 30)
            return false;
    }
    else if(month == 2)
    {
        if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
        {
            if(day > 29)
                return false;
        }
        else
        {
            if(day > 28)
                return false;
        }
    }
    else
    {
        if(day > 31)
                return false;
    }
    
    return true;
}

int main(void)
{
    printf("请输入年月日(格式:1969/09/23) :");

    struct date sunny;
    scanf("%hd/%hhd/%hhd", &sunny.year,
                           &sunny.month,
                           &sunny.day);

    // 判定日期的合法性
    if(!isValid(sunny.year, sunny.month, sunny.day))
    {
        fprintf(stderr, "日期非法\n");
        exit(0);
    }


    int days[12] = {31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//每月的最大天数,特殊的二月另外赋值即可
    int i, total_days = 0;

    // 判断是否闰年
    if((sunny.year%4==0 && sunny.year%100!=0) ||
       (sunny.year%400==0))
        days[1] = 29;
    else
        days[1] = 28;

    for(i=0; i<sunny.month-1; i++)
        total_days += days[i];
    total_days += sunny.day;

    printf("该日期是第%d天\n", total_days);

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值