2008年8月3日星期日

程序员入门的12个问题

以下题目是应一个朋友问而写的,适用于刚刚入门有志或者有需要做程序的朋友的题目。题目脱胎于日常编程中常见的一些问题,很多是贝壳实际碰到问题的变形。题目不注重所用语言,每道题目可以用不同语言解决。有意思向计算机方向发展的可以试试用不同语言来解决,看看哪种语言最方便解决这种问题。如果打算增加难度的话,请使用C++来做,并且尽量抽象复用。在这个过程中积累下来的可复用代码会对以后编程有很大帮助。

1.读出文件中的以下格式内容,计算逆矩阵,并按照同样格式输出。
1 2 4.5
3 0 1
9 5 2
数字间以空格分割,行以回车分割。
难点:
输入和输出应当可以选择是键盘输入还是文件输入,输出到屏幕还是输出到文件。
逆矩阵计算中有可能求不出,出现除零。设法避免直接的报错。
评价:
很中规中矩的一个问题,有点竞赛的味道。只要做过程序的人一般不会失手。

2.某个XML,其中记录了一些信息。信息是按照时间-地点-人物的顺序记录的,例子如下:



...



现在需要你颠倒一下,变成这样的:



...



难点:
看看能想出多少解决问题的方法。
试试尽量减小内存消耗。
评价:
解决问题的方法很多,比较一下这些方法的优劣。
有一年以上程序经验的就可以最终解决,但要解决的比较完善需要两到三年经验。

3.下载google的首页,跟踪二级连接(二级连接,就是首页中连接指向的页面,上面连接指向的页面)。
并计算其中所有页面,显示出的非空白字符的个数。(显示的文字中的非空白字符)
难点:
试试看跟踪js脚本链接。
登陆后的google首页是不一样的,包括提示,语言类型,设法统计登陆后的首页。
如果是多级呢?
评价:
宽度优先和深度优先算法的应用,对集合运算有一定要求。
重点在于获取和处理html页面的方法。
一年以上即可解决,完善程度和技术水平关系不大。

4.运行两个程序,A和B,将A的输出输入到B中。
难点:
需要等待A的输出和B的输入,以及程序的终止条件。
评价:
需要对系统熟悉,知道管道和用法。知道进程间交互的API。
需要研究过系统,程序水平没有要求。

5.遍历某个目录,找出其中的特定图片文件。
难点:
怎么分析图片文件?文件名是比较粗略的方法,更好的是使用文件签名分析。
下次遍历的时候速度怎么提高(假定文件不变化)。
评价:
还是深度和宽度搜索题目,分析文件是难点。
扩展要求对于数据缓存有一定要求。
一年以上即可解决,文件签名分析看个人水平。

6.监视某个目录的变化,将新加入的mp3的相关信息(IDv3)邮件发给我。
难点:
怎么监视目录变化?
怎么提取MP3的内容?
怎么发邮件?
怎么保证不漏内容。
评价:
要对系统熟悉,了解mp3格式或者能够自行寻找库扩展语言。
了解邮件发送协议,或者能使用系统库发送邮件。
两年以上可解决,完善需三年以上水准。

7.写一个程序,可以计算加减乘除,支持括号。
难点:
让你的程序算算1+2*3,看看是多少。正确应当是7,设计不良是9。
看看你的程序,2/6*3得多少,是不是1.0(最好是1)。
让你的程序设法支持乘方和函数。
评价:
对数据结构和算法要求很高。
一年以上可解决,要扩展支持算符和算法,需要三年水准。

8.画一只乌龟,保存为图片。
难点:
让用户动手画?
试试保存为各种格式的图片。
评价:
实用项目,按照书本教程最多12小时就可以掌握。
然而需要自行解决并做好,至少一年以上。

9.写一个小桌球程序,让一个白球设法打落一个黑球。
难点:
注意屏幕闪烁。
写个9球游戏如何?
评价:
对物理知识有一定要求,对游戏常识(双缓冲)有一定了解。
扩展要求了解桌球规则。
两年以上水准。

10.写个小的管帐系统,告诉我这个月你钱是怎么花出去的。
难点:
随时记账。
评价:
系统并不难做,然而考虑实用性后,很少有系统能得到好成绩。

11.写一个小程序,向一个文件的第11字节写一个A,并将程序编译好后的大小控制在2K以内。(不得使用虚拟,脚本语言完成)
难点:
控制大小。
评价:
对可执行程序的结构和优化,系统库结构有相当了解,这是为C++语言设计的题目。
三年以上水准。

12.写个小阅读器。
难点:
能读HTML么?繁体呢?
小心编码问题。
ZIP包内的文件能读么?
评价:
最终的实用项目。
一年就可以做,但是做好至少要三年以上水准。

没有评论: