程序设计课程是大学计算机基础教育和计算机科学与技术专业基础的核心课程,是数据结构、算法设计、数学建模、软件技术等课程的前导课程。程序设计课程的教学目标是使学生能够使用一种开发工具熟练的进行软件开发,为学生将来的创新实验、毕业设计、科学研究提供了有力的技术支持。
C++是国内外广泛使用的计算机程序设计语言。其功能强大、面向对象、数据表示丰富、代码运行效率高、可移植性好,适合编写系统软件和各类应用程序。在TIOBE排行榜上,C++语言多年来始终处于前五位。学习程序设计从C++入手,对于培养利用计算机求解现实问题的计算思维能力具有其他语言无法比拟的有点。且在完全掌握了C++语言之后,再学习其他程序设计语言就会轻车熟路了。
C是C++的子集,因此在C++的授课中,有至少一半的内容是和C语言一样的。而国内C++程序设计课程的学时普遍较少,且讲授的重点一般都放在和C重叠的那一部分。对于C++比C多出来的内容往往只介绍类、继承等基本概念,而对于重载、多态、异常处理、数据流等内容言之甚少。本课程即针对这一问题,增加了C++独有的内容的比重,不但适用于在校大学生,且适用于工作中使用C++进行软件开发的人。
第1周:一、C++语言概述
(1)计算机系统的组成及计算机指令
(2)程序设计语言的发展及C++语言
二、信息的表示与存储
(1)信息的表示与存储
(2)数据在计算机中的表示
三、程序中数据的表示
(1)数据类型
(2)常量、变量
四、运算符与表达式
(1)常用的运算符
(2)表达式和类型转换
第2周:一、顺序结构的程序设计
(1)语句
(2)输入与输出
二、选择结构的程序设计
(1)if语句和switch语句
(2)选择结构的嵌套
三、循环结构的程序设计
(1)循环语句
(2)循环的附加控制语句
四、循环结构的设计
(1)循环的嵌套
(2)循环的设计
第3周:一、函数的定义和使用
(1)函数的定义和函数的参数
(2)函数的声明与内联函数
二、函数的设计
(1)默认参数与函数重载
(2)函数模板与库函数的调用
三、函数的调用
(1)函数的嵌套调用
(2)函数的递归调用
四、作用域、生命期和程序的组织结构
(1)作用域和生命期
(2)程序的组织结构
第4周:一、数组的定义和使用
(1)一维数组的定义、初始化、引用
(2)二维数组的定义、初始化、引用
二、数组与函数
(1)数组作为函数的参数
(2)数组参数的传递机制
三、字符串的处理
(1)字符数组
(2)字符串处理函数
(3)字符串对象
(4)字符串对象的操作
四、数组的应用
(1)用数组解决排序问题
(2)用数组解决查找问题
第5周:一、指针的定义与使用
(1)指针的定义
(2)指针的有效性和运算
二、指针与数组
(1)一位数组与指针
(2)指针与字符串
三、指针与函数
(1)指针作为函数的参数
(2)数组作为函数的参数
(3)引用
(4)指向函数的指针
四、动态分配内存
(1)new与delete运算符
(2)动态内存的应用
(3)动态分配数组
(4)动态分配字符串
第6周:一、自定义数据类型
(1)结构体类型
(2)共用体类型、枚举类型
二、自定义数据类型的应用——链表
(1)链表的概念和分类
(2)创建单链表
(3)链表的运算
三、预处理命令
(1)什么是预处理命令
(2)宏定义
(3)文件包含
(4)条件编译
四、习题解析
第7周:一、类的定义
(1)定义类
(2)成员的访问控制
(3)类的数据成员
(4)类的成员函数
(5)类的声明
二、对象的定义和使用
(1)对象的的定义
(2)对象的动态建立和释放
(3)对象成员的引用
(4)对象的赋值
(5)对象、对象指针或对象引用作为函数的参数和返回值
三、构造函数
(1)什么是构造函数
(2)构造函数的定义
(3)构造函数的重载
(4)带默认参数的构造函数
四、默认构造函数和复制构造函数
(1)定义默认构造函数
(2)隐式类类型转换
(3)复制构造函数与合成复制构造函数
(4)深复制与浅复制
第8周:一、析构函数
(1)析构函数的定义
(2)合成析构函数
(3)何时需要编写析构函数
(4)构造函数和析构函数的调用次序
二、对象数组和对象指针
(1)对象数组的定义和使用
(2)指向对象的指针
(3)类成员指针
(4)this指针
三、类作用域、对象生命期、const限定
(1)类的作用域
(2)对象的生命期
(3)常对象、常数据成员、常成员函数
(4)指向对象的常指针、指向常对象的指针、对象的常引用
四、静态成员和友元
(1)静态数据成员
(2)静态成员函数
(3)友元函数
(4)友元类
第9周:一、类的继承与派生
(1)基类与派生类
(2)派生类的定义
(3)派生类的构成
(4)派生类举例
二、派生类成员的访问
(1)类的保护成员
(2)派生类成员的访问权限
(3)赋值兼容规则
(4)赋值兼容规则举例
三、派生类的构造和析构函数
(1)派生类的构造函数
(2)派生类的析构函数
四、多重继承
(1)多重继承派生类
(2)二义性问题及名字支配规则
(3)虚基类
(4)多重继承应用举例
第10周:一、多态性
(1)多态性的概念
(2)静态联编
(3)动态联编
二、虚函数
(1)虚函数实现多态的条件
(2)类成员函数的指针与多态性
(3)虚析构函数
(4)纯虚函数和抽象类
三、运算符重载
(1)运算符重载的概念
(2)运算符函数
(3)运算符重载为类成员函数
(4)运算符重载为友元函数
四、典型运算符的重载
(1)构造“分数”类
(2)典型运算符的重载
第11周:一、类模板
(1)类模板的定义
(2)类模板应用举例
二、标准库
(1)C++标准库
(2)字符串流
三、文件
(1)文件的概念
(2)文件的操作
四、向量vector
(1)向量的使用
(2)向量的实现细节
第12周:一、列表list
(1)列表的使用
(2)列表的实现细节
二、队列(queue)和栈(stack)
(1)队列queue
(2)栈stack
三、异常处理
(1)异常处理的基本概念
(2)异常处理的实现
四、命名空间
(1)命名空间的定义
(2)命名空间的使用
学习者应该先修过或已经掌握计算机导论或者大学计算机基础的主要内容,了解计算机的发展过程,理解计算机系统的构成和基本工作原理,并能够熟练地操作计算机及通过互联网获取信息资源。
1.本课程要求完成的作业分为2种:
(A1)测验练习(简称QUIZ):在每周课后安排随堂测验,内容为程序语言知识题,题型为客观题。
(A2)问题求解(简称NOJ):共有十二季编程题(其中最后两季选作),每季从题库中抽取10题,采用机器在线评阅。每题按评价指标计1、0.8、0.5、0.3、0分。每题须在2周内完成,但学习者可任意选取时间点开始,全部习题须在课程结束前完成。
2.总成绩(实验环节仅线下或SPOC)计算方法:
按百分制计分,总成绩=QUIZ×50% + NOJ×50%
3.证书:
(1)合格:总成绩60分至84分为合格,申请后可获得合格证书。
(2)优秀:总成绩85分至100分为优秀,申请后可获得优秀证书。
4.协作与欺骗政策:
学习者可以与其他同学讨论完成,但所有代码必须是自己编写的,当NOJ机器评阅检查出作业结果(称为查重)有较高相似度时,后提交的习题判罚0分,三次查重违例,总计分为0分。
1.姜学锋、周国清、刘君瑞,C++程序设计,清华大学出版社,2012年
2.魏英,C++程序设计实验教程,清华大学出版社,2011年
3.刘君瑞,C++程序设计习题与解析,清华大学出版社,2011年