|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。
+ x* ~4 w8 _. i9 Q/ o. E现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)9 l' G$ L" o. U7 {5 ^4 ^
0 e+ w* Q& H6 U( L
(1)不调用C++/C的字符串库函数,请编写函数 strcpy3 m, x7 C* m6 h+ j. X
char *strcpy(char *strDest, const char *strSrc);
6 C' D! i3 Z- d5 m
1 h6 d7 P) }8 k* ]6 U很简单,是吧?再看看别人评分标准:3 u- n( @! v) R7 m5 g$ V5 l$ t
char *strcpy(char *strDest, const char *strSrc);
3 N" t5 R3 N3 a. w7 P1 s0 h# N5 _$ z3 v7 l- ]) H5 J; d
{
6 Y% c- S6 u/ H% n, `0 a' K3 O# Z; L2 T5 ^7 v* W
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分/ I4 N" L; G- V' [* o. p$ g6 z
+ E- _- T& ?+ L8 b% X) O
char *address = strDest; // 2分
5 \) w2 `% [0 V. j2 A
* _( f" i0 d! T& j% ] while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
$ q0 h# Z- _, `& I* t T/ N
7 Z% C4 O/ t, s9 o( @% C/ J NULL ; 5 n/ H& N" m3 E) Y8 ]( o
- m6 X8 d: [. O# r: m7 @
return address ; // 2分
4 ^" G8 a# P& `7 s6 J3 Y* v1 T6 l/ C# Q( E
}$ {' ^9 c Z9 C# c4 G
2 M0 N8 I4 J' q K
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。
8 N0 f% s/ |# f/ R0 \! `/ X3 p# b再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!3 ?3 y& r, R# k3 b
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)+ t* S* M& C1 z
. j3 O8 l' H U. f6 o# T2 {. L+ G6 o! \( i b
0 _; V' r; l7 M$ c请写出 BOOL flag 与“零值”比较的 if 语句。(3分)& l0 W' g2 P, y' c) b* `
/ L0 L. o1 V) [. @4 \标准答案:
. m; K0 g' D8 `# L9 ?$ a
j! A/ y( b# N0 g) {& O1 O2 I+ s if ( flag )
/ @3 h2 n7 h6 K4 T ~+ G, q3 g
: h& a% L3 C% F9 R; O/ b if ( !flag )2 X" P% c9 w4 G1 I/ ^# h
如下写法均属不良风格,不得分。; p* R, K; i/ Q9 q
8 U+ g2 J! w+ P4 } d" o if (flag == TRUE)
3 G2 r! l c8 W0 n: l" c3 _0 |6 m8 C; a0 Z# B. t3 e% ]# K
if (flag == 1 ) 0 q, ?1 ~, {9 S* p: N2 \
% K3 d& N0 k w6 ~7 | if (flag == FALSE)
, g2 c) A D+ q2 K0 d, U' t: ~& P q+ ~
if (flag == 0) 1 X6 \! a! k2 B/ J! }( w/ ]
) I8 D( g5 t) q0 D% t$ c/ a) p2 i
请写出 float x 与“零值”比较的 if 语句。(4分)
- o) D" i3 u0 Q" Y6 D3 C
1 B; A g- }% E1 \" G标准答案示例:
- T% w% q/ {5 Q% ^% T# o$ C/ ~- J. z N- d, M8 N0 Y- l
const float EPSINON = 0.00001;
- n# d: p* J) V# v5 D6 c% N: j
4 k/ ~; \% C3 tif ((x >= - EPSINON) && (x <= EPSINON)
2 ?' V5 G- v5 X- _' W0 R a# D- M1 q: ~9 J' L4 S% `
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
2 {9 I. S" Z9 H+ C/ D& `) z
& P( x9 `- Z; }$ @+ |2 a( _9 S ! y# l4 e3 c+ V: D$ G& }
+ @% |4 b3 B; f ~- }9 t
; @0 m. h# S( k" C+ T如下是错误的写法,不得分。
6 Q+ a( R* ?- [" }$ b0 A8 }
# y+ a0 y2 D- P# \: x1 p1 i if (x == 0.0)
$ U; r: {8 h9 |+ B9 B/ P# l; ?5 w
8 j3 L9 G" Z6 \2 q1 p% Z. f* P if (x != 0.0)
" r0 W5 p9 ~; {0 P, Z: \
6 b0 M7 x3 o* \
: W5 l- t3 _! I4 |) V& o- ?7 L
* j- r5 ?7 r$ y" f2 [ ^$ x请写出 char *p 与“零值”比较的 if 语句。(3分)+ K; n( {0 |; {7 b: a9 e5 o+ g6 x
7 M+ i+ F: o% I: a& _
标准答案:3 l) ]0 A$ Y0 I/ }
( Z4 x/ y7 i9 P) U% c if (p == NULL)( T/ j. o3 z) ^# T
$ V: A- X- |& i7 i; h5 B2 r9 \
if (p != NULL)
: }$ Q- T4 d) C( K如下写法均属不良风格,不得分。
3 U1 B6 d* I; r) J: M; ]! G+ `6 V( v3 W2 F) A5 K5 \. I
if (p == 0) + b+ f6 g6 s# b' i# T/ E" X ?
8 @2 \3 ]: y6 b) @2 u% ~) y
if (p != 0)
0 B. W$ F) M5 p7 }$ j5 m8 l! a2 u2 [/ x0 U2 r( Q d& o
if (p) 3 t/ }2 b6 D% S# e! k- _
. A) G8 Q X4 P) m+ E) n
if (!) 7 O1 I( p7 C: ?$ ~- _' `0 r2 O
# i6 x9 P( t/ X+ H2 |7 b看到了吧? |
|