Delphi的高手、中手、新手都来看看(From csdn 2002.5)(100分)

  • 主题发起人 主题发起人 blue_morning
  • 开始时间 开始时间
B

blue_morning

Unregistered / Unconfirmed
GUEST, unregistred user!
从学C语言至今16年了,几年前我开始进行技术能力评估时完出了一个骗人的小把戏(为了向一个我很尊敬的人表现自已时想出来的),到昨天终于把最终结果告诉了昨天面谈时一个很不错的小伙。再也不能玩这个小把戏了,我虽然觉得很不爽,但你不妨用它来评价一下自己在C语言某些方面的功底。
假设你是某公司的白盒测试(White Box Testing)人员,对某一可运行的测试版进行测试时看到了以下一段代码:
int a;
a = // 此处为一表达式
// 以下代码为问题的关键部份,以上代码与问题无关
if (a == 5)
return 1;
else
return 0;
当看到这段代码后,请考虑你在10秒以内的反应?



// 请慢慢的滚动你的鼠标,一行一行的看。看得越慢你会觉得越意思的


以下是我在评估中所遇到的各种情况及我对不同的情况的打分:

第一种:没有任何反应 得分:0分

第二种:将代码更改为以下形式 得分:10分
if (5 == a)
return 1;
else
return 0;

第三种:将代码更改为以下形式 得分:30分
return (a = 5 ? 1:0); // 注意:代码反而被你改错了!

第四种:将代码更改为以下形式 得分:40分
return (a == 5 ? 1:0); // 这是以上代码的正确形式!

第五种:将代码更改为以下形式 得分:60分
return (5 == a ? 1:0);

第六种:将代码更改为以下形式 得分:80分
return (a == 5);

第七种:将代码更改为以下形式 得分:85分
return (5 == a);

第八种:将代码更改为以下形式 得分:90分
#ifdef CompilerA // 你已经知道A编译器做为一种特例,将T返回0、F返回-1
return (5 == a) + 1;
#else
return (5 == a);
#endif

小结:
此问题并不代表一个人在C语言上的能力,希望你不以偏带全的来考虑问题。这只是一个小小的玩笑。在与我玩过这个小把戏的人中,90%的人的得分都是0分。在剩余的人中, 80%得分在10至40分之间;15%得分是60分;5%的人的得分是80分或85分。只有一个人得到了90分。
在与此人交流的时候,我又玩了一个小小的阴招,我告诉他将代码写成以下形式:
return (5 == a) + //something
我让他好好的想一想这个something是什么东西,他果然上了我的当。在将20个月一起共事的时间里,我一直没有告诉他是什么。
今天在此也特意向你表示道歉,因为你没有发现这个阴谋。其实你被“+”号误导了。相信你看到这里已经知道答案了,你仍然是我见过的最优秀的C程序员。在后来的日子里,我明确的告诉一些人这是个阴谋,甚至于明确告诉了几十个得到85分的同志“+”是一个阴谋,都没有一个人得出了最终的答案。

代码如下:
return (5 == a) xor (1 == 1);


哈哈,看到这里你一定要大骂我了,“你这是写得哪门子程序呀?是C#吗?”。观众同志,你看出了问题吗?



不错,“xor”分明是PASCAL的操作符,看来我真的是把几门语言混在一起了。有用过C语言异或操作符的吗?请告诉我吧。


其实这又是我的一个小把戏,不过在那十来个我告诉迷底的人中(包括昨天的那个小伙),没有一个指出我的错误。也许真的是给足了我面子,也许对C语言还是有点那个。

我心目中的标准答案: 得分:99分
return (5 == a) ^ (1 == 1);
其实你已经得到这个分数了。有机会我香港给你打工,不知你要不要我?(开玩笑,你知道我家里的情况)。我真的非常怀念与你一起共事的日子,那是我真正写C语言的二年的时间。那五十万行代码也许将是我最大的“程序”。当然也很感谢你让我看了那段日子你让我看了你近三十万行的心血,毕竟我们年龄不一样,我精力要比你充沛的多。并且让我这样一个低学历的人在你面前逞尽了威风,甚至于常常为了一点鸡毛蒜皮的小事与你争吵,有时候还常常把你骂得狗血淋头,真的赶谢你给我“约法三章”以及很多很多的帮助。
真的非常感谢您!!!(下不为例,保证用“你”这个字)那次意外让我失去了与你联系的方式。我真的希望你能看到我的这篇贴子。也希望你不会再责备那个司机了,你走以后他一直很内疚,那次他留了二个小时的Buffer,但堵车实在太历害了。

观众同志,你是不是真的看得很慢呀,要是你真的看的很慢,要是你每看到下一个都觉得比上一个写得好,甚至是想了一想才有这个感受(也许想了好久,也许根本不知道为什么),那么你的C语言的水平真的是很那个.....(谁在乱扔东西)
好了。这个小把戏不代表一切,但真的有那么一点意思。只是想轻松一下,刚才写了许多让我难过的话。
如果你觉得这篇文章不错的话,请推荐给你的朋友。希望能通过互联网,能帮我找到那位传奇的人物。也谢谢你,观众同志。

对了,最后再对QQ上的同志提一点要求:
请称呼我“代码狂——人”,最后一个字只是修饰。如果想省略的话,请叫“代码狂”而不要叫“狂人”。
——至今玩了十六年C语言,其中真正写了两年的C语言。
 
C語法真TMD的有深度,難怪說真正的程序員用C
pascal寫來寫去還是一個樣
 
测试要看别人的代码,不是自己的吧。
如果自己错了,也可以吗
 
厉害!!
 
再厉害也只是写代码的狂人(Sorry!应该是代码狂---人),不过我还是喜欢。
 
厉害
你真可爱
 
编译器的花样真多
 
从代码的可读性方面来说,当然原来的写法才是最好的.
 
得分80,虽然我没用C做过东西,可是在这上面专牛角尖有什么意思?写成原来的代码也不错吗
至少一看就懂.
 
我也只能得80分了。也许85分更合我的理想。
 
以前看c的代码就觉得累眼睛,诶....
 
这些把戏没有点出C的精华,反而暴露了C的弱点。
 
我没做过测试,但是就C来说我觉得40分是最正常的,仔细看看我的最后答案可能是
return(5==a)呵呵,1,0就是F,T嘛;C的写法确实很多,我觉得这是C的特点,第一种是
最好看懂的,但最后的答案无疑是效率最高的,写程序追求的应该是这种境界吧!
 
谭版的C教程不是也举了一个计算闰年的、有很多种写法的例子吗
 
你们之间一定发生了什么动人的故事
我好想听
 
我很不认同这个发贴的人
为什么?
 
我也不是很认同,
虽然我没怎么写过C程序,
不过我觉的写程序不应该只考虑效率,
特别是现在的硬件水平发展越来越快,我们只能在效率与可读性之间求一个平衡点,
当然对于有这样水平的程序员我是非常敬佩的,
 
不过是玩弄代码技巧的伎俩。
简直是垃圾!
心中有垃圾一切便是垃圾......
 
同意DarwinZhang的看法
玩C玩了16年不垃圾才怪
 
后退
顶部