|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。
5 G9 ~$ }- q+ |5 V现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了), V9 a" ]$ B/ U/ O/ q8 C
0 K2 ?# A& o. [( k; w
(1)不调用C++/C的字符串库函数,请编写函数 strcpy
! i% J3 h9 T: i7 G2 ?char *strcpy(char *strDest, const char *strSrc);( d) z; j& Z# o) t( i9 Q: \
" W6 ?( W% W4 W4 P
很简单,是吧?再看看别人评分标准:) y$ E+ N2 I* Y! p( \0 T
char *strcpy(char *strDest, const char *strSrc);% h ~. Y, W8 m/ e [) E% d
9 G7 `2 P. D1 ]5 p6 p{
9 Z0 g, L {7 l# W. j$ Z M% c5 L) k/ k2 }
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
5 b: k* q) K e# R K% f* T0 S1 d& a" ~4 g! i; ]
char *address = strDest; // 2分
; N/ \, o8 r# q `( v2 [' @8 ]5 r* o& r7 _( c( u
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
2 U/ b; T* ^% ]5 y/ F
2 I* e+ h# G2 Z: ^3 T1 f# `+ f5 \ NULL ; + x/ v3 [8 e7 U& v
3 l; k4 `$ F* o$ ]
return address ; // 2分
4 @) ~* H; C1 ?
& f; C$ I. N6 z6 _; V}
. \7 q& h) E% C( t4 y( C6 A) X2 ~* Y" R
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。; ^, U' a8 [0 {+ s4 ]
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!4 |) Y" S: O# G# }% Q/ W% E; H
一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)- l2 c: v, ~( y8 E4 P
$ f5 A) z/ z$ O$ f9 ^+ K% R& O1 Q3 O* H+ E1 J
6 u ^; p" K% E- e
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)8 I$ a" \) z6 O% C( J4 Z
" |) Z. S! e: h$ Y* O
标准答案:* u4 H& t9 }; n- r. ~
/ t) h8 Q7 F7 t/ A; X, T if ( flag )+ x7 O8 n* F) D& \9 L# F8 d9 [
6 O! S, v; \9 W4 O; I4 X
if ( !flag )
* `2 h$ h* }: T$ h% u如下写法均属不良风格,不得分。, W! c/ i& d0 q* A
5 z! b7 V+ H3 K- `. u* Q* q. V$ x if (flag == TRUE)
2 S0 }0 {7 z' \9 {6 J- W. |0 b+ w" m: \+ O& ]
if (flag == 1 )
& Q" s* O8 _" E: j+ h2 l8 Q: |# _4 T! K
if (flag == FALSE)
* G" N9 A8 o# g& H7 C
7 q" b) Y$ c! v! Q5 Z; W: K if (flag == 0) 9 ?$ t( i' M# Q4 a5 a: `$ Z {
7 e+ y* D4 T' Y
请写出 float x 与“零值”比较的 if 语句。(4分), f2 z& R9 ]5 j3 m! L2 G
. D& O! l' ]' Z' w# P
标准答案示例:
; H( O3 i% R! G" ~7 m p
" ]8 z8 D/ N( ^3 Pconst float EPSINON = 0.00001;
9 O' Q0 e ?7 ?2 i1 h% y, _, ~- \1 }5 e6 l5 m& z1 d* J
if ((x >= - EPSINON) && (x <= EPSINON)
0 M) W G2 k- F, I1 m& f, U6 w$ A4 k& r4 C
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。) j1 u+ |* u& z$ P$ ~& r' C
- y9 Q8 V4 X9 l% j0 z* w. l
3 {/ c: `6 h) t$ l
) K0 B5 t9 p/ `) n3 R( y4 J$ `" W9 z" K
如下是错误的写法,不得分。
$ Q' R% Z" h' T$ w" n. n4 X
) ]. o+ X$ R% W* J5 S, n, ` if (x == 0.0) ; X5 n3 |& ?, f: j* I! V
$ M( ]0 `* t2 j; A2 k- `5 h if (x != 0.0)
" [/ y" o6 C2 n! c, _: C( \: m2 C0 I! b; j
! A R+ B9 [7 T5 p7 o/ G' H
( v1 M$ Z" `3 k: p' @2 s( ]! {请写出 char *p 与“零值”比较的 if 语句。(3分)
& L$ U4 e: Q8 N& U$ {# P) I! J+ c+ P6 p. S z" U
标准答案:
: N4 J. g n' u
( F% K5 ?: C# B6 @/ j, C if (p == NULL)
( S- P( ~. _* D& X$ g
5 r6 I* `) @* {9 q1 t if (p != NULL). Z, F5 E& b- O8 \
如下写法均属不良风格,不得分。1 p- O- l+ E5 X+ C2 b
2 y2 `/ w) i" f! S% H6 [
if (p == 0) 2 o0 g* w2 Y' x7 i+ G9 S, B$ {( ?
- s5 A: L; j7 ^5 }+ L: ]! u; X9 Q' ? if (p != 0) + i+ J. [- u2 r4 k- I
$ E" u/ |% e: a0 z! l if (p) * x0 Y/ G( ?+ Z
& A3 H: a; G/ O0 z0 I5 f. w if (!)
; k4 g4 _# O, q d# D1 S* V O- R& k4 j+ l. p" Y
看到了吧? |
|