|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。
5 O- O1 K7 m3 \! {5 k6 X& J* b现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)/ i8 N0 J) t v& I( b
# i; |: W9 n1 ?7 Q7 z: b$ g; S
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
+ G/ `1 N" W/ e* F% t3 |3 |% `char *strcpy(char *strDest, const char *strSrc);
, b0 \+ A8 ]0 H' X1 T
- h+ [6 c' G6 g/ \$ c( X4 l- k很简单,是吧?再看看别人评分标准:4 h2 m0 c& r5 \1 ?
char *strcpy(char *strDest, const char *strSrc);
1 y: ?* h# j) j' m3 q- v. W* [: c- N* [
{; E4 F* B8 y+ s$ V' x
1 o1 `( C! Z3 [+ Y; Z' l! d assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
5 [" y0 A* G: S- C0 l1 h0 T% k6 e; T+ p
+ D7 K- p' J3 w# P% `/ b char *address = strDest; // 2分2 ]; P* T7 [" d
' d& L8 c- b6 X# ?8 U1 r0 t% f
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
$ {; B$ [7 w) d( \3 _! y; k) {) y/ h: B* i# B' E# c' E% r# z" A
NULL ; H# c b( l. d! F% g& @
! Z- p( S) b( r- a+ ^5 \* Q return address ; // 2分/ \" E, N$ ?5 I$ x
0 ?: n( \; n; N l3 H! w2 ~, D}6 P3 F2 F# |) O) L5 D; i, g
; S# _* q' J3 c7 W不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。; _" R2 i4 v7 t3 u6 m% ]; a
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!
4 D& b. e2 t6 L T一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分); @5 _7 o; b& J, F0 k7 N
, i# B0 `* z9 T; a- J5 _$ v; D% l
( e- v' \: E+ o/ g* `3 e0 f请写出 BOOL flag 与“零值”比较的 if 语句。(3分)
$ Q X0 f s% D% k/ m' D! U9 P* V8 T- ^; h- _/ a* ^2 Q
标准答案:
$ E6 S* V$ r7 @8 q. G1 P7 r L3 [# D
* U9 P5 D. u" e: R) ]2 p if ( flag )6 o, J& P- E8 H4 b' A
5 a( `) X# |& a! F- E if ( !flag )
; I" X1 J& ~9 P1 c- J! c0 p; v如下写法均属不良风格,不得分。# l( m9 i) O# Q. T
+ I) B: k G d# W if (flag == TRUE) ; I2 H, x6 J9 P/ Q7 n) B2 d5 y- f
5 C1 {& s' F; Z+ C4 H) x
if (flag == 1 )
2 S) j4 `/ ~% {3 ]. ~
) r. i4 }2 n2 M L1 F: R if (flag == FALSE) ! T d+ B+ m# e R3 v- j3 \( M
4 |. e. o3 \7 {" N! C if (flag == 0)
( V. x# H6 D: v
! q1 g# a0 `/ H) \9 n. `8 `请写出 float x 与“零值”比较的 if 语句。(4分)1 y, E8 t# c4 _& E
" Q0 p! |5 _3 [+ [& V$ Z) q
标准答案示例:
( a' S8 r. @! ]4 O5 T, ^- {; [1 C& I* G5 v W( E0 G7 @
const float EPSINON = 0.00001;4 B$ n* I6 ^+ r) V. V# {( Q
# I ^% L7 s6 A6 K! ~- D) S* ?if ((x >= - EPSINON) && (x <= EPSINON)0 @' }) [7 p8 l+ c& C; j6 x# [6 O
: O9 } M/ t: D不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
4 w. p* s% Z! S7 I, X9 |! y
+ A/ w7 k+ m+ x% r* q+ U 8 R! s( z i5 d0 E. Q" G1 e3 N5 k
: H6 c+ @8 Z- P k
1 t& P5 Y# j6 [, Z0 A* X+ |7 A
如下是错误的写法,不得分。6 u7 c# G, X2 |9 _6 T
[ x2 D! e7 r9 g if (x == 0.0) 9 _4 I. M, T; P
: s( z6 w0 o- [! ?$ _2 q
if (x != 0.0) 8 `9 j2 I1 Y$ W* X7 w
4 |7 Q% M4 g2 ~! P
0 |+ {; a( l4 F7 x) H
5 a# m# J9 c% p; l请写出 char *p 与“零值”比较的 if 语句。(3分)
6 B; _' X, c$ f- s I' T# d1 r
9 e: n+ d" I+ l/ v标准答案:& ~5 o% _* J# r; o' o1 \
: x& \, {) ]6 u$ ~
if (p == NULL)) h* e7 M) R( P$ `9 M( ~* `
6 O" t6 N8 p5 Z' @2 G& F4 r
if (p != NULL)
+ m. ?( s, B( t* B" i如下写法均属不良风格,不得分。' {% u8 u; M9 K7 F
9 z4 u: H+ u B
if (p == 0)
$ Y9 c7 j9 w7 X, }& q0 ]* o9 c6 T4 q7 G6 W9 Z2 L
if (p != 0)
8 I% A3 J+ y% j& H1 Q/ m' m8 T: ]" ?7 ~" S7 u( h7 R
if (p)
) f1 N5 q% u q* U# Z" W9 T6 ]* K5 r5 k/ G- }# X, n8 D! n' s8 T
if (!)
6 S9 w3 f0 l0 W; @
; L7 q# t: w: j& L& k9 H( n看到了吧? |
|