课程概况
本课程的教学目标是通过学习C语言,建立起程序设计的概念,掌握程序设计的基本方法和技巧,养成良好的程序设计风格,从而具备应用程序设计解决相关专业领域内实际问题的基本能力。本课程在系统介绍程序设计语言基本知识的基础上,注重程序设计思想及能力培养,并引入专业应用的实际问题和工程案例。
为编写实现自己的梦想,贝尔实验室的Ken Thompson和Dennis M. Ritchie设计了UNIX操作系统,以及相应的程序设计语言——C语言。随后Windows、MacOS、Linux、Android等众多操作系统均借鉴了UNIX的设计思想,操作系统及大量应用软件都采用C语言作为程序设计语言。虽然自C语言诞生后,C++、Java、C#、PHP、Python、Matlab M、R等一系列语言被发明,并在不同软件开发领域获得广泛使用,但是C语言依然保持其旺盛的生命力。在近三年IEEE发布的编程语言排行榜中,C语言一直排在前两位。首先操作系统依然在使用C语言进行开发,其次在GPU计算、物联网等新技术领域依然优先使用C语言,另外众多语言或多或少吸收了C语言的营养。作为程序设计的初学者,C语言不是一门最简单的语言,但是一定会是一门受益终生的程序设计语言。
本课程围绕如何运算、如何表达逻辑、如何处理集合数据、如何实现代码的分解与重用、如何实现基于内存地址的数据访问、如何表达复杂对象、如何实现数据永久存储、如何实现程序移植,系统介绍表达式运算、输入输出、顺序结构、选择结构、循环结构、数组、函数、指针、结构体、文件、预编译处理等内容。
为方便大家学习,建议充分应用移动设备中的APP作为程序的开发工具,多写程序。
课程大纲
01
程序设计入门
学习目标:了解利用计算机及其程序求解问题的基本思想,以及现代存储程序式计算机的基本工作原理;了解数据、指令表示方法,以及如何编写程序;了解常用的程序设计语言;掌握问题求解与算法设计的基本思路与程序设计思想;通过实践掌握用C编写最简单程序。课时安排:建议在线学习2学时,上机实践2学时。
课时
在线学习:
1.1 计算机基本原理
1.2 指令与程序
1.3 程序设计语言
1.4 问题求解与算法设计
1.5 程序设计思想
1.6 C语言概述
上机实践:
1.1 在PC机上,安装Codeblock软件,并熟悉基本操作
1.2 在安卓手机,安装C4driod,并熟悉基本操作
1.3 编写简单程序
02
数据表示与运算
学习目标:掌握如何表示常量、变量;掌握C语言提供的基本数据类型;掌握如何实现包括加、减、乘、除在内的算术运算,如何实现大于、小于等比较相关的关系运算,如何实现包括与、或、非的逻辑运算,如何实现赋值运算;并掌握条件运算、逗号运算和类型转换等复杂运算。课时安排:建议在线学习3学时,上机实践3学时。
课时
在线学习:
2.1 标识符
2.2 数据类型
2.3 常量
2.4 变量
2.5 运算符概述
2.6 算术运算符与算术表达式
2.7 关系运算符与关系表达式
2.8 逻辑运算符与逻辑表达式
2.9 赋值运算符与赋值表达式
2.10 条件运算符与条件表达式
2.11 逗号运算符与逗号表达式
2.12 类型转换
上机实践:
2.1 编写简单程序
2.2 教材例3-1~3-8
03
基本语句与顺序结构
学习目标:掌握如何通过语句实现基本逻辑步骤;掌握如何通过从前往后的语句编排实现顺序逻辑结构;掌握如何从键盘获取外部信息;掌握如何通过向显示器输出信息课时安排:建议在线学习2学时,上机实践4学时。
课时
在线学习:
3.1 输入输出概念
3.2 printf函数
3.3 scanf函数
3.4 程序控制结构概述
3.5 基本语句
3.6 案例-电影评分计算
上机实践:
3.1 实现教材例3-9~3-13
3.2 实现案例-电影评分计算
3.3 学有余力的同学,完成例3-15、例3-16
04
逻辑判断与选择结构
学习目标:掌握如何依据逻辑判断,例如比较,有选择的执行逻辑步骤,即实现选择结构;掌握实现单分支的if语句;掌握实现双分支的if...else语句;掌握实现多分支的if...else、if...语句和switch语句课时安排:建议在线学习3学时,上机实践3学时。
课时
在线学习:
4.1 单分支结构-if语句
4.2 双分支结构-if...else
4.3 多分支结构-if...else if...
4.4 多分支结构-switch
4.5 案例-电影评分计算
上机实践:
4.1 编写简单程序
4.2 实现教材例4-1~4-9
4.3 实现案例-电影评分计算
05
迭代计算与循环结构
学习目标:掌握如何依据迭代条件实现反复的运算,直到获得最终结果的逻辑结构,即实现循环结构;掌握while、for、do while语句实现的循环结构,以及通过循环嵌套实现复杂逻辑;掌握通过break/continue语句实现循环控制。课时安排:建议在线学习2学时,上机实践3学时。
课时
在线学习:
5.1 循环结构-while
5.2 循环结构-for
5.3 循环结构-do while
5.4 循环结构-break/continue
5.5 循环结构-嵌套
5.6 实现案例-电影评分计算
上机实践:
5.1 编写简单程序
5.2 实现教材例5-1~5-14
5.3 实现案例-电影评分计算
06
集合数据及其处理
学习目标:掌握集合数据,例如列表、向量、矩阵等数据的存储;掌握基于一维数组实现列表和向量的存储;掌握插入、删除、查找和排序等集合数据处理方法;掌握基于二维数组实现表格和矩阵数据的存储;掌握矩阵运算,表格排序等数据处理算法。课时安排:建议在线学习2学时,上机实践3学时。
课时
在线学习:
6.1 数组概念
6.2 一维数组
6.3 二维数组
上机实践:
6.1 编写简单程序
6.2 实现教材例6-1~6-7
07
字符数据处理
学习目标:掌握字符和字符串的存储;掌握字符串所涉及的插入、删除、查找和排序等常用处理方法;掌握字符串长度计算、字符串复制、字符串连接等处理算法;深入了解数组与数据存储机制。课时安排:建议在线学习2学时,上机实践3学时。
课时
在线学习:
7.1 字符数组
7.2 字符串
7.3 数组与数据存储
7.4 案例-电影评分计算
上机实践:
7.1 编写简单程序
7.2 实现教材例6-9~6-13
7.3 实现案例-电影评分计算
08
函数实现代码分解和重用
学习目标:从代码重用角度,掌握C语言引入函数在提高程序设计质量和效率中的重要;掌握函数的定义和基本结构;掌握函数声明的作用及其常用方法;掌握函数之间信息传递机制,并重点掌握基于函数参数的信息传递机制;掌握函数调用的方法。课时安排:建议在线学习2学时,上机实践2学时。
课时
在线学习:
8.1 函数入门
8.2 函数定义
8.3 函数声明
8.4 参数传递
8.5 函数调用
上机实践:
8.1 编写简单程序
8.2 实现教材例7-4~7-10
09
递归及函数结构
学习目标:掌握递归调用的基本机制;了解典型C语言的程序的源程序结构;了解内部函数与外部函数的定义和用途;了解函数及源程序文件引入后,对变量作用域的影响;了解变量在内存中的存储机制。课时安排:建议在线学习2学时,上机实践2学时
课时
在线学习:
9.1 递归调用
9.2 源程序结构
9.3 内部函数与外部函数
9.4 变量作用域-全局变量与局部变量
9.5 变量如何存储
9.6 案例-电影评分计算
上机实践:
9.1 编写简单程序
9.2 实现教材例7-10~7-14
9.3 实现案例-电影评分计算
10
内存地址及其指针
学习目标:了解程序设计中的代码和指令的存储机制;掌握变量、数组的内存地址获取方法;掌握通过地址运算处理变量和数组的基本方法。课时安排:建议在线学习2学时,上机实践2学时。
课时
在线学习:
10.1 地址与指针
10.2 指针变量
10.3 指针运算
10.4 指针与一维数组
10.5 指针与二维数组
上机实践:
10.1实现教材例8-2~8-3
11
指针的应用
学习目标:掌握通过地址运算处理字符串的基本方法;了解函数中使用指针类型参数的原因,掌握使用指针类型参数的基本方法;掌握应用指针计算字符串长度、字符串复制、字符串链接等基本算法;了解指针数组的基本用法;了解数组指针、函数指针、指向指针的指针的基本概念;掌握内存管理的基本方法。课时安排:建议在线学习2学时,上机实践4学时。
课时
在线学习:
11.1 指针与字符串
11.2 指针数组
11.3 数组指针
11.4 函数与指针
11.5 指向变量的地址-指向指针的指针
11.6 内存管理
11.7 实现案例-电影评分计算
上机实践:
11.1 编写简单程序
11.2 实现教材例8-4~8-16
11.3 实现案例-电影评分计算
12
复杂对象描述与结构体
学习目标:了解C语言引用结构体的原因;掌握结构体的定义方法;掌握结构体变量、数组、指针的基本用法;掌握结构体用作函数参数和返回值的基本用法;了解共用体、枚举类型和类型重定义的基本用法。课时安排:建议在线学习2学时,上机实践3学时。
课时
在线学习:
12.1 为何引入结构体及其定义
12.2 结构体变量及其初始化
12.3 结构体数据运算
12.4 结构体数组
12.5 结构体指针
12.6 结构体与函数
12.5 共用体
12.6 枚举类型
12.7 类型重定义
上机实践:
12.1 编写简单程序
12.2 实现教材例9-2~9-7
13
链表及其处理
学习目标:了解链表定义、遍历、排序、插入、删除等基本处理算法。课时安排:建议在线学习2学时,上机实践2学时。
课时
在线学习:
13.1 链表的定义
13.2 链表的操作
上机实践:
13.1 实现案例-电影评分计算
14
预编译处理
学习目标:了解C语言中引入预编译处理的原因;了解预编译指令与函数语句的区别;掌握符号常量和宏的定义方法;了解#include指令的基本用法;了解条件编译的基本用法课时安排:建议在线学习2学时,上机实践2学时。
课时
在线学习:
14.1 预编译处理概述与define
14.2 宏定义
14.3 文件包含与include
14.4 条件编译
上机实践:
14.1 实现教材例10-1~10-5
14.2 实现案例-电影评分计算
15
文件与数据永久存储
学习目标:了解文件在实现数据永久性存储中的作用;了解文本文件与二进制文件的区别;掌握打开、关闭、读、写等基本文件操作。课时安排:建议在线学习2学时,上机实践2学时。
课时
在线学习:
15.1 文件概述
15.2 文件定义
15.3 文件操作基础
15.4 文本文件读写
15.5 二进制文件读写
15.6 定位与随机读写
15.5 综合应用
上机实践:
15.1 编写简单程序
15.2 实现教材例11-8~11-10
预备知识
本课程要求学习者熟悉Windows或Linux的基本操作。
参考资料
开发工具(PC)
[1] CodeBlocks
[2] VC++ 2010
开发工具(手机及平板电脑)
安卓系统:C4droid
苹果系统:C++
参考教材:
高克宁,程序设计基础(C语言)第3版,清华大学出版社,2018年1月
常见问题
------------账号注册相关问题------------
Q1:我东北大学的学生,本期课程采用了混合式教学,在注册账号时要注意哪些问题?
A1:要求个人信息的“昵称”中包含学校和学号信息。例如NEU20190101。
Q2:我不是东北大学的学生,本期课程采用了混合式教学,在注册账号时注意哪些问题?
A2:要求个人信息的“昵称”中包含学校和学号信息。例如LNU20190101。
Q3:我是在校学生,未参加混合式教学,在注册账号时注意哪些问题?
A3:不做要求,建议参考问题Q2。
------------混合式教学相关问题------------
Q4:我希望依托本门课程开展混合式教学,如何联系?
A4:请发送邮件给我们,gkn@cc.neu.edu.cn
Q5:我们线下课程进度与MOOC进度不一致,如何处理?
A5:为了支持混合式教学需要,本期课程所有练习和测验将开放8周,最终截止时间不超过课程结束时间。请各位老师另行通知各项学习活动的实际完成时间。
Q6:如何获得学生过程学习数据?
A6:需要获得学生在线学习过程学习数据的老师,请联系我们,我们将通过电子邮件发送给您。请务必先和我们联系。
------------东北大学混合教学问题------------
Q7:本学期注册《C语言程序设计(理工类)》课程,教学如何开展?
A7:课程开展各项安排,请参见教务处通知。
Q8:本学期注册《C语言程序设计(理工类)》课程,如何学习?
A8:线上学习依托本MOOC完成;实践课(上机)依托东北大学在线编程社区https://202.118.11.198/完成;学习支持依托各课程组建立的QQ群或微信群。