|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。
1 i& C6 L( D8 \+ N* A, P现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)
) h" A2 n) G0 B, j/ b/ n( f6 y. R: y5 R& ]( f
(1)不调用C++/C的字符串库函数,请编写函数 strcpy$ b" m# R. Q* s3 H
char *strcpy(char *strDest, const char *strSrc);
6 c3 V4 ]9 P% l! q8 A1 t9 ^- j9 L9 Z* J+ P$ F8 C
很简单,是吧?再看看别人评分标准:/ Q1 p8 u9 ?' z0 O2 S# V) G/ L- H/ c
char *strcpy(char *strDest, const char *strSrc);
, S* C+ L; a+ W4 e! w p
1 w4 h# a7 p3 L( ]5 I{/ ~9 @" ]% o9 L% p
) O a% I7 ^8 v0 r& N+ N, d1 P' [' h assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
8 H6 v6 ] [4 R2 }& w! X) D, K- e K0 x0 u% h4 }# q( p; I# K; S3 U
char *address = strDest; // 2分
1 B5 }" O9 k5 ~, t0 e4 |0 @" u4 s* y: p. Y7 R
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分# t9 y% I [# x) Z/ b7 {. q
# }+ v$ Z0 c: M7 S7 M9 f5 V
NULL ; # U4 h- b8 T* Z" Z0 W5 K f
+ X b2 j( u) E( @, Z+ [- B
return address ; // 2分
6 l" C, b/ G+ f) H" O; T, V
; \5 ]. `( n/ d7 K1 o+ C* V4 n}! h3 b' G& l2 X6 \( o4 w
) t5 W& P2 G, b- U7 C( @9 p) V
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。4 W) @" H: u8 l9 Y; T
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!9 l1 H* A9 F4 y( |
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
4 c2 u7 s$ @8 R @' C' h* k/ V$ e8 m4 T& F
. L0 Y' y' o, l1 {# u7 I, ^) t5 \ k( l# ~8 l, F
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)+ a8 L1 @# J2 e; m0 [. r6 J
* h/ v/ q2 N1 B4 c$ Z& f标准答案:
" j2 `% r4 C9 Y, a) f& j+ C3 C m8 F) O, p
if ( flag )
, H/ O! F$ }2 i1 d
. B/ A! g( k# k9 d1 X: t: a" u if ( !flag )0 {5 ?# c6 D, E1 k5 V8 x! p
如下写法均属不良风格,不得分。
- a. M3 \' A! q2 t5 Z% ]
, v# O+ N7 K! B5 E5 e if (flag == TRUE) ) G7 R4 i- E5 L: ~5 l; W
* g+ W! P2 y8 J6 p if (flag == 1 )
4 M! x6 U# R5 b. M) Z* ?8 y. D% G$ V: u; w F
if (flag == FALSE)
& |9 z) M* _3 r( H* Y% P8 J! m/ D+ |9 ~/ h0 ]
if (flag == 0)
* B' _$ @' y& G+ A/ y( w3 C% O* I9 ?) E( S
请写出 float x 与“零值”比较的 if 语句。(4分)1 m# s# R3 g/ {9 W5 j( A
% ^5 f8 i3 x8 m8 Q7 A- U
标准答案示例:
8 {" o; W) w' y$ S
. R* s7 E f' x$ H% N% e$ \' \, @const float EPSINON = 0.00001;
4 ^) d4 K9 R) @; S' r; ?/ q% v6 n
/ R7 C/ i$ x- lif ((x >= - EPSINON) && (x <= EPSINON). I# b! u3 W0 ]
$ _5 m l% t0 v4 N不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。; x# ~9 Q3 z0 I) D
1 _/ m7 w' j! f# [; ]
+ l9 h. f6 w' A6 o( f" o, C. [ . }# z# j2 {) A7 M* @4 z
$ I, X2 }3 z8 o) r3 |$ {! w如下是错误的写法,不得分。. M( R/ e8 t$ H
' J6 `$ n3 C1 I2 A# W if (x == 0.0)
8 `: S0 J8 x3 l: ^
9 C6 x/ B5 \, F5 p if (x != 0.0) 3 c o9 Y2 @: {3 v: N' i' D
" j+ a! b* U% b' n
m) W n$ W. {0 o
5 V0 u- Q8 C& J+ Y' K( _, ~! f9 c请写出 char *p 与“零值”比较的 if 语句。(3分)
& ^" p& C, G9 n' y
. r; E5 |0 C2 P0 D5 C标准答案:4 B$ B/ a9 I# ~" j/ K3 |
* R" b( G- S U
if (p == NULL)" t8 u& W( ?7 `7 Q2 g
$ v. t4 ~4 G5 ~( q
if (p != NULL)
+ M! M5 q8 `% k0 A' R+ ?如下写法均属不良风格,不得分。* W6 A4 d' ]4 b' k+ S5 o8 X
& v% X' R2 |' _# `# \
if (p == 0)
4 w3 K3 Z& l( R$ t0 @' J2 {- \- _
if (p != 0)
# e1 T, A3 I3 }5 ~
, E! j/ y7 i' ? y. V& D, U$ i if (p) ( ]7 L8 b, @* s: J
; w) r8 p: N0 Y7 W) z
if (!)
* M( K9 \, u2 F; H3 B3 b0 Y+ C: d; n n
看到了吧? |
|