内容正文:
1
概述
2
函数定义的一般形式
项目四
3
函数的参数和函数的值
4
函数的调用
5
函数的嵌套调用
6
函数的递归调用
8
局部变量和全局变量
7
数组作为函数参数
9
变量的存储类别
任务一
概述
研发实力雄厚,较强的抄袭及超越功力
在C语言中可从不同的角度对函数分类。
(1)从函数定义的角度分:
库函数
用户定义函数
(2)C语言的函数兼有其他语言中的函数和过程两种功能,从这个角度分:
有返回值函数
无返回值函数
(3)从主调函数和被调函数之间数据传送的角度分:
无参函数
有参函数(带参函数)
任务一 概述
(4)C语言提供了极为丰富的库函数,这些库函数又可从功能角度分类:
① 字符类型分类函数
② 转换函数
③ 目录路径函数
④ 诊断函数
⑤ 图形函数
⑥ 输入输出函数
⑦ 接口函数
⑧ 字符串函数
⑨ 内存管理函数
⑩ 数学函数
⑪日期和时间函数
⑫进程控制函数
⑬其他函数
任务一 概述
任务二
函数定义的一般形式
研发实力雄厚,较强的抄袭及超越功力
类型标识符 函数名()
{
声明部分
语句
}
其中类型标识符和函数名称为函数头。类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型, 该类型标识符与前面介绍的各种说明符相同。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。
{}中的内容称为函数体。在函数体中声明部分,是对函数体内部所用到的变量的类型说明。
在很多情况下都不要求无参函数有返回值,此时函数类型符可以写为void。
1. 无参函数的定义形式
任务二 函数定义的一般形式
研发实力雄厚,较强的抄袭及超越功力
类型标识符 函数名(形式参数表列)
{
声明部分
语句
}
2. 有参函数定义的一般形式
任务二 函数定义的一般形式
研发实力雄厚,较强的抄袭及超越功力
【例4-1】
1 int max(int a,int b)
2 {
3 if(a>b)return a;
4 else return b;
5 }
6 main()
7 {
8 int max(int a,int b);
9 int x,y,z;
10 printf("input two numbers: \n");
11 scanf("%d%d",&x,&y);
12 z=max(x,y);
13 printf("maxmum=%d",z);
14}
2. 有参函数定义的一般形式
程序的第1行至第5行为max函数定义。进入主函数后,因为准备调用max函数,故先对max函数进行说明(程序第8行)。函数定义和函数说明并不是一回事,在后面还要专门讨论。从程序可以看出函数说明与函数定义中的函数头部分相同,但是末尾要加分号。程序第12行为调用max函数,并把x、y中的值传送给max的形参a、b。max函数执行的结果(a或b)将返回给变量z,最后由主函数输出z的值。
任务二 函数定义的一般形式
任务三
函数的参数和函数的值
研发实力雄厚,较强的抄袭及超越功力
函数的形参和实参具有以下特点:
(1)形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元,因此形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
(2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值、输入等办法使实参获得确定值。
(3)实参和形参在数量上、类型上、顺序上应严格一致,否则会发生类型不匹配的错误。
(4)函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
一、形式参数和实际参数
任务三 函数的参数和函数的值
【例4-2】
1 main()
2 {
3 int n;
4 printf("input number\n");
5 scanf("%d",&n);
6 s(n);
7 printf("n=%d\n",n);
8 }
9 int s(int n)
10 {
11 int i;
12 for(i=n-1;i>=1;i--)
13 n=n+i;
14 printf("n=%d\n",n);
15 }
本程序中定义了一个函数s,该函数的功能是求∑ni的值。在主函数中输入n值,并作为实参,在调用时传送给s 函数的形参量n( 注意,本例的形参