前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇c语言函数范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
关键词:函数指针,指针函数,地址
1.引言
一个程序由两部分组成:代码部分和数据部分。当在程序中定义变量时,编译系统就会为变量分配相应的存储单元,由此就形成了地址的概念。数据在内存中是存放在某一地址上的,代码同样也是存储在内存中的某一地址上,因此指针即可向内存中存储的数据也可以指向程序中的代码,这就是函数指针。而指针函数则是指返回值是一个指针的函数。
2.函数指针
可以用指针变量指向整型变量、字符串、数组,也可以指向一个函数。在C语言中规定,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋给一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。论文参考网。我们把这种指向函数的指针变量称为“函数指针变量”。
函数指针变量定义的一般形式为:
类型说明符(*函数指针变量名)(形式参数表);
例如: int(*pf)( );
表示pf是一个指向函数入口地址的指针变量,该函数的返回值(函数值)是整型。
下面通过例子来说明用函数指针形式实现对函数调用的方法。在我们没有学习指针变量之前,我们调用函数时是通过函数名来完成的。
2.1用函数名实现函数的调用
源程序代码如下:
#include<stdio.h>
int max(inta,int b)
{if(a>b)return a;
elsereturn b;}
void main()
{ int max(inta,int b);
int a,b,c;
printf('inputtwo numbers:');
scanf('%d,%d',&a,&b);
c=max(a,b);/*用函数名调用*/
printf('max=%d ',c);
}
程序运行结果如下:
2.2用函数指针来实现函数的调用
源程序代码:
int max(inta,int b)
{if(a>b) returna;
else return b;}
void main()
{ int max(inta,int b);
int (*pmax)(int ,int ); /*定义了一个指向整型函数的指针*/
int a,b,c;
pmax=max;/*使函数指针指向该函数的入中地址*/
printf('inputtwo numbers:');
scanf('%d,%d',&a,&b);
c=(*pmax)(a,b);/*通过指针调用max函数*/
printf('max=%d ',c);}
程序运行结果如下:
实例说明:
(1) 本实例中“int (*pmax)( int ,int );”用来定义pmax是一个指向函数的指针,该函数有两个整型参数,函数值为整型。
(2) 赋值语句“pmax=max;”的作用是将函数max的入口
地赋给指针变量pmax(函数名代表该函数的入口地址)。
这时,pmax就是指向函数max的指针变量,此时pmax
和max都指向函数的开头,见右图。调用*pmax就是调
用max。
(3) 请注意:pmax是指向函数的指针变量,它只能指向函数
的入口处而不能指向函数中间的某一条指令处,因此不能
用 *(pmax+1)来表示函数的下一条指令。
(4) 在main函数中有一个赋值语句:
c=(*pmax)(a,b);与实例2.1中c=max(a,b);等价。这就是用指
针形式实现函数的调用。以上用两种方法实现函数的调用,结果是一样的。论文参考网。
2.3使用函数指针
问题:编写程序,根据用户的选择分别调用sin 、cos、 tan函数计算一个角度的三角函数值。角度值从键盘输入。
源程序代码如下:
#include<stdio.h>
#include<math.h>
main()
{double(*p[3])(double)={sin,cos,tan};
intchoice,angle;
printf('Pleaseinput angle=?');
scanf('%d',&angle);
printf('Pleaseinput choice(0-sin,1-cos,2-tan)=?');
scanf('%d',&choice);
printf('%lf ',(*p[choice])(angle*3.14159/180));
}
实例说明:
(1)在本实例中“double (*p[3])(double)={sin,cos,tan};”定义了一个具有3个元素的函数指针数组p,其中3个元素分别指向数学函数sin、cos、tan。
(2)当程序运行时给angle赋值30,给choice赋值0。则:
程序中“priintf('%lf ',(*p[choice])(angle*3.14159/180));”
转换为:
“printf('%lf ',(*p[0])(30*3.14159/180));”(与“printf('%lf ',sin(30*3.14159/180));”等价)。
程序运行结果如下:
3. 指针函数
一个函数可以返回一个整型值、字符值、实型值等,也可以返回指针型的数据,即地址。指针函数则是指返回值是一个指针的函数。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针函数。论文参考网。
定义指针型函数的一般形式为:
类型说明符 *函数名(形参表)
{
…… /*函数体*/
}
如: int *pf(int x,int y)
{
...... /*函数体*/
}
pf是函数名,调用它以后能得到一个指向整型数据的指针(地址)。x、y是函数pf的形参,为整型。请注意在*pf 两侧没有括号,在pf的两侧分别为*运算符和()运算符。而()优先级高于*,因此pf先与()结合。显然这是一个函数形式。这个函数前面有一个*,表示此函数是指针型函数(函数值是指针)。最前面的int表示返回的指针指向整型变量。对C的这种定义形式,用时要十分小心。
例:有若干个学生的成绩(每个学生有4门课程),要求在用户输入学生序号后,能输出该学生的全部成绩。
源程序代码如下:
#include<stdio.h>
void main()
{floatscore[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};
float*search(float(*pointer)[4],int n);
float *p;
int i,m;
printf('inputthe number of student:');
scanf('%d',&m);
printf('Thescores of No.%d are: ',m);
p=search(score,m);
for(i=0;i<4;i++)
printf('%5.2f ',*(p+i));
printf(' ');
}
float*search(float(*pointer)[4],int n)
{float*pt;
pt=*(pointer+n);
return(pt);
}
程序运行结果如下:
4.结束语
特别注意的是函数指针和指针函数这两者在写法和意义上的区别。如int(*p)()和int *p()是两个完全不同的量。int(*p)()是一个变量说明,说明p 是一个指向函数入口的指针变量,该函数的返回值是整型量,(*p)的两边的括号不能少。int *p() 则不是变量说明而是函数说明,说明p是一个指针型函数,其返回值是一个指向整型量的指针,*p两边没有括号。作为函数说明, 在括号内最好写入形式参数,这样便于与变量说明区别。 对于指针函数定义,int *p()只是函数头部分,一般还应该有函数体部分,这样才能构成一个完整的函数结构。
参考文献:
[1] 陈强.C语言核心开发技术从入门到精通[M].北京:电子工业出版社,2009.
[2] 匡松.C语言程序设计[M] .北京:中国铁道出版社,2008.
[3] 李俊杰.C语言复习指南与题解[M] .北京:清华大学出版社,2003.
[4] 谭浩强.C程序设计[M] .北京:清华大学出版社,2005.
关键词:C语言;函数说明;返回值
函数的一般形式是:type-specifier function_name(parameter list)parameter declarations{body of the function}类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。当一个函数没有明确说明类型时,C语言的编译程序自动将整型(int)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理:首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。
一、函数的类型说明可将函数说明为返回任何一种合法的C语言数据类型
类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。
第一个函数的类型说明sum()函数返回浮点类型的数据。这个说明使编译程序能够对sum()的调用产生正确代码。函数类型说明语句的一般形式是:type_specifier function_name(;)即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能与调用者所要求的不一致,其结果是难以预料的。如果两者同处于一个文件中,编译程序可以发现该错误并停止编译。如果不在同一个文件中,编译程序无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上述错误。当被说明为整型的函数返回字符时,这个字符值被转换为整数。因为C语言以不加说明的方式进行字符型与整型之间的数据转换,因而多数情况下,返回字符值的函数并不是说明为返回字符值,而是由函数的这种字符型向整型的缺省类型转换隐含实现的。
二、返回语句
返回语句return有两个重要用途。第一,它使得内含它的那个函数立即退出,也就是使程序返回到调用语句处继续进行。第二,它可以用来回送一个数值。本章将说明这两个用途。
(一)从函数返回函数可以用两种方法停止运行并返回到调用程序
第一种是在执行完函数的最后一个语句之后,从概念上讲,是遇到了函数的结束符“}”(当然这个花括号实际上并不会出现在目标码中,但我们可以这样理解)。例如,下面的函数在屏幕上显示一个字符串。
一旦字串显示完毕,函数就没事可做了,这时它返回到被调用处。在实际情况中,没有多少函数是以这种缺省方式终止运行的。因为有时必须送回一个值,大多数函数用return语句终止运行,有时在函数中设立了多个终止点以简化函数、提高效率。切记,一个函数可以有多个返回语句。如下所示,函数在s1、s2相等时返回1,不相等时返回-1。
(二)返回值所有的函数
关键词:传递方式;数据类型;值传递;指针;数组
中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)07-1688-02
The Discussion on Function Parameters Passing in the C Language Teaching
DONG Xin-zheng
(Department of Computer Science and Technology, Zhuhai College of Jilin University, Zhuhai 519041, China)
Abstract:The function parameter-passing modes are usually divided into“value passing”and“address passing”in some textbooks, which brings some difficulty for the beginners to understand. This paper makes a clear distinction between parameter-passing mode and data type, which are two basic concepts related with function parameter passing; analyzes three cases: general data type as function parameters, pointer data type as function parameters and array name as function parameters; gets the summary that“pass-by-value”is the only function parameter-passing mode in C language, the difficulty about data type is to distinct between the pointer data type and non-pointer data type.
Key words:parameter-passing mode; data type; pass-by-value; pointer; array
1概述
函数是C语言程序的基本构成模块,通过使用函数,不仅可以省去重复代码的编写,还可以使程序更加模块化,从而有利于程序的阅读、修改和完善。对于C语言的初学者来说,准确理解函数参数的传递方式是难点之一。一些C语言程序设计教材[1][2]中把函数间的参数传递分为“数值传递”和“地址传递”两种方式,这种分类很容易使初学者混淆概念,更不能抓住参数传递的本质。
2传递方式和数据类型
“值传递”[3]是函数参数的唯一传递方式。函数的参数分为实际参数(简称实参)和形式参数(简称形参),在定义函数时使用的参数叫形参,在调用函数时使用的参数叫实参。实参可以是常量、变量或表达式,但要求它们有确定的值。实参与形参的结合只有一种方式,即“值传递”,把实参的值赋给形参变量。“值传递”具有单向性,只能把实参传给形参,而不能由形参回传给实参。
不同数据类型的函数参数对主调函数中变量的作用有所不同。函数参数可取的数据类型为基本类型、构造类型、指针类型或空类型,如图1[3]所示。空类型表示该函数为无参函数,在此不作介绍。其余数据类型又可分为三类:普通类型,包括基本类型、结构体类型和共用体类型;指针类型;数组类型。函数参数为普通类型时,对函数的调用不用影响到主调函数中变量的值;函数参数为指针类型或数组类型时,对函数的调用可以修改主调函数中有关变量的值。
图1
3普通类型变量作为函数参数
普通变量作为函数参数时,对形参的修改不会影响到实参。如下例所示,通过“值传递”,形参x保存了实参a的值,形参y保存了实参b的值,因为形参和实参是相互独立的不同变量,所以在swap函数中对形参x和y进行的交换不会反映到实参a和b中。
#include
void swap(int x, int y)
{
int temp;
temp=x; x=y; y=temp;
}
void main()
{
int a, b;
scanf("%d%d", &a, &b);
swap(a, b);
printf("%d %d\n", a, b);
}
输入:1 2
输出:1 2
4指针作为函数参数
变量的指针就是变量的地址,存放变量地址的变量叫指针变量,定义指针变量的一般形式为:
基类型*指针变量名;
通过指针变量访问其所指向的变量的方式称为间接访问方式。如下例所示。
int age;
a=10; //直接访问方式
int* p=&a;
*p=11; //间接访问方式
指针类型作为函数参数时,参数传递方式仍然是“值传递”,即把实参的值传递给形参。不同的是参数为指针变量,可以通过形参的间接访问方式来读取或修改主调函数中有关变量的值。
如下例所示,通过“值传递”,形参x保存了变量a的地址,形参y保存了变量b的地址,即x指向变量a,y指向变量b,在swap函数中通过间接访问方式交换了变量a和b的值。
#include
void swap(int* x, int* y)
{
int temp;
temp=*x; *x=*y; *y=temp;
}
void main()
{
int a, b;
scanf("%d%d", &a, &b);
swap(&a, &b);
printf("%d %d\n", a, b);
}
输入:1 2
输出:2 1
5数组名作为函数参数
数组元素和数组名也可以作为函数参数,数组元素作为函数参数与普通变量用法相同,数组名作为函数参数与指针变量相同。
用数组名作函数形参时,指定数组大小是不起任何作用的。因为C语言编译对形参数组大小不做检查,只是将实参数组的首地址传递给形参数组。实参数组名即是实参数组的首地址,相当于指针常量;形参数组名相当于指针变量。实际上,C编译都是将形参数组名作为指针变量来处理的[3]。所以,数组名作为函数参数可以按指针作为函数参数来理解。
如下例所示,数组名array代表数组array的首地址,通过“值传递”,形参数组名a,也可以理解为形参指针变量a,保存了数组array的首地址,因此,在swap函数中对形参数组a的操作即是对实参数组array的操作。
#include
void swap(int a[])
{
int temp;
temp=a[0]; a[0]=a[1]; a[1]=temp;
}
void main()
{
int array[2];
scanf("%d%d", &array[0], &array[1]);
swap(array);
printf("%d %d\n", array[0], array[1]);
}
输入:1 2
输出:2 1
6结论
综上所述,C语言函数参数问题主要涉及两个概念:传递方式和数据类型。实参与形参的传递方式只有一种,即“值传递”。参数的数据类型可以为普通类型、指针类型和数组类型,数组类型实际上是按指针类型来处理的,所以,主要是指针类型与非指针类型的区别。对初学者来说,问题的难点在于数据类型的不同而非传递方式,即指针类型变量与非指针类型变量的区别。
参考文献:
[1]田祥宏.C语言程序设计[M].西安:西安电子科技大学出版社,2007.
关键词:C语言 函数 参数传递
中图分类号:TP312 文献标识码:A 文章编号:1674-098X(2014)11(a)-0135-02
“C语言程序设计”课程是信息类专业的一门非常重要的基础课程,这门课程的主要目的就是让学生以C语言为例了解高级程序设计语言的结构,掌握程序设计的基本思想,具备初步的分析问题和用计算机解决问题的能力。函数是C语言程序设计课程的重点和难点,它体现了模块化程序设计的思想,将一个复杂的问题分解成一个个小而简单的问题,通过解决一个个小问题进而实现大的复杂问题的求解。在函数的教学中,经常会有教师不好教学生学不懂的现象,学生学完函数后,基本概念和结构语法都清楚,但是针对具体的问题就无从下手,教学效果一直不是太好。笔者在多年C语言教学的实践基础上,结合我校学生的具体情况,对函数部分的内容组织和教学方法做了一些探讨。
1 教学内容和安排
函数部分一般按以下内容进行教学。
(1)函数的作用和分类:标准库函数和自定义函数。
(2)函数定义的基本格式:无参函数、有参函数和空函数。
(3)函数的参数传递:值传递和地址传递。
(4)函数的返回值:无返回值、一个返回值和多个返回值。
(5)函数的调用:作为单独语句、作为表达式和作为函数参数。
(6)函数的递归调用和嵌套调用。
(7)函数的声明:声明的位置、格式和省略情况。
(8)变量的作用域:全局变量和局部变量。
(9)变量的存储类型及生存期:自动变量、静态变量、外部变量和寄存器变量。
可以看出,函数部分的内容非常多,而且会有许多新的概念突然介入,有相当一部分教材,以谭浩强教授的《C程序设计》(第四版)为代表,将函数作为单独一章放在选择控制结构和数组之后,把函数相关的上述所有内容都放在这一章中介绍,然后在后续的指针、结构体和文件等章节中又几乎没有函数的踪影,程序的主体仍然放到main()函数中去讲解,笔者认为这样的内容编排结构不利于学生对函数的把握,它会导致函数和其他内容脱节,给学生造成这是专门的一章,不学或学不好对其它内容不会产生多大影响的印象,结果到课程结束时仍然对函数知之甚少,平时也几乎没用函数来编写过程序,导致到了学期末学生在编程时仍然习惯把所有程序都放到一个main()函数中去编写,很少有模块化程序设计的思想,为以后编写复杂程序或者参加团队合作埋下了隐患。
该文作者在讲授函数这一部分时,参考了哈尔滨工业大学苏小红教授的高教版《C语言程序设计》(第二版)的内容编排,把函数提到了数组之前介绍,而且从函数这一章开始,后面几乎所有的程序都是按模块化思想将程序分成一个个小函数,再通过main()函数调用这些函数来实现主体功能,并且在后续内容的讲解中,不断强化学生对函数的把握,强化学生模块化程序设计的思想,学生在学习的过程当中,不断地复习巩固着函数的知识,不断地感受着模块化程序设计的思想,也逐渐养成了用函数设计程序的习惯,实践表明,到学期末的时候,大多数学生都可以写一些简单的函数并通过main()函数调用来进行程序设计。
2 函数的设计思想和设计方法
在进行程序设计时,很多学生感到困惑、难以理解和掌握的是什么时候需要设计函数和该设计什么样的函数,形参和返回值该如何设置。对这个问题,笔者认为在讲解的时候要着重把握几点。
首先,在确定什么时候该设计函数时,需要先对整个程序的过程有个把握,确定程序的主体功能,这样,对需不需要设计函数及对哪些部分可以设计函数就有了较为明确的答案。例如:从键盘上输入一个整数n(n>1且n<10),输出1!+2!+3!+...+n!的值。
对程序进行分析后,可以得出程序主体可以分成两个步骤:
输入一个整数n;
输出1!+2!+3!+...+n!的值。
在第2) 步骤中,由于重复用到了求阶乘的功能,所以如果把求阶乘这部分设计成一个函数,将会对第2) 步的编程起到简化的作用。这样,经过初步分析,可以确定需要设计一个函数,此函数的功能是对给定的一个整数m,求出其阶乘。
函数的功能确定后,接着就可以着手设计函数了。具体到函数设计时,很多学生的疑惑是怎么设计函数的参数和返回值,在这里,笔者建议学生采用“黑匣子”的方法设计函数,即不需要管函数的内部结构,把它看做一个“黑匣子”,只从外部的功能要求来确定函数应该具备什么样的功能,进而确定主函数在调用该函数时需要传递给它什么参数,它在返回主调函数时又需不需要返回值或需要返回几个值。在上个例子中,函数的功能确定是求阶乘,在主函数调用它时需要告诉它对谁求阶乘,即传递给该函数阶乘的阶数m,函数调用结束后,需要m的阶乘返回主调函数,即只需要返回一个值,如图1所示。
由此,我们得出此函数的相关内容:
函数功能:求出整数m的阶乘m!
函数入口参数:一个形参,整形变量m表示阶乘的阶数
函数返回值:一个返回值,返回m!的值
这段信息可以作为注释放在函数的开头以便让其他程序员有足够的信息了解如何使用该函数。然后根据C语言中函数的定义格式可以写出求阶乘函数定义:int fact(int m);考虑到m!的范围,我们可以将其修改定义为:long fact(int m);
至此,函数的第一个难点就解决了。
3 函数的参数传递
在函数需要有多个返回值时,仅仅一个return就很难满足要求了,这里就需要利用指针或全局变量将函数中的多个值传递到主调函数中,这属于函数的参数传递问题。函数的参数传递是函数部分的又一个难点,可以分为值传递和地址传递,因为还关系到指针的应用,学生一时间很难理解和掌握。鉴于这一点,笔者采用形象类比法结合内存空间讲解了值传递和地址传递的区别。
函数在被调用时新开辟了一段内存空间,所有形参和函数内部变量都在这个内存空间中被访问或修改,一旦返回主调函数这段内存空间也就被释放掉,形参的值不会传递给实参,影响到主调函数。即在进行值传递时相当于有一个复制操作,即将实参的值赋给函数空间的形参,这是一个单向传递,因此,对形参的改变不会影响到实参。而地址传递的实质是将主调函数中的某个或多个地址放到被调函数中进行访问,此操作间接访问到了主调函数中的变量,因而影响到了主调函数中的变量值。
上述讲法需要学生建立内存空间的概念,要对程序的存储空间有所认识,相当一部分同学表示难以理解。笔者结合大一学生都学过计算机引论的实际情况,将值传递比喻为将计算机中的某一文件file1.doc拷贝给别人,别人拷走后可以随便修改这个文件的内容,这些修改都不会影响到原来的文件file1.doc。当传递的是地址的时候,即使用指针变量作函数参数时,相当于把机器密码、要修改的文件路径及文件名(如d:\project\file1.doc)告诉了别人,别人在修改时直接针对file1.doc,进行修改后,file1.doc的内容肯定也会发生改变,这就是地址传递。经过这样形象的比喻后,学生多表示容易理解,在写程序时会有意识地考虑需要进行的是值传递还是地址传递,形参该设置成普通变量还是指针变量,教学效果有所改善。
4 结语
实践证明,在笔者进行的函数教学中,相当一部分同学对函数有了形象的认识,更深地理解了模块化程序设计的思想,取得了良好的学习效果。学无止境,教亦无止境。除了以上几点,只函数部分就还有很多可以继续深入挖掘的东西,比如从函数有无参数方面,函数有无返回值或是否有多个返回值方面,变量的存储类型和生存期方面等等,这些都值得我们教师不断地研究不断地探讨。但归根结底,如何让学生容易掌握要点,如何让学生发自内心地喜欢学习、爱上学习并善于主动学习,笔者认为才是教师的最终目的。
参考文献
[1] 苏小红.C语言程序设计[M].2版.高等教育出版社,2013.
[2] 谭浩强.C程序设计[M].4版.清华大学出版社,2011.
【关键词】ICT专业 学术汉语 教学模式
【基金项目】本文的研究受到重庆邮电大学社会科学基金项目支持(K2015-08)和国际化教育教学研究项目支持(GJJY15-2-07)。
【中图分类号】G64 【文献标识码】A 【文章编号】2095-3089(2016)35-0015-02
一、前言
随着我国“一带一路”战略的实施和“留学中国计划”的开展,来华留学生规模不断扩大,留学生结构和层次也开始发生变化[1][2]。目前,重庆邮电大学有来自50多个国家和地区的长期留学生400多人在校学习,其中研究生比例超过50%。随着高水平汉语留学者的出现,越来越多的留学生选择以汉语作为学术研究的工具,部分留学生已在我校开始攻读博士学位,这给传统对外汉语教学带来了新的机遇和挑战。
学术汉语是借鉴ESP(English for Special Purpose,专门用途英语)理论创造的一个术语,其目的是为专业学习服务[2][3]。目前,进入专业学习的重庆邮电大学留学生汉语水平一般要求在HSK4级以上,这一汉语水平的学生在进入到ICT专业课堂学习的时候,面对大量的通信编码、信令、存储器等ICT领域的专业词汇时仍存在大量无法理解的现象。造成这些问题的主要原因包括:(1)缺少具有针对性的学术汉语教材学习。(2)专业术语理解障碍,对专业术语的掌握和理解上缀跷零。(3)不熟悉ICT专业学术汉语文献写作规则,缺少专业汉语教师与学术导师的联合指导。(4)缺乏ICT学术论文文体知识、论文思维,没有经过系统、科学的科研能力培养。
二、留学生教育教学模式探索
形成重视学术汉语教学的意识和氛围。在意识上重视学术汉语教学,突出本、硕、博阶段专业素养的培养和训练,区分留学生学历教育和短期汉语进修学习,围绕计算机、通信领域的汉语学术论文面向留学生举办“读论文、做实验”的科技竞赛活动。
设置相应的课程并加强相关课程研究。制定分阶段的学术汉语课程,从一般汉语教学的高级汉语阶段开始,延伸到本硕博学历教育阶段,帮助留学生顺利衔接到专业学习和研究。通过学习一些基本的专业词汇,掌握基本的句法结构,为学历生以及从事科学研究的汉语学习者进入专业学习、研究阶段打下语言基础。
探索留学生学术汉语导师联合制。在留学生进入汉语学习高级阶段初期、即将进入专业学习的前期,建立留学生学术汉语导师联合制,由对外汉语教师配合留学生的指导教师共同培养学生准确运用汉语进行科学研究的能力。传授用汉语进行学术写作的学术规范知识,训练用汉语进行学术研究的方法,包括搜集资料的方法、开展实验的方法、撰写论文的方法,逐步培养汉语学术思维和科研意识。
三、留学生教育教学实践
为进入专业学习的留学生开设过渡性学术汉语课程和学术能力培养课程。在过渡性课程上,通过讲授计算机导论、通信原理等专业课程的基本词汇、句法,为学生补充专业学习的基础知识,使其掌握如何运用汉语学习专业课程的技能。在学术能力培养课程上,讲授用汉语进行ICT学术写作的学术规范知识、学术研究方法。培养留学生掌握通过软件学报、计算机研究与发展、电子学报等中文学术期刊和知网等学术工具进行资料搜集的方法。培养留学生掌握提出问题、分析问题、解决问题逐层推进的科技写作方法。
传统的教材式的对外汉语教学方法因教材出版周期较长,不能及时反应学术汉语的进展;另一方面,以慕课为主的网络教学资源良莠不齐,词法、句法使用随意,术语准确性差,不适合直接引入校园作为知识进行传授。在课程资源建设上,我校结合学校办学特色、专业特长和留学生专业分布特点,由对外汉语教师、ICT专业教师等组成了专门的课程资源建设团队,借助互联网手段及时获取最新的、权威的学术成果。通过筛选、汇编、整理等环节,严格遵循学术文章中的专业词汇、术语和写作特点,以词汇衔接、语法衔接作为切入点,按照计算机、通信专业设置分类,结合学术汉语教学特点,对资源进行认定、注解,并最终形成教学讲义供学生使用。
四、结语
在来华留学生汉语水平不断提高、学历需求不断提升、专业技能学习目的不断明确的情况下,留学生运用汉语开展科学研究时亟需学术专业教师的指导。本文以重庆邮电大学ICT专业留学生为例,探讨了我校在学术汉语教育教学方面的现状和创新,希望借此吸引更多的学术专业教师关注留学生学术汉语的指导与教学。
参考文献:
[1]单韵鸣.专门用途汉语教材的编写问题――以《科技汉语阅读教程》系列教材为例[J].暨南大学华文学院学报,2008,(2).
[2]高增霞,刘福英.论学术汉语在对外汉语教学中的重要性,云南师范大学学报(对外汉语教学与研究版),2016,14(2).
[3]张明月,科技汉语的文体研究及其在科技汉语教材编写中的应用.南京师范大学,硕士论文.
作者简介: