课程概况
C++语言的功能和方便性都强于C语言,只是由于其面向对象的特性比较复杂,因此很少被选为入门语言。实际上,C语言是C++的子集,C++对C语言的扩充可以分为与面向对象无关的新语法特性、面向对象的特性,以及泛型特性三个部分。如果放弃其中复杂的面向对象特性,以及泛型的绝大多数特性(但保留其中极其有用的标准模板库STL中的部分算法和容器),则剩余部分也十分适合做为入门语言来学,而且用这样的“简化”C++语言,或者说,“更强”的C++语言编写程序,既比用C语言更为方便和高效,又无需掌握写大型程序才会用到的庞杂的面向对象的特性 — 学习成本增加很少而编程效率提高很多。
基于上述考虑,本课程虽然内容主要为C语言程序设计,但还是涉及了一部分C++的内容。本课程以实打实提高学生的实际编程能力为目标,只要能写出好程序,用的是C语言还是C++语言,并不重要。因此,如果您学习的目的是应付计算机等级考试之类纠缠语法细节的、纸上谈兵的笔试,则本课程不适合于您。
授课内容14周,考试1周。主要为以下三部分:
1) 11 周: C语言程序设计
2) 2 周:用C++的STL(标准模板库)轻松实现高效的排序和查找。这部分内容虽不多,但对于提高编写程序的效率极其有用。
4) 1 周: 考试
总之,本门课最大的特点是:让学习者花费比学习C语言多不到10%的时间,就能享受C++语言带来的更多方便与效率。
另外,本课程的内容和作业紧扣“北京大学信息学院程序设计与算法等级认证”考试,该考试分为十级,本课程内容对应于第一级和第二级,作业和考试题也来源于该等级认证考试的题库。
本课程作业和考试的题型90%以上都是在线提交程序,系统自动评测,容不得半点错误,这对学习者是非常严格而且有效的训练,符合当下顶尖IT企业招聘考核的形式,学习效果远胜于书面作业人工批改的形式。
课程大纲
第一周
1.1 信息在计算机中的表示
1.2 C++快速入门
1.3 变量和数据类型初探
1.4 变量和数据类型进阶
1.5 常量
1.6 Dev C++编译环境介绍
第一周讲义
Openjudge在线做题必读
第一周测验
第二周
2.1 输入输出进阶
2.2 算术运算符和算术表达式
2.3 关系运算符和逻辑表达式
2.4 其他运算符及运算符优先级
第二周讲义
第二周单元测验
第三周
3.1 if语句
3.2 switch语句
3.3 for 循环之一
3.4 for 循环之二
3.5 while循环和do while循环之一
3.6 while循环和do while循环之二
第三周讲义
第三周测验
第四周
4.1 break语句和continue语句
4.2 OJ输入数据的处理
4.3 用freopen重定向输入
4.4 循环例题选讲 1
4.5 循环例题选讲 2
4.6 循环例题选讲 3
第四周讲义
第四周测验
第五周
5.1 数组
5.2 筛法求素数
5.3 数组初始化
5.4 数组越界
5.5 二维数组
第五周讲义
第五周测验
第六周
第六周讲义
1. 函数(1)
2. 函数(2)
3.递归初步
4. 库函数和头文件
5. 位运算
6. 位运算思考题
第六周测验
第七周
1. 字符串(1)
2. 字符串(2)
3. 字符串(3)
4. 字符串(4)
第七周讲义
第七周测验
第八周
1. 指针的基本概念和用法
2.指针的意义和互相赋值
3.指针的运算
4.指针作为函数参数
5.指针和数组
第八周讲义
第九周
1. 指针和二维数组、指向指针的指针
2. 指针和字符串
3. 字符串库函数
4. void指针和内存操作函数
5. 函数指针
第九周讲义
第八九周测验
第十周
1. 结构(struct)
2. 全局变量、局部变量、静态变量
3. 变量的作用域和生存期
4. 选择排序和插入排序
5. 冒泡排序
第十周讲义
第十周测验
第十一周
1. 程序或算法的时间复杂度
2. 二分查找的实现
3. 二分法求方程的根
4. 例题1:找一对数
5. 例题2:农夫和奶牛
第十一周讲义
第十一周测验
第十二周
1. STL排序算法sort
2. STL二分查找算法
3. multiset
4. 自定义排序规则的multiset
5. set
第十二周讲义
第十二周测验
第十三周
1. multimap
2. map
第十三周讲义
第十三周测验
课本习题解答
《新标准C++程序设计教程》习题解答
第一周测验答案
第一周测验答案
第二周测验答案
第二周测验答案
第三周测验答案
第三周测验答案
第四周测验答案
第四周测验答案
第五周测验答案
第五周测验答案
第六周测验答案
第六周测验答案
第七周测验答案
第七周测验答案
第八九周测验答案
第八九周测验答案
第十周测验答案
第十周测验答案
第十一周测验答案
第十一周测验答案
预备知识
零起点课程,基本上不需要预备知识,初中生也可以学习。
常见问题
C语言程序设计为什么还要讲C++的内容?
答:C++比C语言难的地方主要在于面向对象的特性,但这部分内容本课程是不讲的,因此本课程不论是内容还是难度与C语言相比并没有太大区别。由于C语言在一些语法细节上不如C++用起来方便,因此本课程会讲授C++一些特性,可以理解成讲授的是经过稍许改进的C语言。更重要的是,C++有STL这个使用非常方便的库是C语言没有的,例如,用STL写个整数的排序操作只要1行,而用C语言的写法,则需要六七行才能完成,而且还需要理解函数指针等复杂概念才可以。因此本课程最后一周也讲授了STL的初步内容,但不计入成绩考核。
本课程的作业和考试形式是怎样的?
答:本课程90%的作业,以及最后的期末考试,形式都是在北京大学在线程序评测系统 openjudge.cn上提交程序,由系统自动评判正误。程序不能有丝毫错误。这种形式对于提高编程能力极其有效。