练习,求一年第几天

计算年中第几天的方法
本文介绍了通过不同方法实现计算给定日期是一年中的第几天的功能,包括使用switch-case语句、循环判断每月天数及利用数组简化代码等。特别讨论了如何处理闰年的情况。

定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。

#include<iostream>
using namespace std;
int day(int,int,int);
int main()
{
    int d,year,month,date;
    cout<<"输入年月日,计算一年中的天数:";
    cin>>year>>month>>date;
    d=day(year,month,date);
    cout<<"是一年中的第"<<d<<"天。"<<endl;
    return 0;
}
int day(int year,int month,int date)
{
    int d2,d;
    if(year%4==0&&year%100!=0||year%400==0)  
    {
        d2=29;
    }
  else  d2=28;
    switch(month)
    {
    case(1):
        d=date;
        break;
    case(2):
        d=31+date;
        break;
    case(3):
        d=31+d2+date;
        break;
    case(4):
        d=31*2+d2+date;
        break;
    case(5):
        d=31*2+30+d2;
        break;
    case(6):
        d=31*3+30+d2;
        break;
    case(7):
        d=31*3+30*2+d2;
        break;
    case(8):
        d=31*4+30*2+d2;
        break;
    case(9):
        d=31*5+30*2+d2;
        break;
    case(10):
        d=31*5+30*3+d2;
        break;
    case(11):
        d=31*6+30*3+d2;
        break;
    case(12):
        d=31*6+30*4+d2;
        break;
    }
    return d;

}

学习别的写法

参考解答1:

[cpp] view plaincopyprint?

    #include<iostream>  
    using namespace std;  
    int days(int y, int m, int d);  
    int main()  
    {  
        int year, month, day;  
        cout<<"输入年 月 日"<<endl;  
        cin>>year>>month>>day;  
        cout<<"这是该年的第"<<days(year, month, day)<<"天"<<endl;  
        return 0;  
    }  
      
    int days(int y, int m, int d)  
    {  
        int sum=d;  
        //加上前m-1月的天数  
        for(int i=1;i<m;i++)  
        {  
            switch(i)  
            {  
            case 2:  
                sum+=((y%4==0&&y%100!=0)||y%400==0)?29:28;  
                break;  
            case 4:  
            case 6:  
            case 9:  
            case 11:  
                sum+=30;  
                break;  
            default:  
                sum+=31;  
                break;  
            }  
        }  
        return sum;  
    }  


用类似思路,有参考解答2:

[cpp] view plaincopyprint?

    #include<iostream>  
    using namespace std;  
    int days(int y, int m, int d);  
    int main()  
    {  
        int year, month, day;  
        cout<<"输入年 月 日"<<endl;  
        cin>>year>>month>>day;  
        cout<<"这是该年的第"<<days(year, month, day)<<"天"<<endl;  
        return 0;  
    }  
      
    int days(int y, int m, int d)  
    {  
        int sum=d;  
        //加上前m-1月的天数  
        for(int i=1; i<m; i++)  
        {  
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)  
                sum+=31;  
            else if (i==4||i==6||i==9||i==11)  
                sum+=30;  
            else  
                sum+=((y%4==0&&y%100!=0)||y%400==0)?29:28;  
        }  
        return sum;  
    }  


下下周学习了数组,可以这样来,30行之内解决问题(对数组充满期待吧):

[cpp] view plaincopyprint?

    #include<iostream>  
    using namespace std;  
    int days(int y, int m, int d);  
    int main()  
    {  
        int year, month, day;  
        cout<<"输入年 月 日"<<endl;  
        cin>>year>>month>>day;  
        cout<<"这是该年的第"<<days(year, month, day)<<"天"<<endl;  
        return 0;  
    }  
      
    int days(int y, int m, int d)  
    {  
        int sum=d;  
        int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};  
        for(int i=1; i<m; i++)  
        {  
            sum+=a[i];  
        }  
        if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天  
            sum++;  
        return sum;  
    }  


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值