1、C语言四年课程经验总结,孙志岗http:/http:/,内容提要,局限不可能完全适用于所有教师的所有课程目标忽略教师的存在手段奇招怪式,历经实战课堂在最不需费心血的地方,还是要费点心血总结最特别所在?神秘一章,局限,不可能完全适用于所有教师的所有课程,局限,依赖于授课内容C语言依赖于授课对象计算机/软件专业大一新生依赖于教师个性懒惰缺少耐心心狠手辣活泼开朗胆大妄为,目标,忽略教师的存在,目标,我的目标都达到了从学生的话看我的目标“只希望过了一段时间后我还能记住这些学过的吧,不过我相信C带给我的经历是难忘的.”“已经身在大二,但是一旦回忆起曾经那些为C疯狂的日子,我依旧喜欢,依旧欢喜,即便我的C
2、成绩不是很好,但是我开始理解什么是学习。”“岗哥让我们感受了C语言之美,他带我们走进了Ritchie和Thompson的世界但更重要的是他把我们引入了计算机世界,让我们在苦难过后为我们自己的专业而自豪,让我们产生无限的求知欲,慢慢地踏上我们各自的计算机之路!”,整体目标,“最后一次作业搞定了,也就意味着一切都结束了,这是我这学期付出最多的一门课,尽管在入学前我连电脑都没碰几下,只是稀里糊涂的报了这个专业,入学后,我还是对它很感兴趣。想一想,也只有这门课没逃过。大一上学期几乎所有课都学得很差劲,是因为没有认真学,如果都像学C语言这下功夫,应该不会学得那差。但是,还有哪门课能像C语言那样有吸引力,
3、让人诚心诚意的用功去学呢。”,整体目标,“一学期残酷的c课就要过去了,有高兴也有失落.高兴暂时不用被舵主再磨练意志了,失落暂时告别了比较有意思的c语言.这学期最大的感想就是:上课是没用的,全在书上,自己回去找吧!在课堂上基本什么都听不动,全靠自己回去看书.这种模式相当好,教会了我自学很重要.鄙视老师.鄙视课本.一切在实践中寻找“!回去和同学讨论相当重要(但不要抄袭),你可以问他大体的怎么做,但一定要转化为自己的东西,之后就会发现自己学会了很多!总之,舵主的课没啥用,粗枝大叶嘀,他只是引导我们进入大门,真正的世界还得自己认识!”,手段,奇招怪式,历经实战,手段,推卸责任的思路555分制难度递减的
4、作业作业自动评判严打雷同作业禁止助教“辅导”不给教材,只给禁书教师偷懒的讨论区屡次被骂的真言堂网上自测题和公开的旧试卷开卷有益一些噱头,推卸责任的思路,教师只起引导作用,学生是学习的主体威逼利诱学生必须去自学自学尝到了甜头,开始喜欢自学于是,主动自学教师根据自学的效果进行点拨,并继续深挖和拓展,555分制,50%作业,5%网上讨论,45%期末考试优点让“突击”无效,学习的重心前移鼓励交流避免偶然性消除了“机考”带来的机房压力等缺点作业中的某些作弊行为不好鉴定登录成绩比较费劲(moodle能自动统计成绩),moodle统计成绩,难度递减的作业(实验),每周至少一个程序,平均代码量接近百行通过网络
5、提交,严格限定结束时间教师在线批改,成绩和反馈自动入库绝对难度递增,相对难度递减相对难度:相对学生当时水平的难度榨取平时时间,期末时间留给其它科目整体难度高有挑战,才有成就感结束前不进行直接讲解内容比授课略微提前,难度递减的作业(实验),优点学生获得极大的锻炼、痛苦、喜悦和自信很多创新涌现,学习热情高涨教师和助教都从学生身上获益缺陷有学生过早放弃“上机后穷的只能吃泡面了!”感谢软件实验中心为计算机学院解决此难题,作业简介,作业1:旅游良伴摄氏温度和华氏温度的互相转换输入输出整数、浮点数运算if和while的嵌套整数除法作业2:Mileage BankACM/ICPC竞赛亚洲赛区原题模拟航空里程
6、累积函数调用字符和数字混合输入else-if和多重嵌套,作业简介,作业3-1:Binomial Showdown组合数计算优化算法,提升速度,避免溢出for循环作业3-2: The Angle打印时钟夹角全面考虑问题,优化逻辑,作业简介,作业4:Goldbachs Conjecture验证哥德巴赫猜想素数验证算法算法优化自定义函数作业5:BT教师的BT课程的BT成绩算法本课程的总成绩统计功能完整的应用程序程序结构设计开始100+代码行,作业简介,作业6:计算行列式辅助线性代数的学习二维数组数组做函数参数作业7:命令行参数分析分析gcc命令行参数所代表的含义辅助学习gcc命令行参数复杂字符串处理
7、,作业简介,作业8:Multiplying Matrices矩阵乘法动态内存分配动态二维数组作业9:A Contesting DecisionACM/ICPC竞赛美洲赛区原题ACM竞赛排名计算结构体,作业简介,作业10:成绩统计从所给二进制文件读数据,统计后输出排名到文本文件文件输入/输出结构体排序2周时间完成,学生反馈,“以前从未学习这门课程,我现在发现没有一点基础真的比其他人要吃力的多.每周的C语言作 业就像一个沉重的包袱,直到拼命作完才如释重负.我发现作计算机作业用的时间超过其他作业之和,我真怀疑这样是否合理?我一开始觉得压力特别 大,但随着几个程序的完成,我已经十分有信心了,”,学生反
8、馈,“出了作业,似乎让人很难,解决之后则满心欢喜,一次作业,一个大的进步,每次作业,相同的心理旅程。”“在一凡苦苦的探索后,我终于编出那让人郁闷 !让人发疯!让人崩溃的实验题.但我此时就像飞一般!”,作业自动评判,自动评判前,自动评判后,教师检查程序的工作量大易犯错尺度不一学生自以为正确就不再继续看到成绩时很受打击做完拉倒整体成绩符合正态分布,教师宏观检查,不再运行程序很少犯错尺度基本一致学生必须要近乎完美看到评判通过时很兴奋主动找更多的题做整体90%以上优秀,学生反馈,Sunner说,“大家要热爱c语言.”所以在上机做作业的时候,不要说自己在编程,而是要说“我在玩c语言“.但是,当自己费劲心
9、血编完程序后检测,却发现有n条错误n条警告,这个时候心里就会犹豫:我真的在玩c语言吗? 在改写成功运行后,却又发现程序运行结果与要求不相符,于是又萌生了个更幼稚的想法:我好象被c语言给玩了! 当耗尽生命,终于把程序正确运行并提交成功,结果判分居然为”0”!恭喜自己吧:c语言已经彻底的把编程者当成了玩具! 当把正确的作业真正的提交了以后并得到90/100 之后会再次恭喜自己:我果真是在和c语言做游戏,并且自己才是游戏的策划者!,严打雷同作业,作业雷同现象很普遍“抄袭”让所有教学手段失去效能某著名教师曾无奈地说:“可以抄,但也要理解着抄呀”斯坦福大学的Moss系统自动抓雷同作业本学期100余人有雷
10、同记录制度雷同双方当次作业给0分两次雷同,以往作业成绩全部清零(本学期清零4人)三次雷同,失去所有作业分数明年:当次和之前所有作业清零,严打雷同作业,优点激发潜能“我居然能把作业做出来”“为了不雷同,我想到了一种特别的方法”维持诚信缺陷简单作业,如有雷同,多属巧合代写作业无法查出被“偷”作业的让人惋惜受限于网络,消耗国际流量如果惩罚不严,还会有铤而走险的,禁止助教“辅导”,禁止助教讲解题目对细节问题只允许讨论,不许给答案鼓励学生独立思考、解决问题锻炼调试、分析和查找资料的能力助教反映:课程初期有些繁忙,2周过后,趋于无聊惊讶于学生能想到和做到的,获益匪浅更多心与心的交流,令人难忘学生反馈:“别
11、人能帮到哪就算哪只有自己才能真正救自己”“遇到问题不给我直接解决收获颇丰”,不给教材,只给禁书,没有完美的书只读一本书,会束缚思维与眼界同寝室的人买不同的书通过互相交流,相当于每个人都读了不同的书效果:寝室卧谈话题开始有了C语言同一作业的做法更趋于多样化能给书本挑毛病了国人写的书基本都被列入禁书部分翻译版也被禁,我推荐的书,Brian W. Kernighan,Dennis M. Ritchie,C Programming Language (2nd Edition),2006Brian W. Kernighan,Dennis M. Ritchie著,徐宝文,李志译,C程序设计语言(第2版新版
12、),2004Stephen Prata著,云巅工作室译,C Primer Plus中文版(第五版),人民邮电出版社,2005H.M.Deitel,P.J.Deitel著,薛万鹏译,C程序设计教程,机械工业出版社,2000Eric S.Roberts,C语言的科学和艺术(英文版),机械工业出版社,2004Eric S.Roberts著,翁惠玉等译,C语言的科学与艺术,机械工业出版社,2005Al Kelley,Ira Pohl,C语言教程(英文版-第4版),机械工业出版社,2004苏小红,陈惠鹏,孙志岗,C语言大学实用教程,电子工业出版社,2004,教师偷懒的讨论区,鼓励参与网上讨论帖子获得评分
13、,记入期末成绩民主评分制全体师生都有对所有帖子评分的权限效果热烈的交流讨论(一学期4000+帖子)教师插不上话,并也能从中获益跨年级交流学习心得最快速的反馈机制缺憾有一些骗分的行为只发一贴得满分,发帖多却难得满分内向的学生不适应,学生反馈,“4-1(作业编号)也许真的令人很郁闷,不过崩溃时看看Hello C(网上论坛)也许会让你惊喜。”,屡次被骂的真言堂,http:/ 但你总先得给我门启蒙吧上课说一堆术语我们都听不懂叫我们自学是为我们好但我们才刚上大学啊本来大学就够我们失望了你还给 我们这么多压力啊还有快考试了你还给我们这么多压力催我们交作业太自私了哎不说了伤心啊不止 到遇到你这样的老师是我们
14、的幸运还是倒霉呢反思吧老孙,网上自测题和公开的旧试卷,把程序编“对”了不等于会了C语言编程过程中可以绕过或忽略一些自己不了解的笔试能考查出对细节掌握的精度平时也要训练这个能力用moodle的“测验”功能设计自测题网上答题,即时结果,成绩排名单项分析,了解学生学习状况反复答题,也是一个学习过程公开所有旧试卷这是对教师的一种鞭策,开卷有益,考试是学习的一部分开卷考试更能打破“应试教育”不用死记硬背可以考查学习能力试卷点评让学生知道自己错在哪里,一些噱头,追“计院”mm得用这个程序main(_)for(-_;putchar(_+J!Mpwf!Zpv1-1););ioccc获奖程序http:/www.
15、ioccc.org笑话世界上有10种人,1种人懂二进制,1种人不懂二进制课歌著名的“Write in C”,Write in C,When I find my code in tons of trouble,Friends and colleagues come to me,Speaking words of wisdom:Write in C.As the deadline fast approaches,And bugs are all that I can see,Somewhere, someone whispers:Write in C.Write in C, Write in C,
16、Write in C, oh, Write in C.LISP is dead and buried,Write in C.I used to write a lot of FORTRAN,For science it worked flawlessly.Try using it for graphics!Write in C.If youve just spent nearly 30 hoursDebugging some assembly,Soon you will be glad toWrite in C.Write in C, Write in C,Write in C, yeah,
17、Write in C.BASIC is for wimps.Write in C.Write in C, Write in CWrite in C, oh, Write in C.Pascal wont quite cut it.Write in C.,课堂,在最不需费心血的地方,还是要费点心血,“没用”的课堂,学生主动自学,课堂作用大幅降低课堂讲得太“明白”不利于自学信息量小很难真正透彻明白学生反馈:“自己想明白的,和听老师讲明白的,感觉真是不一样!”,以后再也不去上C语言课了 http:/ 但还是sunner的课中感受到很多东西。授课的内容重要,领悟programming的思想也同样重要.
18、像syntax之类的东西,正常人看书都可以看懂。但要理解其中的思维,就不是那么容易了.老师更大意义上是教会我们如何思考.如何更深层次的理解.总之,听sunner的课绝对值得. 楼主先别那么反感.以后你会发现sunner的课的价值的.,课堂上做什么,认清地位现场演示趣闻轶事深层原理直观感知旁征博引精彩互动总结作业,做书本做不到、做不好的事情,认清地位,认清课程重要性,C语言怎么认清地位,为什么学C,不学C+、Java?C的精神Trust the programmerC的简单最不复杂的语言C的深邃直切计算机底层,无所不能C的影响最核心软件用C编写C+、Java、C#学习CC仍很受欢迎C的缺陷不适合
19、做面向用户的应用,语言受欢迎程度,http:/ + gdb + Code:Blocks经验:单步跟踪程序对理解C语言有相当大的帮助多反映程序运行时,计算机内存的变化,趣闻轶事,优点生动活泼驱赶睡意引人深思要点不能跑题不能喧宾夺主缺点没新意的故事讲出来会被喝倒彩,C语言讲什么故事?,“C is quirky, flawed, and an enormous success.”一个电子游戏引发了C语言的诞生Dijkstra和Knuth论战gotoKnuth悬赏发现程序bug的人C标准委员会讨论数组下标从0还是1开始学院的科研成果怕见领导用程序偷教师U盘里的考题Windows 95/98,49.7天
20、后死机,深层原理,透过原理,分析现象原理是万物之始从原理推理可得各种现象现象纷繁芜杂,貌似高深原理真的高深,却简单直接讲透原理,引领思考,现象不攻自破缺点缺少深层思维能力的人,就吃不消了做二级题,就会感觉可笑了,C语言的原理,必须知道C语言每一点的来龙去脉理解了计算机,才能理解C语言一切都是计算任何事物都要被表示成数字和公式的形式后,才能被计算机计算计算法则计算结果的值计算结果的类型计算的副作用,C语言的原理,类型本不存在所有数据都是二进制数,其类型取决于你怎么看待它内存布局栈、堆、静态空间变量、数组、结构、函数调用类型的无限组合C标准,直观感知,并不是所有的知识都适合挖掘原理的先直观感受,再
21、深层解析,也是一种好方法要分清符合直观的不符合直观的,C语言中可直观体会的,C语言的一个哲学不违背计算机的前提下,尽量符合人的习惯人与计算机相抵触,绝对符合计算机符合人举例+ - * ()if-else, for, while, do-while符合计算机举例/数组下标,旁征博引,引用本学科其它课程的相关内容它学科的相关内容辅助理解本课程内容“适度”引用不可跑题不可牵强附会,C语言的旁征博引,计算机原理、体系结构、接口技术、汇编语言二进制整数和浮点数表示法机器字长带宽函数调用操作系统内存布局进程保护文件,C语言的旁征博引,编译原理、数据结构、算法技术的用武之地软件工程代码风格和程序结构的重要结
22、构化程序设计和OO线性代数、工科数学、英语、组合数学更具体的应用,C语言的旁征博引,管理学软件工程相关的内容心理学C语言设计者为什么这么做类比音乐组合TWINS比喻指针和数组关系倚天剑、屠龙刀比喻指针、类型强转内功比喻算法,招式比喻编程灵与肉,算法与程序结构,精彩互动,目的让学生参与到课堂中来思维与肉体俱在手段猜猜看问未学的,先行思考,便于理解,引起下文想一想先给问题,令其解决,引起下文,给出答案考考你问已学的,复习巩固,增强自信,引起下文学生提问并不是很好手段,但也可行,C语言互动举例溢出,short范围:-3276832767如果赋值123456789,会如何?学生瞎猜验证一下学生惊讶,并
23、喊出初步猜想的规律换几个数验证学生再惊讶,发现了真正规律用几个数考考学生已经能算出答案是什么学生欢呼,总结作业,课程三部曲:雾里看花6学时讲完C语言包括分支、循环、函数、数组庭中赏花大讲特讲辣手摧花根据作业暴露的问题,做细致讲解,总结,最特色所在,特色总结,使用先进的计算机、网络工具减轻繁琐的工作改变教学思维和手段相信自己,相信学生坚持自己想做的事情相信学生的潜力无上限使用贴近学生生活的语言和符号拉近距离提高趣味专业、专业、再专业 从专业的角度理解C,最简单、高效和意义深远,课件秀,神秘一章,找别扭,int a=1;if (a = 0)printf(OK);int a=0;if (a = 0)
24、printf(OK);,int a=1;if (a = 0)printf(OK);int a=0;if (a = 0)printf(OK);,类型强转,可以通过“(类型)表达式”的方式把表达式的值转为任意类型强转时,你必须知道你在做什么强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将,屠龙刀,倚天剑,2_Cast,本章内容,三种基本结构三分天下语句块画地为牢if-else如果爱switch分道扬镳,循环圈圈圆圆圈圈break、continue打破怪圈goto去吧!,指针的故事,是“稀饭”最挚爱的武器稀饭 = C Fans很多“Mission Impossible”由指针完成
25、大多数语言都有无数的“不可能”而C语言是“一切皆有可能” “Impossible is Nothing” ,指针与数组,指针可当作数组名使用,反之亦然int *p, a10;p = a;p1 = 0;*a = 0;,一个问题,在程序里表示一个人(姓名、年龄、性别、身高、体重),怎么表示?char name12;unsigned int age;charsex;想表示多个人呢?定义多个数组?(有些搞笑了),C语言的解决办法,struct personchar name12;unsigned int age;char sex;struct person是一个类型struct person students4;students0.namestudents0.agestudents0.sex它们都是变量,一般称为结构的成员变量,谢谢大家!,感谢moodle感谢moss感谢gcc感谢Code:blocks感谢王宇颖老师感谢苏小红老师感谢所有的助教、TA感谢语言基础教研室感谢软件实验室感谢所有的学生感谢所有帮助过我的人特别感谢所有批评过我的人!,