|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。4 a5 s6 S' s, g- L5 N; N% v" Q
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)+ K5 |: x/ d" D* E0 k+ z7 C0 N
6 D) t, \: b3 U( O/ R! G! ?
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
: |+ g5 ?* P) \! h" M( \char *strcpy(char *strDest, const char *strSrc);
# h/ q' b8 ]/ K/ I; q' \0 j* P- {0 ^# \0 Y/ e
很简单,是吧?再看看别人评分标准:
+ P, D: _: t/ n! T' _$ _char *strcpy(char *strDest, const char *strSrc);
. n3 v. n) g+ d# Y' j
" h9 v' h5 k/ v+ O! V{& h' J4 \; l( k! @
9 w" o5 O0 c1 V* c* ^
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分, o0 ]9 t* x5 ^8 n
# }& v' i. {, c9 t" m) Z1 d char *address = strDest; // 2分/ U& t( K' C$ b8 W" E; q
! G0 f3 G1 p. i0 ?1 S: W* _+ z6 n while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
7 B4 E5 b5 v( o& l S
2 H: v2 q2 z( I7 B, S NULL ;
7 P' t: z2 H3 f5 F' Q( J- l2 y
+ f$ X; f4 F$ f8 P+ b return address ; // 2分1 A. W4 T- @' F
2 W8 U6 `' c* `3 D6 s}) }0 C5 E/ R9 q4 j9 Y' j- `
$ h8 d: T! i6 S7 G' i$ V
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。
/ R' i0 N9 j) t: g( P再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!
) [# v" F8 p) r' ?一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
/ j7 x' x0 E, j7 ~" Z4 A1 c
/ r1 ?8 ]( B4 L& w. K
$ Z% S5 |7 o N: G6 c# J9 p2 D' e$ c/ u; O7 m5 i) c
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)
# l2 ~ K" s8 l K
6 H6 I6 B1 s7 B* ^3 {5 m标准答案:9 f0 c/ i6 r2 U" H/ E: C) Z
5 L: t1 ~3 E! S0 V% L7 h if ( flag )
4 ~% ], e8 V% S4 g. \: s, |! u6 f8 ]! [8 Z; v- V; S0 z
if ( !flag )
9 r9 w0 N" w" w- O如下写法均属不良风格,不得分。7 Y: i# N. f& b2 `
/ D3 e. Y$ i) y( D m
if (flag == TRUE) # V- ^: X/ `% I, [
7 h- G8 k( f- A/ j6 l, ~- s% S
if (flag == 1 ) 8 X/ B0 V/ m/ T. u
! I2 v0 H, g) x& I" P& j6 o8 O( k
if (flag == FALSE)
+ o4 v' f0 _8 r8 V) k) ]
- `% T, E' f' m if (flag == 0) - l) |2 G4 o. `5 H$ F8 `" s5 ~6 `
" z5 X4 e2 I9 f8 ]" w1 ^6 j2 g+ p2 b请写出 float x 与“零值”比较的 if 语句。(4分)
3 u1 y6 k1 Y* x& P6 [
+ [3 Q6 R# I1 Q R7 \" Z标准答案示例:
2 @/ r1 I+ O5 n P/ r o3 F+ ?4 ^& T( Y8 {! f0 v+ p
const float EPSINON = 0.00001;8 r; L" o6 k5 D7 ^! ^" U
4 R6 _ D+ L' Z$ fif ((x >= - EPSINON) && (x <= EPSINON)! w( c. Y, A: v1 B5 M- B
9 K' c6 `) m! B* U2 b! P) F' L" s不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。& Y H$ o% i: n( ?
; S; i/ ]: X( j; P. l! p3 k" F ) l J3 c2 s9 ~- e" \3 W% g0 w
1 u% b9 i7 `2 m' B, G
7 C7 @; ~$ O" ~3 d# Y: ?如下是错误的写法,不得分。" Q2 N6 _" M; L0 t5 [5 @
) B" s" c8 Z4 k2 _8 P/ J if (x == 0.0)
. y% _ W% p. M% u% }- Y
, x0 V' C+ v$ Y9 Q! ?3 v: M if (x != 0.0) - C, |, O- @9 l$ U' ?0 b! Q- C
& L6 h, H" t- R- z9 g1 R2 }7 q + t; s( v0 H7 a4 o: I& c
: ^8 i% C& S1 w. p请写出 char *p 与“零值”比较的 if 语句。(3分)
: M9 W4 z& o; z; j G1 a8 ]9 A' B; a2 U6 V: N Q: {- A+ q) @
标准答案:: ^- A; \' w! J& O. i/ p8 w5 K; @
( {# @0 P7 H+ \( o. ~/ j5 I8 q" f# M0 n if (p == NULL)
" |. `: }6 o3 P8 {$ C; E8 J
9 K+ o& P9 ~' h if (p != NULL)
% f* ?7 p9 Y5 Y! v0 k; c5 O+ _* p如下写法均属不良风格,不得分。
2 E" S2 J) a+ Y" i1 o, K( S- Y; W2 U5 p" w, }: f& }
if (p == 0) ( v n/ q6 t# @: i: E
2 H" p" _% h2 p. L if (p != 0)
- e3 y/ F7 q) S1 E- H! Z7 W2 F3 k
# Y) U; J2 o/ x* C& w+ | t! q if (p)
; B5 Y% n3 C9 X' I
7 B2 X# D, I7 L. F- \# S if (!) 1 j2 @0 [1 ~% d, V0 L7 H6 b
, d( [; o* x# S3 k/ D$ L3 ~看到了吧? |
|