欢迎来到天天文库
浏览记录
ID:50350912
大小:684.00 KB
页数:12页
时间:2020-03-08
《C语言程序设计 教学课件 作者 孙淑霞 罗奕主编 C语言程序设计(09763)第八章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C语言程序设计孙淑霞罗奕主编第八章函数8.1函数的定义和返回值8.1.1函数的定义函数定义的一般形式如下:函数返回值的类型函数名(类型名形式参数1,类型名形式参数2,…){说明部分/*函数体*/语句部分}例如:intmy_chengfang(intx,intn){inti,j;j=1;for(i=0;i2、例如int、float等。③圆括号():圆括号()是函数定义中必不可少的。④函数的形式参数列表:包含在圆括号中的是函数的形式参数列表,函数的形式参数和数学函数参数的意义类似,用于调用函数时给被调用函数传递数据。如果函数没有参数,括号中可以是空白,或写上void。⑤函数体:由一对花括号{}包含的若干语句,用于实现具体功能。8.1.2函数的返回值return语句的一般形式如下:return(表达式);或return表达式;【例8.1】读程序,说出程序的运行结果。#includeintmax3、(float,float);voidmain(){floatk;printf("max=%f",k=max(7.5,9.3printf("3*max=%f",k=3*max(7.5,9.3));}intmax(floata,floatb){return(a>b?a:b);}程序运行结果如下:max=9.0000003*max=27.0000008.2函数的调用函数调用的一般形式如下:函数名(实在参数表)或函数名()函数调用有两种形式:①调用的函数用于求出某一个值。这时,函数的调用可以作为表达式出4、现在允许表达式出现的地方。如例8.1中的k=max(7.5,9.3)和k=3*max(7.5,9.3)。②调用的函数仅仅是完成某些操作而不返回函数值,这时函数的调用可以作为一条独立的语句。函数调用的语法要求:①调用函数时,函数名必须与被调用函数名相同。②除了返回值类型为int或char外,其他类型的函数必须先定义,后调用。8.3函数的说明除了main()函数外,用户所定义的函数遵循“先定义,后使用”的规则。当把函数的定义放在调用之后,应该在调用之前对函数进行说明(或称为函数原型说明)。在所调用的函数之后5、定义,则在调用函数之前需要对被调用函数进行说明。凡未在调用前定义的函数,C编译程序都将函数默认为int类型。函数说明的一般形式如下:类型名函数名(参数类型1,参数类型2,…);或者类型名函数名(参数类型1参数名1,参数类型2参数名2,…);8.4调用函数和被调用函数之间的参数传递函数的调用分为传值调用和传址调用。传值调用和传址调用是根据参数传递的是“值”还是“地址”确定的。8.4.1传值调用实参必须要有确定的值。调用函数时系统先计算实参的值,再将该值复制给对应的形参。当变量作为参数时,形参变量值的改变不6、会影响实参变量的值。8.4.2指针变量作为形参的函数调用通过指针变量可以改变指针所指变量的值,并且多个指针可以指向同一个变量,也就是说可以通过多个指针变量去改变同一个变量的值。8.4.3一维数组作为函数的实参数组元素和变量一样,都代表内存中的一个存储单元,所以数组元素也可以作为实参传给形参,其原理和变量作为实参是一样的。数组名也可以作为实参传递,由于数组名是一个地址值,因此对应的形参就应该是一个指针变量8.4.4二维数组名作为函数的实参二维数组名作为函数的实参时,相应的形参可以是与实参类型相同的二维数组7、或者行指针。当形参为二维数组时,可省略第一维(行)的大小说明,但不能省略第二维(列)的大小说明。8.5函数的递归调用C程序中的函数还可以直接或间接地自己调用自己,即递归调用。【例8.7】一个无限调用的递归函数。#includevoidfun(charx){printf("%c",x);fun(x);}intmain(void){fun('a');printf("funover!");getch();return0;}递归调用可以采用如下3个方法:①用条件语句控制是否递归调用自己8、。上面的程序将fun()函数中递归调用的代码加上if语句如下:if(x<'z')fun(x+1);/*递归调用时,要改变传递给函数的参数*/当条件成立时就递归调用,否则不递归调用,这样就避免了无限的递归调用。②递归调用自己时,传递的参数应该变化voidfun(charx){printf("%c",x);if(x<'z')fun(x+1);/*递归调用时,要改变传递给函数的参数*/}③控制好初次调用时传给函数的参数值,由于参数的变化是向着if
2、例如int、float等。③圆括号():圆括号()是函数定义中必不可少的。④函数的形式参数列表:包含在圆括号中的是函数的形式参数列表,函数的形式参数和数学函数参数的意义类似,用于调用函数时给被调用函数传递数据。如果函数没有参数,括号中可以是空白,或写上void。⑤函数体:由一对花括号{}包含的若干语句,用于实现具体功能。8.1.2函数的返回值return语句的一般形式如下:return(表达式);或return表达式;【例8.1】读程序,说出程序的运行结果。#includeintmax
3、(float,float);voidmain(){floatk;printf("max=%f",k=max(7.5,9.3printf("3*max=%f",k=3*max(7.5,9.3));}intmax(floata,floatb){return(a>b?a:b);}程序运行结果如下:max=9.0000003*max=27.0000008.2函数的调用函数调用的一般形式如下:函数名(实在参数表)或函数名()函数调用有两种形式:①调用的函数用于求出某一个值。这时,函数的调用可以作为表达式出
4、现在允许表达式出现的地方。如例8.1中的k=max(7.5,9.3)和k=3*max(7.5,9.3)。②调用的函数仅仅是完成某些操作而不返回函数值,这时函数的调用可以作为一条独立的语句。函数调用的语法要求:①调用函数时,函数名必须与被调用函数名相同。②除了返回值类型为int或char外,其他类型的函数必须先定义,后调用。8.3函数的说明除了main()函数外,用户所定义的函数遵循“先定义,后使用”的规则。当把函数的定义放在调用之后,应该在调用之前对函数进行说明(或称为函数原型说明)。在所调用的函数之后
5、定义,则在调用函数之前需要对被调用函数进行说明。凡未在调用前定义的函数,C编译程序都将函数默认为int类型。函数说明的一般形式如下:类型名函数名(参数类型1,参数类型2,…);或者类型名函数名(参数类型1参数名1,参数类型2参数名2,…);8.4调用函数和被调用函数之间的参数传递函数的调用分为传值调用和传址调用。传值调用和传址调用是根据参数传递的是“值”还是“地址”确定的。8.4.1传值调用实参必须要有确定的值。调用函数时系统先计算实参的值,再将该值复制给对应的形参。当变量作为参数时,形参变量值的改变不
6、会影响实参变量的值。8.4.2指针变量作为形参的函数调用通过指针变量可以改变指针所指变量的值,并且多个指针可以指向同一个变量,也就是说可以通过多个指针变量去改变同一个变量的值。8.4.3一维数组作为函数的实参数组元素和变量一样,都代表内存中的一个存储单元,所以数组元素也可以作为实参传给形参,其原理和变量作为实参是一样的。数组名也可以作为实参传递,由于数组名是一个地址值,因此对应的形参就应该是一个指针变量8.4.4二维数组名作为函数的实参二维数组名作为函数的实参时,相应的形参可以是与实参类型相同的二维数组
7、或者行指针。当形参为二维数组时,可省略第一维(行)的大小说明,但不能省略第二维(列)的大小说明。8.5函数的递归调用C程序中的函数还可以直接或间接地自己调用自己,即递归调用。【例8.7】一个无限调用的递归函数。#includevoidfun(charx){printf("%c",x);fun(x);}intmain(void){fun('a');printf("funover!");getch();return0;}递归调用可以采用如下3个方法:①用条件语句控制是否递归调用自己
8、。上面的程序将fun()函数中递归调用的代码加上if语句如下:if(x<'z')fun(x+1);/*递归调用时,要改变传递给函数的参数*/当条件成立时就递归调用,否则不递归调用,这样就避免了无限的递归调用。②递归调用自己时,传递的参数应该变化voidfun(charx){printf("%c",x);if(x<'z')fun(x+1);/*递归调用时,要改变传递给函数的参数*/}③控制好初次调用时传给函数的参数值,由于参数的变化是向着if
此文档下载收益归作者所有