对于这个地球上大多数人来说,真正的数字化革命还没有开始。在接下来的10年里,变化将无处不在,让我们一起来给这个世界编码吧!——Eric Schmidt Google执行主席
我们会用15周的时间来深入讲解C语言,在授课过程中,我们会注重多解释一些“为什么”以及错误程序的分析,从环环相扣的问题入手,将一些易被忽视且对高水平程序设计很重要的“点”,沿着数据结构从简单到复杂的主线逐一展开,在实例的“不断深化和提升”中引出知识点,通过对问题的举一反三和前后知识点的融会贯通,由浅入深地引导你循序渐进地编写规模逐步增大的程序。
在过去40年90%的时间里,C语言独领风骚,仅偶尔被其他语言超越,可见其魅力。C语言作为一种高级语言,其实并不高级,但正是这种“低级”给我们更多思考的机会。期望通过本课程的学习,你不只是简单地能够掌握一种语言的语法,还能理解隐含在语法背后的思想,并初步具备灵活使用这些思想进行编写程序解决实际问题的能力。如果你掌握了这些,你会发现,迈向成功的最后一步不过是选择一种合适的编程工具而已。
你想从“菜鸟”升级为“程序猿”吗?那就加入“稀饭”的行列,和我们一起踏上爱上C语言之旅吧。
自2021年秋季学期起,该课程加入教育部-华为“智能基座”精品慕课建设项目,将C语言与华为资源有机结合起来,包括鲲鹏平台软件开发、华为编程实践与编程规范等。具体所在的章节如下:
1.1.2 计算的未来和未来的计算(9分半)
1.1.3 编译型语言与解释型语言及其运行差异(7分)
1.1.4 现代主流计算机指令(8分)
1.2.3 鲲鹏平台介绍——如何在华为云上申请弹性云服务器(6分)
1.2.4 鲲鹏平台介绍——远程登陆(3分半)
1.2.5 鲲鹏平台介绍——linux指令(4分)
1.2.6 鲲鹏平台介绍——运行Hello World(5分)
1.6 进阶:华为编程实践与编码规范
1.6.1 编程实践—数据类型(4分)
1.6.2 编程实践—常量(4分)
1.6.3 编程实践—变量(10分)
1.6.4 编程实践—声明与初始化(1分)
2.6 进阶:华为编程实践与编码规范
2.6.1 编程实践—表达式(4分)
2.6.2 代码风格—整数(16分)
5.7 进阶:华为编程实践与编码规范
5.7.1 编程实践—控制语句(8分半)
6.1.3 鲲鹏平台ARM处理器的函数优化(8分)
6.5 进阶:华为编程实践与编码规范
6.5.1 代码风格—命名(6分半)
6.5.2 代码风格—注释(6分)
6.5.3 代码风格—格式(17分)
6.5.4 编程实践—预处理(19分)
6.5.5 编程实践—头文件(9分半)
11.5 进阶:华为编程实践与代码风格
11.5.1 代码风格—指针和数组(10分半)
11.5.2 代码风格—字符串(5分)
11.5.3 代码风格—断言(6分)
11.5.4 代码风格—函数设计(17分)
11.5.5 代码风格—函数使用(19分)
13.4 鲲鹏多核体系与弱内存模型(17分)
15.7 进阶:华为编程实践与编码规范
15.7.1 编程规范—内存(6分)
15.7.2 编程规范—文件(3分半)
15.7.3 编程规范—其它(4分)
学习本课前你必须知道的那些事儿
开篇
授课视频内容进度概览
本课程使用的教材和软件开发环境
向老师提问、做编程作业的注意事项
小白遇到的安装使用问题尽在其中
第1周——初识C语言从认识变量和常量开始
1.1 计算机基础(49分钟)
1.2 C 语言集成开发环境简介(39分钟)
1.3 如何定义一个变量(10分钟)
1.4 变量的表数范围和存储形式(30分钟)
1.5 宏常量与const常量(13分钟)
1.6 进阶:华为编程实践与编码规范(19分)
本周课件、知识点小结和常见错误小结
先修知识(有基础者越过)——二进制和内存(11分半)
第1周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第2周——数字间的那些事儿,做点计算哈
2.1 算术运算(20分钟)
2.2 赋值运算(15分钟)
2.3 增1和减1运算(17分钟)
2.4 自动类型转换(5分钟)
2.5 强制类型转换(7分半)
2.6 进阶:华为编程实践与编码规范(20分)
本周课件、知识点小结和常见错误小结
第2周测验
练兵区——编程题——不计入总分
练兵区——单选题——不计入总分
第3周——从键盘中来,到键盘中去,开始输入和输出啦
3.1 数据的格式化屏幕输出(15分钟)
3.2 数据的格式化键盘输入(18分钟)
3.3 单个字符的输入输出(15分半)
3.4 进阶:用getchar()输入数据存在的问题(含错误案例分析)(10分)
3.5 进阶:用%c输入数据存在的问题(含错误案例分析)(10分)
本周课件、知识点小结和常见错误小结
第3周编程题在线测试
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第3周测验
第4周——无处不在的抉择
4.1 关系运算符和逻辑运算符(23分钟)
4.2 条件语句(14分钟)
4.3 开关语句——条条道路通罗马(28分钟)
4.4 进阶:数值溢出和精度损失问题(34分半)
4.5 进阶:软件测试与错误实例分析(20分半)
本周课件、知识点小结和常见错误小结
选学——用raptor绘制选择结构的流程图(27分钟)
第4周测验
第4周编程题在线测试
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第5周——周而复始的循环之道
5.1 计数控制的循环(31分钟)
5.2 递推(33分钟)
5.3 条件控制的循环(32分钟)
5.4 嵌套循环(17分钟)
5.5 穷举(39分钟)
5.6 进阶:软件调试与错误实例分析(27分钟)
5.7 进阶:华为编程实践与编码规范(8分半)
本周课件、知识点小结和常见错误小结
选学——用raptor绘制循环结构的流程图(25分钟)
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第5周测验
第5周编程题在线测试
第6周——函数:分工与合作的艺术
6.1 函数定义、调用、参数传递和函数原型(43分)
6.2 函数封装与程序的健壮性(23分钟)
6.3 进阶:断言与防御式编程(14分钟)
6.4 进阶:代码风格(22分钟)
6.5 进阶:华为编程实践与编码规范(58分)
选学——结构化与模块化程序设计方法(41分)
本周课件、知识点小结和常见错误小结
第6周测验
第6周编程题在线测试
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第7周——《盗梦空间》的逻辑:探寻递归的奥秘
7.1 从嵌套调用到递归调用(20分钟)
7.2 递归是如何执行的(16分钟)
7.3 进阶:尾递归是什么鬼?(14分半)
7.4 变量的作用域(22分半)
7.5 进阶:变量的生存期(33分半)
本周课件、知识点小结和常见错误小结
选学——分治和迭代(33分半)
7.6 进阶: 多文件结构(7分半)
第7周测验
第7周编程题在线测试
练兵区——编程题——不计入总分
练兵区——单选题——不计入总分
第8周—— 一堆数据来了,你准备好了吗
本周内容导读
8.1 数组的定义和初始化(43分)
8.2 向函数传递一组相同类型的数据(19分)
8.3 查找算法——众里寻他千百度(37分半)
8.4 排序算法——让世界变得更有序(17分半)
本周课件、知识点小结和常见错误小结
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第8周编程题在线测试
第8周测验
第9周——指针:C语言世界中所向披靡的“金箍棒”
本周内容导读
9.1 指针变量的定义、初始化及其解引用(19分)
9.2 指针变量作函数参数(36分半)
9.3 进阶:函数指针及其应用(27分)
9.4 进阶:数组的趣味应用(50分)
本周课件、知识点小结和常见错误小结
第9周编程题在线测试
第9周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第10周——字符串:C语言世界中的大力水手
本周内容导读
10.1 字符串的存储与表示(28分)
10.2 字符串处理操作(15分)
10.3 向函数传递和从函数返回字符串(26分)
10.4 进阶:缓冲区溢出与错误案例分析(51分半)
本周课件、知识点小结和常见错误小结
第10周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第10周编程题在线测试
第11周——指针的孪生兄弟
本周内容导读
11.1 指针的运算(8分)
11.2 指针和一维数组间的关系(14分)
11.3 指针和二维数组间的关系(18分)
11.4 进阶:指针数组及其应用(22分)
11.5 进阶:华为编码实践与代码风格(57分半)
本周课件、知识点小结和常见错误小结
第11周测验
第11周编程题在线测试
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第12周——海陆空齐上阵:又来了一堆数据
本周内容导读
12.1 结构体类型(13分)
12.2 结构体与数组的嵌套(7分)
12.3 结构体的相关计算和操作(19分)
12.4 向函数传递一堆不同类型的数据(28分半)
12.5 枚举类型和共用体类型有什么用(25分)
12.6 进阶:典型应用实例——洗发牌模拟(20分)
本周课件、知识点小结和常见错误小结
练兵区——编程题——不计入总分
第12周测验
第12周编程题在线测试
练兵区——单选题——不计入总分
第13周——原来内存也可以这么玩,我是指针我怕谁
本周内容导读
13.1 何为动态内存分配(26分)
13.2 动态数组
13.3 进阶:常见的内存错误及其解决对策(52分半)
13.4 鲲鹏处理器Memory Models机制(17分)
本周课件、知识点小结和常见错误小结
第13周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第14周——结构设计的艺术
本周内容导读
14.1 数据的链式存储——单向链表
14.2 进阶内容:其他数据结构简介(21分)
本周课件
学习体会
第14周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第15周——学会保存你的数据
本周内容导读
15.1 二进制文件与文本文件(14分)
15.2 文件的打开和关闭(8分)
15.3 格式化数据的文件读写(5分)
15.4 字符和字符串的文件读写(39分)
15.5 内存数据块的文件读写(7分)
15.6 随机读写与文件缓冲(6分半)
15.7进阶:华为编码实践与编码规范(13分半)
本周课件、知识点小结和常见错误小结
扩展内容——诗与迷宫
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第15周测验
扩展内容:华为Devkit开发套件的使用
华为云账号申请与删除
putty及gbd cmake安装
DevKit插件使用
Devkit课件