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

简介: 每天一道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;
}
目录
相关文章
|
7天前
|
编译器 测试技术 C语言
【C语言】:自定义类型:结构体的使用及其内存对齐
【C语言】:自定义类型:结构体的使用及其内存对齐
26 7
|
5天前
|
网络协议 编译器 Linux
结构体(C语言)
结构体(C语言)
|
6天前
|
C语言
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
【海贼王编程冒险 - C语言海上篇】库函数怎样模拟实现?
7 1
|
6天前
|
C语言
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
【海贼王编程冒险 - C语言海上篇】怎样用C语言实现简单的扫雷游戏?
6 1
|
6天前
|
C语言
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏?
【海贼王编程冒险 - C语言海上篇】C语言如何实现简单的三子棋游戏?
7 1
|
4天前
|
C语言
C语言中的结构体
C语言中的结构体
4 0
|
6天前
|
编译器 C语言 C++
【海贼王编程冒险 - C语言海上篇】自定义类型:结构体,枚举,联合怎样定义?如何使用?
【海贼王编程冒险 - C语言海上篇】自定义类型:结构体,枚举,联合怎样定义?如何使用?
8 0
|
6天前
|
存储 C语言
【海贼王编程冒险 - C语言海上篇】C语言中的数据类型有哪些?又是如何存储?
【海贼王编程冒险 - C语言海上篇】C语言中的数据类型有哪些?又是如何存储?
12 0
|
6天前
|
存储 编译器 Linux
【c语言】详解结构体
【c语言】详解结构体
7 0
|
7天前
|
C语言