输入一个日期,输出这个日期是这一年的第几天(注意:要考虑平年和闰年的问题)。如:输入 2022/1/15 则输出 15;输入 2022/3/1 则输出 60

#include <stdio.h>

//输入一个日期,输出当前日期是这一年的第几天
//宏定义
#define MONTH_1 31
#define MONTH_2 28
#define MONTH_3 31
#define MONTH_4 30
#define MONTH_5 31
#define MONTH_6 30
#define MONTH_7 31
#define MONTH_8 31
#define MONTH_9 30
#define MONTH_10 31
#define MONTH_11 30
#define MONTH_12 31

int main()
{
    int year, month, day;
    printf("请输入要查询的日期(年/月/日):");
    scanf("%d/%d/%d", &year, &month, &day);//从终端输入日期
    int leap = 0;//闰年的增量  也是闰年的标志位  0  平年  1 闰年
     //判断输入的日期是否有误
    //判断年是闰年还是平年
    if(((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
        leap = 1;
    }

    //判断月份输入的是否有误
    if(month < 1 || month > 12){
        printf("您输入的月份有误,请重新输入\n");
        //在main函数里面使用return,结束整个程序
        return -1;
    }

    //判断日是否有误
    //月份:1 3 5 7 8 10 12 最多31天
    if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
        if(day < 1 || day > 31){
            printf("您输入的日期有误,请重新输入\n");
            return -1;
        }
    }

    //月份:4 6 9 11 最多30天
    if(month==4 || month==6 || month==9 || month==11){
        if(day < 1 || day > 30){
            printf("您输入的日期有误,请重新输入\n");
            return -1;
        }
    }
    
    //月份:2 闰年最多29天 平年最多28天
    if(month == 2){
        if(leap == 1){ //闰年
            if(day < 1 || day > 29){
                printf("您输入的日期有误,请重新输入\n");
                return -1;
            } 
        }else if(leap == 0){ //平年
            if(day < 1 || day > 28){
                printf("您输入的日期有误,请重新输入\n");
                return -1;
            }
        }
    }
    
    int days = 0;
    switch(month){
		case 12:
			days += MONTH_11;
		case 11:
			days += MONTH_10;
		case 10:
			days += MONTH_9;
		case 9:
			days += MONTH_8;
		case 8:
			days += MONTH_7;
		case 7:
			days += MONTH_6;
		case 6:
			days += MONTH_5;
		case 5:
			days += MONTH_4;
		case 4:
			days += MONTH_3;
		case 3:
			days += MONTH_2 + leap;
		case 2:
			days += MONTH_1;
		case 1:
			days += day;
			break;
    }

    printf("%d年%d月%d日%d年的第%d天\n", year, month, day, year, days);

    return 0;
}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值