课程概述

《高级语言程序设计》是计算机大类/软件工程大类的一门重要的专业基础课程。设置本课程的主要目的是使学生掌握用计算机分析和解决问题的思维方法以及程序设计的基本方法,建立从问题到算法再到程序的认知,在从问题到算法再到程序的问题求解及程序构造和实现的过程中理解高级语言的基本构造要素以及算法和数据结构在程序构造中的作用,具备良好的编程素养,以及综合运用所学程序设计语言和程序设计方法,设计、构造和应用计算系统求解科学或工程问题的程序设计和实现能力,为后继课程的学习和将来从事软件开发、解决复杂工程问题奠定编程能力基础。课程具体目标如下:

课程目标1:掌握程序设计的方法学基础,能够选择与熟练运用现代化集成开发工具测试和调试程序,具备良好的编程素养。

课程目标2:掌握程序设计的基本问题求解基础,能够有效使用程序设计语言,完成枚举、递推、分治、递归等常用问题求解方法的程序设计并在计算机上实现。

课程目标3:掌握程序设计的基本算法和简单数据结构基础,针对计算相关的复杂工程问题,能够使用恰当的算法和数据结构,完成计算、统计、排序、检索、匹配相关的软件系统的构造、测试与实现。


证书要求

(一) 成绩累计方式

(1)自主式作业

由系统随机抽题的自主式作业,占总成绩的20%。

学生登录面向学生自主学习的高级语言能力测试平台(SSE),自主选择知识点和难度系数,平台自动从后台的题库系统中随机抽取相应知识点和难度系数的题目给学生,学生在线上限时完成并提交代码,获得作业分。分数评定和奖惩规则如下:

1)根据学生上机测试成绩柔性定制个人作业满分线,使其个人作业满分线与其上机测试总成绩成反比。个人作业满分线=(实验上机随堂测试满分线-实际上机随堂测试总分)*100。若按此公式计算出来的满分线超过了3000分,则3000分封顶,即3000分为个人刷题满分线的上限。注:非计算机专业学生个人刷题满分线的上限为2000分。

2)若未达到自己的个人作业满分线,则按下面公式计算:个人实际刷题分数 / 个人满分线 * 作业满分20分。

3)在习题市场中自主设计有创意的题目或找错题,可减免作业分20分(相当于降低其个人作业满分线)。

(2) 开放式实验大作业

开放式实验大作业,占总成绩的20%。

实验程序和实验报告的综合成绩由学生在SPOC里互评,教师对学生互评结果进行随机抽查,对于不合理的分数可以由教师重评,取代学生的互评分。

未在规定的截止时间内在SPOC中提交实验程序和报告,按0分计。未在规定的截止时间内在SPOC中完成指定数量的互评,扣除一定的互评分。

不做实验大作业者,即使其他项分数累计可以及格,最终的总成绩也一律按0分计。

(3) 实验上机随堂测试

实验上机随堂测试,占总成绩的50%。

第1次实验课熟悉系统环境,进行模拟演练,仅安排2个实验学时。

第2次~第4次实验课,利用3学时进行实验上机随堂测试和试卷点评。实验上机测试内容分别覆盖基本控制结构和穷举/递推/迭代/递归算法、数组和排序查找算法、字符串/结构体等内容。

每次上机随堂测试必做题满分为50分(另有附加分2-5分),总计考3次,最后取3次测试的平均分作为实验上机测试的总分。因属于随堂测试,故缺考者不给补考机会,当次考试成绩按0分计。

(4) 实验小班研讨

实验小班研讨,占总成绩的10%。

采用“生讲生评、互动研学、同伴助学”的方式,分小班针对不同的实践研学主题进行互动研讨和同伴助学。

(5)附加分

(1)实验上机随堂测试获得附加题的附加分(2-5分)。

(2)参加期末的“实验课堂大翻转、创意程序大比拼”,可以获得1~10分的附加分。实验课堂大翻转采用“生讲生评、互动展学”的方式进行“我的实验我做主——实验课堂大翻转、创意程序大比拼”。

课程最终成绩 = (1)+(2)+(3)+(4)+(5)

其中,如果(2)实验大作业为0分的话,那么总成绩也为0分。


预备知识

大学计算机

授课大纲

序号

教学内容

教学要求

学时

教学方式

对应课程

目标

1

0.课程内容与学习方法

1.   程序设计的方法学基础——基本运算和基本I/O

(1) .诺依曼计算机的组成和工作原理,不同类型数据在计算机中的存储与表示;

(2) 软件开发的基本过程,常用的C语言集成开发工具,程序在计算机中的编辑、编译、链接和运行;

(3) 基本数据类型,常量与变量,运算符与表达式,优先级与结合性,算术运算,赋值运算,自动类型转换和强制类型转换;

(4) 数据的键盘输入和屏幕输出等简单I/O操作,顺序结构程序设计。

1.掌握常用的集成开发环境,以及程序在计算机中编辑、编译、链接和运行的过程

2. 掌握变量、常量、数据类型的基本概念,能够用基本数据类型在计算机中表示和存储数据

3. 掌握算术、赋值等基本运算符以及运算符的优先级和结合性

4. 掌握键盘输入和屏幕输出等简单的I/O操作,能够用基本数据类型、基本运算和顺序结构构造程序

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标1

2

1.   程序设计的方法学基础——基本控制结构

(1) 算法的基本概念,算法的流程图描述;

(2) 关系运算,逻辑运算,复杂逻辑的计算机表示;

(3) 条件语句和开关语句,单分支、双分支、多分支选择结构;

(4) forwhiledo-while三种循环语句,当型循环和直到型循环,计数控制、条件控制和标记控制的循环结构;

(5) 程序的三种基本控制结构的嵌套,嵌套循环的执行过程。

1. 掌握算法的基本概念,对于给定的算法能够用流程图描述

2. 掌握选择结构和循环结构的基本控制方法,能够用顺序、选择和循环三种基本控制结构构造结构化程序

3. 掌握嵌套循环程序的设计和实现方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标1

3

1.   程序设计的方法学基础——程序测试和调试

(1) 累加求和、连乘求积、统计、计算均值和方差等常用算法;

(2) 测试用例的基本概念,程序测试的目的,程序测试的基本方法;

(3) 程序错误的类型,利用现代集成开发环境和单步跟踪或可视化调试工具调试程序的基本方法。

1. 掌握累加求和、连乘求积、统计、计算均值和方差等常用算法;

2. 针对给定的设计任务,能够选择恰当的基本控制结构构造程序

3. 掌握程序测试和程序调试的基本方法和技巧,能够选择恰当的工具和方法对程序进行测试和调试

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标1

4

1.   程序设计的方法学基础——函数

(1) 信息隐藏,过程抽象,函数封装,函数复用,模块分解,自顶向下、逐步求精的模块化程序设计方法;

(2) 函数定义,函数调用,函数原型,函数的参数传递,函数的返回值,用简单变量做函数参数重构代码;

(3) 变量的作用域,变量的生存期

(4) 断言,防御式编程,程序的健壮性、可读性和可维护性。

1. 掌握自顶向下、逐步求精的模块化程序设计方法

2. 掌握用函数封装和过程抽象重构或复用代码的基本方法,理解分而治之对提高程序质量的重要性

3. 掌握防御式编程的基本方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标1

5

2.   程序设计的问题求解基础——枚举与递推

(1) 枚举、递推/迭代等常用问题求解策略;

(2) 流程转移控制的基本方法,流程转移控制语句(breakcontinue, goto),结构化程序的特点

(3) 算法的效率,程序的优化。

1. 掌握枚举、递推/迭代等常用问题求解方法的基本原理思想,针对给定的问题,能够选择恰当的方法求解问题,能够使用启发式策略对程序的效率进行优化

2. 掌握流程转移控制的方法,以及结构化程序设计的基本思想,理解好结构对提高程序可读性的重要性

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标2

6

2.   程序设计的问题求解基础——分治与递归

(1) 分治、递归等常用问题求解策略;

(2) 递归函数的定义、调用和执行过程,条件递归的基本要素;

(3) 递归的优缺点分析。

(4) 程序注释,代码风格。

1. 掌握分治、递归等问题求解方法的基本思想,理解分治与递归、递归与迭代之间的关系

2. 掌握递归程序的设计和实现方法

3. 理解良好的代码风格对提高程序可读性的重要性

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标2

7

3.   程序设计的算法和数据结构基础——数组

(1) 一维数组和二维数组,线性表的顺序存储结构;

(2) 数组做函数参数,传值调用与模拟传引用调用;

(3) 数组元素的增、删、改查等基本算法,求最值算法;

(4) 数组下标越界问题分析。

1. 理解数组下标越界产生的危害和后果

2. 掌握传值调用与模拟传引用调用的区别,以及数组元素增删改查相关程序的设计和实现方法

3. 掌握计算最大最小值算法及其程序设计和实现方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

8

3.   程序设计的算法和数据结构基础——排序和查找

(1) 顺序查找、二分查找等经典的查找算法;

(2) 选择排序、插入排序、冒泡排序、快速排序等经典的排序算法;

(3) 算法的时间复杂度。

1.掌握常用的排序和查找算法及其程序设计和实现方法,针对给定的问题,能够选择恰当的算法构造程序

2.了解算法时间复杂度的概念

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

9

3.   程序设计的算法和数据结构基础——指针

(1) 内存的编址方法,直接寻址与间接寻址,指针的基本概念,指针变量的定义、初始化和解引用;

(2) 指针变量作函数参数的参数传递方式,用指针变量作函数参数的必要性;

(3) 内存映像,动态内存分配函数;

(4) 函数指针及其应用。

1. 掌握指针的概念,及指针的定义和解引用方法

2. 掌握指针做函数参数的参数传递方式,掌握指针做函数参数的程序设计和实现方法

3.掌握用函数指针作函数参数的必要性,掌握用函数指针编写通用函数的程序设计和实现方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

10

3.   程序设计的算法和数据结构基础——字符数组和字符指针

(1) 字符指针和一维字符数组,字符串的输入输出;

(2) 字符指针或一维字符数组做函数参数;

(3) 缓冲区溢出,缓冲区溢出攻击。

1. 掌握字符串的存储和输入输出方法

2. 掌握向函数传递字符串的程序设计和实现方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

11

3.   程序设计的算法和数据结构基础——字符串处理与相关算法

(1) 字符串的复制、连接、比较等基本操作;

(2) 字符串的排序、检索和匹配等相关算法。

1.掌握字符串复制、连接、比较等基本操作及其程序设计与实现方法

2. 掌握字符串排序、检索、匹配等多个字符串的处理方法及其程序设计与实现方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

12

3.   程序设计的算法和数据结构基础——结构体和共用体

(1) 结构体类型,共用体类型,枚举类型,结构体变量、结构体数组,结构体指针,结构体成员和共用体成员的引用;

(2) 用结构体变量、数组或指针封装函数参数,向函数传递结构体数据。

1. 掌握结构体类型和共用体类型的定义和使用方法

2.掌握用结构体封装函数参数向函数传递结构体数据的程序设计和实现方法

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

13

3.   程序设计的算法和数据结构基础——结构体和共用体的应用

(1) 结构体类型的应用;

(2) 共用体类型的应用;

(3) 抽象数据类型,从结构体到类,从面向过程到面向对象。

习题课(1学时):结构体编程练习

掌握结构体和共用体类型的不同特点和应用场合,针对具体问题能够选择恰当的数据类型构造数据结构

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

14

3.   程序设计的算法和数据结构基础——动态数据结构

(1) 动态数组,静态数据结构,动态数据结构;

(2) 线性表的链式存储结构,单向链表的基本操作和程序设计,链表在求解实际问题中的应用;

(3) 栈、队列、树、图等其他数据结构及其应用。

1. 掌握静态数据结构和动态数据结构的优缺点,针对给定的问题,能够选择恰当的数据结构构造程序

2. 理解定长数组和动态数组的区别,掌握使用动态数组的程序设计和实现方法

3. 掌握单向链表的基本操作及其程序设计和实现方法

4. 了解其他数据结构

2

慕课自学/

课堂讲授/

讲练结合/

边讲边练

课程目标3

15

3.   程序设计的算法和数据结构基础——指针和数组

(1) 指针和数组间的关系;

(2) 指针数组,索引存储结构,字符串的物理排序与索引排序。

(3) 命令行参数。

1.理解数组与指针之间的关系

2.掌握指针数组的概念,以及使用指针数组处理字符串的程序设计和实现方法

2

慕课自学/

讲练结合/

先学后练/

边讲边练

课程目标3

16

3.   程序设计的算法和数据结构基础

—内存管理和文件I/O

(1) 内存泄漏、非法内存访问等常见的内存错误及其解决对策;

(2) 文件I/O操作;

(3) 综合应用程序设计。

1. 掌握文件的I/O操作

2. 掌握内存管理的基本方法

3. 能够综合应用数组、指针、字符串、结构体、文件编写一个完整的数据管理系统

2

讲练结合/

边讲边练

课程目标3


参考资料

[1] 苏小红,王宇颖,孙志岗.C语言程序设计(第3版)[M].北京:高等教育出版社.2015

[2]  苏小红,王宇颖,孙志岗.C语言程序设计学习指导(第3版)[M].北京:高等教育出版社.2015

 

 

相关链接:

Codeblocks 下载: https://www.codeblocks.org/