北京大学

图片
课程概述

C++语言的功能和方便性都强于C语言,只是由于其面向对象的特性比较复杂,因此很少被选为入门语言。实际上,C语言是C++的子集,C++对C语言的扩充可以分为与面向对象无关的新语法特性、面向对象的特性,以及泛型特性三个部分。如果放弃其中复杂的面向对象特性,以及泛型的绝大多数特性(但保留其中极其有用的标准模板库STL中的部分算法和容器),则剩余部分也十分适合做为入门语言来学,而且用这样的“简化”C++语言编写程序,既比用C语言更为方便和高效,又无需掌握写大型程序才会用到的庞杂的面向对象的特性 --- 学习成本增加很少而编程效率提高很多。


基于上述考虑,本课程虽然是面向中学生的零基础的编程课,还是选用C++作为编程语言。实际上,本课程并没有因为面向中学生而作了简化,也适合大学生、上班族等所有希望编程入门的学习者。授课内容13周,考试1周。主要为以下三部分:


1) 9.5 周: C++结构化程序设计(基本等同于C语言程序设计)。

2) 1.5 周:基本算法思想,包括算法的时间复杂度的概念、简单排序,二分查找。

3) 2  周:用C++的STL(标准模板库)轻松实现高效的排序和查找。这部分内容虽不多,但对于提高编写程序的效率

极其有用。

4) 1  周: 考试


总之,本门课最大的特点是:让学习者花费比学习C语言多不到10%的时间,就能享受C++语言带来的更多方便与效率。


另外,本课程的内容和作业紧扣“北京大学信息学院程序设计与算法等级认证”考试,该考试分为十级,本课程内容对应于第一级和第二级,作业和考试题也来源于该等级认证考试的题库。


本课程作业和考试的题型90%以上都是在线提交程序,系统自动评测,容不得半点错误,这对学习者是非常严格而且有效的训练,符合当下顶尖IT企业招聘考核的形式,学习效果远胜于书面作业人工批改的形式。

授课目标
1. 掌握C++语言中与与面向对象无关部分的基本语法知识(略强于C语言) 2. 对什么是算法形成初步的概念 3. 达到“北京大学信息学院程序设计与算法等级认证”考试二级的要求
证书要求

完成作业和考试,达到要求后,可以获得课程主讲教师签名颁发的合格证书或优秀证书。总成绩算法如下:

考核

成绩

每周测验(即作业)

70/100

期末考试

30/100




60-84分:合格证书
85-100分:优秀证书


预备知识

零起点课程,基本上不需要预备知识,初中生也可以学习。

授课大纲

第一周 C++入门

 1.1 信息在计算机中的表示

 1.2 C++快速入门

 1.3 变量和数据类型初探

 1.4 变量和数据类型进阶

 1.5 常量


第二周 输入输出、运算符及表达式

 2.1 输入输出进阶

 2.2 算术运算符和算术表达式 

 2.3 逻辑运算符和逻辑表达式

 2.4 其他运算符和运算符优先级


第三周 分支语句和循环语句

 3.1 if语句

 3.2 switch语句

 3.3 for循环

 3.4 while和do while语句


第四周 循环语句和OJ输入数据处理

 4.1 break和continue

 4.2 循环例题选讲

 4.3 OJ编程题输入数据的处理

 4.4 用freopen重定向输入 


第五周 数组

 5.1 数组的基本概念

 5.2 筛法求素数

 5.3 数组的初始化及用数组取代分支结构

 5.4 数组越界

 5.5 二维数组


第六周 函数和位运算

 6.1 函数

 6.2 简单递归

 6.3 库函数和头文件

 6.4 位运算(较高要求,不计入成绩考核)


第七周 字符串

 7.1 字符串的三种形式

 7.2 字符串的输入

 7.3 字符串库函数

 7.4 例题:求字符串的子串


第八周 指针(一) (较高要求,不计入成绩考核)

 8.1 基本概念和用法

 8.2 指针的意义和互相赋值

 8.3 指针运算

 8.4 空指针和指针作为函数参数


第九周 指针(二)  (较高要求,不计入成绩考核) 

 9.1 指针和数组

 9.2 指针和字符串

 9.3 字符串库函数

 9.4 void指针和内存操作函数

 9.5 函数指针


第十周 结构、变量作用域和生存期、简单排序

 10.1 结构

 10.2 全局变量、局部变量、静态变量

 10.3 变量的作用域和生存期

 10.4 选择排序和插入排序

 10.5 冒泡排序


第十一周 二分查找

 11.1 算法和程序的时间复杂度

 11.2 二分查找


第十二周 STL初步(一) (较高要求,不计入成绩考核)

 12.1 用sort排序

 12.2 用binary_search二分查找

 12.3 multiset的用法

 12.4 set的用法 


第十三周 STL初步(二) (较高要求,不计入成绩考核)

 13.1 multimap的用法

 13.2 map的用法 


第十四周 期末考试


参考资料


常见问题
  1. 学习C++作为入门是不是太难了,为什么不只讲C语言呢?

    答:C++比C语言难的地方主要在于面向对象的特性,但这部分内容本课程是不讲的,因此本课程不论是内容还是难度与C语言相比并没有太大区别。由于C语言在一些语法细节上不如C++用起来方便,因此选择讲授C++,可以理解成讲授的是经过稍许改进的C语言。更重要的是,C++有STL这个使用非常方便的库是C语言没有的,例如,用STL写个整数的排序操作只要1行,而用C语言的写法,则需要六七行才能完成,而且还需要理解函数指针等复杂概念才可以。因此本课程最后两周也讲授了STL的初步内容,但不计入成绩考核。

  2. 本课程的作业和考试形式是怎样的?

    答:本课程90%的作业,以及最后的期末考试,形式都是在北京大学在线程序评测系统 openjudge.cn上提交程序,由系统自动评判正误。程序不能有丝毫错误。这种形式对于提高编程能力极其有效。

  3. 本课程看起来内容很多,是不是很难拿到证书?

    答:对于比较难的部分,如位运算,指针,STL,虽然也会布置作业,但是不列入成绩考核范围。因此拿证书的难度并不大。

  4. 课程介绍中提到的“北京大学信息学院程序设计与算法等级认证”是怎么回事?

    答:为了推广和普及计算机教育,北京大学信息学院推出了基于2000题题库的“北京大学信息学院程序设计与算法等级认证”考试,考试共分十级,最高等级的水平相当于中学信息学奥赛全国赛或ACM国际大学生程序设计竞赛。本课程的内容对应于一级、二级,作业和考试题也来自该2000题的题库。

授课老师
郭炜

郭炜

讲师

分享