计算概论与程序设计基础
分享
课程详情
课程评价
spContent=本课程是北京大学信息科学技术学院本科生入学之后的第一门专业基础课程(校内课名:计算概论A),也是中国大陆最早发布的第一门计算机相关的MOOC课程(2013年9月于Coursera首次发布)。 在这里,你将与北京大学的同学们一起,学习程序设计的基础知识,感受计算机科学与技术的巨大魅力!
—— 课程团队
课程概述

    “计算概论与程序设计基础”(北京大学校内课程名“计算概论A”)是针对“信息科学技术学科一年级本科生”开设的一门专业基础主干课程。本课程的教学目标有二:其一,帮助学习者建立起“学习计算机科学技术知识所需的基本知识背景”;其二,帮助学习者“掌握计算机程序设计的基础知识”,培养学习者“独立设计计算机程序解决问题”的基本技能。


    本课程的内容主要分为两个部分:(1)计算概论部分,约占课时量的15%;(2)程序设计基础部分,约占课时量的85%


    计算概论部分,我们将为大家解答一些与计算机程序设计相关的基础问题,例如,“计算机为什么能够进行计算?”,“计算机程序在计算机中是如何运行的?”,“计算机的发展规律是什么?”,“下一代的计算机将会是什么样子?”等等。我们希望通过对这些问题的解答,达到两个目的:其一,培养起大家对计算机科学的兴趣;其二,帮助大家建立起学习计算机科学所需要的“背景知识框架”。


    程序设计基础部分,我们将以“C 语言”为主要学习对象,以典型的C++编程环境(如Visual Studio C++, Eclipse等)为工具,学习计算机程序设计的相关知识,并培养程序设计的基本技能。通俗讲,在这个部分,我们将教会大家“如何使用C语言编写计算机程序,甚至编写具有一定技术难度的程序”。

    对于第一次学习计算机程序设计的同学而言,通常会觉得学习过程比较困难。在这里,我们特别提示大家:“对于难学的东西,更要循序渐进,更要遵循学习规律——先打好基础,逐步进阶!”为此,我们把“程序设计基础”部分的学习划分为四个迭代周期

        周期一: 感性认识计算机程序; 

        周期二: 理性认识计算机程序;  

        周期三: 函数——结构化的程序; 

        周期四: 一些稍复杂的数据结构(指针、结构体、链表等);

    之所以称为“迭代周期”,是因为我们希望在每个周期中,同学们都能够编写出完整、可运行、能解决问题的计算机程序,而不是仅仅学习计算机程序设计语言的某个部分!所以,学习程序设计的过程,应该是一个“在实战中进阶”的过程,而不是一个“知识堆砌”的过程。希望这个迭代进阶的学习过程可以帮助大家顺利达成学习目标。

课程大纲

课程基本结构:

    计算概论与程序设计基础

        |——计算概论

        |——程序设计基础

                    |——感性认识计算机程序

                    |——理性认识计算机程序

                    |——函数——结构化的程序

                    |——一些稍复杂的数据结构

        |——轻叩面向对象之门


课程大纲:

=================================

第一部分 计算概论部分

    1.1 计算机的基本原理

        第一节 从数学危机到图灵机

        第二节 图灵机的基本构成

        第三节 图灵机的运行机理

        第四节 数的二进制表示

        第五节 二进制数的布尔运算

    1.2 计算机的发展趋势

        第一节 历史上的计算设备

        第二节 从电子管到云计算

        第三节 摩尔定律下的计算危机

        第四节 量子计算机的基本原理

        第五节 量子计算机的研究进展

    1.3 程序运行的基本原理

        第一节 问题的提出

        第二节 冯诺依曼式计算机

        第三节 存储器的种类与特点

        第四节 存储器的原理与类型

        第五节 CPU指令的执行

        第六节 程序的执行

=================================

第二部分 程序设计基础

    ------------------------------------------------------

    第一个迭代周期:感性认识计算机程序

        2.1 认识一下计算机程序

            第一节 程序是你告诉计算机的话

            第二节 如果你的大脑是台计算机

            第三节 如果你来设计一门编程语言

            第四节 快步走进C程序之一

            第五节 快步走进C程序之二

            第六节 快步走进C程序之三

            第七节 什么样的程序是好程序

        2.2 从现实问题到计算机程序

            第一节 没有解决方案就没有程序

            第二节 先有构想再写程序

            第三节 先有构想再写程序-示例

            第四节 体验结构化的程序-示例

    ------------------------------------------------------

    第二个迭代周期:理性认识C程序

        3.1 理性认识C程序 导论

            第一节 C语言的由来

            第二节 C语言的标准

            第三节 C语言的构成

        3.2 C语言中的数据成分

            第一节 变量定义的含义

            第二节 整数型的类别

            第三节 整数型的存储

            第四节 整数的输入输出

            第五节 最大与最小整数

            第六节 浮点型

            第七节 字符型

            第八节 布尔型

            第九节 常数

            第十节 变量的命名

        3.3 C语言中的运算成分

            第一节 赋值运算

            第二节 赋值运算的说明

            第三节 算术运算

            第四节 自增自减运算

            第五节 关系运算

            第六节 逻辑运算与混合运算

            第七节 逗号,条件,强转

            第八节 位运算

        3.4 C语言中的控制成分

            第一节 再谈顺序语句

            第二节 再谈分支语句

            第三节 再谈循环语句

            第四节 Goto之争

        3.5 C程序中的数组

            第一节 再谈一维数组

            第二节 二维数组

            第三节 三维数组

            第四节 数组的作用之一

            第五节 数组的作用之二

        3.6 C程序中的字符串

            第一节 字符数组与字符串

            第二节 输入缓冲区

            第三节 一个字符的输入

            第四节 一串字符的输入

            第五节 字符串应用例题

    ------------------------------------------------------

    第三个迭代周期:结构化的程序--函数

        4.1 C程序中的函数

            第一节 函数的定义与声明

            第二节 函数的调用

            第三节 变量的作用域

            第四节 数组做函数参数

            第五节 函数应用示例

        4.2 函数的递归

            第一节 如何理解递归

            第二节 递归调用的过程

            第三节 递归应用示例(切饼、斐波那契数列)

            第四节 递归应用示例(进制转换、汉诺塔)

            第五节 递归应用示例(放苹果)[较难 选听]

            第六节 递归应用示例(逆波兰表达式)[较难 选听]

    ------------------------------------------------------

    第四个迭代周期:更复杂的数据结构

        5.1 指针(一)

            第一节 什么是指针

            第二节 什么是指针变量

            第三节 指针变量示例

            第四节 指针变量的++ --

            第五节 数组与指针

            第六节 用指针访问数组

            第七节 指向二维数组的指针

        5.2 指针(二)

            第一节 字符串与指针

            第二节 取地址与指针运算

            第三节 二维数组名的含义

            第四节 二维数组名引用示例

            第五节 指针做函数参数

            第六节 限制指针实参的功能

            第七节 指针做函数返回值

            第八节 静态局部变量

        5.3 结构体与链表

            第一节 结构体与结构体变量

            第二节 结构体变量与函数

            第三节 结构体变量与指针

            第四节 链表的定义

            第五节 链表的操作

=================================

第三部分 轻叩面向对象之门

=================================

证书要求

要想获得结业证书,你需要完成相关学习内容,包括观看视频,提交作业,参与互评和讨论等等。你需要及时查看课程大纲及公告,了解获得课程证书的具体要求。课程团队将根据你的最后得分判断是否颁发证书。在获得合格证书的基础上,表现尤为优异的学生将获得优秀证书。注意:课程证书上的姓名将与你注册信息中的真实姓名信息一致,请确认你的信息无误。你可以点击页面右上方进入“设置”修改相关信息。

参考资料

基本资料:

主要参考本课程所提供的讲义资料,以及来自 http://ica.openjudge.cn/  的相关练习题。

参考教材:

[1] 《程序设计基础》(第二版),吴文虎,清华大学出版社,2006年7月 参考教材

[2] Computer Systems -A Programmer's Perspective, Randal E.Bryant, David O'Hallaron, Prentice Hall, 2002

[3] C++ Programming Today (2 edition), Barbara Johnston, Prentice Hall, 2007