|
《C++语言程序设计》期末考试答题纸) o/ ^( U. a s
+ b/ {; `8 [% t6 F* U9 u- G姓名: 专业:, w3 M0 x% m1 a
学号: 学习中心:3 Z$ }+ x: H* O+ B
成绩:' V F- f5 v5 G' y
9 W9 p1 u3 K b注意:请在答题纸上作答,否则不得分!/ D$ ~; r D2 e( f; @
一、更多资料下载:谋学网(www.mouxue.com)(更多资料下载:谋学网(www.mouxue.com)2分,共20分)0 V- E( r$ _8 C0 _; z% O1 U! V
1 2 3 4 5 6 7 8 9 10$ |9 T* X8 u5 y, {3 I
! X+ r+ W: p! | ; g4 _& s. L4 i4 A3 s
二、填空题(每空2分,共20分)
, W1 ]/ a% Z: p2 s1、① 1 U- q3 b; a) r8 y9 W
2、②
( |( q) r# |0 H% @2 g; \0 |0 N) T3、③
' S! ~0 m, Z# {/ Y4、④
8 w3 q9 W, D/ M+ n& Q! Z7 S; Y5、⑤
2 S/ } N6 o% u. }0 g6、⑥
U7 h9 B6 v* I0 K- h0 [# r. v: {7、⑦
+ I% ]$ [8 |4 O& k8、⑧ , K4 m8 f0 {, l7 P
9、⑨
% A( B/ B; `& Z% Q10、⑩
$ w% b Q. i# Y* L三、程序填空题(每空3分,共18分)2 s0 W! @, F" e
1、① 、② 6 V5 [1 o, A- G: v I" q
2、③ 、④
- m0 J. j5 c# c3、⑤ 、⑥
7 S0 y' h: U/ m/ r# o; c' \3 J5 `+ q; l四、程序分析题(更多资料下载:谋学网(www.mouxue.com)5分,共10分) 3 d* s9 a9 X& m' y
1.程序的功能是?其中if块起什么作用?- O* Q0 M* c/ T: |7 K
#include <iostream>
1 P9 G' {& C2 m; q [' pusing namespace std;
* \: Q- p* x8 N, i' O1 P) sint main()
5 S9 M! K+ p6 k2 c4 F% N{ int x;6 P; m: e' m: [: _
cout << "enter choice(1-4):";
' I$ s0 Z4 f: `4 `$ X) D cin >> x;: O3 P! `8 F: o2 v6 G, K
while (x < 1 || x > 4)% Y) p4 i9 |+ N/ F0 J0 J
{ cout << "Invalid choice, try again:";
$ }: J; d* ~6 A& K8 i cin >> x;; b6 q; D% r$ E+ J
if ( cin.fail() )) ?6 a7 }1 L) Y& V+ @3 y( Y
{ cin.clear();
* ?. H' _' U" q: f; h cin.sync();8 j: M' g8 l6 j$ u
cin >> x;
2 e/ r' i* x+ R' V, z7 S' s6 g }
& Y$ g2 K$ r3 U+ g; h }
) t3 x/ E7 n9 d) W: ^, pcout << "Had choice:" << x <<endl;
' L) h |5 v& D, Greturn 0; }
- g( i3 f! N6 V+ J8 N. Z7 ]: K! B' K5 D2 L( d; Z
. R5 {' c9 s# \+ ~
8 o7 M7 N6 @. n C I# H* h- \4 o8 W9 ^* R0 @: Z
9 V2 z0 i: Z; k# ` |/ {0 e: Q- Q( `/ C* `8 ^3 U4 t
1 w% p# C5 E+ L: k4 p0 d7 g( W: A
# E1 H% g6 d/ v2 U# W5 U4 G9 o3 B
0 L% {* r: a' [' M) U" s$ `7 H5 I) x
% h7 ?1 Q' p5 W1 ^
2.给出下面程序输出结果。
& c2 [1 Y8 V; T. t4 L& p#include <iostream> 7 ^0 m3 I+ j- A
using namespace std;
/ ]& @* @ ]: [; Cclass Test 0 F9 r/ Q1 `. _7 |
{ public:
' s4 L2 }- w" y5 GTest( int i, int j=0 ){x=i; y=j;} 1 W& }$ q0 G% v9 R/ I
int get( int i, int j ) {return i+j+x+y;}
" a- t: U; u% C! l9 P( @private:( G/ w# ?* K. ? F/ w. E4 X, @) \
int x,y; };
- m* s7 S" w' Xint main( )
* [0 ~, N$ m6 A{ Test t1(2), t2(4,6); / M- \0 r& c N! t' d/ `9 y/ D
int (Test :: *p)(int, int); % b' T0 @3 E4 j6 K: c2 F7 x3 `2 ]
p=&Test::get;' Z, a6 Q" P( E; ]0 y
cout<<(t1. *p)(5, 10)<<endl; / {/ O( _0 K% ^ L1 _* {
cout<<(t2. *p)(7, 20)<<endl; : f8 M1 r7 v5 e! C
return 0; }# h8 s8 Y' s5 o6 |
: G; P7 q/ x+ t- T0 X! t+ W: ?
" \4 c, ^; h2 Y& l
, w8 k4 c: B" Y五、模板设计题(第1小题8分,第2小题8分,共16分)
. {, d% ~3 ? F' [1. 编写函数模板mid( )可用于求取并返回3个数据(整/单/双精/字符)值的中间数。0 q5 a0 b7 K; [* h
# l2 j' c3 v3 v j1 }; A1 Y
) h) b! J7 ]( K' a0 i- y8 ]9 w _5 r7 I
" S: T' E' s' O7 g
* a. E: Z% @0 t3 m
1 x5 D+ Q. i0 v, F0 t! C
+ G( ?5 K. p/ s+ R2.如下是矩阵类模板声明,请在模板外定义功能为矩阵相加的成员模板Madd( )。
% ~$ X, F* P+ f2 Y/ @ {template<class T, int m, int n>
% U$ n) Z5 y5 h% y$ K, |& nclass Matrix
1 r6 y, [9 i+ L{ public:
% t% r2 m% r% y2 {3 d Matrix( );
, S$ ~" c7 i0 ^ Matrix(T a[][n]);: k+ x9 q1 X7 I4 c7 R$ h1 E2 l. ~
Matrix< T, m, n> Madd(const Matrix< T, m, n> & m2); ( W4 S7 q4 q: P
void Mdisplay( );
( U9 Y- T- O/ n. C1 G; F: W private:
+ {7 B' ^" N- u T x[m][n]; };$ A4 N" K h% L: X m# d6 b
% A4 M1 r6 I* F8 _
; t7 F0 E- j6 p$ j
& @" S7 m$ K% R' o* o" A l6 s1 _
$ }. R7 r# }& e: x+ g( q: f3 ?
+ m1 f$ a. a$ \, }
' m8 o( L% d. Z2 C: ^% }, f/ I" ~# I. r
3 y- P P2 V/ Z6 x0 f9 L3 ^! J
, n! f" V5 P; ~) C5 [; @
六、程序设计题(第1小题2分,第2小题6分,第3小题8分,共16分): r) M( y/ y( ^6 r- @" u6 G
1.如下是线性拟合类linearfit的声明,其中成员函数fit(double x[],double y[],int n)进行线性方程Y=a1X+a0拟合,对n个元素的测量值(存放在x、y数组中)用最小二乘法求线性方程系数a0、a1。最小二乘法方程系数公式:
p, @& i/ Y" X/ f4 oclass linearfit
2 ~# z+ @2 z! Z9 g$ H: r0 d' M0 B{# w/ T* [. U3 w( ^( `
public:
: N# X5 \8 x7 g" } linearfit( );. f' V; I `+ F- }! N% |
void fit(double x[],double y[],int n);
. n; q h' X: P2 e) t, z void val(double z[],double x[],int n);
9 n: g' p1 P- L& b9 _" }- @/ s double geta0( ){return a0;}3 x' V7 G! g, y4 ~- a: t8 b& Q
double geta1( ){return a1;}
4 Q; o' s. @ _7 o2 f6 E void show( );
$ J4 m0 }; Z1 q2 `( ?" w void show(double x[],double z[],int n);
% z$ a( m7 r' B& a( I4 r6 `2 Y private:6 w6 z6 h3 W3 Q
double a0,a1;
" _0 Z* J$ k3 F A0 W4 F8 X};2 W6 ^2 [+ }/ R% N
l, V! k/ k: j. {, r
! w6 r" R, ]. _4 h( C4 W3 E请完成如下内容(分别注明类内与类外部分):8 V" ^* b) N2 t1 b9 U( K f7 v
①类外定义无参构造函数,使成员a0和a1的初值为0;
3 \$ \9 w: s* u, x②定义<<插入运算符重载函数,以下图方式输出显示拟合的线性方程参数。分别写出并注明类内声明和类外函数定义。
" D3 D2 {* I& ?$ V3 O8 R
9 h; c, C) T, |. t③类外定义线性拟合功能的成员函数fit(double x[],double y[],int n)+ z, i7 p. v4 y/ D2 P
& @" c5 v6 |* W8 v6 s9 D0 |. o
0 D7 U+ h2 r' M% i9 @6 W, t# D& p
, ]1 r) Q& N& ]2 z' f 5 u1 u# P r' O
《C++程序设计》期末考试试卷, S- p7 R# L: o; k
注意:全卷请在答题纸上作答,否则不得分!
) S9 \8 Q% K/ M3 l一、更多资料下载:谋学网(www.mouxue.com)(在更多资料下载:谋学网(www.mouxue.com)的四个备选答案中,选出一个正确的答案,并将答案代码写在答题纸上。更多资料下载:谋学网(www.mouxue.com)2分,共20分)9 Z- u! k, W/ r; B
1、下面的哪个保留字不能作为函数的返回类型( )。
9 k% @7 J8 L; H0 N/ \A. void B. int C. new D. long
9 _1 M2 X& N1 k* l6 @2. 决定C++语言中函数的返回值类型的是( )。
1 u) p' Z9 g0 `. n. J' g9 yA. return语句中的表达式类型 , [: @! }& S+ S9 F; A+ @
B. 调用该函数时系统随机产生的类型 7 n$ p1 m% x' {! M
C. 调用该函数时的主调用函数类型 , X1 y. H: y6 [9 ], k% U! J
D. 在定义该函数时所指定的数据类型 ; J& @. ^5 ^# d5 _
3. 一个函数功能不太复杂,但被频繁调用,则应把它定义为( )。 & D9 c* I, b, S3 s- D
A. 内联函数 B. 重载函数
) Y! r4 i% S v& j( | @C. 递归函数 D. 嵌套函数
6 G6 D4 p( P3 Y+ F7 s4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个整体,这整体就是( )。
- S" @; y+ A( |2 d( N% a ?A.结构体 B. 对象 C. 函数体 D. 数据块 $ D/ Q' @% b) d$ t( ?
5. 下列不能作为类的成员的是( )。6 R/ h: l% ~. b
A. 自身类对象 B. 自身类对象的指针 8 x8 p. P, T; }2 S1 t: g
C. 自身类对象的引用 D. 另一个类的对象 ; `. p$ e; E7 y' @. Z
6、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ”语句时,自动调用该类构造函数的次数为( )。
_. b# ]' ~5 TA. 3 B. 4 C. 6 D. 9 4 J6 T; k* j% l& K$ G8 E5 ~$ K
7. 假定一个类的构造函数为A(int aa,int bb) {a=aa--;b=a*bb;},则执行A x(4,5);语句后 ,x.a和x.b的值分别为( )。 * j/ n) J2 O3 j) n* B& E/ m. @
A. 4和15 B. 4和5 C. 4和20 D.3和20 6 T( h' Z7 i- A$ O/ w7 a
8. 在类中说明成员可以使用的关键字是( )。 " `7 {5 Z8 c) v& u$ g4 U% d K! S4 L
A. register B. extern C. cpu D. public ; {( ?. H$ ]" u- ?: s
9.假定AA为一个类,a( )为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a( )的格式为( )。0 d! O' A+ [8 X$ g6 G
A.x.a B.x.a( ) C.x->a D.(*x).a( )
% w/ h) n' u" X. a8 I D9 U o10. 下列程序的输出结果是( )。 , b7 ^8 @* I; b
#include <iostream > ( X+ u8 q- o1 w2 K, ^
using namespace std;
5 P O8 O5 o' {$ C5 G/ qint main()
& Q3 y+ w* `- P) p9 S! f- N7 `{ int a[][3]={10,20,30,40,50,60};
% t4 V, T; L3 z" a/ l int (*p)[3];* ?+ D5 X% o2 h3 ?7 o
p=a; 7 r7 {$ M: G3 H, B1 g
cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl; }
3 M8 \) i# \# p* R, X4 cA. 10,20,30 B. 10,30,50
- F( f# t) Z2 z MC.20,40,60 D.10,30,60
, C# X$ f7 r2 n3 G4 _# U; x二、填空题(每空2分,共20分)注:请在答题纸上做答,答案前注明题目号和填空号。4 w7 J2 D0 g! g D ]2 E+ `' |# K
1.在C++面向对象的程序设计中,将一组对象的共同特性抽象出来形成 ① 。* Y5 w g: L# x% D5 T
2.表达式cout<<endl; 中的endl也可表示为 ② 。
+ o& V+ V9 l0 i5 G* f% n. T0 h3.如下while循环执行次数是 ③ 。. m- z+ Z* k$ H- v, o
int n=0;7 J U; |3 t* S- Z0 W
while(n=1)n++;9 {; c' C$ }2 u1 e: G6 s" z5 ~, A {) I
4.每个对象都是所属类的一个 ④ 。! J Y+ j+ D$ k" }3 L* [: Q: D
5.用new来动态分配有10个元素的整型数组单元,并用指针ip指向该单元,应使用语句 ⑤ 。
" _8 D1 P$ m8 W6.函数模板中,template< >尖括号内用于表示“类型名”参数的保留字是 ⑥ 。7 J/ d+ l8 |+ T/ B
7.假如一个类的名称为MyClass,使用这个类的一个对象初始化该类的一个新对象时,会调用 ⑦ 构造函数来完成此功能。
6 N2 ^1 e [. n/ D% K8 Y8.对赋值运算符进行重载时,应声明为 ⑧ 函数。
5 p% P0 x* n% X% ^9.如果要把A类成员函数fun( )且返回类型为void声明为类B的友元函数,则应在类B的定义中加入的语句 ⑨ 。 {4 T: z6 i2 H2 u1 [# r2 M( y
10.定义类的动态对象数组时,系统只能自动调用该类的 ⑩ 构造函数对其进行初始化。
% ]' ^& I0 |0 k- P! ^" B9 f3 S8 g# _1 p0 {+ @" B
三、程序填空题(每空3分,共18分)
; j# O, I _, o$ B1.在下面程序横线处填上适当字句,使该程序执行结果为反向输出数组的元素:
9 C: F0 L; T5 E; w5 I9 [; x" i- C+ T50, 40, 30, 20, 10
4 Z. x8 Z# B w0 a3 F3 Z0 ]0 W0, 7.5, 8.4, 9.3, 10.2, 11.1. x5 d# h! [8 W5 u
#include <iostream> $ b2 u: H9 n' @8 k- o# u# x: s
using namespace std;7 G* h& Y! C' E- I! C5 E
template <class T>: p7 J4 R+ Y3 j: o3 @
void fun( ① ) % _* r! n! I/ _- D& ]
{ ② ;5 v) U* {( o h5 a0 r0 s5 U5 }' B
6 o9 Y+ J" y/ e8 k/ O% s. c
for( int i=0; i<n/2; i++)
- y7 g" H7 b/ I) D{ t=a; a=a[n-1-i]; a[n-1-i]=t; }
' j* B" q# s w! W D}1 V8 F& O& m$ n( L( t2 @
int main( )
1 ?$ G8 j O, B. V- R{ int i,a[5]={10, 20, 30, 40, 50};/ d1 i, c0 O0 M p: V6 E" b
double d[6]={11.1, 10.2, 9.3, 8.4, 7.5};
2 H5 t" U' F9 J) o$ V/ Pfun(a, 5); fun(d, 6);5 X4 F P4 x$ O! o9 O
for ( i=0; i<5; i++) cout << a << ",";
$ Y% g: E& _: O7 y# Dcout <<endl; 6 w+ C, G/ N }% b# M
for ( i=0; i<6; i++) cout << d << ","; " H* W. S( `/ K7 s
cout << endl; }
9 ~( I* ~. F N! j/ F/ S2. 在下面程序的底画线处填上适当的字句,使该程序执行结果为37。 7 f( O3 A- M: K$ p: E/ x
#include <iostream>
/ s% f4 B$ {$ susing namespace std;
0 w3 B0 x$ K5 D4 t# V3 h* b6 Q& dclass Test
4 ~- K+ I( L! Z{ public: 7 }! D l( W2 t. h" g. Q
Test (int i=10) {x=i+x;} 2 d- X2 V. f+ n9 a. Q& b' P
static int Getnum( ) {return Test:: x;}
; ~ i; [# g- Q/ w- h private:( `/ a! [$ D) b
③ ;
3 z+ z0 h+ r; R" K0 [' q
* p1 r& s1 K) m( P6 B2 A/ l: y7 b};
+ N0 { p2 @: w ④ ; 6 d$ `& G, O' i1 `
int main( )
7 m0 {1 \* f$ K{ Test test1, test2(7); / S! P h9 p" I* `1 e5 h5 E/ }: A
cout<< Test :: Getnum( ) << endl;
- O( T- Z( c- h# m0 V} , F8 U- J! i9 e; s7 J7 A! R
3.产生10个[1-100]之间的随机数并输出显示,数间用空格分隔。
# u3 p4 ?% n! ]6 X6 U#include <iostream>
1 z+ J( k6 O! m# ]#include <time.h>
" m0 M9 v: ~( P5 ~ rusing namespace std;, L% K2 i8 S+ Y1 n v
* G" f6 K5 Y' L0 n
int main( )
, ?9 K* v+ Z2 P5 h& I{ int i,a[11];
5 s! {9 `' @+ @1 h: z, X$ U% N2 n) a8 lsrand(time(NULL)); Q1 y1 e) x, C7 F$ c, B9 ?
for( i=1; i<=10; i++)
2 w C R3 n7 H; d3 w ⑤
" F* d. \0 [5 e* |2 j0 Nfor ( i=1; i<=10; i++)
& c: k5 [+ p3 p3 k3 ]' H1 {- r ⑥
( M6 z* ~ K' S8 Acout << endl;
3 ~$ r( p/ a; L7 y: s: `$ Treturn 0;
# t3 P% i8 |4 X! N}
' [3 G& ~" u2 o5 o* ~7 V
3 a# o `5 v5 T四、程序分析题(更多资料下载:谋学网(www.mouxue.com)5分,共10分)
* C! c+ A- N! t' x8 m 1.程序的功能是?其中if块起什么作用?
$ H2 {+ k# Q' R# w5 d) S#include <iostream>
! P0 d5 Y9 Q: [$ vusing namespace std;4 z5 r5 A) R) B
int main()
9 Z+ j: r& F# Q$ z% [9 W{ int x;
" l. c2 W8 d& z8 O! o3 p cout << "enter choice(1-4):";
; \: d* W/ ^+ F& L% |1 W+ A. E P cin >> x;
, [% z s1 \6 m0 Y! ]5 k- H- P) P while (x < 1 || x > 4)7 T: Z0 n* c; y
{ cout << "Invalid choice, try again:";
. D5 A" i5 ^& w cin >> x;# b) y( ~4 a% X+ u' f f U
if ( cin.fail() )
2 Z% n l, j! x: H3 e2 T6 U/ C { cin.clear();8 `' h" E7 |2 k+ o$ Z* w
cin.sync();8 p) [( b; d+ K8 e+ g8 ^ M
cin >> x;
$ X4 J& \1 {; b! Y8 S. E }3 Q: T) E9 G. X
}' a6 {/ ?% l% G% L- L- n( I$ B
cout << "Had choice:" << x <<endl;0 }- h* C. ~2 ]( B/ Z
return 0; }/ E7 q- S2 D r
3 D! V4 E1 J0 j, e6 B7 ~2.给出下面程序输出结果。
* J' f6 ? Y, w5 C#include <iostream>
- S0 |! ?( f$ `; yusing namespace std;
6 Y: o1 [6 M( L) J2 Mclass Test 7 G h& U; P2 ]
{ public:
4 ~/ r3 q s. @! yTest( int i, int j=0 ){x=i; y=j;}
$ g2 m3 T& H. h) I1 q3 ?int get( int i, int j ) {return i+j+x+y;}
) ?) [3 v) D, @ J' z( pprivate:' I& ~+ _+ d( l
int x,y; };
- P. s1 e2 o T7 D* yint main( ) # P @: N# u0 `! S. \
{ Test t1(2), t2(4,6); ) H/ D N5 R; G1 a7 _7 W
int (Test :: *p)(int, int);
* V4 ?& q( H9 ]" D7 zp=&Test::get;
- @5 z, n$ \8 ~3 x' i% Tcout<<(t1. *p)(5, 10)<<endl; ! i9 a+ j9 A _8 H! k5 v
cout<<(t2. *p)(7, 20)<<endl; 3 g) q4 v0 Z) {# W. ~" |
return 0; }
$ p5 \; T I. b, Q1 H* n" a, ^+ x- ^& Q9 I) N3 u4 K ^' B
五、模板设计题(第1小题8分,第2小题8分,共16分)" d# t7 I! k3 k8 R
1. 编写函数模板mid( )可用于求取并返回3个数据(整/单/双精/字符)值的中间数。# }/ B! y4 z, D: R9 `, d2 s4 x
2.如下是矩阵类模板声明,请在模板外定义功能为矩阵相加的成员模板Madd( )。
* p7 V# m8 A5 y: {( l( l# Ctemplate<class T, int m, int n>8 I3 k, @: v( C- {' C3 E
class Matrix
* Q$ W8 h# n% j* h{ public:4 _' {. [% n9 ~5 e0 i
Matrix( );
" ?3 A* W0 J4 r Matrix(T a[][n]);
z. o& J: z1 r8 R2 t m& ~ Matrix< T, m, n> Madd(const Matrix< T, m, n> & m2); ' s+ T& x/ |$ C& ^
void Mdisplay( );* ?! Y! W& L3 u0 w6 D: ~# E1 [; m
private:% i% N; c- c9 F: p% v
T x[m][n]; };
9 V( O0 y: a4 E3 i( Z' _ F3 \! B0 j) W% U. h7 n1 G/ D' i
六、程序设计题(第1小题2分,第2小题6分,第3小题8分,共16分)$ S! R: i" F* h% X0 j+ b) F3 W
1.如下是线性拟合类linearfit的声明,其中成员函数fit(double x[],double y[],int n)进行线性方程Y=a1X+a0拟合,对n个元素的测量值(存放在x、y数组中)用最小二乘法求线性方程系数a0、a1。最小二乘法方程系数公式:
9 _2 g1 D2 j0 u; f/ dclass linearfit) N3 M O+ z' P3 N
{
4 i( r h3 i' l public:3 Q% U/ C) J7 K9 ^$ ^7 \* x
linearfit( );4 Q, ?, a- {, P
void fit(double x[],double y[],int n);+ _# f2 W9 U/ L$ H
void val(double z[],double x[],int n);6 s% c) K* N% J, r- w1 b
double geta0( ){return a0;}
+ p+ [. q( o# T5 [/ w double geta1( ){return a1;}8 a, I- a w0 G5 U7 }9 L0 H0 @- C
void show( );* @% ^: _2 m# f
void show(double x[],double z[],int n); M# F' _. p. U# w/ b. J; t
private:. b& b' P% V3 Y+ q
double a0,a1;
/ V$ n% U& D+ u+ b; P) x% j" ^; F5 \};
, d( O1 b0 ^4 @+ g1 Y
/ P! [7 h! V7 y# b
) E$ }2 I$ L4 y( o9 W/ S请完成如下内容(分别注明类内与类外部分):
$ m8 h1 K- J3 H①类外定义无参构造函数,使成员a0和a1的初值为0;! f0 u8 R& B4 h9 y k, d2 A
②定义<<插入运算符重载函数,以下图方式输出显示拟合的线性方程参数。分别写出并注明类内声明和类外函数定义。$ q) a/ S+ M2 F2 b! p, f
& u+ R5 g. P. f③类外定义线性拟合功能的成员函数fit(double x[],double y[],int n)
) `0 u& G% b% _9 J
m1 V, w. h! r( ~8 U2 c/ [# T, c; h5 ~
. | S! p' a2 u' a* N8 ~6 d. E8 h) t6 s# l( D
|
|