C语言经典例4-某一天是这一年的第几天

1 题目

输入某年某月某日,判断这一天是这一年的第几天?

2 分析

本题涉及到日历中平年和闰年的概念,平年和闰年的区别在于2月份的天数,平年2月份天数为28天,闰年2月份天数为29天,其他月份天数一样。

  • 判断平年和闰年的方法:如果年份能被4整除,但不能被100整除,或则能被400整除,则是闰年。用于判断的if表达式如下:
if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) 

下面给出每月的天数

1月2月3月4月5月6月7月8月9月10月11月12月
31天平年28天/闰年29天31天30天31天30天31天31天30天31天30天31天

可以发现,在计算时只需给出平年的天数算法,在验证给出的时间年份是否是闰年且月份数大于2,若是则在天数上加1,把每个月对应的天数都事先计算出来,用switch语句选择月份即可,实现如下:

注意:在程序中通过月份计算天数时,是从0月开始算的,比如输入的月日是1月20号,那么这一天必然是该年的第20天,所以在选择月份的时候,case 1 处的sum0

3 实现

#include<stdio.h>

int main (void) {
    int day, month, year, sum;
    printf("请输入年月日,格式为年月日,中间空格隔开:");
    scanf("%d%d%d", &year, &month, &day);
    switch (month) {
        case 1: sum = 0; break;
        case 2: sum = 31; break;
        case 3: sum = 59; break;
        case 4: sum = 90; break;
        case 5: sum = 120; break;
        case 6: sum = 151; break;
        case 7: sum = 181; break;
        case 8: sum = 212; break;
        case 9: sum = 243; break;
        case 10: sum = 273; break;
        case 11: sum = 304; break;
        case 12: sum = 334; break;
    }
    sum = sum + day; // 再加上天数
    if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) {// 判断是不是闰年
        if (month > 2) { // 改年是闰年,还要输入的月份大于2才加一
            sum = sum + 1; // 该年是闰年,天数要加一
        }
    }
    printf("这是这一年的第%d天", sum);
    return 0;
}

4 运行结果

请输入年月日,格式为年月日,中间空格隔开:2019 4 17
这是这一年的第107
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值