填空题

【说明】
设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
在Date类中设计如下重载运算符函数:
Date operator + (int days) : 返回某日期加上天数得到的日期。
Date operator - (int days) : 返回某日期减去天数得到的日期。
int operator - (Date&b): 返回两日期相差的天数。
【程序】
#include<iostream.h>
int day tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
//day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date
{
int year, month, day //年,月,日
int leap(int); //判断是否闰年
int dton(Date&)
Date ntod(int)
public:
Date() { }
Date (int y, int mint d) I year = y; month = m; day = d;}
void setday(intd){day = d;}
void setmonth(int m) {month = m;}
void setyear(int y) {year =y;}
int getday() {return day;}
int getmonth() {return month:}
int getyear() {return yea;}
Date operator + (int days) //+运算符重载函数
{
static Date date;
int number = ________
date = ntod(number)
return date
}
Date operator - (int days) //-运算符重载函数
{
staffs Date date;
int number= ________ ;
number - = days;
date = ntod(number)
return date;
}
int operator - (Date &b) //-运算符重载函数
{
int days= ________ ;
return days;
}
void disp()
{
cout<<year<<"."<<month<<". "<<day<<endl;
}
};
int Date: :leap( int year)
if( ________ ) //是闰年
return 1; //不是闰年
else
return0:
}
int Date:: dton( Date &d) //求从公元0年0月0日到d日期的天数
{
inty,m,days =0;
for(y=1;y<=d. year;y++)
if( ________ )days+ =366; //闰年时加366天
else days + = 365; //非闰年时加365天
for(m =0;m<d. month-1;m++)
if( (6) )
days += day_tab[1] [m];
else
days +=day_tab[0] [m];
days + = d. day;
return days;
}
Date Date::ntod(intn) //将从元0年0月0日的天数转换成日期
{
int y=1,m = 1,d,rest = n,lp;
while ____
{ if(leap(y))
if(rest<= 366) break;
else rest - = 366;
else //非闰年
if(rest = 365 ) break;
else rest-=365;
y++;
}
y--;
Ip = leap(y);
while ____
{
if(lp) //闰年
if(rest>day_tab[1] [m - 1]) rest -= day_tab[1] [m-1];
else break;
else //非闰
if(rest>day_tab[0] [m -1]) rest -= day_tab[0] [m-1];
else break;
m++;
}
d = rest;
return Date(y;m,d);
}
void main()
{
Date now(2003,10,1) ,then(2005,6,5);
cout<<" now:";now. disp();
cout<<" then:";then. disp();
cout<<"相差天数:"<<(then-now)<<endl;
Date dl = now + 1000,d2 = now - 1000;
cout<<"now + 1000:" ;d1. disp();
cout<<" now - 1000:" :d2. disp();
}

【参考答案】

dton(*this)+days dton(*this)
dton(*this)-(dton(b)-1......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

填空题
【说明】 程序8用于计算某公司每个职工应缴纳的个人所得税额和全体职工缴纳的个人所得税总额,职工的当月收入(工资或薪金)通过键盘输入,每次输入一个职工的工号和工资(或薪金)。由于该公司的工资或薪金是不定时发放的,所以输入过程中每个职工的收入会出现多次输入,整个输入以工号小于等于0结束。 假设个人所得税法规定:个人收入所得,按月计税,以每月收入总额减除免税金额800元后的余额作为该月的月应纳税所得额。适用税率如表所示。 级数月应纳税所得额适用税率(%)123456789不超过500元的部分501元~2000元的部分2001元~5000元的部分5001元~2000元的部分2001元~4000元的部分4001元~6000元的部分6001元~8000元的部分8001元~100000元的部分超过100000元的部分51015202530354045上表表明,个人收入所得税是按照超额累进的税率来征收的。 设一个人的月应纳税所得额为K(元),用下面的公式计算其应缴纳的个人所得税额S (元); 若0<K≤500,则S=K×5%; 若500<K≤2000,则S=500×5%+(K-500)×10%; 若2000<K≤5000,则S=500×5%+1500×10%+(K-2000)×15%; 若5000<K≤20000,则S=500×5%+1500×10%+3000×15%+(K-5000)×20%; ... 例如,某人某月收入总额为4100元,减去800元后,应纳税所得额为3300元,其应缴纳的个人所得税额为500*5%+1500*10%+1300*15%=370元。 【程序】 #include<stdio.h> #define MaxNum 50 #define BASE 800 *免税金额基数* int paylevel[]={0,500,2000,5000,20000,40000,60000,80000,100000,1000001}; int taxPrate[]={5,10,15,20,25,30,35,40,45}; *税率表* typedef struct{ int ld; *职工的工号* long Salary; *职工的工资* } Info; *查找工号为ld的职工在数组employee中的下标,返回值为0表示没有* int find (int ld ,Info employee[], int m) { int j; employee[0]. Id=Id; for(j=m;________;j--); return j; } void main(void) { Info employee[MaxNum+1]; long Wage; double sum=0, K,S; int i,j,N=0,Code; scanf( %d %Id ,&Code,&Wage); while(Code>0){ i=find (Code, empolyee, N ); if(i>0)employee [i]. Salary+=Wage; else{________; employee[N]. Id=Code;employee[N]. Salary =Wage; } scanf( %d %Id , &Code, &Wage); } for(i=1;i<=N;i++) { K=________; *计算月应纳税所得额* S=0; *月应纳税额赋初值* if(K>0) { for(j=1;j<=9;j++) if________ *月应纳税所得额超过第j级* S=S+(paylevel[j]-paylevel[j-1])*taxPrate[j-1] 100; else{S =S+________* taxPrate[j-1] 100; break; } } printf( 职工%d应缴纳的个人所得税额:%10.21f n ,employee[i].Id,S); sum+=S; } printf( 全体职工个人所得税总额:%10.21f n ,sum); }