|
东 北 大 学 继 续 教 育 学 院
: p1 M3 l1 \# }3 x% {! f4 I: o& m4 C; w$ _
软件设计模式 试 卷(作业考核 线上) A 卷
5 K1 f m3 l% K4 V4 S$ M' A, E7 A/ R+ d% R- F K' N
学习中心: 院校学号: 姓名 1 P, _' _2 s* s/ D
% Z) V6 w" q! w
(共 页)
. b. X! v- Y( d. s" P7 X j总分 题号 一 二 三 四 五 六 七 八 九 十4 p' I$ w# x9 ~/ _0 U
得分 / N; v% H! f7 k
1 c+ f" v! i; h5 c7 s9 k0 }一:单选题(共40分,20小题,每小题2分。请将资料填入下表), }# v6 t7 ?% z3 H! C1 @0 X: u$ k# N
题号 1 2 3 4 5 6 7 8 9 10
- X J# F+ x& G7 z8 V9 r资料
# l- v) E) o, ]9 D+ d3 p题号 11 12 13 14 15 16 17 18 19 200 W0 i* P" \! b/ Z( @: u; y
资料
6 Q" a1 D1 d) d& a: V( S6 Z2 L, |- m
1.以下标识符中,正确的是: 8 d- X& g% o0 w `
A._nName B.sizeof C.16A D.xl0#2 B- L( V/ t9 P3 W( e
2.在c#程序中,入口函数的正确声明为:
! s/ s& i. p$ o9 E+ } A. static int main(){…..}5 T3 I. f0 {% m) e. a" }
B. static void Main(){……}
p9 D6 K. ^& A, B0 Y C.static void main(){……}
3 y+ b* P* m: A( d2 |# u# m D.void Main(){……}
# X# O# R/ A. t4 E& ^/ T6 g0 @/ r3.在C#中,引用命名空间system 的正确语句是:
& g, l# h& ?+ O r' Q) f3 ]1 p A. using System;
* m) W6 P9 h2 X2 C6 a& S- z# A) q3 N) A B. #import<System>;
+ T. f. N9 J9 n C. uses System;/ w1 f* D W6 I1 s2 E
D. #include<System>;- S7 t. e) E7 g6 @# s9 S: F$ N* B
4.在C#中,表示一个字符串的变量应使用以下哪条语句定义?
7 p) W9 r/ a* T# F A. CString str;
4 @6 e1 N" ^4 }/ l# B1 K* Q B. string str; : w& ]9 O& \ M8 E% Y% U9 v* }
C. Dim str as string . R# U% B# w- C2 h: X
D. char * str; 8 u! i+ m3 H2 `! P9 Z3 z, K$ z. g) T
5.结构化程序设计的3种结构是: + G4 z8 |5 a0 O. d$ {( n
A. 顺序结构、if结构、for结构
|) ~$ p i) G6 Y! M# K B. if结构、if…else结构、else if结构
' l( C+ S( h# h; z C. while结构、do…while结构、foreach结构 T) H1 Q3 y$ _
D. 顺序结构、分支结构、循环结构
" i6 d5 b! c: i- e; b! e6.能正确表示逻辑关系“a>=10 或a<=0”的C#语言表达式是
6 }( p+ f6 v& E A. a>=10 or a<=0' l, ]' ~, [* j' j
B. a>=10|a<=0
. U& ^/ v4 b) Z1 h# ~2 i C. a>=10&&a<=0
7 J6 h; x6 K3 R D. a>=10||a<=0
9 f) c8 u+ h0 u5 B7.分析下列程序:
- m0 b- F$ q4 O3 r7 F public class class4& {5 n( p$ z j! |3 d/ S" W
{0 j0 j& D0 \, f0 Y9 |2 I1 a
private string _sData = "";
' S+ [+ I; Z$ O5 L; l, d public string sData{set{_sData = value;}} / o4 d* s4 o& k
}
! F: ]" H% U8 j 在Main 函数中,在成功创建该类的对象obj 后,下列哪些语句是合法的? 4 P: ? u A g9 I7 z5 W2 @
A. obj.sData = "It is funny!";
( g. _3 ~2 ^7 K5 O; F B. Console.WriteLine(obj.sData);
- r1 `" `, ~* S' O C. obj._sData = 100;
! H0 V5 A% q0 J' O; z D. obj.set(obj.sData); 1 X3 C9 a0 f3 L. m
8.在类的外部可以被访问的成员是:
2 N1 D6 [) T6 I A、public成员 B、private成员 C、protected成员 D、protected internal成员7 J/ H) O! T* W3 S Q' C
9.在定义类时,如果希望类的某个方法能够在派生类中进一步进行改进,以处理不同的派生类的需要,则应将该方法声明成_________。, W, S4 T* D+ M; w5 b
A. sealed 方法
/ r" b' Q' \' h. S, o- m, t9 Z7 U4 m* e B. public 方法
! h2 `: Y3 `/ H) f' z4 f C. visual 方法3 C6 Y9 E, s3 }2 u$ r
D. override 方法( n6 c. R' g9 Y3 W% |
10.关于结构类型,下列说法哪些是正确的?
* ^" n5 A+ p+ D3 V/ ?: [ A. 结构是值类型- k% M6 L/ R- x) r$ A
B. 结构中不允许定义带参数的实例构造函数;
6 L6 H; ]: S. a C. 结构中不允许定义析构函数9 }. j2 G9 V3 h1 n J H
D. 结构中可以定义成员方法,但是方法内不能使用this 指针
' T& h5 M2 ?6 _# }7 r11.判断下列类MyClass 的定义中哪些是合法的抽象类?
; G9 v" J2 u! F A. abstract class MyClass { public abstract int getCount(); }
0 U, w8 q; m7 @9 r' E& W9 ^" d1 w t B. abstract class MyClass { abstract int getCount(); }: @, F2 R) s2 S/ k$ T
C. private abstract class MyClass { abstract int getCount(); }
& `& t' J1 s \& f D. sealed abstract class MyClass { abstract int getCount(); } ! J# W, k# Y" W5 \* Q
12.C#中执行下列语句后整型变量X和Y的值是多少? ( v. S+ d+ r; p; x0 Q6 r8 D* `5 k# z% M
Int x = 100;
2 ]8 j+ n9 E8 F, V) m7 U Int y = ++x;3 s E8 K. w P9 E8 Q1 r0 V% `( z y
A. x = 100 y = 100
7 N/ y; o9 _5 c/ L B. x = 101 y = 1003 V G- y# X$ h, o
C. x = 100 y = 101
- d' q$ o1 z) K5 | k$ d7 D D. x =101 y = 1011 v8 S v" R+ f, u
13.在编写c#程序时,若需要对一个数组中的所有元素进行处理,则使用___循环体最好? 5 H% G0 d7 N+ E* s
A. while循环& p4 n/ Z$ L0 B; t0 G
B. for each 循环
v& |4 H- u5 D: q8 F C. do循环
9 N+ n' A4 Z& o2 b' b$ s D. for 循环
" B5 ~1 _; Q1 I1 @$ H& [" _14.下面是几条动态初始化二维数组的语句,指出其中正确的:
: T9 w( h, {0 c4 A A. int arr5[][]=new int[4,5];0 \ D4 f) k I* ]- s: }
B. int[][] arr6 = new int[4, 5];
- e7 r" r' {" M$ A) Z3 f, p C. int arr7[,]=new int[4,5];( v Z0 B& | [/ c8 D" f
D. int[,] arr8=new int[4,5];
+ h. M' [, w3 K15.下面有关析构函数的说法中,不正确的是:
! w( f% O- E" Q1 z; _) z5 V A. 析构函数中不可以包含return语句
$ u; M5 }1 ^1 }7 S Y B. 一个类中只能有一个析构函数# ?1 J" T4 V4 \
C. 析构函数在对象被撤销时,被自动调用6 J; M/ j3 ^6 `6 Z
D. 用户可以定义有参析构函数8 N8 K* F2 P- \; F$ i5 r0 z+ R
16.下列说法哪个正确? % o( e" j3 T5 C% |7 b
A. 不需要定义类,就能创建对象4 `0 `0 g; s# d \2 \ F- I4 J
B. 属性可以定义为抽象的# F3 B3 @) u1 ?, c( K+ t6 C
C. 对象中必须有属性和方法- ^( F' f" V# t9 \) ` g
D. 常量不能作为类成员
2 i+ ?9 o9 p i$ ]17.下面有关静态方法的描述中,正确的是: 4 S% _; Q" G" O8 `7 }+ f
A. 静态方法属于类,不属于实例, o% b7 q4 |, s* S; o+ g. v
B. 静态方法可以直接用类名调用
- E5 ]0 U1 S+ \+ m! C C. 静态方法中,可以访问非静态的局部变量
& n! X" ^3 @ q& |# m D. 静态方法中,可以访问静态的变量
! S3 d4 G) @$ `6 L) n18.以下描述错误的是:+ g( v; i1 I( S1 _ u/ }3 g. J- D
A. 在C++中支持抽象类,但在C#中不支持抽象类。
2 ~( E* A0 U% p& a B. C++中可在头文件中声明类的成员,而在CPP文件中定义类的成员;在C#中没有头文件并且在同一处声明和定义类的成员。 _5 K r3 S! f+ I+ I E
C. 在C#中可使用 new 修饰符显式隐藏从基类继承的成员。
" k0 Q' P" J Y. T6 u7 j1 w D. 在C#中要在派生类中重新定义基类的虚函数必须在前面加Override。- I0 C0 ^. L4 e. e
19.下列关于构造函数的描述正确的是:
6 f! Z6 \2 {1 D0 I G7 I) W A. 构造函数可以声明返回类型。
- l: Q {8 O* [( \0 l0 M3 c B. 构造函数不可以用private修饰2 G# B8 D7 j8 J* T, E. W' q
C. 构造函数必须与类名相同
" a! q+ ]/ y9 \0 n% o3 I, N6 L D. 构造函数不能带参数
: ^5 j- e& r1 h/ f20.变量x的值为25,要输出x的值,下列正确的语句是:
5 z e. V6 r. x A. System.Console.writeline(“x”) T, @; l* f4 n0 x
B. System.Console.WriteLine(“x”); R# W( A* ]/ W5 \
C. System.Console.writeline(“x={0}”,x)% R/ y% P- Y' W( A _( q i1 z5 q
D. System.Console.writeline(“x={x}”)' |9 N8 p) p" C& l
$ [' J+ `9 ?1 j- ]: `8 g# T二:判断题(共20分,20小题,每小题1分。请将资料√或×填入下表)
$ V G( G/ K: n* A9 F8 E8 B题号 1 2 3 4 5 6 7 8 9 10& E" t u. E) D
资料
3 E7 N+ b5 {, _题号 11 12 13 14 15 16 17 18 19 204 `' H4 M' _4 x
资料
& b q3 w: V. r2 x4 ]. `) S* W( x1 E4 J
1.软件危机与软件本身的特点有关。( ); ]4 v3 v# t3 R1 c' {0 R. `2 g/ V
2.结构化程序设计的3种基本结构是顺序、循环和选择。( )
) _8 `* F/ M' @3.面向数据流的设计以面向对象分析阶段的数据流图为基础。( )) h* `$ ]; |" S+ u
4.软件测试方法主要白盒测试和黑盒测试两种。( )2 `3 N P3 ]5 K: U
5.螺旋模型包括制定计划、概要设计,详细设计和工程实施四个主要部分。( )
2 K' x% r8 u3 v F* I% H% b6.变换型数据流图的一般步骤是分析数据、变换数据、打印结果。( ). |, H% S2 [% X9 W; l4 k' {
7.对象通过封装实现信息隐藏,封装的目的就是阻止非法访问。( )
2 V# H2 s) q7 p$ c* H) H* \8.在面向对象方法中,对象是对类的抽象,特殊类是对一般类的抽象。( )& T+ s4 k# B) I; c$ I
9.面向过程方法的缺点是过程和数据结合的过于紧密。( )* D9 V. }4 z4 \ R8 R
10.高耦合是优秀设计的重要标准,有助于使得系统中各部分之间联系紧密。( )
) ^* I( O2 I* K. g% D11.消息可以用顺序图和协作图这两种图来表示。( )
1 H% q; j$ O+ q! N ~. a12.状态图、顺序图、协作图和部署图属于动态建模机制。( )
3 c7 l0 I- `- ]. ?- |5 D3 b13.顺序图描述系统中对象间通过消息进行的交互,强调消息在时间轴上的先后顺序。( )
! ]+ P; [/ K2 I" G Y14.提倡设计模式的根本原因是增强代码复用,增加可维护性。( )
+ r9 u+ T# g0 \6 a8 b% z' l15.里氏代换原则的本质是在同一个继承体系中的对象应该有共同的行为特征。( )
2 ?4 e7 g$ M: j% O3 ]4 \0 P16.工厂方法是抽象工厂模式的扩展。(×)4 I1 J% I8 W3 ]$ e$ G: S
17.提倡设计模式的根本原因是增强代码复用,增加可维护性。( )" y; g! ~9 k* a3 {- e" a* W6 O _
18.抽象类不可以被实例化。( )
9 g/ X: ?8 }& _! r& j+ ^19.当创建派生类对象时,先执行基类的构造函数,后执行派生类的构造函数。( )& ^) y% ~4 y# i& {4 F O. `
20.虚函数是可由子类继承并重写的函数。( )2 {. S' d& ^; X. `% D
* M3 Q0 F6 s6 v" z S7 i: p
三:谋学网(www.mouxue.com)(共25分,5小题,每小题5分。)
( a w1 d) o5 z2 X* Z. h1.软件危机的主要表现有哪些?6 y3 R5 C- P$ w- r: A5 p4 ^
8 a9 B# y5 h# x7 {- v
5 H+ c) y0 d$ Z/ J6 Q/ L0 |! [2 K& |2 R# r* v& u) V+ n
+ l: |" U! F- N5 j" w! x
+ A4 M) d5 c& l- t8 `: |, b# V6 N' k: ]
0 D" j& I! a; \: D0 f
2.试简述瀑布模型。
" k/ U( ]% _' E* f& z$ q _9 G
l3 |6 o2 b6 h" N- f% y
/ t5 e$ P$ W% r! p+ E! \5 a: F e) J+ Z) b1 R, }
! b! M2 f/ E6 s8 T: _& M: ?9 Z- b0 y
& t4 ~/ G; e1 b+ L6 s' P- x6 l2 `
- X9 p5 G6 ?: x5 w1 ~2 V) P6 F3 \4 y/ ?' v5 C2 N
7 o4 x& }9 @) ]
+ W5 |# @5 C) |+ v, E8 O c% h5 K* `' R' Z8 r6 S/ e
5 r+ Z/ X! J! |" F% O4 E
3 v) Z' q2 ~. p/ b2 x3.简述建立动态模型时,构造事件跟踪图的方法。
& b6 ]: T& E r& ^; b9 G0 I
: R) b5 } o: Z1 ]8 V7 R; Z! h7 {
6 b" ^9 G; G; B" q7 [7 D. D; n" y; X3 l
2 } e' M4 O- s; C
- ]$ D: c, ]' g5 u
7 O$ x) `5 z. E) U3 X
* G# ^ ~6 X# s- l" J$ \( ^3 M8 I0 f; }7 P! D" c
7 W3 t1 V/ \- X: b- r: K, H& e+ ^5 v
3 S' N: f6 `; L/ e
3 \% M- K9 ?$ }3 g4 @6 J
. ^: a: s0 K* B n$ m
4.设计模式的基本要素有哪些?1 j& Z1 y. o: v* [: Y w/ o
6 Y n. Q9 b5 Q
- Z( d3 B8 l" k- f! l
- u) F/ B0 A- l" e% p4 j+ h+ J& x
( E3 U2 P5 p6 d! J( {: Y# O5 P+ R, X$ M. Y( b8 c6 ~" J$ A. s0 X
# M1 r2 h( N, X/ w$ s
/ Z/ q2 {; {6 E# N1 ?' k" b6 I! B. j1 h1 |0 u
* w+ r& a" q/ t \& s: U
& L. A9 ^5 f2 I( x" ]
. w6 S' W: p+ b% X" v% L$ Q; K
! [* J4 g) a' Q' Z
' k- p: O( }5 k! Z5.什么是创建型设计模式,它的目的是什么?
7 P# X, ^9 }! t# Z; J- N9 @
* k" g& H: e! P0 B$ Y9 v4 |; C1 o4 C' X) g8 [
6 x# \. k# I1 e, K, c1 v6 W: J
8 t1 Q, W) m8 |8 N+ n1 ]* T
4 u$ U+ K/ |) b# J- K9 p4 R: G3 f# {- ?& I5 y* M
: n1 f% h, W( X, @
& `+ S. b' e/ @% }& x: d* r" ?8 Z& T: x3 _" r3 n
3 l3 t1 V: _$ i5 n
- D ]4 C" O6 `" H$ l- x9 ?% E( Z% ]- I5 \2 h2 Z% a+ f3 g
1 `- @$ }$ q2 T7 L5 N# T2 t% I
! R% G$ w- Z/ s
' T U3 b( d/ a9 Z5 f0 B3 s* Z' l
) \9 y! E" b0 ~3 Z, [& w N- R9 o% w
四:综合题(共15分)1 c$ a3 u# R& B/ r+ E: H! Y: k! D
1. 试举一个例子并设计类适配器模式的UML结构图。(7分)
. z" J. w0 a4 o% @: _0 C' j/ u q* [/ e6 |1 v# A
2 H) I, p* T8 u
, K# H! Q6 q+ \6 u( ~" W7 I! c( k. z
0 q! b2 l+ q* c+ {& g1 P: q6 I" x R
0 w' U* u4 @1 |) D4 i4 [( X' }) O1 Q, @/ ?
3 ~% \! e- o. M2 e# x" F& }3 |
. b8 R# O$ \& [, m
: ~& Q1 c- m6 b3 u) l" I1 j! ?! B2 `0 i
2. 定义一个抽象的运动员(Player)基类,具有抽象方法Train方法。然后以该类为基类,派生出BasketballPlayer、FootballPlayer等类。(8分)- z* l0 l3 f) c/ H9 W
% U9 q7 q6 C# ~; n: P* H
% c% Z' w" I* h& Z5 @! c. U y( y# F! r, R4 R. L- `
0 l/ a* L7 S- I& k
9 u7 x8 E) C# R; t* T# i+ y. \ i! ^) `5 r5 M& t4 g8 B
1 Y$ }7 U! F2 h
$ F# \( f' [* i, s+ A" G' E) z
! r- l! F/ i8 S& \7 s3 q+ G6 j |
|