教 案
2024-2025 学年第 1学期
课程名称: 程序设计、算法与数据结构(一)实验
课程性质: 基础实践课
授课学时: 46学时
授课对象: 计算机科学与技术专业
任课教师: 郑莹
长沙理工大学计通学院
2023.8
全课程教案
一、基本信息
课程名称 | 程序设计、算法与数据结构实验(一) | 课程编号 | 0812000317 | 课程性质 | 基础实践课 | 学分 | 1.5 |
教学安排 | 总学时46。其中讲授0学时,实验 46 学时,上机 0 学时,实训 0 学时 | ||||||
授课时间:第6 周至第17周 | 周学时 | 4 | |||||
相关课程与环节 | 先修课程:无 后续课程:程序设计、算法与数据结构(二)实验、程序设计、算法与数据结构(三)实验。 | ||||||
二、授课对象
基本情况 | 专业 | 计科 | 年级 | 24级 | 班级 | 2403 班 | 修读人数 | 40 |
授课对象分析 | 计算机科学与专业大一新生,学生高考素质较好,但对计算机相关知识了解不多,没有产生计算机理论的相关认识。对计算机的使用不够熟悉,对计算机操作系统和系统软件的使用不熟悉,对计算机的UI使用不熟练。 | |||||||
三、教学内容与安排
课程简介与要求 | 1、课程思政教学目标:筛选适合教学和专业拔高的特色案例;精心设计融入思政元素的上机实践作业和综合实践项目;为整个课程选定诸如科技强国、大国重器、大国工匠等课程主题,确定专业课程的思政色彩;构建实时动态更新的计算机领域前沿成果库;搜集学生的优秀作品,建设学生优秀作品库。以此形成多层次、多维度的课程特色立体资源库,为课程思政的实施提供丰富教学资源。在实验进行的过程中,学生基于建构主义学习理论的合作探究式学习,涉及任务分工、交流意见、指导操作等过程,在此过程中培养学生的合作精神、集体主义、理解与表达等重要思政元素。 2、课程教学总目标:在学习C语言过程中,通过编程实验使学生能够针对具体的问题,输入数据获得运行结果,并在编程过程中提炼解题算法,得到有效的结论并获得编程经验。能够搭建合适的软件环境,掌握C语言的编辑、编译、运行、调试的流程,并完成验证自己所编写的程序。并能灵活运用OpenJudge平台,进行大量的编程实训,使学生在实训中加强编程能力并对系统进行验证。 3、课程目标与学生能力培养的关系:课程思政目标的实施有利于培养学生职业责任感,团队合作、组织、沟通等社会能力。 课程教学目标的实施有利于培养学生的系统分析和程序设计能力,培养学生分析实验数据,进行故障进行定位与排查的能力。 | |||||||
课程目标 | 课程目标 | 支撑毕业要求指标点 | 与课程关联度 | |||||
课程目标1:本实验课程通过搭建codeblocks编程环境、OJ在线测试平台、学宝、头歌等课程管理工具,构建了面向学生编程学习及效果考核的实践教学体系,学生能熟练顺利的开展实验,记录实验结果,分析实验数据。实验开展的过程中,在深入理解理论课程知识的基础上,模拟真实的应用场景,设计贴近现实的项目背景案例,以此为基础引导学生对项目进行分析,能探讨各种可能的开发路线的优劣,拟定合理的开发方案。学生在实践中进行充分的演练,为后续分析更大规模的复杂问题做好准备。 | 4.2能够基于软件工程专业知识,确定技术路线,设计可行的实验方案。 | H(0.3) | ||||||
课程目标2:通过使用codeblocks 、GCC编译器和GDB调试工具,掌握代码编译、调试及生成可执行文件的过程;掌握编程过程中一般语法错误及运行错误出现的原因与解决思路;掌握必要的调试技巧对故障进行定位与排查。能够综合运用单步运行、多步运行及中间结果显示等方法,并了解各种方法的适用场景及应用局限性。 | 5.1在工程项目中,能够掌握现代工程工具的使用原理和方法,并理解其局限性。 | M(0.2) | ||||||
课程思政 | 引导学生正确的编程思维:教师可以引导学生形成正确的编程思维,强调程序设计的逻辑性、严谨性和系统性,培养学生的创新意识、问题解决能力和团队合作精神。 培养学生的职业道德和责任感:教师可以通过案例分析、讨论和作业设计等方式讨论编程中的伦理和社会责任问题,教育学生遵守编程规范、保护用户隐私、防范网络安全风险等。 引导学生正确使用信息技术:教师可以引导学生认识到信息技术对社会、经济和文化的影响,教育学生正确使用信息技术、遵守网络道德,提高信息素养和信息技术安全意识。 引导学生关注社会问题和热点:教师可以选择与C语言相关的社会问题和热点作为案例,引导学生思考和讨论与之相关的道德、法律、社会等方面的问题,培养学生的社会责任感和公民意识。 鼓励学生参与公益活动:教师可以组织学生参与与C语言相关的公益活动,如编程竞赛、编程教育支持等,培养学生乐于助人、关心社会的价值观。 通过将思政教学融入C语言程序课程中,可以帮助学生在学习技术的同时,培养正确的价值观和社会责任感,为他们的未来发展打下坚实的基础。 | |||||||
教学方法 | 指导实验:教师通过讲解实验要求和步骤,引导学生进行实验操作。教师可以提供实验指导书或实验报告模板,指导学生完成实验任务。教师可以在实验过程中随时解答疑惑,帮助学生克服实验中遇到的困难。 实验演示:教师通过实验演示的方式,展示C语言的实际应用场景和技术操作。教师可以演示常用库函数的使用、程序调试技巧和问题解决方法等。学生可以通过观察和分析教师的演示,理解实验原理和技术实现方法。 探究式实验:教师提供一个开放性的实验问题,鼓励学生进行自主探究和实验设计。学生可以通过思考、讨论和实验验证等方式,寻找问题的解决方案,并进行实验验证。教师在实验过程中起到辅导和指导的作用,引导学生进行问题分析和实验思考。 项目实验:教师组织学生进行具有一定复杂度和实际应用价值的项目开发实验。教师可以提供项目需求和设计要求,鼓励学生进行项目规划、设计和开发。教师在实验过程中进行指导和评估,帮助学生解决技术难题和团队协作问题。 实验报告:学生在完成实验后,需要撰写实验报告,详细记录实验过程、结果和分析。教师可以对学生的实验报告进行批改和评价,帮助学生加深对实验内容的理解和掌握。 实验讨论和交流:教师可以组织学生进行实验讨论和交流,学生可以分享实验经验、解决问题的方法和技巧等。教师在讨论中起到引导和促进学生思考的作用,帮助学生深入理解实验原理和技术细节。 通过以上教学方法,可以激发学生的学习兴趣,提高他们的实践操作能力和问题解决能力。同时,教师在实验过程中对学生进行指导和评估,促进学生的全面发展。 | |||||||
教学重点 与难点 | 重点:数组与线性表;字符串;函数;指针、结构体、链表。 难点:函数的递归调用;字符串;指针;链表。 | |||||||
课程各教学环节内容与安排 | 知识单元 | 知识点 | 课内学时 | 教学方式 | 作业/测验 | 课外学习 | ||
程序设计基础 | 程序设计介绍; C语言程序设计开发工具 基本输入输出 | 4 | 课前预习, 教师讲授, 小组讨论; 完成实验题 | 实验1-1程序设计基础和数据类型 | 学了C语言到底能做什么,能从事什么工作? | |||
数据类型与表达式 | 基本数据类型 运算符与表达式 | 4 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验1-2程序设计基础和数据类型 | 整数在内存中是如何存储的;小数在内存中是如何存储的。 | |||
程序的基本控制结构 | 顺序结构; 分支结构; 循环结构; | 4 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验2-程序设计的结构 | 谈编程思维的培养,初学者如何实现自我突破。 | |||
数组 | 一维数组; 二维数组; 字符串; | 6 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验3-1数组编程与实现(分组) | 数组的越界和溢出;变长数组:使用变量指明数组的长度。 | |||
顺序表 | 顺序表插入、删除; 顺序表查找:顺序、二分; 排序:选择、冒泡 | 6 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验3-2数组编程与实现(分组) | 顺序表的优缺点详解 | |||
函数 | 函数的作用、定义及使用; 函数的嵌套调用; 变量的作用域与生存期; 函数的综合性应用 | 4 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验4-函数编程与实现(项目实验) | C语言函数调用详解(从中发现程序运行的秘密) | |||
递归函数 | 简单递归问题 经典递归问题 | 4 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | OJ实验 | C语言多层递归函数;递归函数的致命缺陷:巨大的时间开销和内存开销。 | |||
指针 | 指针的定义及基本使用; 指针与数组; 指针与结构体; 指针与函数; 函数的返回值为指针; 动态内存分配; | 6 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验5指针编程与实现(分组) | C语言空指针NULL以及void指针;数组到底在什么时候会转换为指针;main()函数的高级用法:接收用户输入的数据。
| |||
结构体 | 结构体的定义及使用; 结构体作为函数参数; | 2 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验6-结构体编程与实现 | 大端小端以及判别方式;使用位运算对数据或文件内容进行加密。 | |||
链表 | 链表的创建; 链表的插入; 链表的删除; 链表的综合应用; | 4 | 课前预习, 教师讲授, 小组讨论; OJ刷题 | 实验7-链表编程与实现(分组) | 链表的优缺点详解;静态链表和动态链表区别详解;双向循环链表。 | |||
文件 | 文件的使用 文本文件 二进制文件 | 2 | 课前预习, 教师讲授, 课堂研讨 | 实验8-文件编程与实现 | 文本文件和二进制文件到底有什么区别?C语言实现文件复制功能(包括文本文件和二进制文件)。 | |||
注:课程目标、教学方法、重难点、教学环节(知识单元、知识点等)等内容应与教学大纲、教学日历一致。课外学习可包括学时和内容要求。
四、考核方式
考核项目 | 考核内容 | 考核方式 | 分值或占比 |
实验报告 | 程序运行效果、回答情况、实验报告 | 实验报告书 | 20 |
OJ刷题情况 | OJ判断结果,刷题通过数量 | OJ刷题情况统计 | 20 |
期末考试 | 考试系统机试判定结果 | 期末机试成绩 | 60 |
注:考核方式应符合课程教学大纲的要求。
五、教学资源
推荐教材 | 李峰等主编《C语言程序设计上机指导与习题选解》(第1版). 上海:北京大学出版社,2020 |
参考材料 | [1] 李文新,郭炜,余华山.《程序设计导引及在线实践》,北京大学信息科学技术学院,2007 [2] 谭浩强 《C程序设计》(第五版).北京:清华大学出版社,2018 [3] www.openjudge.cn在线判定系统 [4] ACM集训队,OJ习题汇总(电子版) |
课程资源 | 教务处网络教学综合平台: http://pt.csust.edu.cn OJ刷题网站:http://noi.openjudge.cn/ 希冀教学平台:https://course.educg.net/ 自制教学视频:https://space.bilibili.com/26340287?spm_id_from=333.1007.0.0 |
教材分析与处理 | 实验内容实用性分析:教材实验内容具有实用性,能够帮助学生掌握C语言的关键知识点和技能。实验内容与实际应用紧密相关,并且具有足够的挑战性,以激发学生的实践能力和创新思维。 实验课程教材与理论课程应该是紧密联系的。实验内容应该能够帮助学生巩固和加深对理论知识的理解,同时也可以通过实验课程中的问题解决过程,提高学生的理论应用能力。实验课程的设计应该与理论课程相辅相成,形成有机的知识体系。 对学生编程能力的评估分析:实验教材中包含对学生编程能力的评估环节。这可以通过布置难度适中的编程作业和设计相应的编程挑战来实现。通过评估学生的编程能力和问题解决能力,教师可以了解学生的学习进度和需求,从而进行有针对性的教学调整。 |