文档介绍:函数?函数的定义,函数参数和函数的值?函数的调用(嵌套、递归)?全局变量、局部变量、动态存储变量和静态存储变量2016-10-18-§ 概述?C是模块化程序设计语言?C语言由函数构成,但C以源程序为单位进行编译?程序执行由main函数开始,调用其他函数后回到main函数,在main函数中结束整个程序的运行,main函数是系统定义的,任何一个程序都必须有且只有一个main函数,main函数的位置不受限制2016-10-18-?( ) { 声明部分语句}(形式参数表列) { 声明部分语句}例:print_message( ){ printf(" How do you do! \n);}int max(int x,int y){int z; z=x>y?x:y;return (z);}2016-10-18-”空函数”的定义类型标识符函数名( ) { }:现代的和传统的例:dummy() { }现代风格:int max(int x,int y) {…… }传统风格int max(x,y)int x,y; {……. }例如:有参函数(现代风格)int max(int x, y){ int z; z=x>y?x:y; return(z);}?2016-10-18-?函数分类?从用户角度?标准函数(库函数):由系统提供?用户自定义函数?从函数形式?无参函数?有参函数使用库函数应注意:?函数参数的数目和顺序,及各参数意义和类型?函数返回值意义和类型?需要使用的包含文件2016-10-18-§ 函数参数和函数的值?形参和实参main(){int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b);/*a,b为实际参数*/ printf("Max is %d",c);}int max(int x,int y) /*x,y为形式参数*/{int z; z=x>y?x:y; return(z);}?形参:定义函数时,函数名后面括弧中的变量名?实参:主调函数中调用一个函数时,函数名后面括弧中的参数2016-10-18-?说明:?形参在调用时才分配内存单元,调用结束后释放(内存中实参和形参占不同的单元)?实参与形参的数据传递为“值传递”,即单向传递,由实参传递给形参,但不能由形参传递给实参?实参与形参的类型要求相同或赋值兼容?实参要求有确定的值2016-10-18-例题8-1main( ) { int a,b ;a=7 ;b=11;swap(a,b) ;printf(“%d,%d\n”,a,b) ;} swap(int x,int y) { int t ;t=x ;x=y ;y=t ;}实参形参711a:b:调用前:调用结束:711a:b:tswap:711a:b:117x:y:调用:711x:y:11a:b:72016-10-18-?函数调用过程:,,,继续运行…2016-10-18-?函数的返回值?形式:return(表达式);或return 表达式;?功能:将被调用函数中的一个确定值带回主调函数中?说明:?函数的类型就是返回值的类型,如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准.?如果没有return,函数将带回一个无用的值(不确定的)?void型(空类型)