|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。
* o0 ~7 O3 ]( E, J, i8 E u现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)! B L2 z5 z) J% s( O( U' b3 M" l) R! g% }
9 C2 \8 p2 Q/ ]8 o7 ?" q(1)不调用C++/C的字符串库函数,请编写函数 strcpy
( B& D8 s& j4 Y# ^+ q0 e2 I& r/ Ychar *strcpy(char *strDest, const char *strSrc);, f! I/ Y5 R6 _: k8 F" L0 t+ i6 S
` [3 _. l7 |; X; ?
很简单,是吧?再看看别人评分标准:
. j! @/ e- g% z& m. K& Q( Jchar *strcpy(char *strDest, const char *strSrc);( c) P$ @' b& O
: g& U1 y& y4 G0 \6 ]! q6 f{* }" D8 ], L) p, D+ }& T" i+ H9 C0 Q
# V* n3 V- @7 c- `. d
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分7 r9 z+ X8 }$ c) N6 Z% G. z
4 C4 x. g) k6 K char *address = strDest; // 2分' t6 D3 m, a9 U5 d s& @
! S# W, f) S# P2 R2 g8 H- H/ T) W; g, I
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
- E4 k( N; h7 _! r4 a- `
; c8 l# o& T, p3 c1 k [. p. S NULL ; : F* x9 ]# i B
( Z9 f! z) V, \5 l- y, `
return address ; // 2分
! ?6 t o- h4 I5 E) ^
/ L% x0 e, o z; C}0 @1 Y9 u9 G. [" \
2 r$ M8 L% Z5 D1 X不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。9 S1 m. V! m; o) v7 f/ N
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!+ _$ y: ^ h& `5 t2 y8 P
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)4 K- A3 N* I5 g, _* U7 y; `! v! e
! l+ l, G8 O5 h5 B! j8 S- r
; u! x9 {; G- f8 f) [& v
# X. j, @- C& s8 q请写出 BOOL flag 与“零值”比较的 if 语句。(3分)4 `% X, k+ A8 @" J3 \+ t4 ^) _
8 U2 W" u' w \
标准答案:
* V3 {9 T; }$ d% W+ ~1 I" |. L, t7 h' N: b
if ( flag )( m, g7 q6 Q$ W% v& j, |
6 C# V$ {0 T5 Q8 \ Y$ y
if ( !flag )
$ Y% T8 P1 ~8 Q如下写法均属不良风格,不得分。9 A+ G r+ q6 h/ ~6 {6 V
+ P6 e; q. l/ v6 \7 c
if (flag == TRUE)
, \8 j$ G; X. f0 z6 W
; d/ E8 G& [" J9 t if (flag == 1 )
" v; G2 k- X: M0 V5 A+ @5 K. k" T, P N/ ?# S
if (flag == FALSE)
. e- ]2 y) m6 w! `# o! ^6 U1 O& w0 ^
if (flag == 0)
% t( z# }7 m! J+ c9 j
/ B! G: S# ?4 s, {; g: L请写出 float x 与“零值”比较的 if 语句。(4分)
1 c* J; K% z# p. I/ d6 e+ f0 i7 a& P* y
标准答案示例:0 d, H4 z) Y. f+ ~3 b6 [4 m0 S6 d
1 U5 d9 |# f) l5 ?$ Wconst float EPSINON = 0.00001;) i' s1 s) {- B* Z L
% H8 M/ Y2 y7 \4 C: ^4 ^0 Tif ((x >= - EPSINON) && (x <= EPSINON)
$ F. D- y7 W; \, A1 Y( i' b! ], u7 {4 e1 r, e9 a+ s
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
9 R- C0 W3 d) ~/ g; H7 [$ P: P7 |( @
, a2 P0 H4 X+ h0 y: m& C 1 x- b1 k) D( Q5 K* s" i+ x$ g7 [4 D
1 `3 p# ]8 k% z" f- b W. X如下是错误的写法,不得分。* \+ l' t8 N! P8 k( w$ K' U4 e
5 ]4 ^5 k3 |% U$ T, W a3 e6 z; \0 C
if (x == 0.0) 7 T! @+ E. a) R* l1 L4 w6 n. S
( V. M) z( ~6 U) @
if (x != 0.0)
7 z, ]7 O: a+ D" A" z" R: q# ~
) ?, i# d/ A( }" D& i" ]6 g 9 g* \8 i3 P: r# M4 V4 M
: l* Q- _4 S% B6 ]; n% s( f请写出 char *p 与“零值”比较的 if 语句。(3分)
3 [- R6 j2 N6 X+ O1 v t$ N- M, I# t- {3 H. v
标准答案:
4 V% o( T! p) s9 x2 U3 l J- M! F8 r' Q* f
if (p == NULL)
- D# e: R4 f. ^2 J: f7 H- T5 C m4 n4 `
if (p != NULL)8 u0 R7 G/ e) e) x, K
如下写法均属不良风格,不得分。3 g1 U7 K8 o, O" \2 Q; R- r3 d" d
9 n8 ~! y1 ?8 w) w: H. G if (p == 0)
9 v+ q/ S4 G6 [, U; a# y! a: s1 S, b8 F! e
if (p != 0)
0 H0 B/ I+ Q) j. g8 J
R3 u1 N4 S% l$ h* K9 n if (p) 1 C- g, s9 z0 h1 j, _
" d- M, u$ a+ B+ K* Y8 o if (!)
3 S! s2 \8 V& e' r6 `+ n3 P, H
0 w9 i, M2 v1 {0 ~: V( c看到了吧? |
|