C++程序设计三周教学记录

简介: 从第五周到第八周,除去第七周的国庆,C++共上了三周的课。大一新生三周能学会些什么?他们已经能输出漂亮的星号图了。身为老师的我,和这群大孩子一样高兴。同学们的努力令我感动,自己的不少非常规的想法和做法在他们的配合下正在起着作用,我已经感觉到,他们中的绝大多数将就此找到感觉,不光是专业学习,而是整个大学生活,在忙碌和不断出现的困难中,在快乐和不断冲破束缚的过程中,享受大学带来的一切。 原先
从第五周到第八周,除去第七周的国庆,C++共上了三周的课。大一新生三周能学会些什么?他们已经能输出漂亮的星号图了。身为老师的我,和这群大孩子一样高兴。同学们的努力令我感动,自己的不少非常规的想法和做法在他们的配合下正在起着作用,我已经感觉到,他们中的绝大多数将就此找到感觉,不光是专业学习,而是整个大学生活,在忙碌和不断出现的困难中,在快乐和不断冲破束缚的过程中,享受大学带来的一切。
原先安排第四周开始讲课,三次课后才上机,我已经计划好有充足的时间先“纸上谈兵”。程序设计的功夫在上机之外,一个周密的计划想了一暑假了。
然而开学后接到第五周开始上课的通知。第五周只有一次课,星期三下午第3大节上完课,第4大节马上上机,同学们连上机准备的时间都没有。为难的是我。我需要给他们做好方案。重新整理思路后,第一节课仍按原想法少谈C++。先打破同学们对计算机表面的认识,再谈程序、语言,目标只有一个,让同学们热爱专业,热爱编程这个专业基本功。限于时间,马上提出“让我们一起玩”的倡议。 将时尚的互联网引入教学中来就靠着他们去实施了。紧接着布置即将要做的实验:购买网费、访问网络教学平台和C++课程空间、注册通过校园网访问外网的帐号、申请电子邮箱、申请新浪博客、开通新浪微博,这些对大一新生而言,都是不小的挑战,尤其对以前和计算机接触不多的同学而言。接着,用VC++ 6.0,编辑、编译、运行第一个程序等的工作,是没有时间讲的,就靠着在教学平台已经准备好的 实验指导和上机指南了,自己动手对他们是个考验,也是很好的锻炼。最后,实验报告以博文形式发布。等我收拾好家当去了实验室,那一个乱。上不网了,帐号出问题的,出不了校园网的,忙乱中,大二的两位同学请示我问题,干脆拉他们来帮我解围。结果是,少量的同学完成了任务,更多的同学不甘心,再找时间完成。
和课代表商量好,每周星期五下午作为答疑时间,我到机房答疑,同学们自由上机。没想到乘兴而来的同学们却没有机器可用。等他们走后,我发现了更大的问题,我的计划面临流产。最后,算是找来了机时,却也失望、愤怒而有了《 面对官僚,我们绕道而行》。
第六周有两次课。星期二上课的教室能上网,赶紧推出网易公开课、CSDN等。有些老师怕学生上网,我则尽力将学生往网上推。网络是个大宝藏,关键是要同学们知道如何用,知道哪儿有资源。一点基础知识都没有,却要和同学们一起读程序,所幸有我委托事务助理复印的听课记录,慢慢讲,引得大家一起思考。慢下来,一定要让他们对程序有感觉。发挥了老教师慢讲的功底,我觉得效果还是不错的。星期三的上课,引入了程序调试。还没有学任何语法,还不会写任何程序,就要会单步执行、会设置断点,会观察变量值的变化,我以前没有听说谁做过,但我计划尝试一把。单步执行不仅是调试程序所需,对理解程序的执行也应该是直观的,并且一旦会用,他们将有能力自主学习。专门写了 VC调试功能初步实验指导。在随后的上机课中,同学们完成了对用函数实现的求最大数和程序的跟踪。神奇,不少同学反映稀里糊涂,但实验指导中的任务的确能完成了。不糊涂不正常,这本来对大家就是个挑战。星期五下午,面临第二天就是国庆放假,但还是有三分之二的同学参加了自由上机。新生真好!
这两周的工作,让我感觉到有些累了。一般课程,构思好方案,做好PPT讲稿即可。课前看一看,直接去讲。而在对我和同学们都是挑战的这门课程中,每堂课前,我都要写出供同学们用的课堂记录,教材中缺失的材料需要亲自去写,还有实验方案,都是全新的做法。有几天都是早晨三四点钟早早醒来开始写作的。
幸亏有了国庆节放假,抽出了宝贵的整时间备课,一口气将讲义做到了第5章,总算有了点积累了。但一个问题始终没有下决心:是开始按步就班依教材讲语法,还是再抛开教材讲编程思想和方法。一部分同学已经开始对这种教学方法不适应了,教学进度貌似也不允许我再自由下去。
直至第七周星期六,我还是定不下来。星期天醒来,一个更加清晰的思路就在脑中,估计天快亮了,起床写吧,起来看表却只有两点半。在原来做好的第3章课件基础上修改,同步写第3章的听课与学习指导,一气呵成,5点半收工睡回头觉,6点10分再起床和儿子一起吃早饭。由算法入手,用1+2+...+100做引子,牵出控制结构和表示算法的工具:伪代码、流程图、N-S图,然后用星号图为例,讲“自顶向下,逐步求精”,力图让同学们掌握思考和表达的方法。这是程序设计的一道坎,很多老生会写语句和表达式,但就不知如何针对问题进行分析。在所有的思维中,如果能把循环绕清楚了,会通过逐级求精写出循环嵌套来,障碍自然扫除。用星号图玩控制结构是我在指导儿子自学程序设计时用过的,现在在课程教学中作一尝试。的确,星号图相对其他任务,好玩多了。安排好学生事务助理复印学习指导后,构思 配套的实验指导。我还不甘心这点成果,将用函数实现的思路也加进去,以“自顶向下,逐步求精”的思维方式,以函数为基本单元,构造出模块化的程序来,我要让学生在正式学函数之前,要对函数之伟大有个深刻的认识。并且,函数将完全由学生自己探索。由于难度的加大,实验指导中加入了不少做“思想工作”的文字,其实,这算得上是学习方法指导。为了增强可读性,加了不少调侃语,常泡在网上,这也还算是擅长。
由于其他课的任务也不算轻,实验指导写得不顺,直至星期一晚上才写完,自己也还是很欣赏这种调皮的文字。星期二吃过早饭,再次审核每一个细节,打印出需要的材料。将收集到的学生博客一一打开检查,我需要找出进度慢的同学重点关照。我组织同学们分了学习小组,也一再强调不能让任何一个同学掉队,学习中集体的力量是无穷中,好的氛围将是所有人进步的保证。
上课时间到了,我首先抱歉地告诉大家,我还是决定再一次用大家并不习惯的方式上课,这是为了以后让大家学得轻松些。同学们给予了支持。课后作业就是为第二天的实验做准备,各小组要安排一次集体自习彼此启发。学生事务助理复印的实验指导材料也发给了大家。我知道,这是一项不轻松的任务。
星期三中午,当我到达教室时,我被同学们感动了。除了在趴在桌上午休的,手中就是我发下的材料,在纸上画着绕来绕去的流程图,写着没有正式学过的代码。有些同学的指导材料已经显得发皱,上面布满了字迹,显然是用功不少了。询问了同学们的掌握程度,我决定先用二十分钟再强化思维训练。这是关键,花多少时间都值。在今后,同学们的听课可能会更自然些,因为贺老师要按着课本顺序来了。当然,歪点子也将不少,但经历了前三周的考验,同学们是能顶下来的。
于是,有了两个小时后我看到的一幕:不少同学输出了漂亮的星号图。整个过程我清楚,这不是抄别人的代码看看出什么结果,而是自己自顶向下的设计后写出来的。这标志着他们设计的思维开始建立,这是一个完美的开端。晚上回家统计,已经有三分之一的同学提交了合格的报告。
美好的过程,这是我理想的教学。感谢这几年习练梅花桩拳让我乐于不断改变,也谢谢我这几年坚定了的永不放弃的境界,更要感谢这帮学生的付出。学计算机的不会编程?天大的笑话,我们将把这种不可思议的现实抛到东门外一百米以外的地方。
有人会质疑:“老贺说大话了,你的学生好表现才三周。”漂亮的星号图给我底气,完美的开端给我信心,我们将一直笑下去。
(写于2011年10月12日,2011年12月10日复制到CSDN)
目录
相关文章
|
2月前
|
存储 算法 C++
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
二分查找的基本思想是:每次比较中间元素与目标元素的大小,如果中间元素等于目标元素,则查找成功;顺序表是线性表的一种存储方式,它用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的元素在物理存储位置上也相邻。第1次比较:查找范围R[0...10],比较元素R[5]:25。第1次比较:查找范围R[0...10],比较元素R[5]:25。第2次比较:查找范围R[0..4],比较元素R[2]:10。第3次比较:查找范围R[3...4],比较元素R[3]:15。,其中是顺序表中元素的个数。
153 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
2月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
169 77
|
2月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
73 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
2月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
68 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
2月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
67 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
2月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
87 19
|
2月前
|
存储 人工智能 算法
【C++数据结构——图】最短路径(头歌教学实验平台习题) 【合集】
任务描述 本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。 相关知识 为了完成本关任务,你需要掌握:Dijkst本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。为了完成本关任务,你需要掌握:Dijkstra算法。带权有向图:该图对应的二维数组如下所示:Dijkstra算法:Dijkstra算法是指给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径。Dijkstra算法的具体步骤如下:(1)初始时,S只包含源点,即S={v},v的距离为0。
69 15
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
87 13
|
2月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
63 12
|
2月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
62 10