《C++语言程序设计》期末考试答题纸
姓名: 专业:
学号: 学习中心:
成绩:
注意:请在答题纸上作答,否则不得分!
一、更多资料下载:(更多资料下载:2分,共20分)
1 2 3 4 5 6 7 8 9 10
二、填空题(每空2分,共20分)
1、①
2、②
3、③
4、④
5、⑤
6、⑥
7、⑦
8、⑧
9、⑨
10、⑩
三、程序填空题(每空3分,共18分)
1、① 、②
2、③ 、④ 4 a7 n, D' ?9 s6 A
3、⑤ 、⑥ 5 @$ t# E( C% [' n0 @4 {9 F5 c
四、程序分析题(更多资料下载:5分,共10分)
1.程序的功能是?其中if块起什么作用?8 x6 _' k% } ?8 _( J- E* g# x
#include <iostream>. M* X+ ?6 c! b$ ~/ E% U
using namespace std;" f$ H' [( h( Y2 j5 g S- E
int main()( }2 G' ]- ?8 A8 Z) f9 a) o
{ int x;6 e; h- b+ Q) G! G
cout << "enter choice(1-4):";: |6 \8 ]3 R: k) z4 q( y3 O
cin >> x;! a V; n; j4 d4 R
while (x < 1 || x > 4)
{ cout << "Invalid choice, try again:";
cin >> x;
if ( cin.fail() )1 D" h2 f. w5 Y- W
{ cin.clear();0 K. ?! S: `1 `7 Z7 `% u# t' E
cin.sync();
cin >> x;' V- L8 E/ g, _
}
}
cout << "Had choice:" << x <<endl;( H% r' D3 ]* P" |5 S
return 0; }
0 v, \1 l+ W6 Q7 T
) X; a! f6 S) m6 k) l _" W
D& ]5 q/ s* r7 |' h
1 r* r1 t% ~7 z8 F
D/ [% u6 \) ]: q
& i+ r+ W' g R5 ^+ O5 i9 b
. a. i; Q- y* K- _% a0 B: {
2.给出下面程序输出结果。
#include <iostream>
using namespace std;
class Test / n) h6 n5 y L; D0 g$ Z
{ public:
Test( int i, int j=0 ){x=i; y=j;}
int get( int i, int j ) {return i+j+x+y;}9 @9 Y2 L4 ?! f1 |# ]% B. H( ^
private:
int x,y; };
int main( ) 9 W5 S) g7 i7 t$ a" ]+ {
{ Test t1(2), t2(4,6);
int (Test :: *p)(int, int);
p=&Test::get;
cout<<(t1. *p)(5, 10)<<endl;
cout<<(t2. *p)(7, 20)<<endl;
return 0; }6 S6 ^# p4 q$ }2 P1 S
/ C7 q8 ~0 L7 i5 i. O) }
& c% w7 I# |% r- N# A) v! s
五、模板设计题(第1小题8分,第2小题8分,共16分)
1. 编写函数模板mid( )可用于求取并返回3个数据(整/单/双精/字符)值的中间数。& f& U W2 g8 [: H u% o* Y
2 D- |2 C7 k+ W# ?) W
- `6 e( I- r# B* s1 O* G
( U# D% R' @/ u1 B! D# ~7 t+ d
2.如下是矩阵类模板声明,请在模板外定义功能为矩阵相加的成员模板Madd( )。
template<class T, int m, int n>2 Z' h+ e) Z6 @' o
class Matrix
{ public:' w5 U6 {0 B0 i+ @9 l
Matrix( );
Matrix(T a[][n]);
Matrix< T, m, n> Madd(const Matrix< T, m, n> & m2); ' m. s7 G3 O1 t: M0 L) \0 r! a/ M9 ]
void Mdisplay( );
private:
T x[m][n]; };! q* |0 C" N( R, t: n' G
9 E7 E% p& C: `4 h* P+ ?
& [+ a' u" P" n
, e) Q0 {3 D8 |6 J. ]2 i* r* Z
+ O' E4 f" Q+ e/ s
六、程序设计题(第1小题2分,第2小题6分,第3小题8分,共16分)% \; H X4 e$ g7 g. y
1.如下是线性拟合类linearfit的声明,其中成员函数fit(double x[],double y[],int n)进行线性方程Y=a1X+a0拟合,对n个元素的测量值(存放在x、y数组中)用最小二乘法求线性方程系数a0、a1。最小二乘法方程系数公式:
class linearfit
{
public:
linearfit( );
void fit(double x[],double y[],int n);
void val(double z[],double x[],int n);( N l: T0 o, y5 e9 x6 W Y
double geta0( ){return a0;}. Y5 L3 b) J% v! H' Q
double geta1( ){return a1;}
void show( );' q! i6 k3 Z3 v, p+ g' f, N1 G
void show(double x[],double z[],int n);: O0 |6 q/ P: O" c+ E8 P
private:
double a0,a1;/ \; ^' Z I* |4 I6 S5 E0 v
};
@0 E' a5 l) S% A
请完成如下内容(分别注明类内与类外部分):
①类外定义无参构造函数,使成员a0和a1的初值为0;
②定义<<插入运算符重载函数,以下图方式输出显示拟合的线性方程参数。分别写出并注明类内声明和类外函数定义。
" E& @2 c- q" v7 _* a
③类外定义线性拟合功能的成员函数fit(double x[],double y[],int n)
; T7 ?$ c8 o+ k
B3 T& z* D: `& [1 ]" N1 F8 }
《C++程序设计》期末考试试卷
注意:全卷请在答题纸上作答,否则不得分!
一、更多资料下载:(在更多资料下载:的四个备选答案中,选出一个正确的答案,并将答案代码写在答题纸上。更多资料下载:2分,共20分)1 }3 p1 k+ p1 z3 s0 {' V* V
1、下面的哪个保留字不能作为函数的返回类型( )。
A. void B. int C. new D. long
2. 决定C++语言中函数的返回值类型的是( )。 ( |: @) H! t! |% A' @9 g
A. return语句中的表达式类型 + j) B! E9 k" x+ U3 Y+ V- L1 K
B. 调用该函数时系统随机产生的类型 ' z4 d; J% @+ K+ L* C
C. 调用该函数时的主调用函数类型
D. 在定义该函数时所指定的数据类型 " q: l n, D' }2 Q9 J
3. 一个函数功能不太复杂,但被频繁调用,则应把它定义为( )。
A. 内联函数 B. 重载函数
C. 递归函数 D. 嵌套函数
4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个整体,这整体就是( )。
A.结构体 B. 对象 C. 函数体 D. 数据块 " v: k& _# x: ^) c1 [ G; G5 t% b
5. 下列不能作为类的成员的是( )。
A. 自身类对象 B. 自身类对象的指针
C. 自身类对象的引用 D. 另一个类的对象 ' S9 [: l3 \+ U2 [
6、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ”语句时,自动调用该类构造函数的次数为( )。 1 C6 S8 D4 k$ I0 o, ~& g6 s4 h* S
A. 3 B. 4 C. 6 D. 9 , T& r2 S# ]- u
7. 假定一个类的构造函数为A(int aa,int bb) {a=aa--;b=a*bb;},则执行A x(4,5);语句后 ,x.a和x.b的值分别为( )。
A. 4和15 B. 4和5 C. 4和20 D.3和20 , P) z, j2 N5 s( }% {7 w/ ]
8. 在类中说明成员可以使用的关键字是( )。
A. register B. extern C. cpu D. public ; Q1 l4 d, O" D& ?. t: c+ Y
9.假定AA为一个类,a( )为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a( )的格式为( )。
A.x.a B.x.a( ) C.x->a D.(*x).a( )2 d7 M7 h$ S+ x
10. 下列程序的输出结果是( )。 y, M( J0 x4 \; V7 l
#include <iostream > $ G8 L+ a, v2 \ W5 y
using namespace std;
int main() 3 o* b9 ~" Y2 ~; p% `1 k& a6 t
{ int a[][3]={10,20,30,40,50,60};
int (*p)[3];
p=a;
cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl; }; K9 c8 R1 T$ [( J( h' l
A. 10,20,30 B. 10,30,50 + b# ~0 G8 \# `* H8 W
C.20,40,60 D.10,30,609 x7 G* T+ J/ W1 L- I( {# q
二、填空题(每空2分,共20分)注:请在答题纸上做答,答案前注明题目号和填空号。
1.在C++面向对象的程序设计中,将一组对象的共同特性抽象出来形成 ① 。
2.表达式cout<<endl; 中的endl也可表示为 ② 。0 y3 e0 j7 i3 _
3.如下while循环执行次数是 ③ 。
int n=0;5 _$ @! P: |6 c0 c7 z& h
while(n=1)n++;- w7 @/ \, {# s- E9 ^3 x$ ^
4.每个对象都是所属类的一个 ④ 。" b' Z. S1 t- U& c9 U
5.用new来动态分配有10个元素的整型数组单元,并用指针ip指向该单元,应使用语句 ⑤ 。
6.函数模板中,template< >尖括号内用于表示“类型名”参数的保留字是 ⑥ 。
7.假如一个类的名称为MyClass,使用这个类的一个对象初始化该类的一个新对象时,会调用 ⑦ 构造函数来完成此功能。
8.对赋值运算符进行重载时,应声明为 ⑧ 函数。
9.如果要把A类成员函数fun( )且返回类型为void声明为类B的友元函数,则应在类B的定义中加入的语句 ⑨ 。
10.定义类的动态对象数组时,系统只能自动调用该类的 ⑩ 构造函数对其进行初始化。
+ L) r8 F+ i4 c& q1 W! K9 n6 d
三、程序填空题(每空3分,共18分)6 G" b, F, p& [& c. N8 ^
1.在下面程序横线处填上适当字句,使该程序执行结果为反向输出数组的元素:- n$ x. x& W! x) z
50, 40, 30, 20, 10; P) ?5 z: t# K# ?; S6 t
0, 7.5, 8.4, 9.3, 10.2, 11.1
#include <iostream>
using namespace std;
template <class T>
void fun( ① )
{ ② ;
for( int i=0; i<n/2; i++)
{ t=a; a=a[n-1-i]; a[n-1-i]=t; }: |9 j# ~' t8 n
}
int main( )
{ int i,a[5]={10, 20, 30, 40, 50};
double d[6]={11.1, 10.2, 9.3, 8.4, 7.5};5 u2 I' k: N: [/ V
fun(a, 5); fun(d, 6);0 b$ M3 t( g- p# a
for ( i=0; i<5; i++) cout << a << ",";9 F/ Q% t( r& d4 V& `' `/ j
cout <<endl; % }* f, g8 W2 Q: f- x
for ( i=0; i<6; i++) cout << d << ","; 5 o j Y. {2 R1 f8 K8 r
cout << endl; }
2. 在下面程序的底画线处填上适当的字句,使该程序执行结果为37。
#include <iostream>
using namespace std;0 x4 I5 ~$ U- T+ S
class Test
{ public: 3 X- T9 W: S; {" f; E
Test (int i=10) {x=i+x;}
static int Getnum( ) {return Test:: x;} / }# A$ H" P: J: Y5 k* z! L2 G) ~8 a
private:- r0 X8 z' f0 V* S# f' m
③ ;
' n0 b) `) V. N1 @) b
};
④ ;
int main( ) 5 w- C' d, E5 c: K8 U3 F
{ Test test1, test2(7); * \" v& N4 R8 G# @( }6 B& ^" G
cout<< Test :: Getnum( ) << endl; # \! B; P; }% h) u& l
}
3.产生10个[1-100]之间的随机数并输出显示,数间用空格分隔。9 L# {1 V$ P& S* ~; {! t2 r
#include <iostream>
#include <time.h> + G6 `$ g( L' H8 i! ?6 C3 j$ A
using namespace std;& h2 }: \# ?2 f
int main( ) ; X( e0 _/ g }0 B9 `
{ int i,a[11]; ! A4 i. ]; R2 S: {
srand(time(NULL));9 a# v) `1 ~* f+ F6 N7 s' K
for( i=1; i<=10; i++)
⑤ " b+ T2 L6 F; d! P( B) Y
for ( i=1; i<=10; i++)
⑥ & D# [* w3 Q: h% w& q) E, ]
cout << endl;, J1 I* J9 [3 b; w
return 0;
}
四、程序分析题(更多资料下载:5分,共10分) , H! F5 Z1 o! N+ n& e7 s4 ~5 u
1.程序的功能是?其中if块起什么作用? s7 j/ y: Q \5 K
#include <iostream>
using namespace std;9 g/ g2 ?% x" V4 v
int main()
{ int x;$ u! S1 Z" r9 {/ {7 {9 y; f' m
cout << "enter choice(1-4):";* Z9 U k$ @' c$ U& U' _( [
cin >> x;, C' r$ P- |4 R7 t
while (x < 1 || x > 4)
{ cout << "Invalid choice, try again:";1 L2 @& q# y0 I) R6 _" ]- M
cin >> x;
if ( cin.fail() )
{ cin.clear();
cin.sync();& K( E7 K, X- ?2 n
cin >> x;
}) M$ H( G# Q. C4 q% c
}* e0 k2 K5 L _; l8 f. s
cout << "Had choice:" << x <<endl;0 V0 c& G. a. v) Y# K, U' @+ y9 ^% U
return 0; }
2 J- U3 N+ [/ v/ Y
2.给出下面程序输出结果。 ' C0 }% E- K+ D7 ?. K m+ ]" N
#include <iostream>
using namespace std;
class Test
{ public: . ?+ P, U- X- \$ {9 ]
Test( int i, int j=0 ){x=i; y=j;} 5 z/ t" c4 s3 d
int get( int i, int j ) {return i+j+x+y;}
private:
int x,y; };
int main( ) ( c+ M, o5 P9 ^* t+ u
{ Test t1(2), t2(4,6);
int (Test :: *p)(int, int); 8 v, e+ j; q$ \
p=&Test::get;$ U k; p0 j+ {% V5 M6 x5 S! m8 n
cout<<(t1. *p)(5, 10)<<endl; - H* I6 V( |8 J7 I
cout<<(t2. *p)(7, 20)<<endl; 7 [; @- I/ i4 b' `
return 0; }( D5 }0 t$ v5 l% V4 z" F
* i. W! ]9 K, G4 Y& x/ e0 `( u- h
五、模板设计题(第1小题8分,第2小题8分,共16分)
1. 编写函数模板mid( )可用于求取并返回3个数据(整/单/双精/字符)值的中间数。
2.如下是矩阵类模板声明,请在模板外定义功能为矩阵相加的成员模板Madd( )。
template<class T, int m, int n>; K3 p; i! |( a F I: i& e
class Matrix
{ public:
Matrix( );& N* p5 A1 j' H& w4 I" V+ q
Matrix(T a[][n]);3 Y) C' N1 S! u) k
Matrix< T, m, n> Madd(const Matrix< T, m, n> & m2);
void Mdisplay( );
private:. z5 v9 t: s5 y* R7 |
T x[m][n]; };( [) E% I( w% a, H; O5 ?* ]
六、程序设计题(第1小题2分,第2小题6分,第3小题8分,共16分) c' w4 a4 @9 R s
1.如下是线性拟合类linearfit的声明,其中成员函数fit(double x[],double y[],int n)进行线性方程Y=a1X+a0拟合,对n个元素的测量值(存放在x、y数组中)用最小二乘法求线性方程系数a0、a1。最小二乘法方程系数公式:1 @" d- K( J7 X+ w I& Q
class linearfit
{
public:
linearfit( );; d( C, u/ J1 {. b! K* A' @7 g
void fit(double x[],double y[],int n);
void val(double z[],double x[],int n);! G: c% w# d. P$ H3 T& d$ m
double geta0( ){return a0;}% F9 x, \: ?. C& g
double geta1( ){return a1;}
void show( );
void show(double x[],double z[],int n);
private:
double a0,a1;9 T5 i) S+ F& l) E
};
请完成如下内容(分别注明类内与类外部分):
①类外定义无参构造函数,使成员a0和a1的初值为0;
②定义<<插入运算符重载函数,以下图方式输出显示拟合的线性方程参数。分别写出并注明类内声明和类外函数定义。
③类外定义线性拟合功能的成员函数fit(double x[],double y[],int n)