C语言程序设计精髓
C语言程序设计精髓
70万+ 人选课
更新日期:2025/06/05
开课时间2025/02/17 - 2025/08/17
课程周期26 周
开课状态开课中
每周学时-
课程简介

  对于这个地球上大多数人来说,真正的数字化革命还没有开始。在接下来的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课件