读书人

为什么计算闰年是异常的还有球优化代

发布时间: 2012-05-05 17:21:10 作者: rapoo

为什么计算闰年是错误的,还有球优化代码

C/C++ code
#include<iostream>using namespace std;int m[]={31,28,31,30,31,30,31,31,30,31,30,31};class date{private:    int year,month,day;    int dayst;    int c_m,c_d;    bool LeepYear; public:    void GetDate(int y,int m,int d);    bool IsLeepYear(int y);    void Count();    void PutDate(int y,int x);    void print1();    void print2();    void print3();};void date::GetDate(int y,int m,int d){    year=y;    month=m;    day=d;}bool date::IsLeepYear(int y){    year=y;    if(y%400==0||(y%4==0&&y%100!=0))        return 1;    else        return 0;}void date::PutDate(int y,int x){    LeepYear=IsLeepYear(y);    if(LeepYear)    {        m[1]++;    }    for(int i=0;m[i]<x;i++)    {        x-=m[i];    }    c_m=i+1;    c_d=x;}void date::Count(){    dayst=0;    for(int i=0;i<month-1;i++)        dayst+=m[i];    dayst+=day;    LeepYear=IsLeepYear(year);    if(LeepYear&&month>2)        dayst++;}void date::print1(){    cout<<year<<"年"<<month<<"月"<<day<<"日"<<"是第"<<dayst<<"天"<<endl;    cout<<endl;}void date::print2(){    cout<<"该天是"<<c_m<<"月"<<c_d<<"日"<<endl;        cout<<endl;}void date::print3(){    if(LeepYear)        cout<<year<<"年是闰年"<<endl;    else        cout<<year<<"年不是闰年"<<endl;    cout<<endl;}void main(){    cout<<"    1、给出年,月,日,计算出该天是一年中的第几天。"<<endl;    cout<<"    2、知道第几天,计算出该天的具体日期。"<<endl;    cout<<"    3、计算给定的年份是否是闰年。"<<endl;    cout<<"    0、退出程序"<<endl;    int x;    cin>>x;    int y,m,d;    switch(x)    {    case 1:        cout<<"输入年月日"<<endl;        cin>>y>>m>>d;        date obj1;        obj1.GetDate(y,m,d);        obj1.IsLeepYear(y);        obj1.Count();        obj1.print1();        main();        break;    case 2:        cout<<"输入年和天数"<<endl;        cin>>y>>d;        date obj2;        obj2.IsLeepYear(y);        obj2.PutDate(y,d);        obj2.print2();        main();        break;    case 3:        cout<<"输入年份:"<<endl;        cin>>y;        date obj3;        obj3.IsLeepYear(y);        obj3.print3();        main();        break;    case 0:        break;    default:        cout<<"只能输入123"<<endl;        cout<<endl;        main();        break;    }}


[解决办法]
obj3.IsLeepYear(y);这个函数里面没有对 LeepYear变量进行修正,一直是true,下一行obj3.print3();函数中LeepYear一直是true当然全部打印出闰年出来。

读书人网 >C++

热点推荐