新工科背景下融入课程思政的C程序设计教学模式设计与实践探究
2024-01-27李素君周波清
李素君 周波清
摘要:以新工科对新时代理工科大学生的培养目标与要求为准绳,结合地方应用型本科院校的办学定位及计算机类专业对人才培养目标的要求,从C程序设计课程的开课目标与对象着手,以课程主要知识点为载体,详细介绍了其主要教学过程设计中内容的梯度设计方法、课程思政的巧妙融入方法及取得的成效。
关键词:C程序设计;教学设计;课程思政;工程实践与创新能力
中图分类号:TP391 文献标识码:B
文章编号:1009-3044(2023)36-0142-04
开放科学(资源服务)标识码(OSID)
0 引言
2016年,习近平总书记在全国高校思想政治工作会议上强调,高校思想政治工作关系高校培养什么样的人、如何培养人以及为谁培养人这个根本问题。要坚持把立德树人作为中心环节,把思想政治工作贯穿教育教学全过程,实现全程育人、全方位育人,努力开创我国高等教育事业发展新局面[1]。2017年以来,教育部积极推进新工科建设,先后形成了“复旦共识”“天大行动”和“北京指南”,并發布了《关于开展新工科研究与实践的通知》等系列文件。与传统的工科人才不同,新工科人才需要的是实践能力强、创新能力强、具备国际竞争力的高素质复合型人才[2]。C语言作为计算机类专业的核心基础课程,主要培养学生解决实际问题的分析建模、程序开发及核心素养能力,在日常教学中若能较好地融入课程思政,引导学生在掌握程序设计思想与方法的同时,提升其综合能力,便能实现育人育心的协同效应[3]。
1 C程序设计的开课目标与开课对象
对于一般普通高校来说,C程序设计课程是计算机类专业的核心基础课程,其开课目标主要包括以下三个方面。
1.1 认知目标
1)使学生了解高级语言程序设计和面向过程程序设计的基本概念。
2)使学生熟练掌握C程序设计的基础知识、语法和使用方法。
3)使学生熟练掌握结构化程序设计的基本方法和技能。
1.2 能力目标
1)使学生能正确使用C语言的数据类型、运算符、数组、指针、结构体等及能熟练使用三种基本结构进行程序设计。
2)使学生不仅能熟练阅读程序,且具有分析和设计算法的能力。
3)使学生具有使用C语言解决常见典型实际问题的能力。
1.3 情感目标
1)激发学生学习程序设计的兴趣,提高学生的专业认知度。
2)激发学生的爱国情怀和投身国产IT生态自主可控事业的使命感。
3)培养学生的工匠精神,牢固树立关注工程与社会、环境的大工程观思维,培养工程师的责任感。
4)培养学生良好的团队合作精神、服务社会意识,提升学生服务社会的能力。
C程序设计课程的开课对象一般是大一刚入学的新生。对于普通的二本院校来说,大部分学生不仅编程基础薄弱、数学基础欠扎实,且学习能力与耐力都欠理想。该课程语法规则繁多、内容抽象,初学者很容易因为犯错而失去学习热情和积极性[4]。因此,若想通过64个标准课时的教学,实现预期的培养目标与要求,首先必须构建高效课堂,而构建高效课堂的前提是进行高效的教学设计,以与现实生活紧密相关的典型案例为切入点,灵活生动地引入相关知识点的学习,层层递进,并依据新时代新工科的培养目标与要求,巧妙地融入课程思政,以实现在培养学生计算思维和程序设计能力的同时,提升其核心素养,为个人的终身发展和可持续发展打下坚实的基础[5]。
2 新工科背景下融合课程思政的C程序设计教学过程设计
以新工科对新时代理工科大学生的培养目标为准绳,将C程序设计的课程教学与思政教育进行巧妙融合,高效实用的教学过程设计便是第一步。好的教学设计是构建高效课堂的前提。而高效课堂的构建必须基于高效学习,即在课堂上充分调动学生的积极性、激发学生的学习兴趣。这就要求教师在备课和教学过程设计等过程中要注意教学内容与教学方法相得益彰,要注重寓教于乐、寓道于教和寓德于教[2]。
下面将以C程序设计课程的主要知识点为载体,以案例驱动法、分析法、演示法、总结法等为主要教学手段,以厚植爱国主义情怀和培养大国工匠精神为课程思政的切入点,以类比法或引导法为主要手段适时无缝地融入课程思政,详细介绍主要教学过程的设计思路与方法。
模块一:C程序的基本组成与开发过程。例如,介绍C程序的基本组成,通过如下简单的案例程序引入:
#include <stdio.h>
int main( )
{ printf(“This is my first C program.\n”);
}
首先,让学生自主观察上述程序,并找一位同学用自己的话概括上述程序的组成特点。然后教师根据回答情况通过引导法让全体学生明白C程序组成的基本框架与特点。接下来,现场调试运行程序,让学生自主体会运行结果与源程序的区别。然后采用加减法,依次去掉程序中的某个部分或某一行,分别给出调试或运行结果。通过这个过程让学生深层次明白C程序的基本特点及程序中每个语句的作用。接下来在此基础上给出如下课堂思考题:如何在屏幕上打印输出一个5行5列,四周由“*”组成,中间是空心的正方形。以实现对所学内容的巩固。叫一位学生上台现场实现,其余同学在下面实现。然后教师充分利用现场互动与讨论,对答题情况进行适当的总结与鼓励。总结时以引导法启发学生思考,刚才为了读懂别人程序所采用的加减法,在日常生活中,它在哪些情况下也是可行的呢?学生的参与度高,答案基本集中在如下观点的周围:当遇到复杂或棘手的事情时,可以先采用减法,把不太重要的细枝末节去掉,把关键的问题给解决,之后再采用加法,按照一定的规则顺序把剩下的细枝末节给一一解决;同样,当在学习中碰到难题或难以坚持时,也可以采用上述方法。此外,通过程序设计在人工智能领域的重要作用,引入中国在无人机、5G、机器学习、人脸识别、自然语言处理等领域取得的重大突破,以增强学生的民族自信心和自豪感;最后,给出课后思考题:已知a=2,b=3,请编程输出2+3=5到屏幕。以实现对所学内容的提升及下次课知识点的引入。
模块二:C程序的基本数据类型、运算符和表达式。首先以上次课留下的课后作业作为引例,总结答题情况并现场编程实现两种典型的方法。进而在此基础上请同学们思考完成:如何编程实现求给定半径所对应的圆的面积。从而引入本堂课的第一个教学内容:数据类型、常量、变量的定义与使用。有了量,便可以进行运算。紧接着给出下述表达式:3-4+5和3-4×5,询问学生上述表达式的结果。接着提问:上述表达式的结果为什么不是-6和-5呢?由此问题的解答可引导学生得出表达式的计算要根据运算符的优先级和结合性。然后根据关键词优先级和结合性,引导学生探讨在现实生活中,什么时候也要注意两者的应用。接下来给出课堂思考题:①判别闰年的表达式;②a和b不同时为0;③三个数的最大值,以实现对所学内容的巩固与提升。总结时根据本章内容是整个C语言的基石,自然引入:基础不牢,地动山摇。最后给出课后思考题:①计算机是怎么实现表达式的计算的?②请编程输出一个数的相反数。以挖掘学生的学习潜能与下次课知识点的引入。
模块三:C程序的控制结构。本知识模块的重点内容是选择结构和循环结构,其中选择结构由上次所留的课后思考题:“请编程输出一个数的相反数。”引入。根据作业情况进行总结并给出根据所学知识:使用条件运算符的程序实现方法。然后以条件运算符的本质功能为切入点,引入新知识点的学习:选择结构。接下来便通过定义与实例相结合,详细介绍C语言中选择结构的实现方法与注意事项。并在此基础上给出课堂思考题:“如何编程实现如下成绩等级制的打印?60分以下输出不合格,60-80输出合格,80-100输出优秀。”让学生自主思考实现。然后依据答题情况,通过现场互动与讨论,得出两种典型的实现方法。接下来进行总结。总结时通过类比法引入毛主席晚年的两次重大抉择的重要性,让学生明白在面临选择时要慎重,要以大局、集体利益为重,选择之后必须要用力坚持的道理。整个过程学生参与度高,积极性也很高。最后给出如下课后思考题:①请编程实现从键盘输入四个数,请按从小到大的顺序输出;②请编程实现二元一次方程根的求解。以实现对所学内容的提升与实际应用。
循环结构知识点的学习可由如下引例引入:
#include <stdio.h>
int main( )
{
int i=1;
while(i<=6){
printf(“%d “,i);
i++;
}
}
让学生自主思考并猜测上述程序的运行结果。紧接着现场调试运行程序,给出运行结果。让学生体会运行结果,并总结出该程序的功能。然后在此基础上给出课堂思考题:“请对上述程序进行最小的改动,打印输出1-100以内所有能被5整除的整数。”绝大部分同学都能较好地完成。接下来按梯度再给出思考题:“请编程求解S=1+2+3+...+100。”让学生自主实现。结果发现学生的解答方法主要有两种:逐项累加法和高斯法。然后现场给出两种典型方法的实现过程,并引导学生分析两种实现方法的区别与效率,进而让学生明白程序设计不只是问题得到解决就行,还要注意寻求诸多解决方法中的最优解。自然引入并实践大国工匠、精益求精的精神。接下来总结是由1.01的100次方的结果和0.99的100次方的结果的差异,引导学生明白:不积跬步,无以至千里;不积小流,无以成江海。最后给出课后思考题:编程实现S=1+(1+2)+(1+2+3) +...+(1+2+3+...+100)的求解。以提升其编程素养及下次课内容的引入:多重循环程序设计。
模块四:数组的定义与使用。前面已经编程实现四个整数的排序输出,请思考:要对10个整数或更多的整数进行排序,该怎么实现?让学生自主思考并找2到3位同学说出自己的实现思路與方法。然后通过现场互动与讨论,以分析总结的方法引入新知识点的学习:数组。由数组的定义与特点,通过类比法引导学生懂得:物以类聚、人以群分,近朱者赤、近墨者黑的道理。然后详细介绍引例的两种实现方法,选择法和冒泡法。接下来对两种实现方法进行比较,引导学生进一步理解其中的差异及具体的实现要点。最后通过如下案例:
#include <stdio.h>
int main( )
{
int a[5]={1,2,3,4,5},i,t;
for(i=0;i<2;i++)//for(i=0;i<5;i++);
{ t=a[i]; a[i]=a[5-1-i];a[5-1-i]=t;}
for(i=0;i<5;i++) printf(“%d “,a[i]);
return 0;
}
让学生自主分析上述两个程序的运行结果,通过类比法引导学生懂得:在生活中很多时候都要注意画蛇添足、过犹不及等尴尬局面。最后给出课后思考题:如何实现两个较大整数(1 000位左右)的加法运算?通过对此问题的解答,让学生更进一步理解数组的使用方法与使用场合。
模块五:函数的定义与使用。该模块的重难点内容是递归函数设计。该内容可通过以下引例引入:
#include <stdio.h>
void f(int n)
{ if(n>1)
f(n-1);
printf(“%d,“,n);
}
int main( )
{ f(5);
}
提醒学生认真观察上述程序中的函数f( )与以前所学函数的区别,并模仿计算机的执行过程给出程序的运行结果。接下来详细分析上述程序运行的两个阶段,递推与回归,让学生明白递归程序的本质及设计方法。接下来要求学生对上述程序进行改造,使得程序的输出结果为5,4,3,2,1。紧接着,让学生依照阶乘的数学定义,用递归算法实现求解10!。让学生进一步理解递归函数的设计要点。接下来引入汉诺塔问题的求解,通过分析让学生深入理解递归函数的设计方法与使用场合。由对汉诺塔问题求解的分析:64个盘子的移动次数引入课程思政:如果这个工作由人类来完成,假设每移动一次盘子只需要1秒钟,那么移完64个盘子也需要5 800亿年。我们知道地球的寿命约为96亿年,可见,这个问题通过人类来解决是完全不可能的。但如果通过我国自主研发的超级计算机神威太湖之光来完成的话,只需约3分钟,因为它的峰值性能能达到12.5亿亿次每秒,持续性能也能达到9.3亿亿次每秒。由中国在超算方面取得的傲人成就继而引入:在短短的 70 多年时间里,新中国在经济、科技、军事等领域取得巨大成绩,以帮助学生牢固树立和自觉践行“四个自信”和“四个意识”。最后给出课后思考题:设有n级台阶,你可以一步跨1级,也可以一步跨2级,也可以一步跨3级,问从最底层开始走完全部台阶共有多少种走法?要求用递归函数实现,以实现对所学技能的实践、创新与提升。
模块六:指针的定义与使用。这部分内容的抽象性更强,所以讲解时方法显得尤为重要,首先通过引例:int a; int *p;让学生由前面所学知识领会两个语句的区别,从而领会指针变量的本质及使用方法。接下来引入数组名与指针的区别,进而通过典型例题的设置例梯度性地介绍一重指针和一维数组,二重指针和二维数组的区别与联系。本模块的重点是函数的参数为指针。通过以下典型案例引入:
#include <stdio.h>
void Swap(int a,int b)
{
int t; t=a;a=b;b=t;
}
int main( )
{ int a=3,b=4;
Swap(a,b);
printf(“%d %d\n”,a,b);
}
#include <stdio.h>
void Swap(int *a,int *b)
{
int t; t=*a;*a=*b;*b=t;
}
int main( )
{ int a=3,b=4;
Swap(&a, &b);
printf(“%d %d\n”,a,b);
}
让学生自主分析上述两个程序的运行结果。进而让学生明白函数的参数为普通变量和指针变量的区别。分析过程中通过类比法引导学生懂得:要实现新时代新目标,我们必须团结在党中央周围,听从党的指挥,举国上下思想行动必须团结一致。最后给出课后思考题:写一函数,实现两个字符串的比较。函数原型为:int strcmp(char *p1, char *p2);。以实现对所学知识的具体实践与巩固。
模块七:结构体的定义与使用;模块八:文件的读写。这两模块的知识由于教学时长的关系,在实际教学安排中是老师略讲与学生自学为主相结合。其中结构体部分,在介绍链表的特点及其与数组的区别时,通过类比法引入课程思政:每个人都有自己的长处与短处,平时注意扬长避短,人生就会越来越精彩。在介绍文件的相关知识时,基于文件长期存储的特点引入课程思政:知识与技能的長期存储是平时大量地练习与实践的结果。
综上所述,不难看出,上述教学过程设计不仅紧紧围绕新时代新工科的培养目标,而且思政元素与知识点的耦合度也非常高,能让学生在掌握专业知识与技能的同时潜移默化地厚植其家国情怀、提升其思想境界与核心素养。
3 新工科背景下融入课程思政的C程序设计典型教学效果
上述教学模式与方案自2021年以来于本院进行了实施。在此期间,学生获得蓝桥杯C/C++组竞赛成果如表1所示。从表中不难发现:随着课堂温度的提升,学生的专业素养有了显著提升。
4 结束语
课程教学设计以新工科背景下对新时代理工科大学生的培养目标及要求为准绳,对原有的教学内容进行了优化与深化,对原有的教学方法与理念进行了深层次的改革,以课程主要知识点为载体,讲解时采用典型案例导入,注重学生的参与度、学习兴趣与实践创新能力,巧妙地融入课程思政,不仅提高了学生的学习兴趣、学习获得感、学习能力与工程实践能力,更提升了学生的核心素养与社会责任感,育人育心效果显著。
参考文献:
[1] 习近平在全国高校思想政治工作会议上强调:把思想政治工作贯穿教育教学全过程 开创我国高等教育事业发展新局面[N].人民日报,2016-12-09(1).
[2] 冯志红,沈振乾,李凤荣.C语言程序设计课程高效课堂的构建与实施[J].计算机教育,2022(8):133-137.
[3] 王蕊,黄建强.C语言程序设计课程思政教学探索[J].计算机教育,2022(1):74-77,83.
[4] 胡伟.基于案例教学法的线上线下混合式教学模式在C语言教学中的应用研究[J].电脑知识与技术,2023,19(13):137-139.
[5] 李薇,黑新宏,王磊,等.课程思政教育在C语言程序设计课程中的应用[J].计算机教育,2019(11):20-23.
【通联编辑:梁书】