C程序设计课程教学中知识点与德育点映射
2022-04-02陈益
陈益
摘要:文章主要以C程序设计课程中函数调用的基本内容为专业理论教学点,甄选蕴藏其中的合作思政点,以此为契,研究程序设计中函数调用规则与现实社会里合作共赢法则的同向问题。函数调用内容分四部分,以由浅入深、逐一击破的方式剖析理论的本质、内涵及应用。思政元素,以基因式的方式逐步向专业知识深入融合,达到智慧教学。让教学活动有深度、有广度亦有温度,教书与育人同向同行。
关键词:C程序设计;函数调用;思政元素;合作;共赢;智慧教学
中图分类号:G642 文献标识码:A
文章编号:1009-3044(2022)33-0119-03
积极践行习近平总书记在全国高校思想政治会议上的讲话精神,用好课堂教学这一主渠道,各类课程都要与思想政治理论课同向同行,深挖专业课教学中蕴藏的思政元素,将思政资源在专业知识教学中基因式融入,实现教书与育人的同步统一,是新时代所赋予的专业课教师高质量完成教学任务的最新标准[1]。
本文以C程序设计中的函数调用为例,甄选函数调用专业知识中蕴藏的思政元素-合作,以此为契研究函数调用与合作的同向性。函数调用内容分四部分,以学生熟练掌握函数调用的本质为教学目的,每部分理论内容后,都赋予与之相匹配的思政内容的渗入和对照,以此拓展教学活动,在培养学生用调用函数的方式解剖复杂工程问题的思维能力的同时,从思政角度,倡导、鼓励团队合作精神,发扬自主创新精神,弘扬爱国主义精神,对学生进行智慧教育[2]。
1函数调用的基本形式和基本方法
C程序中的函数又称模块,一般分3种类型:①主函数main函数,是源程序执行的入口函数;②库函数,已被封装好具体功能的函数,用户只需根据规定传递相关参数便可获得结果;③自定义函数,用户根据自己的需求所编写的函数,包括函数名字、函数参数、函数返回类型及函数功能体,自定义函数可以被自己或别的函数调用[3]。
1.1函数调用的基本形式
主函数可以调用库函数和自定义函数,库函数也可以调用自定义函数,自定义函数间可以相互调用。函数调用的一般形式为:函数名(实参表列);函数名的取名规则与其他标识符一致,实参表列为函数的参数,实参表列包括类型名和参数名,若有多个实参,每个参数名前都有自己的类型名,各个参数间用逗号分隔。调用无参函数,“实参表列”的内容为空,括号不能省。
1.2函数调用方法的分类
函数调用方法按照形式和出现的位置分3种:
①函数调用语句,函数调用可以单独作为一个语句。如:printf_star();语句为调用无参函数,执行printf_star函数体中的某种具体操作,主調函数最终通过正确结果的显示诠释对被调函数功能的驱动。
②函数表达式,函数调用可以出现在另一个赋值表达式中。如:c=max(a,b); 从max(a,b)函数被调用的位置分析,它作为赋值号右边的表达式,有返回值,当max(a,b)函数被调用后,它返回的较大的值会赋值给主调main函数的变量c。
③函数参数,函数调用可以作为另一个函数调用时的实参。如:printf(“%d”,min(x,y)); 本次调用中min(x,y)函数作为printf函数的输出表列,由库函数的格式控制可知,min(x,y)函数的返回值类型必须为int型[4]。
1.3函数调用与合作的同向性分析
总结以上①②③点信息可知,除了主函数main函数外,每个函数的功能固定且有限,要完成规模较大的任务,必须通过函数间的调用,最大限度发挥主调函数和被调函数各自的优势,获得预期的结果。软件开发本身是一项涉及多部门、多任务的复杂的协同工作,团队合作极为重要。
现实社会中的团队合作,与软件开发中函数调用的作用不谋而合,如果把一个个函数形象地比喻为一个个国家,那么函数间的调用犹如国家之间为实现一个更大的目标,在一定程度和一定范围内开展的互惠互利的合作。每个国家根据自己的独特优势,积极寻求与别国的合作机会,求同存异、产生共鸣[5]。于个人而言,团队合作本身是力量的汇聚,除去技术过硬这一至关重要的因素外,合作意识、组织能力、服务意识,能够求同存异,虚心听取不同意见,这些同样是决定一个人未来发展道路的关键因素。与函数调用一样,合作对于国家、对于个人都是发挥自身优势、取得更大收益的良好途径。
2 函数调用时的数据传递
函数进行调用时,主调函数和被调函数之间是否有参数的传递,是否能进行参数间的正确传递,是进行函数调用要考虑的第一条件。
2.1 形式参数和实际参数
当主调函数调用无参函数时,二者之间不存在参数传递,被调函数只需根据自身功能配合主调函数完成调用过程即可。当主调函数调用有参函数时,二者之间需要有相同数据类型的参数传递,称“数据传递”。
主调函数的参数为实际参数,称“实参”;被调函数的参数为形式参数,称“形参”。形参和实参数据可以是整型、实型、字符型等各种基本数据类型,或数组、指针等引用类型。本文中的应用举例,形参和实参数据的类型均以基本数据类型为例。
2.2实参和形参间的数据传递
在调用函数过程中,系统会把实参的值传递给被调用函数的形参,即形参从实参得到一个值。形参获取的值在函数调用期间有效,能参与该函数中的运算。
2.3数据传递规则与合作共识规则对照
函数调用如果是有参数的,参数传递只能是实参传给形参,这是规则,不容商榷[6]。如果将参数传递规则作为软件开发中函数间调用的共识基础,那么现实社会里国家之间合作的共识首先应该是以平等和尊重为基础的,然后是有主导、按规则、守秩序、同进退、相互信任相互包容。任何有效、深度的合作都应该是建立在有规则的前提之下。对于基本规则,只能遵守,不得逾越。
3函数调用的过程
3.1函数调用的执行流程
主调函数的实参向被调函数的形参进行的数据传递为单向“值传递”,且只能是实参传递给形参。特别注意:当实参有多个参数对形参进行传递時,必须是从左到右地一一传递,绝不能交叉。实参向形参进行数据值传递的过程如例1所示。例1 交换形参数据
#include “stdio.h”
void swap(int x,int y)
{ int t;
t=x;x=y;y=t; //三条赋值语句实现形参x,y值的交换
printf(“形参:x=%d,y=%d ****”,x,y);
}
int main()
{ int a,b;
printf(“\n请输入两个整数:”);
scanf(“a=%d b=%d”,&a,&b);
printf(“输出结果:\n”);
swap(a,b);
printf(“实参:a=%d,b=%d\n”,a,b);
return 0;
}
对函数调用过程进行分析:例1中,当swap函数被main主函数调用时,事先通过scanf输入函数从键盘读取到的a和b的值,7和9,作为实参分别依次传递给swap函数的形参x和y(注意传递过程绝不能交叉),即此时x=7,y=9。至此实参和形参二者之间的数据传递工作结束,swap函数的x和y获得了值之后,在swap函数体中通过t=x;x=y;y=t;3个赋值语句进行了形参x和形参y值的交换,即形参x由实参a传递过来的7变成了9,形参y由实参b传递过来的9变成了7,而形参数据进行交换的这一过程与实参a和实参b没有任何关系,形参x和形参y值的交换是由swap函数的功能所赋予的。例1程序运行结果如图1所示。
从程序的运行结果可知,实参和形参在内存中都有各自不同的存储单元,它们之间的传递是单向的。形参有从实参获取值的权力,但形参最终的值由它所在的函数功能决定。即使因函数功能让形参值变化了也不会影响到实参,它们之间的单向传递关系,表明了实参无法获得形参的值。
3.2函数调用的操作过程与合作的执行过程
例1函数调用的说明:①swap函数中3条交换形参值的语句,必须经主调main函数调用时实参把具体的值传递给形参后才能进行,没有实参向形参传值的起因,形参值的交换结果,犹如“无米之炊”;②实参和形参间发生参数的传递,必须是实参传给形参,且是从左到右对应一一传递,不能反向,不能交叉,是既定的规则;③当实参把信息传递给形参后,它们之间的关系结束,形参自己有权在自身所在的函数内做自己的事情,比如,形参的值进行交换,实参无权干预。
总结以上①②③点,对主调main函数,实参值的传递发挥了积极的作用,是推动被调函数工作的先决条件;对被调swap函数,因为有实参向形参值的传递,才能凸显被调函数中3条赋值语句的实际作用。因此函数调用中它们都各自发挥作用,各自都有收获。
由例1中的①②③说明,聚焦到国家之间的关系,如果需要可以在一定程度、一定范围内开展各种实质且有效的合作。合作首先要平等,尤其是大国和小国、强国和弱国之间,开展合作的原则首先必须消灭霸权主义和强权条约、保证合作国家平等独立、彼此尊重国家主权,领土完整,遵守国际公约等条件。各国之间平衡利弊、取长补短,将自己最擅长的事务发挥到极致,将合作的有效性和实效性扩展到最大化。映射到人与人之间或组织之间的合作,同样体现了尊重、平等、诚信及遵守社会秩序、执行基本规则和拥有良好信誉的基本前提。
当主调函数将实参按照既定的规则一一传递给被调函数的形参时,相当于多方合作的条件都达成共识或一一具备,接下来的合作过程应该是平滑的、顺畅的,最后取得的合作结果自然是合作方不同程度的收获。我国提出的“一带一路”倡议取得的辉煌成绩及各国在全球气候变暖上采取的分工、协作等积极措施,都极大地诠释了合作为全人类所带来的巨大福祉。
4 函数的返回值
4.1 函数返回值的执行过程
在函数调用过程中,通常希望通过函数调用使主调函数能得到一个确定的值,即为函数值,也称函数的返回值。关于函数的返回值需要注意内容有:(1)函数的返回值是通过函数中的return语句获得的。(2)函数值的类型,应该在定义函数时指定函数值的类型。如:int max(float x,float y) //max函数值的类型为int型。(3)在定义函数时指定的函数类型一般应该与return语句中的表达式值的类型一致。如不一致,以函数类型为准,对数值型数据,进行自动类型转换,即函数类型最终决定返回值的类型。(4)不带回值的函数,定义函数为“void类型”。如:void fn(){} //表示fn函数的返回类型为void型。
当主调函数调用fn函数时,其目的仅仅只是为了让fn函数执行某个过程,而并不需要为主调函数带回fn函数的任何值,或fn函数也没有值可以带回时,函数体中也不需要return语句了。以下示例2具体说明了return语句的用法。
例2 比较两个整数的大小
#include “stdio.h”
int max(int x,int y)
{ int z;
if(x>y) z=x;
else z=y;
return(z); //将z的值通过max函数被调用带回给主调函数
}
int main()
{ int a,b,c;
printf(“\n请输入两个整数:”);
scanf(“%d,%d”,&a,&b);
c=max(a,b); //调用max函数,a,b为实参,调用后的值赋给c
printf(“输出结果\n 最大值:max=%d”,c);
return 0;
}
对函数调用过程进行分析:例2是比较两个整数的大小,由题意可知,被调用函数应该为主调函数带回两个整数中较大的一个值,所以被调用函数在定义时必须有返回值,且类型为int型,在函数体中用返回语句带回函数被调用之后的较大值赋给主调函数的某个变量,或是直接作为输出函数的输出表列打印出来。例2的源程序中包含三个函数,其中max函数为被调用,其功能是首先从主调main函数中为参数x和参数y获取两个整数,接着完成比较大小的工作,最后由return语句为主调main函数返回一个较大的值;main函数为主调函数,其功能是在调用被调函数时,向其传递两个整数值,即实参a和实参b将从键盘读取的值传递给max函数的形参x和形参y,完成函数调用工作后,用变量c接收了其中一个较大的值;printf库函数打印变量c的值。例2程序运行结果如图2所示。
4.2函数返回值的取得与合作结果的对照
例2函数返回值的说明:①max函数首先必须有能实现两个整数比较大小的功能,才会被主调main函数调用,此点说明了有自身优势的重要性;②函数的返回值,在函数定义时是静态的,return语句展现了函数的返回信息。无论这些返回信息指的是一个具体的数值还是一次详细的执行操作,都是在被调max函数被主调main函数调用后获得的,是一个动态的过程,即“动爆发能量”。
例2的①说明可知,自身有过硬的本领和一定的优势是合作的前提和基础,是内因。②说明了任何人、物力量都是有限的,要展示自身优势,在一定程度上须借助外力,内因主导、外力推动,二者同向同行爆发巨能,函数返回值彰显合作、借力的重要性。延伸到国家之间的道理是一样的,集中本国优势,积极与他国合作。如此一来既展现了自身的优势,同时优势也被认可,在合作中发光发热,创造福祉的同时也获得更大的收益。
5 结语
本文以C程序设计课程中的函数调用内容为例,甄选与理论知识相匹配的思政元素-合作,作为分析程序设计与现实社会同向的契点,每个理论知识点的基本内容后都恰到好处地分析二者的共通性,深入探讨专业知识点与德育点的基因式融入,为深化高校课程思政教学改革体系的构建起了抛砖引玉的作用[7-8]。教学过程中深层地分析德育点-合作在新时代于国家、于个人所赋予的规则和意义。
参考文献:
[1]新华社.全国高校思想政治工作会议[EB/OL].[2016-12-08].http://www.gov.cn/xinwen/2016-12/08/content_5145253.htm#1.
[2]教育部.高等學校课程思政建设指导纲要[EB/OL]. [2020-05-28].http://www.gov.cn/zhengce/zhengceku/2020-06/06/content_5517606.htm.
[3] 何钦铭,颜晖.C语言程序设计[M].北京:高等教育出版社,2020.
[4] 谭浩强.C程序设计[M].4版.北京:清华大学出版社,2010.
[5] 李文洁,王晓芳.混合教学赋能高校课程思政研究[J].中国电化教育,2021(12):131-138.
[6] 那俊,李丹程.课程思政在计算机类课程中的探索与实践[J].中国大学教学,2021(3):48-51.
[7] 王岩,朱世敏,张重阳,等.高校“课程思政”在《大学计算机基础》的实践探索[J].科技资讯,2021,19(19):126-128.
[8] 李薇,黑新宏,王磊,等.课程思政教育在C语言程序设计课程中的应用[J].计算机教育,2019(11):20-23.
【通联编辑:王力】