Browsed by
分类: 编程语言

如何学好C语言

如何学好C语言

有人在酷壳的留言版上询问下面的问题

keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

  1. 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
  2. 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (152 人打了分,平均分: 4.70 )
Loading...
“火柴棍式”程序员面试题

“火柴棍式”程序员面试题

有时候,有些面试题是很是无厘头,这不,又有一个,还记得小时候玩的的“火柴棍游戏”吗,就是移动一根火柴棍改变一个图或字的游戏。程序面试居然也可以这么玩,看看下面这个火柴棍式的程序面试题吧。

下面是一个C程序,其想要输出20个减号,不过,粗心的程序员把代码写错了,你需要把下面的代码修改正确,不过,你只能增加或是修改其中的一个字符,请你给出三种答案。

int n = 20;

for(int i = 0; i < n; i--){
    printf("-");
}

不要以为这题不是很难,我相信你并不那么容易能找到3种方法。我觉得,如果你能在10分钟内找出这三种方法,说明你真的很聪明,而且反应很快。当然,15分钟内也不赖。不过,你要是30分钟内找不到三种方法,当然,不说明你笨了,最多就是你的反应还不够快。嘿嘿。就当是玩玩吧。

下面是我的答案:

//第一种解法:在for循环中给n加一个负号
for(int i = 0; i < -n; i--)

//第二种解法:把 n 初始化成 -20
int n = -20;

//第三种解法:把for循环中的 i 初始化成40
for(int i = 40; i < n; i--)

不过,我要告诉你,以上这些答案都不对(我就知道你会偷看答案的),不过,顺着这些思路走很接近了。呵呵。

下面是正确答案——

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (51 人打了分,平均分: 4.57 )
Loading...
可视化的排序过程

可视化的排序过程

下面是一个日本程序员制做的一个可视化的排序过程,包括了各种经典的排序算法,你可以调整速度和需要排序的个数。酷壳以前也介绍过几篇相关的文章 一个排序算法比较的网站一个显示排序过程的Python脚本 关于各种排序算法的运行复杂度比较,请参看Wikipedia的排序算法比较

好烂啊有点差凑合看看还不错很精彩 (67 人打了分,平均分: 4.76 )
Loading...
另类UX让你输入强口令

另类UX让你输入强口令

昨天和大家说了一下关于口令破解的一些东西,那篇文章告诉我们需要设置一个比较强的不易破解的口令。

今天在网上看到一个强大的jQuery插件,叫NakedPassword,其通过“强大的用户体验”让你输入一个比较强且不易被破解的口令。虽然有点另类,但是我个人相当欣赏这个UX,因为UX实在是太到位了——只有你输入的口令比较强,图片中的女人才会脱光衣服

下面是演示:

请输入你的口令(输入时出现效果)

这个例子和以前的那个例子一样,告诉你UX设计是重要性。

(全文完)

好烂啊有点差凑合看看还不错很精彩 (35 人打了分,平均分: 3.97 )
Loading...
中国的C2C模式

中国的C2C模式

C2C不是电了商务里的C2C,而是Copy to China的缩写,以前,我们以Made in China著称,现在我们会以C2C著称。toxicat制作了下面这个图片(源图),大家慢慢欣赏,我相信,如果要把所有的C2C都列上去的话,那么,可能会上很长的一个图片。还记得那篇为什么中国的网页设计那么烂?吗?呵呵。何止是互联网,其它东西不也是C2C吗?

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (19 人打了分,平均分: 4.11 )
Loading...
如何调试makefile变量

如何调试makefile变量

六、七年前写过一篇《跟我一起写Makefile》,直到今天,还有一些朋友问我一些Makefile的问题,老实说,我有一段时间没有用Makefile了,生疏了。回顾,这几年来大家问题我的问题,其实很多时候是makefile的调试问题。所以,就像我在之前的那篇关于GDB的技巧的文章中做的一样,在这里向大家介绍一个小小的调试变量的技巧。相信一定对你有用。

对于Makefile中的各种变量,可能是我们比较头痛的事了。我们要查看他们并不是很方便,需要修改makefile加入echo命令。这有时候很不方便。其实我们可以制作下面一个专门用来输出变量的makefile(假设名字叫:vars.mk)

%:
        @echo '$*=$($*)'

d-%:
        @echo '$*=$($*)'
        @echo '  origin = $(origin $*)'
        @echo '   value = $(value  $*)'
        @echo '  flavor = $(flavor $*)'

这样一来,我们可以使用make命令的-f参数来查看makefile中的相关变量(包括make的内建变量,比如:COMPILE.c或MAKE_VERSION之类的)。注意:第二个以“d-”为前缀的目标可以用来打印关于这个变量更为详细的东西(后面有详细说明)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (20 人打了分,平均分: 3.90 )
Loading...
打印质数的各种算法

打印质数的各种算法

打印质数的算法应该是学习计算机编程的一个经典的问题,在这里想给大家展示一些方法,相信这些方法会对你的编程有一定的启发作用。请你注意几点,

  • 实际应用和教学应用有很大的差别。
  • 最后的那个使用编译时而不是运行时的方法大家可以重点看看。

教科书的示例

首先,先给一个教科书的示例。下面这个示例应该是教科书(至少是我上大学时的教科学)中算法复杂度最好的例子了。其想法很简单,先写一个判断是否是质数的函数isPrime(),然后从1到n分别调用isPrime()函数来检查。检查是否是质数的算法是核心,其简单的使用从2到n的开根的数作为除数。这样的算法复杂度几乎是O(n*log(n)),看上去不错,但其实很不经济。

#include <iostream>
using namespace std;

bool isPrime(int nr)
{
    for (int d = 2; (d * d) < (nr + 1); ++d){
        if (!(nr % d)){
            return false;
        }
     }
    return true;
}

int main (int argc, char * const argv[])
{
    for (int i = 0; i < 50; ++i){
        if (isPrime(i)){
            cout << i << endl;
        }
    }
}

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (14 人打了分,平均分: 3.14 )
Loading...
(麻省理工免费课程)计算机科学和编程导论

(麻省理工免费课程)计算机科学和编程导论

以前本站推荐过麻省理工的C/C++的课程,今天在他们的网站看到上有一组关于计算机科学和编程导论的免费公开课(视频是Youtube的),我看了几个课程,我觉得讲得很系统啊,而且有一点一通百通的感觉。虽然是理论课,但是可以感到我国的教育还是有很大差距的。这个组课程推荐给大家(需要翻墙),视频都有字幕,计算机科学系毕业的同学应该会很容易听懂。强烈推荐。(网友Aslan指出已经有人搬运到优酷上了,链接在这里,遗憾的是没有字幕,另外,不知道为什么会说是Python学习)

 

1: Introduction and Goals; Data Types, Operators, and Variables

Youtube(英文字幕)

优酷(无字幕)

 

2: Branching, Conditionals, and Iteration

Youtube(英文字幕)

优酷(无字幕)

 

3: Common Code Patterns: Iterative Programs

Youtube(英文字幕)

优酷(无字幕)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (16 人打了分,平均分: 3.50 )
Loading...
Web开发人员速查卡

Web开发人员速查卡

无论你是多牛的程序员,你都无法记住所有的东西。而很多时候,查找某些知识又比较费事。所以,网上有很多Cheat Sheets,翻译成小抄也好 ,速查卡也好,总之就是帮你节省 时间的。之前给大家介绍过Web设计的速查卡25个jQuery的编程小抄,还有程序员小抄大全,今天转一篇开发人员的速查卡,源文在这里。下面的文章我就不翻译了。

HTML Cheat Sheet

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 4.00 )
Loading...
为什么中国的网页设计那么烂?

为什么中国的网页设计那么烂?

Nick Johnson,一个有12年经验的Web设计师在它的blog里写下了“Why is Chinese Web Design So Bad”,新浪,人人,百度,阿里巴巴,腾讯榜上有名。其中的观点相当的好,希望所有的中国人都读一下。我不全文翻译了,只是给大家看一些摘要。(保证不会像《环球时报》一样)

——————————

作者2005年的夏天来到中国,他说,他注意到了中国那复杂的文化和西方的有多么的不同。比如,语言,身体特征,政府的执政理念,等等,但是,有一些地方确是差别很少的,比如:幽默的sense,还有对艺术的表现形式的兴趣。很快,因为职业,他发现在中国的网站设计上完全没有引吸到他。于是他开始让身边的中国朋友尽可能多的给他推荐中国的网站,他觉得这个可以对他学习Web Design有帮助。

当他在评论起新浪,人人,百度,阿里巴巴,腾讯的时候,他说,百度和其它的不同,因为百度悍然地公开抄袭Google的Web Design(blatantly copied their design from Google),而人人则是很明显地抄袭facebook(clearly copied their design from Facebook)。而其它的多数的中国网站看上去有很多很多滑稽可笑的文本,一些网站在滥用图片,一些网站图片又不够。他感到很困扰,这样的网站都能被接受?这么多的东西,网民怎么可能看得过来啊?中国人怎么可能容忍这些。(注:他不知道我们中国人能承受的比这更多)

阅读全文 Read More

好烂啊有点差凑合看看还不错很精彩 (43 人打了分,平均分: 4.47 )
Loading...