C语言函数调用方式教学方法的探讨

2022-07-06 23:49王晓东
客联 2022年4期
关键词:C语言函数教学

摘 要:函数调用方式是C语言程序设计课程教学的重点,也是教学难点之一。本文简述了两种C语言函数调用方式的特点,解答了学生在学习过程中遇到的常见问题。并通过典型案例分析,引导学生掌握C语言函数调用方式的运用方法。

关键词:C语言;教学;函数;调用方式

一、引言

程序设计语言是高等院校公共基础教学的重要组成部分,也是计算机相关专业的基础课程。C语言是一门十分优秀的程序设计语言,不仅适用于教学,而且实用性极强,应用广泛。函数调用方式不仅涉及了函数信息传递的效率问题,而且还可能对程序运行结果产生影响,因此也是C语言课程教学的一个重点。C语言函数调用有两种方式,除了传统的传值调用之外,还增加了颇具特色的传址调用方式。在授课中抓住要点,鞭辟入里,精选典型案例进行分析,取得了良好的教学效果。

二、传值调用

传值调用是在高级语言中普遍存在的函数调用方式,其形参和实参均为普通变量。在函数调用时把实参的值从左至右,一一对应地传递给各个形参。这种传递是单向的,类似变量赋值,形参的值发生变化对实参毫无影响。选用求两个整数的最大公约数这个程序作为案例,让学生直观认识到函数定义、调用以及返回值等各个要素。定义一个gcd函数负责求最大公约数,两个形参均设置为普通类型int。算法采用辗转相除法,代码如下:

#include<stdio.h>

main()

{ int gcd(int m,int n); /*函数声明*/

int m,n,k;

scanf("%d%d",&m,&n);

k=gcd(m,n); /*函数调用*/

printf("最大公约数是%d\n",k);

}

int gcd(int m,int n) /*函数定义*/

{ int a;

do

{ a=m%n;

m=n;

n=a;

}while(n!=0);

return(m); /*函数返回值*/

}

有的学生可能会认为函数递归调用是一种新的调用方式,其实它是函数嵌套调用的特殊形式,本质仍然属于传值调用。再次选取求最大公约数这个案例,采用递归调用方式。部分代码如下:

int gcd(int m,int n) /*函数定义*/

{ int k;

if(n==0)

k=m;

else

k=gcd(n,m%n); /*递归调用*/

return(k); /*函数返回值*/

}

三、传址调用

传址调用方式在形式上与传值调用方式的区别是,形参是指针变量,实参则是变量的地址。多数参数值都是通过传值调用方式传递给被调函数的,但是在有些场合使用传值调用并不恰当。例如传递一个任意长度的数组,或者函数需要返回多个结果,或者传递需要占很多内存空间的结构体数据。遇到上述情况可以采用传址调用方式,传址调用使得被调函数能够修改主调函数中变量的值,程序功能更加强大。

选取求某班C语言平均成绩这个案例,定义函数average求平均成绩。按照传址调用的要求,该函数的形参应该为指针类型int*。调用时把数组名作为实参传递给average函数的形参,在函数中利用指针访问数组,计算出平均成绩,返回给main函数即可。代码如下:

#include<stdio.h>

#define N 30

main()

{ float average(int *p); /*函数声明*/

int a[N],i;

float aver;

for(i=0;i<N;i++)

scanf("%d",&a[i]);

aver=average(a); /*函数调用*/

printf("aver=%5.2f\n",aver);

}

float average(int *p) /*函数定义*/

{ float aver;

int i;

for(i=0,aver=0;i<N;i++,p++)

aver+=*p;

return(aver/N); /*函数返回值*/

}

有的学生可能会认为数组作为形参是一种新的函数调用方式,即函数头部变为float average(int a[N]),其实它的本质仍然属于传址调用。形参数组是不单独占据内存空间的,实参数组和形参数组的地址相同,各个元素在内存中是重叠存放的,占据同一段内存空间。实际上C语言把形参数组作为指针变量来处理,这也是形参数组可以不给出长度的原因所在。

四、结语

传值调用方式和传址调用方式各有特色,传值调用使用简便,程序的可读性好,传址调用的功能则更为强大。在教学中应该重点分析两种函数调用方式的特点,引导学生仔细体会,在程序设计中根据实际情况灵活运用。

参考文献:

[1] 王晓东. C程序設计简明教程(第二版)[M].北京:中国水利水电出版社, 2008.

猜你喜欢
C语言函数教学
“C语言程序设计”课程混合教学探索
基于C语言的计算机软件编程技术探究
中职C语言单片机课堂教学中的趣味性探讨
“自我诊断表”在高中数学教学中的应用
计算机原理中C语言的应用价值
在遗憾的教学中前行
关于函数的一些补充知识
计算教学要做到“五个重视”
高中数学中二次函数应用举隅オ
教育教学