|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。+ K. a: N! g S: f9 q* {
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)
* s: @$ J8 M8 \- A2 e$ \
6 G! j+ h; |' a& m(1)不调用C++/C的字符串库函数,请编写函数 strcpy
" i+ V& Z) _0 dchar *strcpy(char *strDest, const char *strSrc);
( u- ~% b: I. n/ V; D. I1 H( }, ?0 L# T* ^! H7 a0 J, @. t" t
很简单,是吧?再看看别人评分标准:
( R- @1 m8 _9 c5 c6 M* Ychar *strcpy(char *strDest, const char *strSrc);4 P: C) ~4 c5 K; e8 |8 m' Q* H3 N
# K: p$ n P; M8 Z" @{% U7 Q0 z* I+ D5 C! y% j) ~# X
* H, y3 O: B& J7 e' h0 R% C! A assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
. W: m: \$ c* \9 e! g
9 P, F8 o- N* \& N char *address = strDest; // 2分
. @1 v8 A/ h5 e
: d$ r/ }2 Z8 E+ u& D# X while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分% Y4 x8 @" ?! X9 {: a E$ l
# P3 Q" B) }4 y; Y8 J7 H! a, { b% f NULL ;
8 T" {: m' c) ~
+ \; a x! f3 ]; ^' S return address ; // 2分
* {- j! {' x7 k; x+ C+ B( q
5 B N" w* x1 [- r3 E% Q}
" C% k& e# J7 N, [+ X% \, H1 Y# P" p: ~1 [0 U
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。, ]" y1 j/ `$ ?; a4 o+ E' k
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!. \- ]% c! ^* O+ D* d. d2 P# B4 H, m
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)
2 b f, H2 N0 H
. v; }% g3 ~( Y) V: v9 g
. ~. T3 R2 H7 D7 E
% [% L! O3 M& F请写出 BOOL flag 与“零值”比较的 if 语句。(3分)# m4 Y5 b2 k m( W% H4 R
4 U0 F4 b! x+ s( d标准答案:
( _% @% }( J* _8 L9 P$ |+ l
2 t6 Q% Y9 Q" W h6 t if ( flag )
' ~" r+ u% y& o8 F/ Y6 T# L1 z/ m, E
if ( !flag )3 d% _7 Q; `) n" H" m; s
如下写法均属不良风格,不得分。
& H# i. w9 u+ }8 {% }/ B" ~6 ^" t: C5 e0 y
if (flag == TRUE)
x# |6 [, T, }! e% X1 e8 u" V$ Y2 F' I8 C
if (flag == 1 ) + |; O" x# N0 E# P: V
- u+ c6 b6 `. ?
if (flag == FALSE) 5 Q# f1 K: I9 m+ h2 H
: S$ u/ K+ d4 L+ P; [, u2 m
if (flag == 0)
5 }( u& R: x C% Q) b. _9 C. O# C) L: V! ^
6 {" |! o. H0 m8 i, U请写出 float x 与“零值”比较的 if 语句。(4分)
5 x4 L( I/ S6 S
0 d/ ?# L1 r5 p; V0 X2 i4 e标准答案示例:
* Q7 t# O1 c8 a$ o
: c3 P1 A1 R% dconst float EPSINON = 0.00001;
: ]: ?! q9 \$ L. } _6 p4 x- p- X7 P" t
if ((x >= - EPSINON) && (x <= EPSINON)6 a5 [/ E8 m. }# ^) Y! m* b( m
n, V9 ], [, K# e; ^
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。. x1 }* Z/ Y9 N0 ~
N, X& d+ g5 y; m) O6 V3 u
& i2 A7 n# r5 p9 L) d1 R5 `1 e # P+ `5 q0 ~7 k" v- ]
: e/ q2 }' `6 O8 ?2 J
如下是错误的写法,不得分。4 B" V# W& c% ? @" g. |
. D3 D. i$ S d; ]; y+ a
if (x == 0.0) 4 d$ f/ c, l/ |7 w( k! M
1 K# e A$ E3 ?! a if (x != 0.0)
& }0 j$ ]: C0 |3 ]+ @: \
7 q+ w0 G/ d" t& b! d/ p3 u
% h6 O8 x, [; n1 {, y2 ^
3 z7 G* y, \" G. \0 _/ `请写出 char *p 与“零值”比较的 if 语句。(3分)
( n1 \) O. g8 }( s
3 G5 V c9 O! q0 _; Z, L2 c标准答案:$ U' g2 m* j9 {5 H7 w) r
" H' Z$ C3 Y1 n2 i& M) c% f4 E if (p == NULL): L- M, N6 W2 Y0 U) W0 l
0 g% X% B2 j' ?4 y8 C4 f) m if (p != NULL)
" m" k+ Q+ _% I% J) f* t8 g; o3 m3 D如下写法均属不良风格,不得分。0 m$ Q4 _8 B+ p c. D
4 a2 z% C5 ^0 a. J$ i! ~$ p+ r1 A if (p == 0)
* j+ z. f& b5 Q0 S& o; Q8 ]! ^/ m9 R3 b
if (p != 0)
: t1 B: ~, q! w$ x* k+ t. o0 ]+ Y! ?1 T& M' Y: V9 q
if (p) % u5 C4 t0 t: L7 w
; v6 j z8 o* B' m m' w7 ~0 m if (!)
f: y9 n6 u2 o/ b- C* r
" k( C" H) } Q7 M7 T看到了吧? |
|