C++程序设计同步实践宝典——前言

简介: 【2012年8月7日补充:《C++程序设计入门同步实践宝典 》可以下载了】【再次早醒。脑子里盘算的是让写了一年的C++实验指导让更多人能够用上。标题党一次,就叫《C++程序设计同步实践宝典》。这几年写过的博文也有不少积累了,已经在编《贺利坚文集》,上册教育教学篇,下册学习指导篇。暑假完成这三册文集的编辑。哦,三本书,以前没有想过,先做个广告,开学前,免费“出版”,敬请关注。】《C++程序

【2012年8月7日补充:《C++程序设计入门同步实践宝典 》可以下载了

【再次早醒。脑子里盘算的是让写了一年的C++实验指导让更多人能够用上。标题党一次,就叫《C++程序设计同步实践宝典》。这几年写过的博文也有不少积累了,已经在编《贺利坚文集》,上册教育教学篇,下册学习指导篇。暑假完成这三册文集的编辑。哦,三本书,以前没有想过,先做个广告,开学前,免费“出版”,敬请关注。】


《C++程序设计同步实践宝典》前言

  如果你被“宝典”一词吸引而来,嘿嘿,原谅我标题党一把了。

  这些内容原先没有想着有多宝贝,这是我“与84个写代码的菜鸟相伴而行[1]”的一年中,为学生写的上机指导。C++程序设计的上机指导书不少,但是要贴近我的课堂,让学生易于“同步”地开展实践,中间要有个“过渡”,这需要老师为学生架座桥。初入大学的同学不容易,刚学编程的同学伤不起。打火、挂挡、松离合,这套老司机习以为常的动作,对菜鸟就是一个坎,其实也能是一次小激动滴。

  带着这样的想法,在指导学生第一次上机前,按着面向最“菜”的零基础的学生的标准和一系列好玩的想法,写了“上机指导”。尽管如此,第一次的上机仍然显得混乱。至此,认识到一份合适的“上机指导”,对菜鸟而言是多么的重要。一双鞋(老百姓的鞋,是要穿的,而不是看的)是不是宝贝,首先不是多好看,有多贵,而是合脚与否。于是乎,伴随着每周一次的上机,坚持写了下去,以至于一发而不可收拾,支撑了学生一年的课内外实践。

  还必须交待,这份“宝典”有水分:其内容只经过了一次实践的检验。而且,呃,不好意思,还有,这个有18年教龄的迂腐的老师是第一次教C++。以前讲过Basic、Pascal和C等语言,最近一次给新生开出的程序设计课程是给2001级的C语言。这十年,他的教学工作没有停止过,但从没有给新生上过课。十年的时间,学生特点、语言的发展,巨变啊。因此,有时想想,我是一只带菜鸟学生的菜鸟老师。

  其实,这也是一件令人自豪的事情。我是菜鸟,我怕啥。菜鸟的资本在于白手起家,无牵无挂,菜鸟的优秀品质在于勇于往前冲,舍得下力气,摸着石头过河,走一步看一步,碰壁了就回头。在写上机指导时,原先构想的是,一周一两个题目让学生做做就行。但越学内容越多,有时针对一周课堂教学的内容,一两个题目根本没有办法覆盖知识点,恨不得给学生写上十个八个题目才能罢手。显然,同学们的承受能力得考虑,于是苦了“菜”老师,有些题搜肠括肚一番,多体现些知识点,居然也用三四个题目交待了。于是,后来每周的题目数大致保持在三到五个。

  控制题目个数方面的另一个难度是“菜”老师额外自找的,这一点可能会使本“宝典”的读者不适应,为此,我在教学过程中却损耗了不少花花肠子。何方神圣?提前体验[2]!简单说,就是不待老师讲,学生就要练,必要的准备仅限于老师给些提示。提前体验的目的在于在我要讲某一关键概念、知识点之前,学生就曾经稀里糊涂地用过了,当真正学到之时,大拍脑袋:原来当初如此!最重要的,我希望学生由此在学习方法上发生的改变,这是培养持续的自主性学习能力的非常重要的能力,尤其对于学习工程学科的同学。

  在学习中,记忆很重要,有同学一开始学习程序设计,就走上了“背”程序的道路。天哪,被高考考糊的傻孩子,怎能这么干?就书上的几道例题,能支撑你未来要做的项目吗?工程师是要创造世上没有的东西的,背程序成何体统!要知道,记忆的关键在于重复。所以,在这些题目中,除了想“提前体验”,还想要“钩起回忆”。这是我写题目时的又一个难度。

  千万别把“菜”老师想成详林嫂一再诉苦,还有邀功之嫌。一点小得意,下了苦功夫,当然不避嫌。更重要的,我希望同学们在使用这本“宝典”时,品品这方面的味道。不品是不知道的。我的不少学生闷头做题,做完了就完了,这些同学的初级阶段走了很长时间,真的很累。也有的同学,做完了想一想,和课堂上、课本上的内容对照一下,体会出了贺老师的一番苦心,很快地就进步起来了。学得自信,学得轻松,学得有效。至于每周将拓展题也照单全做了的同学,更是不得了了。

  有了这些量身订做的上机题目,我的学生积累了最大的资本:代码行数。说实话,每周二、三百行,高峰时近千行的程序量对大一新生真是不容易。最投入的同学,利用大一的两个学期,写了近两万行C++程序。我的学生又是软件外包方向的,除每一位大一新生必修的课程外,他们还得同时学日语,负担很重。有时,我真的心疼这些孩子们了。但代码行数的积累不能妥协。我们又一利器是用博客提交实验报告[3],在解决了抄作业顽疾的前提下,我的学生由此收获良多[4]

  只是,当这些内容集在一起时,我需要调整一下其中的顺序。我的课堂中的跳跃性让菜鸟学生们常不适应,这种跳跃也延伸到了课后的上机。比如,在第4章关于数组的上机实践中,第13章讲的文件就被引入了。这解决了大量数据需要在运行程序时输入的问题,更重要的是同学开始知道“文件”这个东东可以编程操作。这体现的就是前面讲的提前体验。而本书主要是提供给学生在课外自学中参考的,适应学生们看书学习、做题实践、再看书复习的学习节奏,其中的内容需要按照教材的章节重做调整。也就是说,当初同步于我课堂安排[5]的实验指导,现在同步的是教材。

  现在不得不提教材了,是大名鼎鼎的谭浩强先生的红皮书《C++程序设计》(清华大学出版社)。这是一本非常优秀的教材,尽管也有些仁智之士的仁智之见。本书适合C++的初学者参考,也适合C++课程学过之后,想通过实践回炉进一步提高程序设计能力的读者。建议的使用方法是:看教材、按本书实践、再看书理解涉及到的概念、原理。

  在下一个学年,针对2012级学生,我和我的新菜鸟们与课堂同步的实践教学还要继续下去,其中的内容必然也还会改动,敬请关注我的教学博客[6]的更新。对使用本书中发现的问题,以及建议和批评,可以通过博客提供的邮件功能发给我,也可以直接发送Email到:sxhelijian@163.com。在我的教学工作中,学生及时、完整的反馈是我不断改进工作的源泉。对于本书,同样需要读者给出真实的感受。

  最后再说说“宝典”之“宝”。其中有作者的心血,自然宝贝。其中还有我的84位同学的实践,他们中的大部分也将之当宝。只是,如果不是用心学来,其中的宝气是不会随意施为的。时下有为数不少的学生只要找到一个人云亦云,有时甚至是子虚乌有的说辞,例如兴趣、逻辑思维差之类的,就将自己划到了“不学编程、学不会编程”的阵营中去。怪也不怪,他们真的就学不会程序设计了。作者在“哀其不幸,怒其不争”的同时,也立志“助其成功”[7],为此也写下了大量的文字指导大学生的学习。如果有需要,欢迎光临作者的CSDN博客[6]和新浪博客[8]

  Everyone can cook. 学习的问题要用学习来解决。大学的学习,非不能也,是不为也。

  每个人都能学会编程。如果各种条件不具备,你无法改变“选择了计算机类专业”这一既成事实,通过改变自己,学会编程,爱上编程。将来可以不从事编程工作,但你的人生一定会因为曾经的编程而精彩。

  信不信由你,我信了。相信的依据,看“迂者-贺利坚”博客中我和我的学生的故事。

 

 

贺利坚          

于2012年7月16日凌晨  


[1] 见博文《这一年,与84个写代码的菜鸟相伴而行》,http://blog.csdn.net/sxhelijian/article/details/7643876

[2] 见博文《提前体验——工程教育中的法则》,http://blog.csdn.net/sxhelijian/article/details/7587468

[3] 实施前的想法见博文《将时尚的互联网引入教学中来》,http://blog.csdn.net/sxhelijian/article/details/7085122,教学效果的初步总结见博文《C++课程教学改革问卷调查报告》,http://blog.csdn.net/sxhelijian/article/details/7643654

[4] 见博文《我的学生在CSDN上发表博文情况统计》,http://blog.csdn.net/sxhelijian/article/details/7644123

[5] 博文《C++程序设计教学材料-2011级》记录了课程的进展情况,也提供了原始的资料下载,以及参考解答的链接,博文地址是:http://blog.csdn.net/sxhelijian/article/details/7056008

[7] 见博文《体味:面对“问题”学生“哀其不幸,怒其不争,助其成功”》,http://blog.sina.com.cn/s/blog_5717f02f010163wj.html

[8] 迂者—贺利坚的新浪博客:http://blog.sina.com.cn/sxhelijian



目录
相关文章
|
2月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
166 77
|
2月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
85 19
|
2月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
60 10
|
2月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
72 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
2月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
83 13
|
2月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
61 12
|
2月前
|
算法 C++
【C++数据结构——图】最小生成树(头歌实践教学平台习题) 【合集】
【数据结构——图】最小生成树(头歌实践教学平台习题)目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:【合集】任务描述 本关任务:编写一个程序求图的最小生成树。相关知识 为了完成本关任务,你需要掌握:1.建立邻接矩阵,2.Prim算法。建立邻接矩阵 上述带权无向图对应的二维数组,根据它建立邻接矩阵,如图1建立下列邻接矩阵。注意:INF表示无穷大,表示整数:32767 intA[MAXV][MAXV];Prim算法 普里姆(Prim)算法是一种构造性算法,从候选边中挑
49 10
|
2月前
|
存储 算法 C++
【C++数据结构——图】图的邻接矩阵和邻接表的存储(头歌实践教学平台习题)【合集】
本任务要求编写程序实现图的邻接矩阵和邻接表的存储。需掌握带权有向图、图的邻接矩阵及邻接表的概念。邻接矩阵用于表示顶点间的连接关系,邻接表则通过链表结构存储图信息。测试输入为图的顶点数、边数及邻接矩阵,预期输出为Prim算法求解结果。通关代码提供了完整的C++实现,包括输入、构建和打印邻接矩阵与邻接表的功能。
60 10
|
2月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
50 7
|
2月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
66 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】

热门文章

最新文章

相关实验场景

更多