{"action":"opened","issue":{"url":"https://api.github.com/repos/wujr5/c-and-cpp-language-learning/issues/8","labels_url":"https://api.github.com/repos/wujr5/c-and-cpp-language-learning/issues/8/labels{/name}","comments_url":"https://api.github.com/repos/wujr5/c-and-cpp-language-learning/issues/8/comments","events_url":"https://api.github.com/repos/wujr5/c-and-cpp-language-learning/issues/8/events","html_url":"https://github.com/wujr5/c-and-cpp-language-learning/issues/8","id":112110733,"number":8,"title":"软件：week4 问题反馈+扩展练习","user":{"login":"ghostbody","id":8371330,"avatar_url":"https://avatars.githubusercontent.com/u/8371330?v=3","gravatar_id":"","url":"https://api.github.com/users/ghostbody","html_url":"https://github.com/ghostbody","followers_url":"https://api.github.com/users/ghostbody/followers","following_url":"https://api.github.com/users/ghostbody/following{/other_user}","gists_url":"https://api.github.com/users/ghostbody/gists{/gist_id}","starred_url":"https://api.github.com/users/ghostbody/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ghostbody/subscriptions","organizations_url":"https://api.github.com/users/ghostbody/orgs","repos_url":"https://api.github.com/users/ghostbody/repos","events_url":"https://api.github.com/users/ghostbody/events{/privacy}","received_events_url":"https://api.github.com/users/ghostbody/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-10-19T09:47:55Z","updated_at":"2015-10-19T09:47:55Z","closed_at":null,"body":"##week4 问题\r\n大家学习编程差不多一个月多了，编程对初学者是非常痛苦的事情，我们也曾经历过上课听老师讲得如痴如醉，下课看书像看天书，做题感觉难到爆炸的时候。别慌，这都是称为强者必经之路。\r\n\r\n说说我们大一的时候。我们的Ta是竞赛队的，然后出的题目特别难，我们有一次宿舍一个周日就做了一道题。反正我们是各种被虐，而且那时候实验课和理论课基本上脱节，实验课的内容大概超前2~3周左右。\r\n\r\n说这些干嘛，就是想说，编程入门的门槛是不低的，他考验人的耐心、细心、专心和信心，同时也考验你严密的思维。\r\n\r\n### 1、 要善于观察和发现错误，善于总结经验。\r\n比如，你看到scanf就要意识到参数需要取地址，否则就会出现内存报错。自己犯下的错误会一而再再而三地犯，比如赋值运算符 `=` 和 逻辑判断相等 `==`，比如变量忘记初始化，比如循环一轮之后没有把变量重新初始化，这些等等等，大家绝对会搞错。\r\n\r\n### 2、要好好理解概念。\r\n有人会说会打代码就行，那些理论可以不管。这些是误人子弟的说法。c语言是大家学习的一门编程语言，是一个很基础但是是全世界使用排名第一的语言，它里面蕴含很多计算机编程的基本的东西，其实只要搞懂c和下学期的c++，你会发现其他语言的学习完全可以通过类比的方式快速学到。功夫在语言之外，练功在语言之内。\r\n\r\n### 3、养成好的编程习惯。\r\n习惯是很难改的，编程也是一样，一旦养成一些坏毛病以后就一直那样了。为什么要抓代码风格？我参加过的一些大型项目里面就有很深刻的体会，那些代码量很大，是协同合作完成的，可是人与人之间的沟通成本是很大的。如果代码是乱乱的，变量名乱乱的，毫无注释，这些代码真的就是团队毒瘤，谁都看不懂。或者说，你自己写的代码乱用这那的，然后过一段时间你也不知道自己当时写的啥。所以这个真的很重要。\r\n\r\n### 4、学会问问题。\r\n问问题是一门艺术，真的。首先你要问，不要害怕同学或者师兄，很多问题你可以提出来的，不要不懂就放在那，然后抱怨很难。第二，问问题是有技巧的。\r\n第一种问法： 给一段长长的代码，跟我说，师兄，这个题不对啊，怎么办啊？\r\n第二种问法：师兄，我这题系统显示runtime error，怎么办呀？\r\n第三种问法：师兄，我这题系统显示runtime error。我的程序的思路是先用scanf读入两个整数，然后将他们相加，然后进行输出。在这个过程中我用到了三个变量，分别代表和（用于输出），两个临时变量进行存储两个输入的值。系统说运行时错误，运行时错误的原因，我查过了，可能是非法内存访问。请问这怎么办？\r\n\r\n大家可以到stackoverflow上面看看大家是怎么提出技术问题的。\r\n\r\n### 5、关于算法和语言。\r\n什么是算法？\r\n如果是有编程基础，或者志向于ACM队的同学，你就应该多搞算法，刷西西里的题目。对于其他同学我认为，你大可不必放太多精力去那些著名的算法理论中。这一年我们学的重点是基础，是学会如何使用编程语言，让他成为一个软件工程中的有效的工具，同时提取编程语言中的思想。而且，以后你们学习算法的课还多了去了。\r\n\r\n### 6、关于变量命名\r\n我们对于变量一般采用意义来命名。也就是说变量是干嘛的就命名成什么。\r\n\r\n比如一道题目，输入n个数，求n个数的和，那就应该这样声明变量：\r\n\r\n```c\r\nint n; // the number of digits\r\nint sum; // the sum of the n digits\r\n```\r\n\r\n而不要声明成\r\n```c\r\nint a, b;\r\n```\r\n\r\n这两个声明方法的可读性有着本质性的区别，大家好好体会。\r\n\r\n### 7、早起早睡\r\n很多同学可能现在已经养成了熬夜的习惯。可是我想说，无论你是社团任务重还是课程任务重，都不要选择熬夜。第一熬夜很伤身，第二早起的效果更好。以后周日的作业还是周一早上在放出来，免得大家熬夜写作业，真心不好。\r\n\r\n### 本周扩展题目\r\n\r\n[week 4 扩展题](http://172.18.228.154:8080/questions)\r\n\r\n有些题目难度很大，希望你只看一眼，起码要知道题目是要你干嘛的，思考一下，实在做不来就放着，继续看书自学，争取走在老师前面，这样效果更好。\r\n\r\n特别注意：贪吃蛇那道题目是你们软件工程导论之后要做的课程项目，那个题给了你们核心算法的思路，可以看看。\r\n\r\n### 记得在周日前提交实验报告\r\n\r\n### 同时之后会有实验课的课程设计，大家做好心理准备\r\n\r\n### 有任何问题，欢迎留言，无论学习c语言还是其他课程或者大学生活，欢迎。\r\n\r\n### 还有，以后实验课问问题可以报下自己什么名字，好让我认识一下大家。Ta也是大家朋友，一起学习嘛。\r\n\r\n13级嵌入式：叶嘉祺\r\n2015年10月19日\r\n"}}