|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。
) \) l$ R- _: D( f1 a& o现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)
3 @: p% [6 n. |( f9 N5 ?& v7 @& J8 R" i E
(1)不调用C++/C的字符串库函数,请编写函数 strcpy) P4 z0 M0 ^) d% r) c% j
char *strcpy(char *strDest, const char *strSrc);3 Q8 Z' ^7 A% B
% M0 G. B# o* z* }很简单,是吧?再看看别人评分标准:
8 Y! O/ G$ t6 ]: W* ]char *strcpy(char *strDest, const char *strSrc);, s9 [7 G$ T! f
: S' w& R- @- w8 H
{' y4 Q* ~5 d2 O ~
7 x! F+ C% r% p4 d4 o4 j assert((strDest!=NULL) && (strSrc !=NULL)); // 2分7 x$ d0 B( U( h2 z4 ?3 P$ _
, `7 ]9 }1 P& Z X char *address = strDest; // 2分
7 U0 n( M B- W4 u, z* w {6 E7 J
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
C, U [3 B5 p8 l. T6 P, M% o( Z7 s& G' I0 r8 D4 ]: r
NULL ;
- T) M% C" a+ @; |+ t
' G+ m# h6 \( t* E5 @2 B5 ~ return address ; // 2分( \8 }5 ^ ?7 S8 j/ u: E
' S2 A8 @8 R. r* L1 }
}
, N7 y7 N6 O; s' \" u, j- K! K6 W: d9 }- H' K% |
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。' S( Q& p3 N l. m1 ^; R$ `- E+ V
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!( T3 `3 y( E3 W6 K( i
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
n) }, B! Q: M/ Y: T
- ~& y$ x, n* [1 D, z3 C; U& h+ F9 h8 {% I, z& |7 ]
, D/ T4 ^- B* b0 I; x! ~
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)) }$ ]$ i# H0 V; N8 W5 E# s
. L% X+ B! x; t/ C标准答案:
$ j0 R, g/ A3 Z
- B* j, y- `- c. y2 Y: ~ if ( flag )
2 k0 H5 d7 u8 b
9 _; X# K; _9 N if ( !flag )) X2 }3 o6 \# f( M+ h' H/ \2 W* |
如下写法均属不良风格,不得分。
- y' D4 C: H5 O. f% G4 h/ E+ Y0 y5 t8 S" [% b
if (flag == TRUE) ; Z' z& E; @7 R# U+ ~; ^! a
+ K; w0 ]: { {% W- p" X if (flag == 1 ) ; w" r* i5 g _' ^; x) n7 d& t( o
; @8 F) x* J+ t- O9 d if (flag == FALSE) ! O( C8 M2 A' Z
9 f: w/ y5 h0 z3 b( Q/ S if (flag == 0)
# ^! f' X4 X- r) I/ e2 Y
& `; g1 Z" s+ U请写出 float x 与“零值”比较的 if 语句。(4分)- @! Y$ G/ x7 Q( W: q( q
: s: q. M9 c% L% _- i标准答案示例:
* n) C I+ ]3 l7 Y# R
) `: }5 @$ t# t, D" V1 [% }; gconst float EPSINON = 0.00001;
' i! q8 O' X. k0 |6 }* n" l1 S: ~( } \& Y$ R6 Y
if ((x >= - EPSINON) && (x <= EPSINON)
3 c. X( P/ A( `4 f; a, S" a9 _' ]
0 S4 O4 `% H6 ~% j不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。: B: D0 v- l. ~* r0 W
3 q7 C, h/ v' e
u; z& z3 c. ~0 T ! r+ `5 D" {3 S5 {0 C7 i9 ~
& T( z1 J/ i' l `$ N/ P5 a如下是错误的写法,不得分。0 k/ w$ c; {& ^1 f
4 A2 ]& {3 X/ e) E if (x == 0.0)
" F3 m" o6 S* O7 q( c
! |# A: O+ J6 ^( R8 { if (x != 0.0) 7 Q* f9 e0 E) h4 t2 \+ i; r9 u# i2 u
9 u% w! {. g% y% n: O* O 7 _, q+ s4 v+ P$ ]5 v$ R
/ b) q# J$ Y4 j
请写出 char *p 与“零值”比较的 if 语句。(3分)
6 X$ s2 S5 X# n6 s( Y
. P. K1 T/ S4 J Y& u标准答案:2 W6 d: b3 |( G5 d) z1 N7 W/ y! E
3 T2 l2 F' ^, a
if (p == NULL)
$ `& H+ X, T0 ^4 v4 G& b7 }$ w3 h! D! {# y
if (p != NULL)
% t; E3 V7 z& C( s# X如下写法均属不良风格,不得分。
; n+ ^5 @8 O2 _! q0 W! Y/ H! o. _( G9 k$ l1 e, l6 o9 d4 Q4 L4 F
if (p == 0)
. ?4 l5 Z5 R) a
' _1 V# @: A" } if (p != 0) 2 a2 }! H" D- B. N4 U
5 ]9 }; d5 |; Q! D0 B2 | if (p) 3 m" o5 E0 R5 R6 R3 T; @# J
9 G- v7 a) v$ b) K( `/ ` if (!)
+ ?4 J. o, v7 h, G5 Y, r
8 ]! w! p- e1 |看到了吧? |
|