wujr5 / c-and-cpp-language-learning

C和C++编程语言学习 - 2015级
67 stars 34 forks source link

软件:week4 问题反馈+扩展练习 #8

Open ghostbody opened 8 years ago

ghostbody commented 8 years ago

week4 问题

大家学习编程差不多一个月多了,编程对初学者是非常痛苦的事情,我们也曾经历过上课听老师讲得如痴如醉,下课看书像看天书,做题感觉难到爆炸的时候。别慌,这都是称为强者必经之路。

说说我们大一的时候。我们的Ta是竞赛队的,然后出的题目特别难,我们有一次宿舍一个周日就做了一道题。反正我们是各种被虐,而且那时候实验课和理论课基本上脱节,实验课的内容大概超前2~3周左右。

说这些干嘛,就是想说,编程入门的门槛是不低的,他考验人的耐心、细心、专心和信心,同时也考验你严密的思维。

1、 要善于观察和发现错误,善于总结经验。

比如,你看到scanf就要意识到参数需要取地址,否则就会出现内存报错。自己犯下的错误会一而再再而三地犯,比如赋值运算符 = 和 逻辑判断相等 ==,比如变量忘记初始化,比如循环一轮之后没有把变量重新初始化,这些等等等,大家绝对会搞错。

2、要好好理解概念。

有人会说会打代码就行,那些理论可以不管。这些是误人子弟的说法。c语言是大家学习的一门编程语言,是一个很基础但是是全世界使用排名第一的语言,它里面蕴含很多计算机编程的基本的东西,其实只要搞懂c和下学期的c++,你会发现其他语言的学习完全可以通过类比的方式快速学到。功夫在语言之外,练功在语言之内。

3、养成好的编程习惯。

习惯是很难改的,编程也是一样,一旦养成一些坏毛病以后就一直那样了。为什么要抓代码风格?我参加过的一些大型项目里面就有很深刻的体会,那些代码量很大,是协同合作完成的,可是人与人之间的沟通成本是很大的。如果代码是乱乱的,变量名乱乱的,毫无注释,这些代码真的就是团队毒瘤,谁都看不懂。或者说,你自己写的代码乱用这那的,然后过一段时间你也不知道自己当时写的啥。所以这个真的很重要。

4、学会问问题。

问问题是一门艺术,真的。首先你要问,不要害怕同学或者师兄,很多问题你可以提出来的,不要不懂就放在那,然后抱怨很难。第二,问问题是有技巧的。 第一种问法: 给一段长长的代码,跟我说,师兄,这个题不对啊,怎么办啊? 第二种问法:师兄,我这题系统显示runtime error,怎么办呀? 第三种问法:师兄,我这题系统显示runtime error。我的程序的思路是先用scanf读入两个整数,然后将他们相加,然后进行输出。在这个过程中我用到了三个变量,分别代表和(用于输出),两个临时变量进行存储两个输入的值。系统说运行时错误,运行时错误的原因,我查过了,可能是非法内存访问。请问这怎么办?

大家可以到stackoverflow上面看看大家是怎么提出技术问题的。

5、关于算法和语言。

什么是算法? 如果是有编程基础,或者志向于ACM队的同学,你就应该多搞算法,刷西西里的题目。对于其他同学我认为,你大可不必放太多精力去那些著名的算法理论中。这一年我们学的重点是基础,是学会如何使用编程语言,让他成为一个软件工程中的有效的工具,同时提取编程语言中的思想。而且,以后你们学习算法的课还多了去了。

6、关于变量命名

我们对于变量一般采用意义来命名。也就是说变量是干嘛的就命名成什么。

比如一道题目,输入n个数,求n个数的和,那就应该这样声明变量:

int n; // the number of digits
int sum; // the sum of the n digits

而不要声明成

int a, b;

这两个声明方法的可读性有着本质性的区别,大家好好体会。

7、早起早睡

很多同学可能现在已经养成了熬夜的习惯。可是我想说,无论你是社团任务重还是课程任务重,都不要选择熬夜。第一熬夜很伤身,第二早起的效果更好。以后周日的作业还是周一早上在放出来,免得大家熬夜写作业,真心不好。

本周扩展题目

week 4 扩展题

有些题目难度很大,希望你只看一眼,起码要知道题目是要你干嘛的,思考一下,实在做不来就放着,继续看书自学,争取走在老师前面,这样效果更好。

特别注意:贪吃蛇那道题目是你们软件工程导论之后要做的课程项目,那个题给了你们核心算法的思路,可以看看。

记得在周日前提交实验报告

同时之后会有实验课的课程设计,大家做好心理准备

有任何问题,欢迎留言,无论学习c语言还是其他课程或者大学生活,欢迎。

还有,以后实验课问问题可以报下自己什么名字,好让我认识一下大家。Ta也是大家朋友,一起学习嘛。

13级嵌入式:叶嘉祺 2015年10月19日

WangMaoyuan commented 8 years ago

大赞

SaltyFish123 commented 8 years ago

66666

ReganFan commented 8 years ago

师兄我想问下,为什么这周实验课的1007题正确答案要在输出所有正数后换行?感觉不换行也能成功啊。西西里硬是要求换行的意义是什么呢?

ghostbody commented 8 years ago

你在dev下不换行没事,他会自动帮你换最后一行。然而在很多终端运行的软件是不会直接换行的,看上去会很难看,你可以试试用 命令行直接运行你没换行的程序。

ReganFan commented 8 years ago

师兄我试过了,但好像结果一样啊? qq 20151023171517

ReganFan commented 8 years ago

然后附上西西里Accepted的加了换行的程序在命令行上运行的例子: qq 20151023172209 在输出所有正数后又换了行,感觉看上去没换行也没多大问题,还是我弄错了?不过还有其他所谓终端运行的软件没见过,我还是乖乖换行吧···

ghostbody commented 8 years ago

你看这个: screenshot from 2015-10-23 19 14 56

ReganFan commented 8 years ago

好的,我知道了。