C期末考试考试卷及答案
萌到你眼炸
511次浏览
2021年01月29日 00:53
最佳经验
本文由作者推荐
举足轻重的近义词-安全生产宣传标语
2002
年春季软件学院
C++
期末考试试题及答案
考试时间:
120
分钟
1. (10)
分
现有两种实体:
“矩形”
(
Rectangle
)
和
“ 旗杆”
(
Flagpole
)
。
其中,
“矩形”
的 属性为长度与宽度,
“旗
杆”的属性为高度(指地面以上)和深度(指地面以下)
,且 均为整数。若有:
struct Rectangle { int length, width;};
struct Flagpole { int height, depth;};
int rectangleArea (int x, int y) {return (x>=0 && y>=0)?x*y:0;}
//
计算矩形的面积
int flagpoleLength (int x, int y) {return (x>=0 && y>=0)?x+y:0;}
//
计算旗杆的高度
void f()
{
struct Rectangle rect;
struct Flagpole flgp;
=20; =5; =20; =5;
int area=rectangleArea(, );
int length=flagpoleLength(, );
}
试续写函数
f
,以各举一例说明,对函数
rectangleArea
和
flagpoleLen gth
的调用都可能出现语法上合
法,但结果与函数的语义不一致的情况,并指出其原因。
答案
:
续写的二句如下:
area=rectangleArea(, );
length=flagpoleLength(, );
原因:在函数调用时,只需实参和 形参类型相容即可,而不管语义如何?如上例二句语法上是合法
的,但结果与函数的语义不一致。若欲使 该情况不发生,必须将数据及其上的操作绑定在一起,这必须
用类来定义。
2. (15
分
)
阅读下面的程序,写出
main
的输出。
#include
int f(int i, const int* j, int& k)
{ if(i%3= =0)
if(*j>=6) k*=i;
k+=i;
k-=i;
return *j+k;
}
int main()
{
int i, j=1, k=2, m;
for(i=0; i<10; i++, j*=2) {
m=f(i, &j, k);
printf(
}
1 / 6
return 0;
}
答案
:
i=0, j=1, k=2, m=3.
i=1, j=2, k=2, m=4.
i=2, j=4, k=2, m=6.
i=3, j=8, k=6, m=14.
i=4, j=16, k=6, m=22.
i=5, j=32, k=6, m=38.
i=6, j=64, k=36, m=100.
i=7, j=128, k=36, m=164.
i=8, j=256, k=36, m=292.
i=9, j=512, k=324, m=836.
3.(15
分
)
根据
main
程序的输出结果,定义并实现
max
函数。
int main()
{
cout<<
“max=”<
“max=”<
cout<<
“max=”<
cout<<
“max=”<
cout<<
“max=”<
cout<<
“max=”<
“max=”<
cout<<
“max=”<
return 0;
}
(假定所有的赋值、比较运算符都已定义)
答案
:
template
T max(T x, T y)
{ return x>=y?x:y;}
template
T max(T x, T y, T z)
{ T temp;
temp=max(x,y);
return temp>=z?temp:z;
}
float max(int x, float y)
{ return x>=y?x:y; }
4.(20
分
)
定义堆栈 类模板
Stack
,栈的大小由使用者确定。要求该类模板对外提供如下二种基本操作:
(
1
)
push
(
2
)
pop
(假定赋值操作已定义)
答案
:
2 / 6
#include
template
T s[size];
int iCurrentElem;
public:
Stack();
bool push(T x);
T pop();
void print(){for(int i=0; i
template
Stack
for(int i=0; i
iCurrentElem=-1;
}
template
bool Stack
if(iCurrentElem==(size-1)) {cout<<
else {s[++iCurrentElem]=x; return true;}
}
template
T Stack
T temp;
if(iCurrentElem==-1) {cout<<
else {temp=s[iCurrentElem];s[iCurrentElem]=0; iCurrentElem--; return temp;}
}
void main()
{
float t;
Stack
(10);
(20);
(30);
(40);
();
t=();
();
cout<
5.(25
分
)
用
C++语言定义
MyString
(包括成员函数的实现代码)
,
使之能符合下 面程序及在注释中描述的运行结
果的要求:
main()
{
MyString s1 =
y(); //
此时显示出
: <>
3 / 6