C++程序设计实践学材系列(1)——前言

简介: 回到系列文章的目录——[系列文章目录]前言  这是一个想过很久但一直不敢开始的写作计划,要将已经带领三个年级的学生以实践为主线学习C++的材料整理到一起,成为比“C++课堂在线”专栏更加系统、全面的“学材”。  何为学材?在学校里,学习一门课程,常会有教材。教材是教师在带领学生学习过程中需要用到的材料。教材是以教为中心的,学生在课堂上听讲,预习和复习都要看教材,学生的学是围绕着教师的教

回到系列文章的目录——[系列文章目录]


前言

  这是一个想过很久但一直不敢开始的写作计划,要将已经带领三个年级的学生以实践为主线学习C++的材料整理到一起,成为比C++课堂在线”专栏更加系统、全面的“学材”。

  何为学材?在学校里,学习一门课程,常会有教材。教材是教师在带领学生学习过程中需要用到的材料。教材是以教为中心的,学生在课堂上听讲,预习和复习都要看教材,学生的学是围绕着教师的教开展的。学材就是围绕着学生的学编写的教学材料,这样的材料可以用于学生的自学,也可以用于教学,只不过,需要教师的教是要围绕学生的学开展了。

  说起教学,要以学生的学习为核心。教师讲的、教材上写的,如果不能在学生的头脑中顺畅地形成他自己的看法,这只能是灌输。灌输解决不了程序设计学习的问题。实际上,灌输解决不了任何的学习问题。只是在实践中发现,被应试统治了的大学生,除了被灌输,不会别的形式的学习。有的老师的教学就是灌输,但是,有些时候,老师采取别的方法组织教学,有些人还是学成了灌输的味道。

  在IT学子成长”专栏中,不少专业学习不顺利的同学给我来信,坦言的他们编程学习中存在的问题。在探讨中找到的应对方法是,将编程的实践进行下去。这对于有些人而言,说到做到,而对另外一些人而言,真的很难。在我如愿承担起计算机类大一同学的程序设计入门课程之时,我决定带领学生以实践为主线学习C++程序设计,解决学计算的学生学不会程序设计的尴尬问题。师生共同的积累(见《贺利坚的课程教学链接》中C++程序设计课程部分,不断地给我启示,有了将之写成系列文章的机会。

  在黄武雄教授眼中,学校教育做且只做两件事:打开人的经验和发展人的抽象能力(见黄武雄. 学校在窗外首都师范大学出版社.2009-2)。发展了的抽象能力,使人能够很快继承前人的经验,让自己的直接经验与不同时空下的间接经验相互交融和印证,从而能够真正掌握特殊经验和普遍经验之间的辩证关系,从而使人真正与世界联结,这将是一种最好的教育。接受过教育的人,似乎就应该是这样上下通达、无所不能的。夫子也说“学而时习之,不亦说乎?”。这里“学”和“习”不一样,“学”是取得知识,“习”为付诸实践。在夫子看来,得到了知识,并且经常应用,这才是愉快的事。这句话也说明了认识和实践的关系,说明了实践是得到知识的方法,实践和认识不能分开。于是有了茅以升先生倡导的“习而学”。他认为旧教育的弊病是理论与实际脱节,通才与专才脱节,科学与生产脱节,片面追求理论教育的“质”,严重忽视培养人才的“量”。他于1926年发表论文,主张“先授工程科目,次及理论科学,将现行程序完全倒置”,并且从学制、招生、课程等多方面,提出了大破大立的改革方案。新中国成立后,他撰写的《习而学的工程教育》等文章,强调按照人的认识规律,由感性知识入手,进而传授理性知识,先让学生“知其然”,而后逐渐达到“知其所以然”。通过“习而学”,就是让学生先通过实践获得感性认识,然后再进行理论学习,做到理论与实践的相互统一。这里的“学”和“习”,和孔夫子在“学而时习之”中的含义是一致的,核心是先有实践(习),再谈认知(学)。

  这个系列的特色就是希望能够将读者的学与习联系在一起,帮助读者在程序设计学习中,架起习和学之间的桥梁。

  明确两个问题:

  第一,用这个系列文章学习程序设计用的是C++语言。其理由是,我的日常工作就是被安排做C++语言教学的。入门学习程序设计可以是任何的语言,当然可以是C++。这个系列也就适合用C++C语言入门学程序设计的人。如果是自学者,感觉这个系列还可以看下去,也就选择C++好了。有人说C++太难,这种说法有一定的理由,这种说法也将一部分人吓了回去。事实是,C++并不是那样的难,关键是,是否能够用有效的学习行为面对学习这件事情。学习C++额外的好处是,真正地去了解各种程序设计语言的成分,以及由程序设计认识计算机系统。

  第二,这个系列是写给初学者的。这除了需要对知识进行有效分解,有些时候,解决问题采用的方案将不能用工程中普遍的方法。有一比,婴儿的消化器官尚未发育好,他的食物就该有别于常人。初时遇到问题,用最原始的方法解决了,可以暂不考虑算法在时间、空间方面的性能,不考虑结构的合理,解决了就是意义,这是找到感觉的必要。这一点,请有耐心读这些文字的“老鸟”理解。对于老手已经是内化于心的知识,其核心信息成为了一套说不清的严密的融合体系,成为常识了,但对于新手,这是第一次,他成为高手后,自然有能力抛弃不合理的解决方案。选择了针对初学者写作,我需要安排好知识的体系,同时,尽量地选择合适的问题,用合理的方案进行解决。

  再谈一下选参考书的事情。如果读者正在随着课程进展学习C++,老师指定的教材为第一读本。好书自然有其好,读书人的读书方式更重要。大家认可的经典书籍中,《C++primer》的声誉很高,我认为该书对语法细节抠得很细,这并不适合初学者,尤其是第一次学习程序设计的人。C++之父斯特朗斯特鲁普(Bjarne Stroustrup)C++程序设计语言》也是经典,语法全,讲程序设计的眼光也很高,适合对C++全貌已经有所知,且有一定程序设计体验的人,而对于初学者,可能由于读不懂受的打击会更大。初学者选参考书,我读过的最合适的是萨维奇(Walter Savitch)的《C++程序设计(8)》更好一些。这本书中合理地穿插了大量的自测题及参考答案,而且每一章都有大量的编程项目,方便读者实践。一定程度上,本系列文章走的就是萨维奇的路子,只不过材料来自于作者的教学实践,选用的题目、材料及教学方法等,是在与学生一起克服种种学习中的困难过程中形成的。

  作为前言,已经写得有些冗长了。这应该是一个工作量很大的事情,且需要利用份内工作之外的时间完成,但期盼着我能够协调好自己,争取以最快的速度将之贡献出来。跟随着这个系列完成学习的学子,代码行的积累也将达到1.5-2万行,这是一个能够让你找到专业之门的数据。

  采用了发博文的方式,其实也想借助读者的力量,帮助避免一些各种错误的产生。就此拜托读者,错误之处、不当之处,以及没有说清楚的地方,还请通过评论指出。采用这个系列学习的读者,请也在CSDN开通博客,将学习中写过的程序发表成博文共享。借助博客中的相互关注,我也将为读者解答学习中遇到的问题。 



回到系列文章的目录——[系列文章目录]



目录
相关文章
|
4月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
131 17
|
8月前
|
存储 算法 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。,其中是顺序表中元素的个数。
288 68
【C++数据结构——查找】二分查找(头歌实践教学平台习题)【合集】
|
8月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
331 77
|
8月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
187 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
8月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
236 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
8月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
204 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
8月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
164 19
|
8月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
202 13
|
8月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
179 12
|
8月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
160 10