06-函数-4范例.ppt

C语言程序设计项目教程 语法小结 1、函数与函数定义 从函数定义的角度看,函数可分为库函数(内部函数)和用户定义函数(外部函数)两种。 函数定义的一般格式为: 函数类型 函数名 (形式参数表) { 声明部分 语句部分 // 函数体函数体是由一对花括号“{ }”括起, 它是由变量说明语句和执行语句序列组成的。 } 语法小结 2、函数的调用 C语言中,函数调用的一般形式为: 函数名(实际参数表) 对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。 在C语言中,可以用以下几种方式调用函数: (1)函数表达式,如:z=max(x,y); (2)函数语句; (3)函数实参,如: printf(%d,max(x,y)); 语法小结 3、函数的参数与传递方法 (1)形式参数和实际参数 函数的参数分为形参和实参两种。在函数定义时说明的参数叫形参;在主调函数中,调用函数出现的参数叫实参。 (2)函数的返回值 函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值。函数的值只能通过 return 语句返回主调函数。 return 语句的一般形式为: return 表达式; 或者为: return (表达式); 语法小结 (3)函数调用中参数的传递方法 在函数调用过程中,参数的传递方式有两种:传值传递和传地址传递。 传值传递:所谓的传值传递指的就是形式参数是普通的变量。 传地址传递:所谓的传地址传递指的就是形式参数是数组名或指针变量。 (4)全局变量、局部变量与变量的作用域 在所有函数之外。这种变量称为“全局变量”,全局变量可以被该程序中的所有函数使用。 在函数中定义的变量称为“局部变量”,局部变量只能在说明它的范围内使用。 语法小结 4、函数的嵌套调用与递归调用 C语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。 一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。常用的办法是加条件判断,满足某种条件后就不再作递归调用,然后逐层返回。 传地址传递(数组作为函数参数) 数组可以作为函数的参数使用,进行数据传送。数组用作函数参数有两种形式,一种是把数组元素作为实参使用;一种是把数组名作为函数的形参和实参使用。 1、数组元素作为实参 例:设有两个同样长度的一维数组a[10]、b[10],要将相对应元素比较(即a[i]与b[i]比较),统计a中大于b中对应元素的个数,小于的个数,相等的个数。 1、数组元素作为函数实参 #includestdio.h int large(int x,int y) { int flag; if(xy) flag=1; else if(xy) flag=-1; else flag=0; return(flag); } main() { int a[10],b[10],i,n=0,m=0,k=0; printf(enter array a:\n); for(i=0;i10;i++) scanf(%d,a[i]); printf(\n); printf(enter array b:\n); for(i=0;i10;i++) scanf(%d,b[i]); printf(\n); for(i=0;i10;i++) { if(large(a[i],b[i])==1) n=n+1; else if (large(a[i],b[i])==0) m=m+1; else k=k+1; } printf(a[i]b[i] %d times\n,n); printf(a[i]=b[i] %d times\n,m); printf(a[i]b[i] %d times\n,k); } 2、数组名作实、形参 数组名作为参数传递有如下特点: 直接用数组名作参数时,则为地址传送(不是值传送),即实参数组的首地址传递给形参数组首地址。所以,实参、形参数组共享相同的内存单元。此处在使用上与普通变量作为参数有所不同,正常情况下,形参是改变不了实参的。 数组作为函数参数时候注意以下几点: 形参数组可不指定大小,也可用另一参数作大小,以确定使用实

文档评论(0)

1亿VIP精品文档

相关文档