每日一题——输入一个日期,输出它是该年的第几天

简介: 哈喽大家好,我是保护小周ღ,本期为大家带来的是编程实现输入某年某月某日,输出它是这一年的第几天,一起来看看把~

 哈喽大家好,我是保护小周ღ,本期为大家带来的是编程实现输入某年某月某日,输出它是这一年的第几天,一起来看看把~

image.gif编辑

题目:

多组输入,编程实现输入某年某月某日,输出它是这一年的第几天。

(注意数据输入范围)

实例1:

输入:

2021-5-1

输出:

It is not a leap year.

Today is the 121 day of the year.

实例2:

输入:

2000-5-1

输出:

It is a leap year.

Today is the 122 day of the year.

实例3:

输入:

2020-13-12

输出:

Input error, please re-enter the date.

思路解析:

首先我们输入一个日期,我们可以定义三个变量year,month,day,代表年月日,也可以用结构体描述一个日期。利用switch(month)函数判断该年月日有多少天,输入年份,如果该年是闰年,那么该年的2月有29天,否则2月只有28天。

一个月有31天的月份有1 3 5 7 8 10 12

一个月有30天的月份有4 6 9 11

闰年的判断条件,年份能被4整除且不能被100整除,但是能够被400整除的才算闰年。

题目还涉及到多组输入,这个问题我们就要了解一下scanf()函数;scanf()是针对标准输入流的格式化输入函数。

怎样实现多组输入呢? scanf() 函数是有返回值的,scanf()的返回值是已经成功赋值的变量个数,且为整型。

例如:

int size=scanf("%d %d",&a,&b);

键盘输入1 2时scanf()的返回值就是2,所以size==2;

如果只有a或b其中一个被成功读入,那么scanf()的返回值为1;

如果只有a和b 都未被成功读入,返回值为0;

另外还有一种写法是多组输入的写法是要用到EOF,EOF 是 end of file的缩写,表示“文字流”的结尾(file),也可以是标准输入的结尾(stdin)。

例如:

int size=scanf("%d %d",&a,&b);

如果 遇到错误或者是遇到了end of file 返回值就为EOF。

所以我们多组输入可以这样写:

while(scanf("%d %d",&a,&b)==2)
{
……}

image.gif

还可以这样写:

while(scanf("%d %d",&a,&b)!=EOF)
{
……}

image.gif

代码实现:

#include<stdio.h>、//判断是否闰年,若是闰年则返回1,若不是闰年则返回0intIfLeapYear(intyear)
{
if (year%4==0&&year%100!=0||year%400==0)
return1;
elsereturn0;
}
//Days函数:判断有多少天Days(intyear, intmonth, intday)
{
intd, days=0;
//判断是否闰年intsize=IfLeapYear(year);
if (size==0)
    {
printf("It is not a leap year.\n");
    }
else    {
printf("It is a leap year.\n");
    }
//遍历已经完整过去的月份,并统计每个满月的天数for (inti=1; i<month; i++)
    {
switch (i)
        {
case2:
if(size==1)
            {
d=29;
            }
else            {
d=28;
            }break;
case1:
case3:
case5:
case7:
case8:
case10:
case12:d=31; break;
case4:
case6:
case9:
case11:d=30; break;
default:printf("error\n");
        }
days+=d;
    }
//统计“残月”的天数days+=day;
returndays;//返回总天数}
intmain()
{
intyear, month, day;
printf("请输入一个日期,判断他是一年的那一天。\n");
while (scanf("%d-%d-%d", &year, &month, &day)==3)//scanf("%d-%d-%d", &year, &month, &day)!=EOF    {
//判断月份是否输入正确if (month<1||month>12)
        {
printf("Input error, please re-enter the date:\n");
        }
elseprintf("Today is the %d day of the year.\n",Days(year, month, day));
    }
return0;
}

image.gif

image.gif编辑

用结构体描述日期:

//定义日期类型typedefstructDate{
intyear;
intmonth;
intday;
}Date;
intmain()
{
//定义日期类型的Date1变量DateDate1;
printf("请输入一个日期,判断他是一年的那一天。\n");
while (scanf("%d-%d-%d", &Date1.year, &Date1.month, &Date1.day) ==3)//scanf("%d-%d-%d", &year, &month, &day)!=EOF    {
if (Date1.month<1||Date1.month>12)
        {
printf("Input error, please re-enter the date:\n");
        }
else//这样我们就可以把Date类型的Date1变量作为一个整体传参,如果传地址就可以用Date* 的指针接收,通过指针访问Date1的各个成员printf("Today is the %d day of the year.\n", Days(&Date1);
    }
return0;
}

image.gif

在结构体方面有什么不懂得,可以参考博主的另一篇博客,详细的介绍了

1.结构体类型的声明

2.结构体初始化

3.结构体成员访问

4.结构体传参

http://t.csdn.cn/Uz3um

感兴趣的朋友可以用博主的方法,或者是自己的方法做做这道题,优化一下代码,尝试怎样判断我们在正确输入月份后,输入的天数在正确的范围内呢?欢迎评论区留言。

分享一个牛客网上类似的题目,大家也可以尝试着做一做。

链接:一年中的第几天_哔哩哔哩笔试题_牛客网

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ  *★,°*:.☆( ̄▽ ̄)/$:*.°★*

image.gif编辑

 如有侵权请联系修改删除!

相关文章
|
6天前
|
C语言
C语言--生日日期输出--年月日,一行输出--之间没有间隔,若月份为个位,在前面添加0
C语言--生日日期输出--年月日,一行输出--之间没有间隔,若月份为个位,在前面添加0
|
1月前
31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
31.假定2007年的一月一日是星期一,输入一个时间(包含年、月、日),求出它是星期几。
24 0
|
1月前
输入年月日查询是这一年的第几天(详解)
输入年月日查询是这一年的第几天(详解)
28 1
|
1月前
|
索引
每日一题吼吼吼(打印从1到最大n位数,计算是第几天)
每日一题吼吼吼(打印从1到最大n位数,计算是第几天)
17 0
|
1月前
|
Linux C++ iOS开发
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)
59 0
|
8月前
题目:从键盘输入月份的英文速写,程序显示数字月份。例如输入“May“, 则程序显示“May是5月份“。
题目:从键盘输入月份的英文速写,程序显示数字月份。例如输入“May“, 则程序显示“May是5月份“。
题目:从键盘输入月份的英文速写,程序显示数字月份。例如输入“May“, 则程序显示“May是5月份“。
|
11月前
|
C语言
C语言:获得月份天数(多组输入)-1
描述 KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。 输入描述: 多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。 输出描述:
175 0
|
11月前
|
存储 C语言
C语言:获得月份天数(多组输入)-2
思路二:用数组存储各月的日期 总体思路: (一). 写一个函数 get_days_of_month 返回对应月份天数:
|
Python
输入年月日判断是本年的第多少天
输入年月日判断是本年的第多少天
140 0
|
C语言
C语言:输入年月日,输出这是这一年的第几天
C语言:输入年月日,输出这是这一年的第几天
122 0