我正在寻找一系列可以用来构建我的C技能的C问题(有解决方案)。我已经理解了语言,语法和语义的基础知识。我正在寻找一系列问题,这些问题将帮助我磨练自己的技能,而不是你在入门编程课上看到的一系列简单问题。
答案 0 :(得分:10)
不要忘记 code-golf 。
您可能只想回复至少 10赞成的挑战(问题)。
答案 1 :(得分:10)
您可以尝试解决Project Euler上的一些问题。前几个很简单,但很快就会变得非常具有挑战性。我认为尝试使用最短的代码或高度优化的代码来计算结果会很有趣(但是,我通常使用C ++或Python,而不是C)。
Project Euler问题的一个优点是它们不仅仅是以语言为中心的;他们的问题确实让你想到如何为困难问题找到一个优雅的解决方案。
答案 2 :(得分:6)
构建实现复杂data structures的库,如二叉树,字典等。
答案 3 :(得分:6)
以下是包含在线评委(和类似评论)的网站列表,其中包含各种各样的问题:
(网站按字典顺序排序)
ACM Live Archive,来自ACM / ICPC地区和世界总决赛的问题。
Arbiter,伊朗谢里夫大学的在线评委。
13。National Taiwan University Online Judge
14。Online Problems Solving System (OPSS)
15。Peking University Online Judge
21。TopCoder
23. USACO Training Program Gateway
25。Wuhan University Online Judge
27。Z-Trening
答案 4 :(得分:4)
编写一个编译器。它不需要复杂甚至完整:你可以组成一个简单的语言(lisp的一个子集?),然后为它编写一个词法分析器。确保首先放下正式语法。你将触摸内存管理,指针算术和其他整洁的C东西。
通过在C ++中编写一个简单的YAML解析器,我学到了很多关于自动机和编译器设计的知识。
答案 5 :(得分:2)
试试Dennis Ritchie关于C编程语言的书。这本书有很好的问题,阅读它是一个快乐:) 对于更具挑战性的问题,您可以访问Bitwise Programming contest
答案 6 :(得分:1)
Ruby Quiz解决方案有156个问题。但是在Ruby中,而不是C.在James停止成为Ruby测验大师之后,请查看ruby-lang邮件列表。
答案 7 :(得分:0)
Knuth的按位存储库可能有助于高尚的追求:)
答案 8 :(得分:0)
练习code Katas,语言并不重要。尝试解决你已经用另一种语言做过的Katas通常可以非常有效地学习一门新语言。
答案 9 :(得分:0)
您可以随时访问Freshmeat,找一些您感兴趣的项目,并查看他们的错误跟踪器。抓住代码并尝试解决一些问题。
这有助于开源,同时也可以帮助您习惯使用调试护目镜跳转到其他人的代码。