C语言程序设计
课程信息
| 课程名称/课程号 | 适用范围与修读要求 |
|---|---|
| C程序设计基础 CS1002G |
能环、过控、储能普通班 · 26级 通识选修(选3学分) 车辆 · 25级及以前、26级 通识选修(选3学分) |
| 程序设计基础与实验 CS1015GZ |
慧能 · 25级及以前 通识必修 |
| 程序设计与算法基础 CS1014GZ |
储能卓工班 · 26级 通识必修 |
C程序设计基础、程序设计基础与实验、程序设计与算法基础均使用C语言。教学范围与考核要求按所修课程为准。
课程简介
展开查看
C程序设计基础(CS1002G)
通过介绍C语言及其编程技术和基本的问题求解算法,使学生理解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,具备初步的高级语言程序设计能力。课程内容主要包括:数据类型与表达式、程序基本流程控制、函数及程序模块化设计、数组与文件应用、算法基础等。
程序设计基础与实验(CS1015GZ)
本课程主要讲授程序设计的基础知识、C语言的基本概念、语法规则和利用C语言进行结构化程序设计的基本方法,以及C语言的编程技巧。通过安排学生上机实验,使学生学习的程序设计知识得以实践。通过应用C语言,更好地理解高级程序设计语言的特性和结构化程序设计的思想,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的方法,具备初步的高级语言程序设计能力。
程序设计与算法基础(CS1014GZ)
本课程以问题驱动的方式讲授 C 语言程序设计与基本算法,使学生学会写程序、用计算思维求解问题,而不局限于某一门语言。课程强调算法理论与编程实践并重:从输入—处理—输出的程序骨架出发,逐步引入判断与循环、函数、数组及其应用(散列、大整数、多项式求值与卷积)、线性与矩阵数据结构(栈、队列、二维数组)、递归、查找与排序及复杂度、指针与字符串、结构与链表、多文件程序结构、数据类型的底层表示,以及文件与位运算。通过每周作业、实验与课内活动完成大量编程训练,为后续计算机科学课程打下基础。
来源:教务网。
课程内容
分数构成
C程序设计基础(CS1002G)
期末总评成绩 = 平时成绩(50分) + 期末考试(100分)*0.5
期末考试为闭卷,由理论考试(判断题+单选题)、实验考试(编程题+多文件程序填空题)两部分组成。
平时成绩50分,包括:
① 平时作业 25分
② 课堂表现(学情调查、考勤、随堂小测、回答问题、课堂讨论等)5分
③ 阶段性测试四次共20分
程序设计基础与实验(CS1015GZ)
-
总评成绩=平时成绩60%+期末理论考试40%
-
平时成绩包括:平时作业25%,课堂表现5%,期中考试10%,实验考试20%
-
实验考试和期末理论考试均设置最低合格线,达到最低合格线,总评才能及格
程序设计与算法基础(CS1014GZ)
本课程考核拟由以下几部分组成:
- 平时 60%:每周工作 50%(实验 15%、作业 15%、课内活动 20%)+ 期中 10%
- 期末 40%
- 所有作业、实验、测验、考试在 PTA 上进行,题目集分数归一折算
课程大纲
展开查看
C程序设计基础(CS1002G)
课程主要内容:
(一)数据的定义
数据的定义包括数据类型和存储类别
1.基本类型
基本类型指整型、实型和字符型
(1) 常量
熟练掌握各种表示形式的整数、实数、字符常量和字符串常量,符号常量的定义和使用。
包括整数的十进制、八进制和十六进制的表示形式、长整型常量和无符号型常量的表示形式,实数的浮点表示法和科学记数法,字符的转义序列,常用符号常量的含义(如NULL)
(2) 变量
熟练掌握变量的定义和初始化
2.构造类型
构造类型包括数组和结构
(1) 数组
熟练掌握一维和二维数组的定义和初始化,数组元素的引用,包括一维字符数组和字符串,二维字符数组和字符串数组
(2) 结构
掌握结构类型的定义,结构变量、结构数组、结构指针的定义和初始化,结构变量成员的引用。
3.指针
(1) 理解并掌握指针类型、指针所指向的对象的类型之间的差别
(2) 掌握指针相关的两个运算符:&、*
(3) 掌握指针的输出格式:"%p"
(4) 掌握指针的3种合法运算及运算规则:①指针±整数、②指针-指针、③指针 比较 指针
(5) 理解指针相关的3个概念:①野指针(wild pointer)、②空指针(NULL pointer)、③通用指针(general pointer)即用void *定义的指针变量,熟练掌握解决以下3个问题的具体方法:①如何避免野指针、②如何运用空指针返回一个不存在的对象的地址、③如何运用通用指针实现两个不同类型指针变量之间的相互赋值
(6) 掌握如何通过强制类型转化把整数或某种类型的指针的值转化成指定指针类型
4.数组和指针的关系
理解并掌握以下3点:
(1) 一维数组名可理解为该数组首元素的地址,即a≡&a[0],并且一定有a[i]≡*(a+i)
(2) 只要指针变量p的类型不是void *,那么一定有p[i]≡*(p+i)
(3) 一维数组a作函数实参的本质是以&a[0]作实参,若a[0]的类型为type,那么a对应的形参b的类型一定是type *,且形参b的写法共有3种形式:①type b[]、②type b[非零正整数]、③type *b
5.变量的存储类别、作用域和生存期
(1) 掌握变量的存储类别
全局变量、动态局部变量、静态局部变量
(2) 掌握动态局部变量与静态局部变量的区别
(二)运算及流程控制
1.基本运算
包括算术运算(含自增、自减操作)、关系运算、逻辑运算、位运算、条件运算、赋值运算、逗号运算。
熟练掌握运算符的功能。
熟练掌握运算符的优先级和结合方向。
熟练掌握隐式类型转换和强制类型转换。
2.表达式
熟练掌握各类表达式的计算规则
3.语句
(1) 熟练掌握表达式语句、空语句、复合语句
(2) 熟练掌握简单控制语句(break、continue、return、goto*)
(3) 熟练掌握选择控制语句(if、switch)
(4) 熟练掌握重复控制语句(for、while、do…while)
*注: goto作为C语言的重要关键词在大纲中予以保留,但不作考查要求
(三)程序格式、程序结构和函数
1.程序格式
了解空白符(空格、Tab、回车)在源程序中作为语法成分之间的分隔符的含义及用法
了解注释的2种方法:①// ②/* … */
了解复合语句中{}的对齐规则
了解if…else、while、do…while、for、switch…case的缩进规则
2.程序结构
熟练掌握main函数与其他函数之间的关系,包括标准库函数和自定义函数。
3.函数的定义
(1) 熟练掌握函数定义的ANSI C格式
(2) 熟练掌握函数的参数(形式参数和实在参数)及参数传递,包括指针作为函数的参数
(3) 熟练掌握函数的返回值,包括指针作为函数的返回值
(4) 了解void类型函数的含义及用法,了解函数的形参为void的含义及用法
(5) 掌握函数原型的意义及用法
(6) 掌握实参类型服用形参类型、返回值类型服从函数类型的规则及用法
(7) 理解并掌握值传递(call by value)与地址传递(call by reference)的差别
3.函数的调用
(1) 函数调用的一般格式
熟练掌握通过函数名调用函数
(2) 掌握函数的嵌套调用,了解函数的递归调用
(3) 熟练掌握标准库函数的调用
常用数学函数:sin、cos、sqrt、pow、exp、abs、fabs、log、log10
常用字符串函数:strlen、strcpy、strcat、strcmp
(四)数据的输入和输出
熟练掌握常用输入输出函数:scanf、printf、getchar、putchar、gets、puts
(五)编译预处理
-
了解#include的含义及用法,掌握头文件与函数原型之间的关系
-
了解#define定义一个符号常数的格式
-
了解#if 0…#endif可以起到注释作用的原理
(六)常用算法
1.分类(排序)算法
冒泡、选择、插入
2.检索(查找)算法
(1) 无序数据序列的查找(见遍历算法)
(2) 有序数据序列的查找:二分法
3.遍历算法
一维数组和二维数组的遍历
4.简单的数值计算方法:如整数分解成十进制的各个位、分解质因数、求最大公约数
5.其它基本算法:如进制转换
(七)基本的程序设计方法和风格
1、结构化程序设计方法(如逐步求精法)
2、良好的程序设计风格(如程序模块化、加注释、缩进的书写格式)
课堂教学安排(32学时):
1、计算机基础 (2学时)
计算机基本工作原理
数的表示与进制
程序与程序设计语言
实现问题求解的过程
上机实验环境及上机步骤介绍
2、用C语言编写程序(2学时)
一个简单程序:输出“Hello world!”
求华氏温度对应的摄氏温度
计算分段函数
输出华氏-摄氏温度转换表
生成乘方表与阶乘表
程序的调试(单步跟踪、断点设置、变量查看)
3、分支结构(2学时)
字符类型
字符型数据的输入和输出
逻辑运算
if语句、if…else语句
switch语句
分支控制结构程序设计
4、循环结构(4学时)
for语句
while语句
do…while语句
循环语句的选择
break语句和continue语句
嵌套循环
循环结构程序设计
5、函数与程序结构(4学时)
函数的定义
函数的调用
函数的参数传递
使用函数编写程序(强调代码注释)
局部变量与全局变量
变量生命周期和静态局部变量
递归函数的基本概念
文件包含
结构化程序设计
6、数据类型和表达式(4学时)
数据的存储和基本数据类型
变量和常量
数据的输入和输出
类型转换
表达式
7、数组(3学时)
一维数组的定义、引用和初始化
二维数的组定义、引用和初始化
一维字符数组与字符串
8、指针与结构(6学时)
地址和指针
指针变量的定义与初始化
指针的基本运算
指针作为函数的参数
指针与数组、字符串
指针数组
指向指针的指针
指针作为函数的返回值
结构的概念与定义以及初始化
结构的使用
结构数组
结构指针
另外,期末综合总结2学时
周次 |
授课章次与主要内容 |
课程思政融入点与实施方法 |
教学方式 |
课外学习与作业要求 |
教学时数 |
第1次 |
0、课程导引: 教学目标、主要内容 学习方法和学习要求 课程考核方式 1、计算机基础 计算机基本工作原理 数的表示与进制 程序与程序设计语言 实现问题求解的过程 上机实验环境及上机步骤介绍 |
1.融入点: 科技报国的家国情怀 2.实施方法: 案例:我国在信息与计算机科技领域的辉煌成就 |
线下 |
pintia教学网站对应的练习 |
2 |
第2次 |
2、用C语言编写程序 一个简单程序:输出“Hello world!” 求华氏温度对应的摄氏温度 计算分段函数 输出华氏-摄氏温度转换表 生成乘方表与阶乘表 程序的调试(单步跟踪、断点设置、变量查看) |
1.融入点: 科学思维与计算思维 2.实施方法: 案例:自顶向下逐步求解的问题求解 |
线下 |
pintia教学网站对应的练习 |
2 |
第3次 |
3、分支结构 字符类型 字符型数据的输入和输出 逻辑运算 If语句、else-if语句 Switch语句 分支控制结构程序设计 |
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第4次 |
4、循环结构(1) For语句 While语句 Do-while语句
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第5次 |
4、循环结构(2) 循环语句的选择 Break语句和continue语句 嵌套循环 循环结构程序设计
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第6次 |
5、函数与程序结构(1) 函数的定义 函数的调用 函数的参数传递 使用函数编写程序(强调代码注释) 局部变量与全局变量
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第7次 |
5、函数与程序结构(2) 变量生命周期和静态局部变量 递归函数的基本概念 文件包含 结构化程序设计
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第8次 |
6、数据类型和表达式(1) 数据的存储和基本数据类型 变量和常量
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第9次 |
6、数据类型和表达式(2) 数据的输入和输出 类型转换 表达式
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第10次 |
7、数组(1) 一维数组的定义、引用和初始化 二维数的组定义、引用和初始化
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第11次 |
7、数组(2) 一维字符数组与字符串 8、指针与结构(1) 地址和指针 指针变量的定义与初始化 指针的基本运算
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第12次 |
8、指针与结构(2) 指针作为函数的参数 指针与数组、字符串 指针数组
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第13次 |
8、指针与结构(3) 指针作为函数的返回值 结构的概念与定义以及初始化 结构的使用
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第14次 |
8、指针与结构(4) 结构数组 结构指针 |
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第15次 |
高级调试方法介绍:运行到光标处、设置断点、跟踪进入函数、观察实参为一维数组时对应的形参指向的内容、用二分法找出bug所在
|
—— |
线下 |
pintia教学网站对应的练习 |
2 |
第16次 |
课程综合总结 |
1.融入点: 精益求精的“大国工匠”精神 2.实施方法: 编程实践的综合体会 |
线下 |
pintia教学网站对应的练习 |
2 |
上机实验安排(32学时):
1、用C语言编写程序(2学时)
2、分支结构(4学时)
3、循环结构(4学时)
4、函数与程序结构(4学时)
5、数据类型和表达式(4学时)
6、数组(4学时)
7、指针与结构(6学时)
8、高级调试技巧(4学时)
程序设计基础与实验(CS1015GZ)
(一)主要内容:
1、数据的定义
数据的定义包括数据类型和存储类别
(1)基本类型
基本类型指整型、实型和字符型
①常量
熟练掌握各种表示形式的整数、实数、字符常量和字符串常量,符号常量的定义和使用。
包括整数的十进制、八进制和十六进制的表示形式、长整型常量和无符号型常量的表示形式,实数的浮点表示法和科学记数法,字符的转义序列,常用符号常量的含义(如NULL、EOF等)
②变量
熟练掌握变量的定义和初始化
(2)构造类型
构造类型包括数组和结构
①数组
熟练掌握一维和二维数组的定义和初始化,数组元素的引用。
包括一维字符数组和字符串,二维字符数组和字符串数组
②结构
熟练掌握结构类型的定义,结构变量的定义和初始化,结构变量成员的引用。
(3)基本类型指针
①理解和掌握指针和地址的概念
②熟练掌握基本类型指针变量的定义和初始化
③熟练掌握通过基本类型指针引用指向实体
(4)复杂类型指针及应用
①熟练掌握指针、数组和地址间的关系
②熟练掌握指针数组
③熟练掌握结构数组
④熟练掌握结构指针
⑤掌握结构中含指针或数组
⑥掌握嵌套结构
⑦掌握指向指针的指针(二级)
⑧函数指针
⑨单向链表
掌握单向链表的建立和遍历
了解插入和删除单向链表中的一个节点
(5)空类型
掌握空类型的定义和使用
(6)变量的存储类别、作用域和生存期
①掌握变量的存储类别
auto 自动型、static 静态型、extern 外部引用型
②掌握全局变量和局部变量
注意区分:自动局部变量和静态局部变量、全局变量和静态全局变量、外部变量
2、运算及流程控制
(1)基本运算
包括算术运算(含自增、自减操作)、关系运算、逻辑运算、位运算、条件运算、赋值运算。
熟练掌握运算符的功能
熟练掌握运算符的优先级和结合方向
熟练掌握隐式类型转换和强制类型转换
(2)表达式
熟练掌握各类表达式的组成规则和计算过程
(3)语句
①熟练掌握表达式语句、空语句、复合语句;
②熟练掌握简单控制语句(break、continue、return);
③熟练掌握选择控制语句(if、switch)
④熟练掌握重复控制语句(for、while、do-while);
3、程序结构和函数
(1)程序结构
熟练掌握main函数与其他函数之间的关系,包括标准库函数和自定义函数
(2)函数的定义
①熟练掌握函数定义方法
②熟练掌握函数的参数(形式参数和实在参数)及参数传递,包括指针作为函数的参数
③熟练掌握函数的返回值,包括指针作为函数的返回值
(3)函数的调用
①函数调用的一般格式
熟练掌握通过函数名调用函数,了解通过函数指针调用函数
②掌握函数的嵌套调用和递归调用
③熟练掌握标准库函数的调用
常用数学函数:cos、sqrt、pow、exp、fabs、log、log10等
常用字符函数:isalnum、isalpha、isdigit、islower、toupper等
常用字符串函数:strcpy、strcmp、strcat、strlen等
4、数据的输入和输出
(1)文件
熟练掌握文件的基本概念和文件的定义方式
了解文本文件与二进制文件的区别
(2)标准文件的输入和输出
熟练掌握常用输入输出函数:scanf、printf、getchar、putchar、gets、puts等
(3)缓冲文件系统(文本文件)
①熟练掌握文件的打开和关闭
常用函数:fopen和fclose
②熟练掌握文件的基本读写操作
常用函数:fscanf、fprintf、fgetc、fputc、fgets、fputs等
③熟练掌握文件的状态检测(判断文件结束和文件读/写出错等)
常用函数:feof等
④掌握文件中数据的查找
5、编译预处理和命令行参数
(1)熟练掌握编译预处理的基本概念
(2)掌握宏定义
(3)掌握文件包含
(4)掌握命令行参数(argc、argv)的概念、说明和使用
6、常用算法
以下算法针对本大纲中列出的各种数据结构
(1)分类(排序)算法
冒泡、选择、插入
(2)检索(查找)算法
①无序数据序列的查找(见遍历算法)
②有序数据序列的查找:二分法
(3)遍历算法
①一维数组和二维数组的遍历
②单向链表的遍历
③文件的遍历
(4)简单的数值计算方法:如多项式函数的计算
(5)其它基本算法:如进制转换
7、基本的程序设计方法和风格
(1)结构化程序设计方法(如逐步求精法)
(2)良好的程序设计风格(如程序模块化、加注释、缩进的书写格式)
(二)课堂教学安排(48学时):
周次 |
授课章次与主要内容 |
课程思政融入点与实施方法 |
教学方式 |
课外学习与作业要求 |
教学时数 |
第1次 |
0、课程导引: 教学目标、主要内容 学习方法和学习要求 课程考核方式 1、计算机基础 计算机基本工作原理 数的表示与进制 程序与程序设计语言 实现问题求解的过程 上机实验环境及上机步骤介绍 |
1.融入点: 科技报国的家国情怀 2.实施方法: 案例:我国在信息与计算机科技领域的辉煌成就 |
线下 |
pintia教学网站对应的练习 |
3 |
第2次 |
2、用C语言编写程序 一个简单程序:输出“Hello world!” 求华氏温度对应的摄氏温度 计算分段函数 输出华氏-摄氏温度转换表 生成乘方表与阶乘表 程序的调试(单步跟踪、断点设置、变量查看) |
1.融入点: 科学思维与计算思维 2.实施方法: 案例:自顶向下逐步求解的问题求解 |
线下 |
pintia教学网站对应的练习 |
3 |
第3次 |
3、分支结构 字符类型 字符型数据的输入和输出 逻辑运算 If语句、else-if语句 Switch语句 分支控制结构程序设计 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第4次 |
4、循环结构(1) For语句 While语句 Do-while语句 Break语句和continue语句 嵌套循环 循环结构程序设计 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第5次 |
5、函数(1) 函数的定义与调用 函数的参数传递 使用函数编写程序 不返回结果的函数 结构化程序设计思想
|
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第6次 |
5、函数(2) 局部变量与全局变量 变量生命周期和静态局部变量 6、数据类型和表达式(1) 数据的存储和基本数据类型 变量和常量 数据的输入和输出 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第7次 |
6、数据类型和表达式(2) 类型转换 表达式 7、数组(1) 一维数组的定义、引用和初始化 使用一维数组编程 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第8次 |
7、数组(2) 二维数的组定义、引用和初始化 使用二维数组编程 一维字符数组与字符串 使用字符串编程 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第9次 |
8、指针(1) 地址和指针 指针变量的定义与初始化 指针的基本运算 指针作为函数的参数 指针、数组和地址间的关系 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第10次 |
8、指针(2) 数组名作为函数的参数 冒泡排序算法分析 字符串和字符指针 常用的字符串处理函数 用指针实现内存动态分配 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第11次 |
9、结构 结构类型的概念与定义 结构变量的定义和初始化 结构变量的使用 结构数组 结构指针的概念 结构指针作为函数参数 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第12次 |
10、函数与程序结构(1) 函数的嵌套调用 递归函数基本概念 递归程序设计 宏基本定义 带参数的宏定义 文件包含 编译预处理 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第13次 |
10、函数与程序结构(2) 程序文件模块 多文件项目管理 11、指针进阶(1) 指针数组 指向指针的指针 用指针数组处理多个字符串 指针作为函数的返回值 指向函数的指针 命令行参数 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第14次 |
11、指针进阶(2) 链表的概念 简单链表的基本操作 用链表构建学生信息管理系统 12、文件(1) 文件的概念 文本文件和二进制文件 缓冲文件系统 文件结构与文件类型指针 文件处理步骤 |
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第15次 |
12、文件(2) 打开文件 关闭文件 文件的操作(读写、定位、判断文件末尾标志、错误检测与清除等) 文件综合应用
|
—— |
线下 |
pintia教学网站对应的练习 |
3 |
第16次 |
课程综合总结 |
1.融入点: 精益求精的“大国工匠”精神 2.实施方法: 编程实践的综合体会 |
线下 |
pintia教学网站对应的练习 |
3 |
(三)上机实验安排(32学时):
1、用C语言编写程序(2学时)
2、分支结构(4学时)
3、循环结构(4学时)
4、函数与程序结构(4学时)
5、数据类型和表达式(4学时)
6、数组(4学时)
7、指针与结构(6学时)
8、文件(4学时)
程序设计与算法基础(CS1014GZ)
(一)课堂授课(48学时)
教学内容
每周教学内容后附课程思政要点,从当周问题与代码出发,落到科学精神、工程伦理、学术诚信与家国情怀,不另开专题课。
W1:导论
- C 程序骨架、Hello World、读编译错误、中英文标点
- IPO 模型、变量、scanf / printf、赋值与四则运算
- 时间差:整除与取余、if、关系运算与优先级
- 累加:while (1) + break、哨兵结束输入
- 课程思政:第一行程序就要精确(中英文标点、读编译错误)。错误是反馈不是遮羞,诚实面对机器比「看起来能跑」更重要;学术诚信从独立写出自己的 Hello World 开始。
W2:迭代
- 标识符、表达式、运算符优先级与结合性、赋值的结果与副作用
- 单分支 / 双分支 if
- 分解整数:%10 / /10、手迹变量、边界测例
- 浮点数 double、混运算、%f / %lf、宏值 #define
- 数学库函数;自定义函数(实参与形参)
- 课程思政:命名是写给他人读的,表达含糊就会误导协作。分解整数、补边界测例,训练的是「化整为零、不放过特例」的科学态度;函数的实参与形参是契约,对接口负责就是对调用者负责。
W3:循环
- 分段函数、嵌套 if、逻辑运算 || &&
- 辗转相除法、gcd 函数、while 条件改写
- 牛顿迭代求平方根、带参数的宏
- 蒙特卡罗估 π、rand、已知次数的 for
- 分解质因数、素数判定、标志位
- 级数与阶乘、嵌套循环
- 课程思政:欧几里得辗转相除、牛顿迭代说明:好方法来自反复修正,而不是一次猜中。蒙特卡罗用随机认识规律,强调证据与统计,而不是感觉;素数与分解则提醒基础研究的价值——看似「无用」的问题,往往支撑整个计算大厦。
W4:数组
- do-while、哨兵循环的改写
- 嵌套循环、break 与 goto
- 数组的定义、下标 0…n-1、变长数组、集成初始化、sizeof、数组不能整体赋值
- 遍历、最值与最值下标、插入(右移)与删除(左移)
- 埃氏筛
- 函数再讲:return、void、值与副作用
- 课程思政:下标从 0 到 n-1,越界不是「小错」而是真实系统里的安全隐患。规则意识与边界意识,是工程师对用户负责的起点。埃氏筛用系统化方法代替蛮力,说明规模化工作必须讲方法、讲秩序。
W5:数组应用
- 函数原型、按值传递(swap 换不了调用方)
- 简单哈希(用数值当下标)
- 大整数:低位在前的数位数组、加减乘
- 秦九韶 / Horner 多项式求值;向量卷积
- 算法与数据结构的含义(二分、插入排序作为直觉)
- 课程思政:秦九韶算法是中国古代数学的成就,算法是文明的一部分,不是外来黑箱。大整数用表示突破机器字长,靠的是抽象而不是蛮干;按值传递「换不了调用方」,说明能力有边界,承诺必须与机制相符。
W6:线性与矩阵数据结构
- 栈(LIFO):push / pop / peek
- 队列(FIFO):线性数组实现与「窗口前移」
- 环形缓冲区:取模回绕、空与满的判定
- 二维数组、鞍点
- 矩阵:转置、加减、数乘、对应元素乘、矩阵乘法
- 课程思政:队列的先进先出是公平与秩序;栈的后进先出是约束下的纪律。环形缓冲在有限空间里复用资源,对应节约与克制。矩阵运算则说明:把个体放进结构,整体才能完成单点做不到的事。
W7:递归
- 递归四要素;阶乘(线性递归)
- 斐波那契:树状递归 vs 线性递归、记忆化
- Euclid、尾递归及改写成循环
- 杨辉三角、汉诺塔
- 牛顿迭代的递归写法
- 递归改迭代、快速幂
- 递归的利弊
- 课程思政:杨辉三角连接中国数学史;递归的本质是信任已经解决的更小问题,对应归纳与担当。汉诺塔在明确规则下求解;斐波那契的爆炸递归则提醒:知道何时不用某种方法,也是一种责任。
W8:搜索与排序
- 线性搜索、搜索最值、测试床
- 二分搜索
- 选择排序
- 冒泡排序
- 算法复杂度与 Big-O
- 课程思政:二分能快,是因为世界先被排好序——效率建立在规则之上。用测试床和 Big-O 说话,不凭「我觉得很快」。算力与时间都是公共资源,选算法有对浪费说不的伦理含义。
W9:进一步的排序与搜索
- 插入排序
- 归并排序(自顶向下 / 自底向上)
- O(N log N) 与计时
- 快速排序(Lomuto / Hoare、qsort)
- 搜索:DFS、回溯、BFS
- 课程思政:分治是大事化小、协作完成;归并把局部有序合成整体有序。快排平均很好、最坏很糟,提醒不能只用顺境评价方法。DFS / 回溯是在约束中坚持与剪枝,既要穷尽该穷尽的,也要及时放弃无解之路。
W10:指针
- 取地址 &、指针变量、间接访问 *
- 按地址传递(真正的 swap、多返回值)
- 指针与数组
- char 类型、字符输入输出、转义字符
- 课程思政:指针能改别人的内存,权力与责任同时到来。按地址传递才能真正 swap,想改变世界就要承担副作用;间接访问一旦失控,伤害的是整个程序,这是工程师对安全的第一课。
W11:字符串
- 指针算术、NULL
- 字符串是以 '\0' 结尾的 char 数组
- 字符串的赋值、输入输出、字符串数组、argv
- 标准库 string.h;自己实现 strlen / strcpy 等
- malloc / free
- 函数间传递指针
- 课程思政:'\0' 与缓冲区边界决定程序会不会被攻破;strcpy 的历史教训说明,接口设计关乎他人安全。malloc / free 是借与还:占用公共资源必须善始善终,泄漏与越界都是对后续使用者的不负责任。
W12:结构
- struct 的定义与访问
- 结构作为函数的参数和返回值、指向结构的指针(->)
- 结构数组、嵌套结构
- typedef
- 课程思政:用结构把相关事实放在一起,是用合适的模型描述现实,反对碎片化思维。清晰的类型与接口是对协作者的尊重;命名(typedef)一旦进入公共空间,就有了可理解、可维护的义务。
W13:链表
- 结点、头指针、头插 / 尾插
- 遍历、查找、清空
- 稀疏多项式(Horner)
- 按值 / 按指针删除(前驱、间接指针 **)
- 约瑟夫问题(循环链表)
- 双向链表、双端链表、哨兵结点
- 课程思政:链表按需生长,不预支不必要的空间,对应量力而行。删除必须找到前驱、释放结点,善始善终。约瑟夫问题把历史规则算法化:规则决定命运,设计规则的人更要审慎。
W14:程序结构
- 宏:宏值、带参宏(括号原则、# / ##)
- 条件编译:#ifdef / #if / #error、调试版本
- 变量的生存期与作用域、全局变量、static
- 编译过程与编译单元(.i / .s / .o)
- 头文件与 #include
- 声明 vs 定义、头文件守卫、前向声明
- 课程思政:头文件里的声明是对全组的承诺,声明与定义必须一致,这是协作中的诚信。全局变量是共享,共享要克制;条件编译让同一套思想适配不同环境,原则性与灵活性可以并存。
W15:数据类型
- 整数类型与补码;sizeof
- 浮点类型;inf / nan;不要用 == 比较浮点
- bool 与类型转换
- 逻辑运算与短路
- 条件运算符与逗号运算符
- 课程思政:补码与浮点说明「计算机算出来的」也有表示限度,不可迷信输出。科学计量必须谈误差与范围;类型转换是显式承认自己在改写事实。独立理解底层,才不会被工具和直觉绑架。
W16:文件与位运算
- 格式化 I/O(printf / scanf 及返回值)
- 文件:重定向、fopen、文本 vs 二进制、fread / fseek
- 位运算、掩码与移位
- 位段、STM32 寄存器、stdint.h、volatile
- 课程思政:文件让数据离开本次运行仍然存在,归档与格式选择关系到他人能否读懂、能否核验。位运算与 volatile 寄存器直接碰到物理世界:程序可以驱动设备,工程师的错误也会变成真实伤害。底层能力是为了负责任地控制,而不是炫技。
实验
本课程每周两节实验课,在计算中心机房进行,在PTA上完成。
每次实验课要完成4道编程题。
学生按照进入机房刷卡分配的座位就坐,相邻的5到6位同学组成临时学习小组,每一道实验题需要小组讨论后独立完成。小组讨论时要填写“实验讨论记录表”,没有在“实验讨论记录表”上留下记录的同学,本次实验不得分。
实验所用的 PTA 系统具有查重功能,一旦发现存在抄袭现象,两位同学该周的所有成绩(包括课内、作业和实验)记零分。
作业
本课程作业均在 PTA 上完成。作业截止时间为开课当天的 13:25(遇节假日调课会适当调整)。
作业可能包括但不限于选择、是非、填空、程序填空、函数、编程、主观、多文件编程等各种题型。
作业所用的 PTA 系统具有查重功能,一旦发现存在抄袭现象,两位同学该周的所有成绩(包括课内、作业和实验)记零分。
课前小测
每次课前 13:00–13:25 有一次线上小测(如选择题 / 填空题),布置在学在浙大,用手机钉钉完成。来源可能是要求课前预习的内容。
课内活动
课内会安排多种记分的活动,包括但不限于慕课堂上的小测和PTA上的编程类题。课内活动均在课内完成。
课内活动所用的 PTA 系统具有查重功能,一旦发现存在抄袭现象,两位同学该周的所有成绩(包括课内、作业和实验)记零分。
期中考试
在第 9 周的实验课时间内,安排一次在计算中心机房内、在 PTA 上举行的期中考试。考试使用 PTA 监考软件,考试时间为 90 分钟,包括 45 分钟的理论考试和 45 分钟的实验考试,实验考试有两道编程类题。期中考试所用的 PTA 系统具有查重功能,一旦发现存在抄袭现象,两位同学的期中考试成绩记零分。
期末考试
在学校安排的期末考试时间,在计算中心机房内,在 PTA 上举行期末考试。考试使用 PTA 监考软件,考试时间为 120 分钟,包括理论考试和实验考试,实验考试有至少 4 道编程类题。期末考试所用的 PTA 系统具有查重功能,一旦发现存在抄袭现象,两位同学的期末考试成绩记零分。
上述编程类题包括程序填空题、函数题、编程题和多文件编程题。
所有的作业、实验和测验都有截止时间,一旦过了截止时间就不能再提交了。
课程网站
本课程使用两个课程网站:
- 学在浙大:http://course.zju.edu.cn。用于课件发布、疑难讨论和视频观看。
- 拼题A:https://pintia.cn。用于作业、实验和考试。
学习资料链接
CC98 原帖需登录访问。
-
C语言理论易错点笔记 — Magnolias
C语言系列课程的知识点参考
作者自行整理的理论复习PDF;原帖提供附件入口。 -
C语言理论复习笔记(Word/PDF) — 默一
杨斌班;C语言基础知识参考
2026年整理,涵盖教材第1–12章。 -
C程序设计基础:旧版资料索引与学习经验 — 七色的鞋带
2023年C程序设计基础版本
原帖汇集多份笔记及复习资料,并讨论理论与上机学习方法。 -
程序设计与算法基础:竺院辅学 — 竺院学业指导中心
C语言;以竺院程算课程为主
含专题讲义、历年题入口和编程环境指导;基础C课程可参考共通知识。 -
程序设计与算法基础:图灵班学习指南 — 图灵班学习指南
图灵班C语言课程
提供学习路线、教材建议和易错点笔记入口,课程强度与普通C课程有所不同。