|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。" c4 r& X1 y6 H2 q6 `0 V0 e8 Q2 M5 F
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)# r/ z8 p$ J7 |' W
* ~+ I+ }9 u; { R; y(1)不调用C++/C的字符串库函数,请编写函数 strcpy
7 z l3 E$ R& O) Wchar *strcpy(char *strDest, const char *strSrc);
" G/ N" X* x% d! z$ _
3 m5 e: D- X* M' j: w k/ z很简单,是吧?再看看别人评分标准:
. ?9 G8 K ^" J. ~5 T( {char *strcpy(char *strDest, const char *strSrc);
8 X0 E6 S2 ]* b/ `
2 D! N6 g! s. o9 k{
7 }) e5 | T I/ c( N& [) {2 p$ s; w) l s
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
5 F7 [+ u8 a1 O( A6 r+ ~8 E% e
/ g3 _- O9 @/ O$ h# Z7 |' _ char *address = strDest; // 2分( U% O' P! ?( V. o3 o5 n) s; H, X
4 v5 r( I7 |- Q" v- {% U/ c
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分 i; v1 ?9 X, l4 Z% d h8 {
. T' M/ o& [' x* O# j NULL ;
' U2 \' I2 G8 Y
% m* M, B4 n/ M6 F# D- |! u) L return address ; // 2分" n5 x$ E. V& u6 @, v& e
" C& C5 C$ B3 P' Y. c: Z$ |
}& d. R. z. Y/ i: H
/ v% f+ z1 T l2 V
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。4 m. S; p3 z; R/ Q3 C. q
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!
$ G( u$ L4 i& U. N9 y9 Y一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
6 |- ~+ x: K( I- f1 n+ a5 z7 L
1 w, I1 b' S1 @' X V& d3 C4 i7 W$ W9 [, M
% g" [- @0 {' ^: P$ I+ _+ g# ?$ A& D
请写出 BOOL flag 与“零值”比较的 if 语句。(3分); U3 H, E& U% ?* z/ x
6 J7 b- D; U4 Q4 A7 C. C标准答案:
4 f8 x* o3 D9 i5 z e5 A- K
4 |) J; i+ F" t; p: c% l) r if ( flag )4 t4 L, k& U& d O, L6 P4 h7 ~
9 j8 @3 l1 H* E* F1 W' f( C if ( !flag ). p) r2 M1 u* u+ M( B6 Z
如下写法均属不良风格,不得分。' Q8 @! s' Z' \7 W: a" x! \9 c& ]
: P; p& E& r8 y# b0 {
if (flag == TRUE) ' S5 \# m. l8 Z) E2 C
) f/ H+ {1 {1 n; m
if (flag == 1 ) 3 l7 P! l X5 b3 S
: M) k' e& h) w if (flag == FALSE) ( Y5 W/ @ G/ |: o j
7 a4 e: O0 Z6 q# w
if (flag == 0) * C! u$ O7 l1 h q) v* P
- m; r, f, R3 Q/ J, Z
请写出 float x 与“零值”比较的 if 语句。(4分)
8 d$ s% p1 |3 g
2 e# Z5 Q5 a& F6 u7 b* V标准答案示例:
) M ^# Y5 s6 v; p* W$ [& O7 ~$ g3 P
+ f t J) Z# K S' l1 X- G7 Sconst float EPSINON = 0.00001;
' N p/ c7 r, R# C* ^. L) p) X/ ]9 U: {
if ((x >= - EPSINON) && (x <= EPSINON)
H/ W! f7 r& }& f7 I* E W' B
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
8 l: r x J: K7 l8 {3 A0 V/ L V( K2 f9 K- O+ ^
4 m% x4 i9 g. j% s! s" f* `# s; Q- p
& A" R0 E0 O& g+ I/ M* d9 O- V
2 W) G5 o% M& I% R/ I- K# h5 E如下是错误的写法,不得分。
+ J* }# R- [. y& i5 Q$ V: J1 \- [' h; w7 c2 }$ L4 H" g* w6 c! ] G9 x
if (x == 0.0)
" w* M: ~; u) N8 x X) _2 v( E8 ?+ o* q1 q
if (x != 0.0) ! I2 M I& c& T+ k2 ], \
! s3 P4 d% j- l% m; V# k! N9 L 1 r6 X& G2 H' a- R. G& I" Z3 J
& n! n- _" H; ]
请写出 char *p 与“零值”比较的 if 语句。(3分)
7 M% n; w7 S ~. L) d" Y. g
) x! m8 e# C9 j; I' S4 r标准答案:
' F- B1 `- B. h/ K# j/ N& D$ _. _5 y& q% }
if (p == NULL)9 g# p$ z' g; m/ }$ }; x7 N5 `3 }
7 }2 ` n1 E! c/ b7 f N9 }
if (p != NULL) I0 c% u: S( w% \
如下写法均属不良风格,不得分。
5 V: X0 }# Q$ ]; ~: ?: Y; d
4 E9 j N2 s) {, K+ ?8 d* u- w if (p == 0) 7 ?5 A! P3 t5 K0 U
# a4 }3 g: Z5 i0 r0 U% l: v
if (p != 0)
, p2 G$ e* p$ Q1 a3 g& d( f0 w3 `" g! B/ Y2 X% `) F3 ~. i1 Y' V2 _
if (p)
" C/ R& Z I3 ^% s6 z
( Z2 B+ y9 P8 u! }* E9 v if (!) : S" P3 G& K' O
8 V: j- b5 M' T! U# ^. q看到了吧? |
|