“计算概论与程序设计基础”(北京大学校内课程名“计算概论A”)是针对“信息科学技术学科一年级本科生”开设的一门专业基础主干课程。本课程的教学目标有二:其一,帮助学习者建立起“学习计算机科学技术知识所需的基本知识背景”;其二,帮助学习者“掌握计算机程序设计的基础知识”,培养学习者“独立设计计算机程序解决问题”的基本技能。
本课程的内容主要分为两个部分:(1)计算概论部分,约占课时量的15%;(2)程序设计基础部分,约占课时量的85%;
计算概论部分,我们将为大家解答一些与计算机程序设计相关的基础问题,例如,“计算机为什么能够进行计算?”,“计算机程序在计算机中是如何运行的?”,“计算机的发展规律是什么?”,“下一代的计算机将会是什么样子?”等等。我们希望通过对这些问题的解答,达到两个目的:其一,培养起大家对计算机科学的兴趣;其二,帮助大家建立起学习计算机科学所需要的“背景知识框架”。
程序设计基础部分,我们将以“C 语言”为主要学习对象,以典型的C++编程环境(如Visual Studio C++, Eclipse等)为工具,学习计算机程序设计的相关知识,并培养程序设计的基本技能。通俗讲,在这个部分,我们将教会大家“如何使用C语言编写计算机程序,甚至编写具有一定技术难度的程序”。
对于第一次学习计算机程序设计的同学而言,通常会觉得学习过程比较困难。在这里,我们特别提示大家:“对于难学的东西,更要循序渐进,更要遵循学习规律——先打好基础,逐步进阶!”为此,我们把“程序设计基础”部分的学习划分为四个迭代周期:
周期一: 感性认识计算机程序;
周期二: 理性认识计算机程序;
周期三: 函数——结构化的程序;
周期四: 一些稍复杂的数据结构(指针、结构体、链表等);
之所以称为“迭代周期”,是因为我们希望在每个周期中,同学们都能够编写出完整、可运行、能解决问题的计算机程序,而不是仅仅学习计算机程序设计语言的某个部分!所以,学习程序设计的过程,应该是一个“在实战中进阶”的过程,而不是一个“知识堆砌”的过程。希望这个迭代进阶的学习过程可以帮助大家顺利达成学习目标。
计算机的基本原理
从数学危机到图灵机
图灵机的基本构成
图灵机的运行机理
数的二进制表示
二进制数的布尔运算
请登陆 http://mooc.nnthink.com 完成课程作业
计算机的历史与未来
历史上的计算设备
从电子管到云计算
摩尔定律下的计算危机
量子计算机的基本原理
量子计算机的发展状态
程序运行的基本原理
问题的提出
冯诺依曼式计算机
存储器的种类与特点
存储器的原理与类型
CPU指令的执行
程序的执行
感性认识计算机程序
说在前面的话
程序是你告诉计算机的话
如果你的大脑是台计算机
如果你来设计一门编程语言
快步走近C程序之一
快步走近C程序之二
快步走近C程序之三
什么样的程序是好程序
配置编程环境(补充资料)下载安装和使用IDE
配置编程环境(补充资料)使用IDE进行调试
编程作业:编程基础练习(1/2)
从现实问题到计算机程序的
没有解决方案就没有程序
先有构想再写程序
先有构想再写程序--示例
体验结构化的程序--示例
编程作业:编程基础练习(2/2)
理性认识C程序 导论
明确学习进度
C语言的由来
C语言的标准
C语言的构成
C 语言中的数据成分
再谈学习进度与安排
变量定义的含义
整数型的类别
整数型的存储
整数的输入输出
最大与最小整数
浮点型
字符型
布尔型
常数
变量命名
编程作业:数据成分基础练习
C语言中的运算成分
说在前面的话
赋值运算
赋值运算的说明
算术运算
自增自减运算
关系运算
逻辑运算与混合运算
逗号,条件,强制类型转换
位运算
编程作业:运算成分基础练习
C语言中的控制成分
再谈分支语句
再谈循环语句
Goto之争
编程练习:控制成分基础练习
C程序中的数组
再谈一维数组
二维数组
三维数组
数组的作用之一
数组的作用之二
编程作业:数组应用练习
C程序中的字符串
字符数组与字符串
输入缓冲区
一个字符的输入
一串字符的输入
字符串应用例题
编程作业:字符串应用练习
C程序中的函数
函数的定义与声明
函数的调用过程
函数调用示例
变量的作用域
数组做函数参数
函数应用示例
编程练习:函数与字符串练习
函数的递归
如何理解递归
递归调用的过程
递归应用示例(切饼,斐波那契数列)
递归应用示例(进制转换,汉诺塔)
递归应用示例(放苹果)【较难 选听】
递归应用示例(逆波兰表达式)【较难 选听】
习题课一 枚举 模拟与递归
编程练习:递归编程练习(1/2)
指针 —
什么是指针
什么是指针变量
指针变量示例
指针变量的++---
数组与指针
用指针访问数组
习题课二 较难 选听
编程练习:递归编程练习(2/2)
指针二
字符串与指针
再谈指向一维数组的指针
指向二维数组的指针
二维数组名引用示例
利用指针遍历二维数组
编程作业:指针使用练习
指针三
指针做函数参数
限制指针函数实参的功能
指针做函数返回值
静态局部变量
编程练习:综合练习题
结构体与链表
结构体与结构体变量
结构体变量与函数
结构体变量与指针
链表的定义
链表的操作
编程练习:结构体与链表的使用
最后一次课
结语;轻叩面向对象之门
编程工具的安装和使用:下载、安装和使用IDE
说明 编程工具的安装和使用:使用IDE进行调试
为积极响应国家低碳环保政策, 2021年秋季学期开始,中国大学MOOC平台将取消纸质版的认证证书,仅提供电子版的认证证书服务,证书申请方式和流程不变。
电子版认证证书支持查询验证,可通过扫描证书上的二维码进行有效性查询,或者访问 https://www.icourse163.org/verify,通过证书编号进行查询。学生可在“个人中心-证书-查看证书”页面自行下载、打印电子版认证证书。
完成课程教学内容学习和考核,成绩达到课程考核标准的学生(每门课程的考核标准不同,详见课程内的评分标准),具备申请认证证书资格,可在证书申请开放期间(以申请页面显示的时间为准),完成在线付费申请。
认证证书申请注意事项:
1. 根据国家相关法律法规要求,认证证书申请时要求进行实名认证,请保证所提交的实名认证信息真实完整有效。
2. 完成实名认证并支付后,系统将自动生成并发送电子版认证证书。电子版认证证书生成后不支持退费。
基本资料:
主要参考本课程所提供的讲义资料,以及来自 https://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