|
|
大家在做一些公司的笔试时,是否有时觉得编程题简直弱智?是否有时候考完试感觉良好,但是最后却发现自己没通过笔试?很多时候,我们做题并不懂对方的评分规则,结果笔试时吃大亏。说白了,不是我们不懂规则,而是大学本科的教育不健全(甚至本身教育思想有偏差),从而导致我们在工作中存在隐患。3 N- B# {) o7 ~$ e3 z
现在就针对昨天的3G编程题讲解讲解。昨天笔完3G后,觉得自己分数超过60希望很大。但是现在看了相关评分规则后,觉得自己基本挂了。希望我以及其它有同等问题的人能总结教训,避免丧失更多好的求职机会。(当然,早就有良好编程风格的可以偷笑了)
; o! f2 K( F6 i1 x) F- v
9 O0 y# x- ^" ~' {/ w: W: P(1)不调用C++/C的字符串库函数,请编写函数 strcpy
' S" `) e: n2 Z R. uchar *strcpy(char *strDest, const char *strSrc);9 H; z8 S2 X' Y
; t/ u0 ?7 @# o& k. c
很简单,是吧?再看看别人评分标准:
# n( T+ j1 a- c4 {0 F: V; ~, {& tchar *strcpy(char *strDest, const char *strSrc);
. X1 G7 |. c: C1 U* |, S1 b# X6 g5 U4 t `; Q/ f
{9 K& a ~9 \0 P: S( R" B% Q
( b+ @2 o) b, @ N$ P9 C* h) k
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分4 Y) C- ^* ^# h2 Y* z
9 J3 b$ S& [! Q/ n+ }; E char *address = strDest; // 2分
) {1 S" B* l& m: y! K5 e
8 }4 g q# z3 m1 S2 q while( (*strDest++ = * strSrc++) != ‘\0’ ) // 2分
& S/ V I) X* ]. p6 A9 h7 D* D2 Y1 ~
1 Y! c. v. ~ S+ d0 z/ V# M5 U NULL ;
. _2 |+ J2 @" g/ ]8 L
1 ^% I& N! ^0 y4 V3 k1 d6 t return address ; // 2分6 d' ^, g# Q& _# W) U$ f
5 y0 b6 K- j' h
}
* y) j, S7 w' r7 t: D/ J, ~' t! p/ |; } u. A; e7 f+ Q
不知有没有人跟我一样,发现自己基本一分不得?——因为,我们编程时没有良好的风格,写代码时没注意健壮性、可读性等规范,出错处理意识不强。结果写出的程序,BUG不断,理还乱。这种程序,算法似乎对了,但其实不能得分。% g# A3 y2 N3 g& k: `' `0 r; y7 F
再看看其它一些评分规矩。大家会发现,原来即使算法对了,但是编程风格不良,也是不能被人接受(体现在笔试中就是不能得分)的!
3 m5 I# |3 c9 H一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分)7 N- G% M$ C, o' m
. I a- c3 E! Z7 p U$ E
+ g4 m) n$ Q9 Q( ~& |! X3 y: x3 h$ s5 x0 ?& o$ X% y
请写出 BOOL flag 与“零值”比较的 if 语句。(3分)6 T6 o+ X) I) G/ W+ K
) I2 f, J" f1 ]% Q' h
标准答案:6 X+ N6 Q; g7 x7 T$ U; D5 u: K# |5 G
2 z! q1 p1 y+ ~, E
if ( flag )
9 ^! s+ Y& n7 [3 _5 N( A1 V
) s2 u+ \$ k* B# ?) V if ( !flag )
" V2 [4 w, E8 S+ H$ Y如下写法均属不良风格,不得分。
7 E' o0 E% S, j# i% _7 Z( ?7 e) @1 n2 F S7 A% v5 |7 v
if (flag == TRUE)
; }: L* {$ F2 ?* S i- I2 v: B3 l5 a$ a0 p6 s% b7 k
if (flag == 1 ) q* N+ Y& l; y
* o3 H) z3 P6 g2 O
if (flag == FALSE)
* a) g1 A: c: r. X0 k6 I# D: {! ?+ C, D
if (flag == 0) C% Y( v ^3 z/ P- z# S; \. t
4 j; G) V0 `, Q请写出 float x 与“零值”比较的 if 语句。(4分)
; l( _' W. \( J% f* `& N3 i6 [) {' t$ A8 K+ g# K1 ?
标准答案示例:
/ g; b8 }2 R) _9 x# F
. J- f6 z& M* O. Econst float EPSINON = 0.00001;
0 Q5 q9 G, W d7 F4 R! m; |! U
* z: D9 x* n [5 Aif ((x >= - EPSINON) && (x <= EPSINON)
0 R- s- ?9 H1 x' a' j0 X, w8 N
% j# d! S$ u% v. y+ _不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
0 ]( ^: V5 z a7 |. b+ C% B2 c* i5 `
4 B* W4 z: K& x
+ {/ N0 _ b/ N' Y& u; x b' _
5 m* C3 ^" P! Z
如下是错误的写法,不得分。# m9 @8 \/ G5 `5 ]
H* ?. F6 B* ]5 ]8 t/ c8 ~3 _# Y if (x == 0.0)
" f0 ?8 J$ V w% [' R
# G+ h6 I! e2 @* i if (x != 0.0)
4 S* o8 D, _8 t" W( F; z) P* `: Q# X" U3 R$ C
j* D. L+ I; l K
, X% g1 E1 e: R) c' a
请写出 char *p 与“零值”比较的 if 语句。(3分)% R# W, U) y1 j
7 a9 i. \* Y2 G! H
标准答案:. V% s. F) P# B# z
) C- I5 S% |) C3 V% p* ` if (p == NULL). V6 T, E* V* y( R. b% a5 q4 U( K
5 a A$ g, y) N1 W1 b% ?: S2 d* M" s if (p != NULL)5 i1 p$ V4 ?( E5 I
如下写法均属不良风格,不得分。
- i' a* q# u( ]8 O- w- {
m$ ?0 W7 L a( J# I if (p == 0) 2 F( T M9 Z$ u7 n
0 u' m, B; |4 _ S, r if (p != 0) 8 `! a, J9 h- `" B9 b
8 e+ i) i4 g. Y' g2 U* y- g5 ]
if (p)
6 n% U6 \/ u7 v$ \: n
5 O; F/ D% `4 l/ { if (!)
" Z, W7 o6 M' y: c, W$ x& [
, Y! ^& Q0 c( y1 Y' T/ L* P看到了吧? |
|