《高级语言程序设计》是计算机大类/软件工程大类的一门重要的专业基础课程。设置本课程的主要目的是使学生掌握用计算机分析和解决问题的思维方法以及程序设计的基本方法,建立从问题到算法再到程序的认知,在从问题到算法再到程序的问题求解及程序构造和实现的过程中理解高级语言的基本构造要素以及算法和数据结构在程序构造中的作用,具备良好的编程素养,以及综合运用所学程序设计语言和程序设计方法,设计、构造和应用计算系统求解科学或工程问题的程序设计和实现能力,为后继课程的学习和将来从事软件开发、解决复杂工程问题奠定编程能力基础。
(一) 成绩累计方式
(1)自主式作业
由系统随机抽题的自主式作业,占总成绩的20%。
学生登录面向学生自主学习的高级语言能力测试平台(SSE),自主选择知识点和难度系数,平台自动从后台的题库系统中随机抽取相应知识点和难度系数的题目给学生,学生在线上限时完成并提交代码,获得作业分。分数评定和奖惩规则如下:
1)根据学生上机测试成绩柔性定制个人作业满分线,使其个人作业满分线与其上机测试总成绩成反比。个人作业满分线=(实验上机随堂测试满分线-实际上机随堂测试总分)*100。若按此公式计算出来的满分线超过了2000分,则2000分封顶,即2000分为个人刷题满分线的上限。
2)若未达到自己的个人作业满分线,则按下面公式计算:个人实际刷题分数 / 个人满分线 * 作业满分20分。
3)在习题市场中自主设计有创意的题目或找错题,每录用1道题或找到一个错题,可减免作业分20分(相当于降低其个人作业满分线)。
(2) 开放式实验大作业
开放式实验大作业,占总成绩的20%。
实验程序和实验报告的综合成绩由学生在SPOC里互评,教师对学生互评结果进行随机抽查,对于不合理的分数可以由教师重评,取代学生的互评分。
未在规定的截止时间内在SPOC中提交实验程序和报告,按0分计。未在规定的截止时间内在SPOC中完成指定数量的互评,扣除一定的互评分。
不做实验大作业者,即使其他项分数累计可以及格,最终的总成绩也一律按0分计。
(3) 实验上机随堂测试
实验上机随堂测试,占总成绩的50%。
第1次实验课熟悉系统环境,进行模拟演练,仅安排2个实验学时。
第2次~第4次实验课,利用3学时进行实验上机随堂测试和试卷点评。实验上机测试内容分别覆盖基本控制结构和穷举/递推/迭代/递归等问题求解算法、排序和查找算法、字符串/结构体/链表等内容。
每次上机随堂测试必做题满分为50分(另有附加分2分),总计考3次,取3次测试的平均分作为实验上机测试的总分。
因属于随堂测试,故缺考者不给补考机会,当次考试成绩按0分计。因病不能参加考试者,需出具医院开的病假条,按实际参加测试的次数计算平均分。
(4) 实验小班研讨(分两次课进行)
实验小班研讨,占总成绩的10%。
采用“生讲生评、互动研学、同伴助学”的方式,分小班针对不同的实践研学主题进行互动研讨和同伴助学。 注意:本环节可以不参加,不参加本环节的学生的各项累计总分最高为90分。想冲击90分以上的学生必须参加本环节。
(5)附加分
(1)实验上机随堂测试获得附加题的附加分(2分)。
(2)实验上机测试结束后参加生讲生评可以获得1~3分的附加分。例如,某道题未获得满分的同学可邀请该题获得满分的同学一起上台讲题(鼓励每两人组成一个互帮互学小组),采用你问我答的方式分析讲解程序的错误和错误原因,两人可同时各加1分。任课教师也可以调取未获得满分的卷子,现场征集讲题者,此时仅给讲题者一人加1分。三次上机实验测试,每人最多加3分。
课程最终成绩 = (1)+(2)+(3)+(4)+(5) 其中,如果(2)实验大作业为0分的话,那么总成绩也为0分。(4)和(5)两个环节不是必须项。
学习本课前你必须知道的那些事儿
开篇
授课视频内容进度概览
本课程使用的教材和软件开发环境
向老师提问、做编程作业的注意事项
小白遇到的安装使用问题尽在其中
第1周——初识C语言从认识变量和常量开始
1.1 为什么要学C语言(10分钟)
1.2 C 语言集成开发环境简介(16分钟)
1.3 如何定义一个变量(10分钟)
1.4 变量的表数范围和存储形式(29分钟)
1.5 宏常量与const常量(13分钟)
本周课件、知识点小结和常见错误小结
先修知识(有基础者越过)——二进制和内存(11分半)
第1周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第2周——数字间的那些事儿,做点计算哈
2.1 算术运算(20分钟)
2.2 赋值运算(15分钟)
2.3 增1和减1运算(17分钟)
2.4 自动类型转换(5分钟)
2.5 强制类型转换(7分半)
本周课件、知识点小结和常见错误小结
第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分钟)
本周课件、知识点小结和常见错误小结
选学——用raptor绘制循环结构的流程图(25分钟)
第5周测验
练兵区——单选题——不计入总分
第5周编程题在线测试
练兵区——编程题——不计入总分
第6周——函数:分工与合作的艺术
6.1 函数定义、调用、参数传递和函数原型(35分半)
6.2 函数封装与程序的健壮性(23分钟)
6.3 进阶:断言与防御式编程(14分钟)
6.4 进阶:代码风格(22分钟)
本周课件、知识点小结和常见错误小结
选学——结构化与模块化程序设计方法(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 向函数传递一堆相同类型的数据(15分半)
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 进阶:缓冲区溢出与缓冲区溢出攻击(39分半)
本周课件、知识点小结和常见错误小结
第10周测验
练兵区——单选题——不计入总分
第10周编程题在线测试
练兵区——编程题——不计入总分
第11周——指针的孪生兄弟
本周内容导读
11.1 指针的运算(8分)
11.2 指针和一维数组间的关系(14分)
11.3 指针和二维数组间的关系(18分)
11.4 进阶:指针数组及其应用(22分)
本周课件、知识点小结和常见错误小结
第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周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分
第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周测验
练兵区——单选题——不计入总分
练兵区——编程题——不计入总分