问题 填空题

[说明]
设计一个日期类Date,包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
在Date类中设计如下重载运算符函数。
Date operator+(int days):返回某日期加上天数得到的日期。
Date operator-(int days):返回某日期减去天数得到的日期。
int operator-(Date &b):返回两日期相差的天数。
[C++程序]
#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)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 year;
Date operator+(int days) //+运算符重载函数

static Date date;
int number= (1) ;
date=ntod (number);
return date;

Date operator-(int days) //-运算符重载函数

statis Date date;
int number= (2) ;
number-=days;
date=ntod (number);
return date;

int operator-(Date &b) //-运算符重载函数

int days= (3) ;
return days;

void disp()

cout<<year<<"."<<month<<","<<day<<endl;

;
int Date::leap (int year)
if( (4) ) //是闰年
return 1; //不是闰年
else
return 0;

int Date::dton (Date &d) //求从公元0年0月0日到d日期的天数

int y,m,days=0;
for (y=1;y<=d.year;y++)
if( (5) )days+=366; //闰年时加366天
else days+=365; //非闰年时加365天
for (m=0;m<d.mont.h-1;m++)
if (leap (d.year)
days+=day_tab [1] [m];
else
days+=day__tab [0][m];
days+=d.day;
return days;
Date Date::ntod (int n) //将从公元0年0月0日的天数转换成日期

int y=1,m=1,d,rest=n,1p;
while (1)
if (leap (y))
if (rest<-366)break;
else rest-=366;
else //非闰年
if (rest=365)break;
else rest-=365;
y++;

y--;
1p=leap (y);
while (1)

if (1p) //闰年
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 d1=now+1000,d2=now-1000;
cout<<"now+1000:"; d1. disp();
cout<<"now-1000:"; d2. disp();

答案

参考答案:leap(y)

解析: 本题程序中对运算符进行重载。其中运算符+表示某日期加上若干天后的日期,第一个“-”表示某日期减去若干天后的日期,第二个“-”表示两日期相差的天数。
函数leap()判断指定的年份是否为闰年,闰年的条件有两个,一是能被4整除,但不能被100整除,或者既能被100整除,又能被400整除,所以空(4)应填入“year%4=0 &&year%100 !=0||year%400=0”。
函数dton()将指定的日期转换成从0年0月0日起的天数,空(5)用来判断之前的年份是否为闰年,调用函数leap(),所以填入“leap(y)”。函数ntod将指定的0年0月0日起的天数转换成对应的日期。
“+”运算符重载时,先将当前日期转换为从0年0月0日起的天数,再加上要加的天数,最后将天数再转换成对应的日期。所以空(1)应填入“dton(*this)+days”。
第一个“-”运算符重载时,先将当前日期转换为从0年0月0日起的天数,再减去要减的天数,最后将天数再转换成对应的日期。而天数的相减由语句“number-=days”完成,所以空(2)应填入“dton(*this)”。
第二个“-”运算符重载时,先将两个比较的日期都转换为从0年0月0日起的天数,再相减,所以空(3)应填入“dton(*this)-dton(b)-1”。

单项选择题

Jeder kann zehn Sprachen lernenDer Kaufmann und Troja-Entdecker Heinrich Schliemann erlernte im Laufe seines Lebens Dutzende von Sprachen und wurde deshalb für ein Genie gehalten. Aber jeder angeblich nur mittelmig begabte Mensch kann dasselbe leisten, wenn er rationelle Lernmethoden anwendet.Es gibt keinen Grund für die Annahme, dass die Gehirne talentierter oder sogar genialer Leute grundstzlich anders sind als die von durchschnittlichen Menschen.Natürlich gibt es Unterschiede. Es gibt ein wenig grere und kleinere Gehirne oder solche, die besser, und andere, die schlechter durchblutet (供血)sind, und das mag auch bei der geistigen Leistung eine Rolle spielen. Es gibt Menschen mit kürzerer und solche mit lngerer Reaktionszeit. Aber diese Differenzen knnen nicht erklren, warum der eine ein Analphabet und der andere ein Gelehrter ist, warum jener überhaupt nicht rechnen kann und dieser die kompliziertesten Gleichungen problemlos lst.Die Unterschiede zwischen der angeborenen Geisteskraft verschiedener Menschen beschrnken sich sicherlich nur auf Grenordnungen, die auch den Krperbau von krftigeren und weniger krftigen Leuten unterscheiden.Die Leistungsdifferenz dürfte demnach nicht grer sein: ein Spitzensportler im 100-Meter-Lauf kann hchstens zweimal schneller laufen als, sagen wir, irgendein gesunder Brieftrger; ein Hochleistungsschwimmer kommt im Wasser nur zweimal so schnell vorwrts wie ein gut trainierter Playboy; sogar ein todesmutiger(临危不惧的)Rennfahrer kann eine Strecke hchstens doppelt so schnell zurücklegen wie, mit demselben Rennauto,ein Familienvater, wenn er gesund ist, ein paar Tage trainiert hat und überhaupt einigermaen Auto fahren kann.Die Leistungsunterschiede werden erst dann sprunghaft grer, wenn einer der Konkurrenten die Ttigkeit, auf die es ankommt, nicht gelernt und geübt hat. Wer das Gehen und das Laufen nicht lernte, wird nicht einmal zehn Meter laufen knnen. Ein Nichtschwimmer geht gleich an der Stelle unter, wo er ins Wasser fllt.Das Erlernen von zwanzig Sprachen mag vielleicht beweisen, dass ein Gehirn besonders gut durchblutet ist. Das Erlernen von zehn fremden Sprachen aber ist für einen gesunden Menschen kein Beweis angeborener Spezialbegabung. Es zeigt nur, dass er das Erlernen von Sprachen gelernt hat.A.Entscheiden Sie bitte, welche Aussage der zitierten Textstelle am hnlichsten ist!(11-15 Titel)B. Finden Sie bitte die richtige Lsung heraus!(16-20 Titel)

Unter welchen Bedingungen knnte ein todesmutiger Rennfahrer eine Strecke hchstens doppelt so schnell zurücklegen wie ein Familienvater

A.Wenn der Familienvater einen starken Krperbau hat.

B.Wenn der Familienvater ein paar Tage trainiert hat.

C.Wenn der Familienvater viel schneller als ein Rennfahrer fahren kann.

D.Wenn der Familienvater auch ein Rennfahrer ist.

单项选择题