上海大学1516级C++试题Word文档下载推荐.docx
《上海大学1516级C++试题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《上海大学1516级C++试题Word文档下载推荐.docx(13页珍藏版)》请在冰豆网上搜索。
■得
分
二、填空题(每空2分,共20分)如下设计了一个字符串类String,请根据运行结果,完成程序。
#inelude<
iostream>
cstring>
string>
usingnamespaee①std;
classString
{
public:
String(constchar*str="
"
){
size=strlen(②str);
x=size>
0?
newchar[size]:
NULL;
if(x==NULL)size=0;
for(inti=0;
i<
size;
i++)
x[i]=str[i];
}
String(constString&
s):
x(③NULL)
*this=s;
//直接利用深赋值运算符函数
virtual~String()
if(x!
=NULL)delete④[]x;
size=0;
String&
operator=(constString&
s)
if(this==⑤&
s)return*thisif(x!
=NULL)delete[]x;
size=s.size;
x=newchar[size];
x[i]=s.x[i];
return⑥*this;
⑦char&
operator[](intindex){returnx[index];
}
friendostream&
operator<
<
(ostream&
out,constString&
s.size;
out<
S.x[l];
return⑧out;
⑨frlendistream&
operator>
>
(istream&
n,String&
stringstr;
in>
str;
//利用C++字符串
s=String(str.c_str());
//利用深赋值运算符
returnin;
friend⑩intCompare(constString&
s1,constString&
s2){
inti;
for(i=0;
s1.size&
&
s2.size&
s1.x[i]==s2.x[i];
if(i<
s2.size)returns1.x[i]>
s2.x[i]?
1:
-1;
elseif(i<
i==s2.size)
return1;
elseif(i==s1.size&
s2.size)
return-1;
else
return0;
char*str[]={"
小于"
"
等于"
大于"
};
cout<
\"
si<
str[1+Compare(s1,s2)]<
s2<
\t"
endl;
3.1(10分)本题所涉及的Time类,相关头文件和源程序文件如下
头文件
//MyTime.h
#ifndefMYTIME_H#defineMYTIME_H#include<
#include<
iomanip>
usingnamespacestd;
classTime
Time(inthour=0,intminute=0,intsecond=0);
Time&
operator++();
Timeoperator++(int);
friendTimeoperator+(constTime&
t,intn);
friendostream&
operator<
out,constTime&
t);
friendistream&
operator>
n.Time&
protected:
inth,m,s;
#endif
源程序文件
//MyTime.cpp
#include"
MyTime.h"
Time:
:
Time(inthour,intminute,intsecond)
//构造函数
h(hour),m(minute),s(second)
operator++()
s++;
if(s==60){s=0;
m++;
if(m==60){m=0;
h++;
if(h==24)h=0;
return*this;
TimeTime:
operator++(int)
Timetemp(*this);
++(*this);
returntemp;
Timeoperator+(constTime&
t,intn)
Timeresult(t);
intx=(t.h*60+t.m)*60+t.s+n;
while(x<
0)
x+=24*60*60;
x%=24*60*60;
result.s=x%60;
result.m=x/60%60;
result.h=x/3600;
returnresult;
ostream&
t)
setfill('
0'
)<
setw
(2)<
t.h<
'
setw
(2)«
t.m<
t.s<
);
returnout;
istream&
n,Time&
charstr[200];
in.getline(str,200,'
t.h=atoi(str);
t.m=atoi(str);
in.getline(str,200);
t.s=atoi(str);
运行结果(3.1)
23:
59:
51
52
50
22:
请输入时间:
59
00:
00
10:
20:
30
//main.cpp源程序文件(测试程序)
intmain()
Timet0(23,59,50),t;
t=tO;
cout<
++t<
endl;
++t;
t<
t=t0;
++++t;
t++<
t++;
t++++;
t=t+(-3600);
请输入时间(hh:
mm:
ss):
;
cin>
t;
t+(10*60+20)*60+30<
return0;
3.2(10分)以下4小题所涉及的Test1类,相关头文件和源程序文件如下。
//test03.h头文件
#ifndefTEST03_H
#defineTEST03_H
classTest1
Test1(inta=0);
Test1(constTest1&
virtual~Test1();
Test1&
operator=(constTest1&
staticintNum();
staticintSum();
out,constTest1&
friendistream&
in,Test1&
staticintnum,sum;
intx;
voidShow();
//普通的C++函数声明
//Test03.cpp
#inelude"
Test03.h"
Test1:
sum+=temp-t.x;
t.x=temp;
voidShow()
//普通的C++函数
Num="
Test1:
Num()
\tSum="
Sum()<
//321测试程序之一
运行结果(3.2.1)
Num=0,Sum=0
intmain(){
Show();
//3.2.2测试程序之二
Test1x(100);
//创建一个全局对象
voidf(Test1t)
运行结果(3.2.2)
Num=
=1,
Sum=
=100
=2,
=200
f(x);
//3.2.3测试程序之三
voidf(Test1&
t){
Testix(100);
//创建一个自动对象
f(x);
//3.2.4测试程序之四
运行结果(323)
Num=i,Sum=100
Num=1,Sum=100
Testix(10),y(20),a[2]={x,y}Show();
Testi*p=newTesti;
*p=30;
运行结果(3.2.4)
Num=4,Sum=60
Num=5,Sum=90
deletep;
Show();
得分
四、(40分)设计复数类。
要求运行时得到指定的输出结果
1实现如下测试程序中用到的9个函数(每个函数3分。
无须定义拷贝构造函数、析
构函数及赋值运算符函数);
2自选3个运算符,并实现运算符函数重载(每个函数3分。
注意复数不能比较大小);
3数据成员、类设计的其他部分(4分)。
【注意:
数学函数doubleatan2(doubley,doublex);
当x^O时返回y/x的
反正切值,当x=0时返回n2或-n2(正负号与y同号)】
Complex.h"
emath>
usingnamespaeestd;
elassComplex{
publie:
Complex(doublereal=O,doubleimag=O):
re(real),im(imag){}
double&
Real(){returnre;
lmag(){returnim;
doubleAngle()const{returnatan2(im,re);
doubleAbs()const{returnsqrt(re*re+im*im);
friendComplexoperator+(constComplex&
c1,constComplex&
c2)
Complexresult(c1);
result.re+=c2.re;
result.im+=c2.im;
friendComplexoperator*(constComplex&
Complexresult;
result.re=c1.re*c2.re-c1.im*c2.im;
result.im=c1.re*c2.im+c1.im*c2.re;
Complex&
operator*=(constComplex&
c)
doublex=re*c.re-im*c.im;
im=re*c.im+im*c.re;
re=x;
return*this;
operator<
out,constComplex&
('
c.re<
"
c.im<
)'
returnout;
protected:
doublere,im;
};