|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。. O- h1 h6 M% O6 h3 x. `2 w/ c A
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)9 U( h4 m z2 r* O# H4 B: D7 y
% L }( k! k9 O8 G
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
* s0 j9 m7 x7 u" w5 ]: Fchar *strcpy(char *strDest, const char *strSrc);
" V$ g5 G& ?% n! {1 V) X4 m; L }3 E7 W( Q- g
很简单,是吧?再看看别人评分标准:+ _, K3 G, h" n+ h. \
char *strcpy(char *strDest, const char *strSrc);
0 i. Z, A% \& w* V4 l; b) V0 ~: `% ?
{
5 c+ F4 o) ^' K4 I# h/ w) k7 w- j" Z& _# B
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
1 x: ]! h$ w: u2 b, [9 I0 O
& y3 \' a; B x8 S char *address = strDest; // 2分2 k& H$ z @- k% F
( a% Q8 O& ]( e7 M! K while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
3 i# l6 s3 w; r6 F" |; o3 F Q
! @: u/ P1 N1 |# m( W! V$ x' ] NULL ;
3 _. G% y( b* C- F
5 v/ P$ J$ @+ o9 | return address ; // 2分
8 ^0 s0 z* M7 X' q
! T) s' f8 v3 B) s4 A/ ?5 D9 \}+ Y1 O. x# Y: z7 M
3 d8 x/ P; x8 b |8 f. v; ~不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。! B! p6 ]4 {9 j2 w1 G3 P
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!
! K* x' {9 N) a( Z一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
, I8 \0 m- y+ T/ k) W4 T
+ t4 `: I$ R `! C
; P$ r: K! K7 i/ F6 A, D: e
5 X% m1 q6 E5 L$ h请写出 BOOL flag 与“零值”比较的 if 语句。(3分)+ q3 v7 X; K/ s6 N4 c# k) ?
3 v+ M9 v' s; s$ Z( P2 l. g/ o标准答案:! H3 g) i' f7 E
; o& `) C' ~& y: y
if ( flag )7 ]# d0 {, F3 p. s
6 q% n4 Y9 B$ w0 C/ ~8 L if ( !flag )
# e @0 e% D- S9 O! f: T; \3 j如下写法均属不良风格,不得分。3 i! I9 t1 T/ x8 X
_3 E1 Y! l- c9 i' T7 x8 Z if (flag == TRUE) # p+ z& x+ q7 f! ~) [
5 W, d! e) G+ N% @* ^
if (flag == 1 ) 8 e. s& _1 \1 h s# Y& |/ V/ p7 l
* g- n& \; L- G6 O
if (flag == FALSE) + b1 R9 j, X8 H! ?
2 U5 i' I/ p) [, E, \% F1 i if (flag == 0) 8 F; y) C3 J4 ]$ r
& `- J2 [+ b* f, r F% h请写出 float x 与“零值”比较的 if 语句。(4分)! S* U% l& y7 `% d2 `! H4 b* N
4 {! m6 i5 j: Y5 o; S! p标准答案示例:
, o9 n0 T% U9 E" g; `- t
8 \) ]; n1 X2 ]8 n4 _2 Pconst float EPSINON = 0.00001;9 s' U( ~+ Q% ~% Q
8 x# Z) w1 O% ?4 }% F+ `# aif ((x >= - EPSINON) && (x <= EPSINON)
% i, o0 `, n" ~. {0 c/ f* [/ T
/ r* h N/ E+ m5 e4 ?不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。& q5 l: q. P6 m: R2 O A7 y
2 b" S; h: R! w( ^ 0 D A5 t. f u% l# U _. v' t
$ ]& i! C5 Z e S5 y f0 n6 i1 Q1 a: a) S5 r( X8 F
如下是错误的写法,不得分。7 {' w4 z' m7 R7 \) S
, F" A E; [( @/ L8 b9 f4 u
if (x == 0.0) : z- f) J# m$ ?9 X! E5 t8 |
) [( Y1 l6 d8 O" C4 F! _
if (x != 0.0)
- k. S: F# d l) p# i3 H
% Z3 k3 B: }2 e, p
3 c+ F- o. M& J' r) e
2 B; X- G" B s9 Q4 O( y请写出 char *p 与“零值”比较的 if 语句。(3分)
0 U" U0 I% m, ^9 ~! x
. T6 y. A9 |/ D y标准答案:
2 {6 J/ }% b6 Q# Q4 H7 q; R9 X% s# q% i, v6 }- `( s4 h' u
if (p == NULL)
9 b' o; h" w7 j9 c; q2 ^, ]9 M/ E
# [( L8 o- _4 f: o) K* J7 Y7 g if (p != NULL)8 x/ h( G' e9 e
如下写法均属不良风格,不得分。
' L! y) r, ?' S% ]. a& b4 }9 u6 P i, |6 L8 s4 e9 F
if (p == 0) 8 ?. G6 [: T9 m$ n8 A/ p
3 X* H5 F7 x9 t* \2 I if (p != 0) : v( s. U' Y( e3 g/ s
: p2 x- t" z" _ m' J, O if (p)
) V8 U X. Y) r7 J
0 l' E% `2 [4 p: l) S if (!) " A# }3 V# k! {0 s( A$ E
0 g. E+ S1 l1 y7 O4 f2 q+ p( ]4 \看到了吧? |
|