C语言函数详解PPT格式课件下载.ppt
《C语言函数详解PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《C语言函数详解PPT格式课件下载.ppt(54页珍藏版)》请在冰豆网上搜索。
出现在表达式中,即作为表达式的一部分参与运算。
计算y=x2.5+1.3,则通过以下语句调用来实现。
y=pow(x,2.5)+1.3;
其二:
独立的语句,即调用函数后加一分号。
printf(*n);
4、调用库函数时,要注意参数的一些特殊要求。
如三角函数要求自变量参数用弧度表示,开平方函数要求自变量参数的值大于或等于0。
使用库函数应注意的问题(续)6函数返回值的类型缺省int型无返回值:
void函数体函数类型函数名(形参类型说明表)声明部分语句部分例有参函数(现代风格)intmax(intx,inty)intz;
z=xy?
x:
y;
return(z);
例有参函数(现代风格)intmax(intx,y)intz;
例无参函数voidprintstar()printf(*n);
或voidprintstar(void)printf(*n);
7.2函数的定义和返回值1.函数定义的一般格式例空函数voiddummy(void)函数体为空现代风格:
多个形参说明之间要用逗号隔开没有形参时,这一对括号不能省略合法标识符7函数类型函数名(形参表)形参类型说明声明部分语句部分传统风格:
例有参函数(传统风格)intmax(x,y)intx,y;
intz;
传统风格:
8intmax2(intx,inty)/*现代风格*/intmax;
if(xy)max=x;
elsemax=y;
printf(max(max2)=%dn,max);
return(max);
voidmain()inta,b,max;
scanf(%d,%d,&
a,&
b);
max=max2(a,b)+100;
printf(max(main)=%dn,max);
例函数的定义形参形参和和函数体中定义函数体中定义的变量的变量只在函数被调只在函数被调用时才用时才临时分配存储临时分配存储单元单元,当,当退出退出函数时,函数时,这些存储单元这些存储单元全部被全部被释放释放(称为局部性,称为局部性,因而与其它函数中的因而与其它函数中的变量同名不会引起混变量同名不会引起混淆)。
淆)。
9函数与函数之间是平等的voidmain()intmax2(intx,inty)intz;
if(xy)z=x;
elsez=y;
inta,b,max;
max=max2(a,b);
printf(max=%dn,max);
函数的定函数的定义是平行的是平行的,不能在一个函数的内部再定不能在一个函数的内部再定义其它其它函数。
即每个函函数。
即每个函数数都都是一个相是一个相对独立的模独立的模块,不能在写某一个函数,不能在写某一个函数时又包含了另一个函数又包含了另一个函数的定的定义(mainmain函数的执行时有一点点小的特权!
函数的执行时有一点点小的特权!
)。
10返回语句v形式return(表达式);
或return表达式;
或return;
v功能:
使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数v说明:
l函数中可以有多个return语句,但只有其中的一个return语句能够得到执行l若函数中没有return语句,或者是一个不带表达式的return语句,则该函数结束时自动返回调用函数一个不确定的值l若函数类型与return语句中表达式值的类型不一致,按前者为准,自动转换-函数调用转换lvoid型函数:
明确说明函数没有返回值2.函数的返回值11intmax(floatx,floaty)floatz;
main()floata,b;
scanf(%f,%f,&
printf(Maxis%dn,max(a,b);
例函数返回值类型转换12main()inta,b,max;
intmax2(intx,inty)intz;
if(xy)returnx;
elsereturny;
例函数可以有多个return语句注意:
注意:
在在CC语言中,函数名不言中,函数名不能被能被赋值,只能通过只能通过return语句返回一个值。
intmax2(intx,inty)max2=xy?
13printstar()printf(*n);
main()inta;
a=printstar();
printf(a=%dn,a);
输出:
a=10voidprintstar()printf(*n);
printf(a=%d,a);
编译错误!
例函数带回不确定值14说明:
(1)调用函数时,其名字必须与定义的名字相同。
(2)函数调用时的实参只写名字不需要在名字前再带实参类型。
如上面main函数中对max2函数的调用不能写成:
max=max2(inta,intb);
7.3函数的调用1.函数调用的一般形式:
函数名(实参表)实参可以是常量、变量或表达式,多于一个时,以逗号隔开。
若函数定义时无形参,则调用时无实参,但一对括号不能少。
15(3)实参与形参,个数应一致。
若实参少,则必有形参未得到值(不确定值),影响结果。
若实参多,则多余的无效(TC)。
c=max2(3);
则c的值为:
761(随机值)若:
c=max2(3,5,8);
5(4)实参与形参的类型应一一对应相匹配。
若不匹配,程序仍能运行,但得不出正确结果(TC)。
c=max(3.0,5.0);
0若:
c=max(3L,5L);
3函数的调用(续)16(5)函数必须先定义,后调用。
将要被调用的函数定义在前,调用在后。
返回值类型为int或char的函数可例外。
(6)函数可直接或间接地自己调用自己(递归调用,在7.6节介绍)(7)实参表求值顺序,因系统而定(TurboC自右向左)#includestdio.hvoidmain()intp=2;
printf(%d,%d,%dn,p,+p,p);
/*TC:
3,3,2VC:
3,3,2*/#includestdio.hvoidmain()intp=2;
printf(%d,%d,%dn,p,p+,p);
3,2,2VC:
2,2,2*/函数的调用(续)172.函数调用的方式1.函数表达式:
例m=max(a,b)*2;
2.函数语句:
例printstar();
printf(Hello,World!
n);
3.函数参数:
例printf(%d,max(a,b);
m=max(a,max(b,c);
18C语言对被调用函数要求:
l必须是已存在的函数库函数:
#include用户自定义函数:
函数声明7.4函数的声明在C语言中,除了主函数外,对于用户定义的函数要遵循“先定义,后使用”的规则。
凡是未在调用之前定义的函数,C编译程序默认函数的返回值为int类型。
对于返回值为其它类型的函数,若把函数的定义放在调用之后,应该在调用之前对函数进行声明(或称为函数原型声明,有的也称函数说明)。
191.函数声明一般形式函数类型函数名(形参类型形参名,.);
函数类型函数名();
或main()floata,b,c;
floatmax2(floatx,floaty);
/*函数的说明*/scanf(%f%f,&
c=max2(a,b);
/*函数的调用*/printf(%fn,c);
floatmax2(floatx,floaty)/*以下为函数的定义*/floatz;
return(y);
例如:
函数声明的作用:
告诉编译系统max2函数是float类型的、有2个float类型的参数。
可选在VC中不允许20说明
(1)函数声明可以是一个独立的语句;
如上面例子中就是采用独立语句的形式。
(2)函数声明中的形参名是一种虚设,它们可以是任意的用户标识符,既不必与函数首部中的形参名一致,又可以与程序中的任意用户标识符同名。
因此,参数名也可以省略。
如上面的例子中函数声明可写成:
floatmax2(float,float);
(3)注意函数定义与函数声明是不同的,定义是写出函数的完整形式,而声明是告诉系统此函数的返回值类型、参数的个数与类型,便于编译时进行有效的类型检查。
21说明(续)(4)若函数的返回值类型为int或char,则可以不进行函数声明(系统默认)。
但是使用这种方法时,系统无法对参数的类型做检查。
若调用函数时参数使用不当,在编译时也不会报错。
因此,为了程序清晰和安全,建议都进行声明。
(5)若被调函数的定义出现在主调函数之前,也可以不进行函数声明。
(6)有些系统(如BorlandC+、VC+等)要求一定要用函数声明指出函数类型和形参类型,并且对void和int型函数也要进行函数声明。
22main()inta,b,c;
scanf(“%f%f”,&
/*函数的调用*/printf(“%fn”,c);
intmax2(intx,inty)/*以下为函数的定义*/intz;
int型函数可不作函数说明(BorlandC+不行)floatmax2(floatx,floaty)/*以下为函数的定义*/floatz;
main()floata,b,c;
被调函数出现在主调函数之前,不必函数说明main()floatadd(float,float);
/*functiondeclaration*/floata,b,c;
c=add(a,b);
printf(sumis%f,c);
floatadd(floatx,floaty)floatz;
z=x+y;
也可写成:
floatadd();
例函数声明举例232.函数声明的位置
(1)放在调用函数的声明部分(只有此调用函数能识别被调用函数)。
可以是独立语句,也可与其它变量的定义放在同一个语句中。
如上面的用法也可以如下形式的语句:
floata,b,c,max2(float,float);
(2)放在所有函数的外部,被调用之前。
(此时函数声明的后面所有位置上都可对该函数进行调用)。
24floatmax2(float,float);