APP下载

“C语言程序设计”课程思政教育的内涵

2020-12-27吴海峰张翠娟

关键词:数组C语言程序设计排序

吴海峰,张翠娟

(安庆师范大学计算机与信息学院,安徽安庆246133)

习近平总书记在全国高校思政工作会议上强调,高校思想政治工作关系高校培养什么样的人、如何培养人、为谁培养人这个根本问题[1]。传统观念认为,思政教育是思政课程的责任,跟专业课程没有关系。然而,专业课程也包含了大量的思政教育的元素,课程思政建设是解决培养人问题的重要举措。2020年5月,教育部印发《高等学校课程思政建设指导纲要》[2],指出工学类专业课程,“要注重强化学生工程伦理教育,培养学生精益求精的大国工匠精神,激发学生科技报国的家国情怀和使命担当”。结合课程特点和专业特性,深入挖掘专业课程的思政内涵,是每位教师应该承担的责任和使命。通过分析和深入挖掘,“C语言程序设计”课程思政教育的内涵应包含[3-9]:(1)树立社会主义核心价值观,(2)培养精益求精的工匠精神,(3)培养团队协作精神和创新意识,(4)强化工程伦理教育。本文通过阐述在“C语言程序设计”的各教学环节如何开展课程思政教学,充分展示专业课程所蕴含的思政元素和所承载的思政教育功能。

1 挖掘思政元素,引导学生树立社会主义核心价值观

在导入新课时,结合与知识点相关的当前新闻热点事件或者历史事件,展开分析和挖掘事件背后的思政元素,引导学生树立社会主义核心价值观,在潜移默化中完成思政教育。下面结合“数组的应用——加密与解密”来进行详细阐述。

通过复习数组的定义和性质,总结数组的特征:“同一数组内的元素,数据类型相同”,从而引出对抗击新冠肺炎疫情的人民战争中涌现出的英雄人物的分组。通过讲述中国政府在抗击新冠疫情的快速反应和有效举措,与西方国家进行对比,让学生体会社会主义制度的优越性,激发学生的爱国情怀。在展示英雄人物图片时,介绍英雄人物的感人事迹,激励学生向英雄人物学习,运用自己的专业知识和技能为国家和人民做贡献。

通过设问“那么各组英雄人物的信息在计算机中是怎样存储的?”和回答“各组英雄人物的信息可以用数组来进行存储,但是在数据存储和网络传输的过程中,容易出现信息泄露”,自然过渡到由信息泄露引起的网络安全问题。

通过介绍全球信息泄露问题的发展趋势和2019年的两起知名信息泄露事件(Elasticsearch数据库泄露事件和Facebook 8 700万用户信息泄露事件),引出习近平总书记关于网络安全问题的重要讲话“没有网络安全就没有国家安全,没有信息化就没有现代化”,将网络安全提高到国家安全的战略高度。对学生进行网络安全意识教育,很自然地介绍几种常见的网络安全技术,指出信息加密技术是最基础的网络安全技术,引入教学主题:用数组实现信息的加密与解密。

2 引导学生逐步完成算法实现,培养其精益求精的工匠精神

在教学过程中,通过算法分析和代码实现,分为两个层次逐步培养学生精益求精的工匠精神。

2.1 培养规范意识,形成良好的编程风格

通过实例带领学生详细分析算法的实现过程,启发学生完成算法设计,并在C语言编译环境下编写代码,直至调试正确。在带领学生编写代码的过程中,通过标识符的命名规则、代码的缩进控制、注释的添加等各种规范,培养学生良好的编程风格。下面结合信息加密问题来详细阐述。

【问题描述】用数组实现四位整型数据的加密和解密算法。加密规则:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

【算法分析】首先举例n=3 456,带领学生使用加密规则进行加密,逐步得到加密结果1098。然后通过加密实现的过程,启发学生得出算法步骤:

(1)加密函数的形参定义为整型变量n;

(2)使用循环结构分离出n 的各位数字,存储在数组code 中(n 的个、十、百、千位依次存储在code[0]、code[1]、code[2]、code[3]中),同时用每位数字加上5、再除以10的余数代替该数字;

(3)使用循环结构将经过加密处理的各位数字重新组合成加密后的新数字,注意计算时依次将code[0]、code[1]、code[2]和code[3]作为新数字的千、百、十、个位。

在讲解算法第(2)步时,提问:怎样把一个整数的每一位分离出来?通过学生的回答了解学生对这一问题的掌握程度,然后举例进行详细分析,提炼出解决问题的算法,带领学生编写函数代码。

通过启发式讲授和互动式教学,将传统“以老师为中心”的课堂转化成“以学生为中心”的课堂,教师的作用从“主讲”变成“主导”,学生从“被动学”变成“主动学”。

2.2 倡导一题多解,培养学生精益求精的工匠精神

在解决C语言中的典型问题时,倡导一题多解,通过比较不同算法的执行效率,真正做到精益求精。下面结合数据排序问题来进行详细阐述。

【问题描述】将10个整数按照从小到大的顺序排序。

借鉴学过的求最小值的方法,通过举例演示排序过程,引导学生逐步总结出交换排序算法。通过数据演示发现,在每一轮找未排序数据的最小值、放到前面的过程中,要进行多次数据交换,算法的效率比较低。

经过分析发现,其实每一轮比较和交换都只需确定一个最小值,无需进行多次数据交换。优化后的算法:只要在每一轮比较中,记录最小值所在数组下标,跟未排序数据的第一个进行交换即可。进一步,若未排序数据的第一个就是最小值,则无需交换。这就是选择排序算法。

然后,从理论上分析比较两种排序算法的效率。交换排序算法的数据交换在双重循环的内循环中,N个数据排序,最坏情况下交换次数为(N-1)+(N-2)+…+1=N(N-1)/2;而选择排序算法的数据交换在双重循环的外循环中,N个数据排序,最坏情况下交换次数为N-1。两种排序算法的效率相差很大,所以在遇到复杂问题时要多思考,不能仅仅满足于解决问题,还要对原有算法进行优化或者找到效率更高的算法,做到精益求精。

3 实施分组教学,培养学生的团队合作精神和创新意识

在项目教学实训时,将班级分成若干小组,每组4人左右,分工完成各项任务。通过小组内部合作,培养学生的团队合作精神;通过各小组之间的评比,培养学生的竞争意识和创新意识。下面结合大数运算项目实训来详细阐述。

【项目描述】大数运算在科学计算中大量存在,例如,大数的加减乘除运算,整数求阶乘等。本项目要求计算100!,并显示其结果。

因为项目的难度较大,在布置任务时,带领学生分析项目实现的关键点和解决方法。

关键点1:100!的计算结果如何存储?

解决方法:可采用数组存储,数组中每个元素表示100!结果中的一位数字。

关键点2:如何确定100!的结果一共有多少位数字,即数组应该有多少个元素?

解决方法:假设10M-1<100!<10M,则不小于M的最小整数就是100!的结果中的位数,对该式两边取对数,有:M-1

关键点3:如何实现用数组存储的大整数的运算?

解决方法:数组的第一个元素看作100!结果的最低位,最后一个元素看作最高位。数组初始化时,令数组第一个元素为整数1,其余为0。把数组中元素的值组成的数字看作阶乘计算的结果,计算100!时就是将数组中每个元素依次乘以2、3、4、…、100的方式得到,将数组每个元素每次的乘积存回数组,若数组元素中的数值超过10,则需要进位。

在解决方法的基础上,鼓励学生进行完善、改进和创新,提出更好的解决方案。然后对项目任务进一步明确:项目功能分析、模块设计、算法设计与流程图、代码实现与调试、总结报告撰写和程序演示与汇报答辩。要求各小组自己分工,最后进行汇报答辩、验收和评比。评比时由各小组互相点评打分,说明项目的优缺点,引导学生进一步思考,创造良性竞争环境,鼓励公平竞争。

4 演示算法应用,介绍前沿技术,强化工程伦理教育

通过演示算法应用,体会算法的实际效果,加深对算法的理解,进一步拓展教学内容,向学生介绍与算法相关的前沿技术。结合国家的产业布局和发展战略,激励学生努力学习,将来投身到国家的信息科技和产业中。同时,结合相关的典型事例,强化工程伦理教育。下面结合加密与解密算法的应用来详细阐述。

运用字符串加密算法对专家的姓名、联系电话等信息进行加密,运用整型数据加密算法对专家的出生年份等信息进行加密。程序演示过程如下:首先,输出专家的各项明文信息;接着,使用信息加密算法加密,输出加密后的密文信息,通过明文信息和密文信息的对比,体会加密算法的效果;最后,使用解密算法,对密文信息进行解密得到明文信息,与原始明文信息进行对比,验证解密算法的正确性。通过程序演示,让学生更加形象地体会到加密算法和解密算法的效果,既锻炼了学生的编程实践能力,又增强了学生的个人隐私保护意识。

总结加密解密过程,指出信息加密是最基础的网络安全技术,自然过渡到前沿网络安全技术——区块链技术。首先,简要介绍区块链技术的概念和特点,举一个通俗易懂的例子,说明区块链技术为什么能够保证信息安全。然后,介绍区块链技术在银行业、供应链管理、防保险欺诈、身份识别和慈善事业等多个领域的应用,教育学生要运用先进的技术来提高生产力、服务社会、保障广大民众的权益和隐私不受侵犯等。最后,引入习近平总书记在中央政治局第十八次集体学习时的讲话精神,习近平总书记强调,把区块链作为核心技术自主创新重要突破口,加快推动区块链技术和产业创新发展,以此激励学生认真学习科学文化知识,关心信息技术的最新发展动态,关心国家大事,为实现中华民族伟大复兴而努力奋斗。

5 总 结

教书育人是教师的天职,而课程思政教育是育人的重要手段。高校教师尤其是工科教师,要在教学过程中有意识地实施课堂思政教育,在教学时找准切入点,做好教学设计,将思政教育渗透到相应的教学环节中,真正做到“润物细无声”。本文深入挖掘了“C语言程序设计”课程的思政内涵,详细阐述了在各教学环节中开展课程思政的过程并举例说明。教学实践表明,在教学中开展课程思政教育,不但没有冲淡专业教学内容,而且激发了学生的学习热情,课程思政教育和专业教育相辅相成,对同类课程乃至其他工科课程开展思政课程教学具有一定的参考价值。

猜你喜欢

数组C语言程序设计排序
JAVA稀疏矩阵算法
作者简介
JAVA玩转数学之二维数组排序
恐怖排序
节日排序
更高效用好 Excel的数组公式
以“学生为中心”的《C语言程序设计》教学设计探究
基于翻转课堂的《C语言程序设计》课程教学系统的实现与研究
浅谈《C语言程序设计》课程的教学改革
《C语言程序设计》课程的教学改革与实践