|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。: g4 |% E1 ?: Q# m4 y% Z1 u
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)
; j: v+ n6 k3 T0 `+ I% U+ X1 {; [: K. J" p5 }2 f
(1)不调用C++/C的字符串库函数,请编写函数 strcpy. I/ p. C' s8 M2 F
char *strcpy(char *strDest, const char *strSrc);3 h$ B0 p- e. w: i1 @
$ t m$ O7 ~/ p9 k* _2 ^
很简单,是吧?再看看别人评分标准:& u$ P& m4 ]' C, u- m! |
char *strcpy(char *strDest, const char *strSrc);( s, ~' R5 E. o' W" ]. P
* h% k3 T5 ?2 l7 {0 {6 y* P' w{
" ]+ g2 i& T! ?2 W3 r+ E. ]' a$ N! t+ u, n0 `
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分4 T- y' Z1 F: z) m1 s
# ]* y8 N+ K$ P char *address = strDest; // 2分7 b4 q; _, \% f" Y; V" B
5 x" O$ M; @0 G7 A. j7 Y while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
/ Y3 c. V0 V+ u% W o% d
; A, f6 X. I5 S; _7 ^' B5 m NULL ;
% S+ X! e4 W* p/ ^* C1 d2 `/ J2 m
( B& Y. P) S1 U& m* ^. q return address ; // 2分0 D0 h, u1 L4 {0 R) M7 o
7 v: h! i- R! I( _- l}2 x) | N' N) K" U
1 J1 e8 S) t+ W3 M8 t& |- d不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。5 ~+ W* J) }- s1 M
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!( y6 J: J% @7 S
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)0 \, A3 d8 w5 T* W2 D8 ~
( Y) B8 v: h7 M9 P- u4 Y7 d. J2 h6 m7 C" u) A
6 f) |' P" C0 [. g请写出 BOOL flag 与“零值”比较的 if 语句。(3分)7 I/ }, M: t) s5 \) Q& k
& X% V T. S4 O8 ^4 T
标准答案:
7 v/ w( }( @% u# X1 H' S7 e d5 |7 p) j, O. ~
if ( flag )
; q' K" W+ r# ~9 F& j1 ~
3 v' a8 ^! }- D1 ^ |3 B/ { if ( !flag )
' x9 G: N) v4 Q+ f( D) c& R如下写法均属不良风格,不得分。
( E3 B! F. y% n! E$ U3 ~! E2 f7 m" ^6 l n4 j
if (flag == TRUE) % m6 U/ O( b% k: r
9 ]- H" ^, e; n/ P* P7 ]
if (flag == 1 ) & i9 f) p+ _- |. \; k& c
- p; ^" K( e/ p2 h% e' B2 g. _ if (flag == FALSE)
' h- r! h9 E0 _5 x) Q: b& O
4 z% |1 w+ A1 V% g/ B: W6 u7 I* A if (flag == 0)
( E; a, M* ?) A( r6 I8 b, J& g+ C, Y& ^
请写出 float x 与“零值”比较的 if 语句。(4分)
' c5 u# E1 F1 G* @) o4 e* r1 l/ g4 k7 J& X3 N& c! I* _2 G; j
标准答案示例:
/ X4 U! u6 s1 E# n' o+ k
0 k6 @. G/ g3 y i( V6 Jconst float EPSINON = 0.00001;
5 }! e9 l9 P0 f* v* O) B9 T, M; Q! J8 O
if ((x >= - EPSINON) && (x <= EPSINON)9 }' V5 A, q( G* N2 O5 `
: \" T+ v) o# W5 j0 a. H' L
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。* F, m( t0 U" ?2 A
6 }) a0 t4 W' M4 z2 j+ L
! F) a( a2 F% U% |7 z6 W0 x4 g
8 Y. m3 X8 Q4 d& c
, G! N. d5 F, i$ e如下是错误的写法,不得分。* I' d: s% G, D+ V- Y6 F/ x
: u3 f/ v4 J8 J8 L+ j. G! [& b if (x == 0.0)
/ ]3 a" B$ b; N# N+ l) q: N# D6 {8 Q+ H \
if (x != 0.0)
/ Z2 I9 ^) D/ \' h
" X7 P' p0 x w3 K/ @" Y
2 v! R+ \0 ~, K0 f& a; u
9 L, K. Z8 }4 Z/ R! [+ C请写出 char *p 与“零值”比较的 if 语句。(3分)1 e" v1 j# o6 r) t8 X
6 p* M/ }- i1 b% F) Q# H/ J1 K标准答案:
2 P! |# R- o* n/ F
# J/ E) z6 h& e* ?3 z+ B if (p == NULL)1 z, x- l$ h' e( s
, t1 j. T7 [+ N( B1 i/ b) I* l
if (p != NULL), r2 `& f) p1 ~
如下写法均属不良风格,不得分。
" A: p4 [/ F6 y
2 T$ g" ?; F! b ^( N. N if (p == 0)
( j! \* N5 Y$ c( Q1 X6 D" P6 f9 f0 s7 r0 J+ `- Y8 u# E
if (p != 0)
$ p1 m) d% T* ^& ~/ I: ?8 N& R$ @0 O( [9 M4 I
if (p) 0 ^% A* h. W5 ^3 i' q
0 I( F4 a ]6 I
if (!)
: m8 ^9 U; \& e/ Y w; Y$ t% ?8 ]$ h- r+ r, C* v0 \4 t
看到了吧? |
|