|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。7 [) S( |* r" z9 ?$ C- \9 Q4 z
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)
; }9 @3 G- |+ p5 H7 w* N, v! S2 [/ t8 s) F' ~: `4 t
(1)不调用C++/C的字符串库函数,请编写函数 strcpy4 ^ \9 {$ @) y/ _- F. _
char *strcpy(char *strDest, const char *strSrc);
. ^, S5 ?# e& k" S( S' ?, V9 i' z
5 f/ R6 m1 p; K B' d" n8 Y/ c很简单,是吧?再看看别人评分标准:
7 x* {( p4 r' d6 f% W Hchar *strcpy(char *strDest, const char *strSrc);
) w6 _+ D8 ?& R8 T+ H2 |. T& F# E, W4 @" G: d2 x% h) E& H
{
! i$ X( f8 i/ D1 a8 l% W" m: v3 x! Q( I7 L$ }# e m
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分. }6 r5 z) o4 x0 }2 E) x
1 ^' m6 g( k" r& k char *address = strDest; // 2分
4 q9 i$ _7 z& F5 Z! H2 d1 x2 v( a" B8 ?5 s
while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
& y2 S) Y i! ^4 i6 M1 f
6 F% W4 f, {$ n0 w: S) k7 d5 x NULL ; & U" T% ?3 e, J* t
( b3 b# `8 @* y' d: [# f6 R return address ; // 2分
8 i1 p. R! z' [3 _: g& n
1 L* ~0 @$ ]* @! f. l, N) ~}
5 f3 v6 p# N3 L: w' R4 V. c; ^ g# p% V9 A! ^
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。7 L) D* Q5 o6 `2 Q/ T
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!
/ C% j! n6 ]- k$ {$ D一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)0 R- w+ ?/ z4 }0 O
# h! [6 q( ?+ K# X) l
, o) W3 c- Z" H
1 }1 e2 }/ {- H# m, t
请写出 BOOL flag 与“零值”比较的 if 语句。(3分), c1 I" a/ T* f/ F5 J* @
+ h9 _, j! \6 j9 [标准答案:* g: L4 X' A4 J
9 [2 v9 M2 G% C3 L2 W" Y% R* H- M if ( flag ), B+ a. p. T$ t, j( |/ X
6 `: H9 H5 i9 ?: U5 M( I" l
if ( !flag )( \: c f1 h1 [# I! V- p& d3 \' G6 ]
如下写法均属不良风格,不得分。, w* f; _9 c$ N3 j# u; [. |
" M: T3 W- m6 i7 s9 p! N if (flag == TRUE) 9 ^5 ]3 A/ o6 q5 [, u- @, M# W
! v+ t; ?% M* I if (flag == 1 ) + f Q/ }% G; d" K4 S7 D7 J3 a
) c$ s1 J$ A) W G7 A if (flag == FALSE)
2 R; |# R( ?2 x# p0 \9 j) U
6 f# x: \3 F- E5 q( k if (flag == 0)
3 o' Z& X& k! O" g) G( z5 l" G2 \- ?5 T5 f" p" o1 F
请写出 float x 与“零值”比较的 if 语句。(4分)$ C- |9 ]; P" E( H; [
! ^, y/ u# U1 v2 I' R; d
标准答案示例:/ R. X7 h* @. S# N! y
6 Y. i/ u4 D( Q8 y9 Z: N' U6 e+ sconst float EPSINON = 0.00001;3 @: c6 m( x+ A ~& |/ H' O' H
7 p5 N# B3 t5 B' Z; D; aif ((x >= - EPSINON) && (x <= EPSINON)
. ]/ V, l: ^' I4 i9 J1 g$ M: I' C& V) u! C, g. ^- y
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
; i( {! a3 v9 _ p _; W' @
6 f6 f, u' o- S" s( ]3 X
3 z8 h. H9 h* e- v. j6 P# m9 }# V
0 ~" F1 G9 A, t' G2 ~# \ u" K3 ] G/ `( b
如下是错误的写法,不得分。8 i; U, l7 @* Z2 ^8 ~ U' \
6 d% k. r4 F* y) o
if (x == 0.0)
: W6 \# @/ X& W/ t" t$ {8 o8 s! J" M; P: W- @' R* F6 P
if (x != 0.0)
3 ?3 ^& I: r% f3 z
4 q' m/ b, W8 l4 X' W ) K! ~( \ l3 B" h8 T
& G" @: {' q- `3 D" m3 ?% r
请写出 char *p 与“零值”比较的 if 语句。(3分)9 W3 s$ |5 G8 `% x* l1 N; p, S
5 |- u# H- t% Y: V: u
标准答案:8 m; j$ w# B" `$ c
7 K6 |) t/ \' X2 z3 C
if (p == NULL)( S5 X% R; @" Q7 k
9 o0 R$ N- S7 x" P
if (p != NULL)
5 G% ~, G' G; |8 D# Q如下写法均属不良风格,不得分。. B- Q3 S; x$ ?! j/ c
; {. g; l. B1 N& @% v
if (p == 0)
. [9 ~2 L% d! l4 C) |, R$ k) K- S$ G& x7 B1 S2 }/ T+ Z" k3 C0 W
if (p != 0)
2 [9 |- |. s: @+ o
# g4 s1 ]9 G+ Q3 }. y2 |5 R5 p if (p) 5 c$ T* }+ O$ h4 u. s
* z8 f6 ?+ x/ R% d3 J. t5 X0 p1 M/ `- g if (!)
+ t7 ^" v& w# b: z3 ^# m6 C" z$ u/ X5 R8 \0 o/ A, u
看到了吧? |
|