|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。, d7 v3 ^! O$ m4 b/ Q$ d- J
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)1 ?9 E- M" T: ~2 o& @
7 |1 t. k( u( Q$ g, s0 M(1)不调用C++/C的字符串库函数,请编写函数 strcpy4 H* q/ m* m- A8 F& T
char *strcpy(char *strDest, const char *strSrc);- C2 B4 M$ o# i7 {( V& A# l0 G8 R% ?
8 `7 B5 T X; x( b很简单,是吧?再看看别人评分标准:
8 W8 L! Q. ^% l* ~1 [/ kchar *strcpy(char *strDest, const char *strSrc);9 `, u; m% a/ m$ ^ Y; w9 V
) l) l& G. p" G
{) Y5 x7 M! K& F$ ] g: E
5 W: u% A. ~ ?. E1 J
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分 k( Q) }6 K: S
3 x" t* K! S$ Y3 f# q8 `+ U char *address = strDest; // 2分8 }; Q/ D+ ~" g( y5 T; X
( S' m7 R- Y" f. |" R while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
( [4 F8 u; B6 `" g' f: E y& n5 J) x6 I f8 M4 e' f* ^
NULL ; 7 X) F6 l l r# }2 Q
, I* k$ R: i; i/ J2 r* @2 f
return address ; // 2分
. R7 T: R; S) T8 V" F: L; x- c9 W5 L4 \' S: u4 k- y
}
7 ^; ^7 G( ^! h* h8 |& l6 O( R* Z$ j; L, ^: ?' o) m) I: @
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。
6 E% r4 u) _" X m d& v. u0 K再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!2 o) y5 P9 x& v/ Y k
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
% h6 v. u. C3 F) p" \: N' T5 b9 M) B L, E5 v( a$ ^, Q' L
/ \8 H2 }3 a1 a, m+ G
2 O1 k- l0 A! H4 m) o0 V6 q0 \
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)
2 t3 P# w# K# V6 _% K
; A' P! f# ~) @& o# T' B( k; V% o标准答案:& r# o+ j6 C4 p" R. A
0 l" g; p Q- a) _ if ( flag )3 a4 m+ K- S+ J) C4 S
5 H1 T& ^/ u' b7 @ if ( !flag )) M i9 J" s3 m
如下写法均属不良风格,不得分。& C5 k& h3 i' K( G' r% s6 O$ M
; [! z0 ]: _: v5 w v if (flag == TRUE)
! W* U9 w/ M8 i! G, v# |- d0 h9 @& D* [" X% c$ E5 g: T e0 l
if (flag == 1 ) 8 O1 s! w O2 k K7 ~
9 i6 n% [! C! o5 {# _& L3 H if (flag == FALSE) " Q7 f6 e- O5 w5 y# j! Y L5 z
7 w' ]! ~# L0 z! F* ]* o if (flag == 0) $ L' U9 D. L' B9 u3 o4 t( t* s4 i
. C: n) l" z/ O% m1 r2 L请写出 float x 与“零值”比较的 if 语句。(4分)( ~: [6 Y* ]& b- c. l
0 p3 |. @+ O+ }( `0 x6 C. D8 q标准答案示例:* L9 { f6 [$ v$ S
, R0 X6 D* a( Wconst float EPSINON = 0.00001;5 L1 o0 S3 }$ s- J! b( h7 t
7 U( n+ S# z9 N, m
if ((x >= - EPSINON) && (x <= EPSINON)' `- K; f+ P) b# q* r+ F
2 m: C, U6 f" J u不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。( `, U! p. T4 Y" D# G
. V$ Z5 b: R/ `, d: l
! F/ V) l( M2 W) r1 G/ U. x2 ^
5 m2 x9 }/ N: K/ V' v. H% ?' x5 s5 V
如下是错误的写法,不得分。/ C+ l0 R2 J% K* A) h2 j' c
+ T0 E' m8 p/ a
if (x == 0.0)
9 l; ~ e) Q7 \' y' M* ]3 K; g2 J( F/ P% n
if (x != 0.0) + M7 k5 m& ^ K1 t/ o3 a. u4 o
; K& X- p) F" c5 Y/ N1 k$ m# D
' d" {- M( e* a2 \2 d( c2 G: b* L" b1 ?7 \
请写出 char *p 与“零值”比较的 if 语句。(3分), b$ ]7 t: X+ L3 a. a8 A
; x$ h# c8 g3 N3 v: H标准答案:
' @: c6 x7 V; L( `6 A' B3 A7 Z$ a$ |9 V1 ~* a& k+ J
if (p == NULL)
* J1 A1 s8 n0 x; |9 z( |# Q6 t i t) @( f# I( C# |
if (p != NULL)8 ~6 E# ?' H! _ t$ k
如下写法均属不良风格,不得分。4 q- r4 m: w) E2 O9 n0 ^8 ?
# E. n2 c7 E9 h) c% W" m. ~1 i: p
if (p == 0) 1 Z/ Y2 M: N6 ?8 `* l: d
6 M+ ^# t" @, E# {2 I1 p; I% u
if (p != 0)
" _: e7 x6 Z- D+ p0 s% _8 H- b0 r
; k9 l5 h4 K2 A; L9 E if (p)
2 _1 X0 _$ L2 i- w; O! r% U
& |( K% S* u" V1 A* \9 O- h/ j+ o if (!)
1 r9 g, T* H: q8 A8 o9 ?4 U; Y$ t- l5 x. U8 e# V; n# @- `) H0 m/ r
看到了吧? |
|