大学计算机C语言函数(1 函数的定义和使用)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
调用f2函数
调用f1函数
23
例10:函数的递归调用
有3个人坐在一起,问第3个人多少岁?他说比第2个人大2 岁。问第2个人多少岁?他说比第1个人大2岁。最后问第1个人, 他说是10岁。请问第3个人多大? 分析: age(3)=age(2)+2; age(2)=age(1)+2; age(1)=10; 归纳:
无返回值时(即函数功能是完成某种操作或处理)
函数名(实参表列);
例如:以表达式语句形式调用函数 如 display(a, b);
10
#include <stdio.h>
int Average(int x, int y) { int result; result = (x + y) / 2; return result; } int main(void) { int a = 12; int b = 24; int ave;
5
2、有参函数的定义
函数返回值类型 函数名(数据类型 参数1, 数据类型 参数2, …)
{ 函数体
}
说明:
• 函数返回值类型、函数名、函数体的含义与无参函数相同;
•形式参数的格式如:数据类型 形式参数1 形式参数(简称形参)必须单个独立定义,形参是用来 接收函数被调用时对应实际参数传递的值或地址的,因此形参 只能是变量,形参的存储空间是函数被调用时临时分配的动态 空间、用完即释放(不能永久存储数据)。
double Fac(int n) { int i; double p = 1.0;
for (i = 1; i < n; i++) { p *= i; } return p; }
12
int main(void) { int i, m; double sum = 0;
printf (“Please input m data:”); scanf(“%d”, &m); for (i = 1; i <= m; i++) { sum += Fac(i); } printf(“Sum=%.0f\n”, sum);
函数定义
int main(void) 函数调用 { int a = 12; int b = 24; int ave = Average(a, b); printf("Average of %d and %d is %d.\n", a, b, ave); }
return 0;
19
例 8:函数的原型声明(先调用后定义)
16
五、函数原型声明(prototype)
1、为什么要声明函数原型? 函数应该先定义,然后才能调用。但是,如果函 数的调用出现在函数的定义之前,就必须对被向前 调用的函数进行函数原型声明,否则就会出现函数 调用错误。 2、声明格式: 函数类型 函数名(类型名1 形参数1,„); 或 函数类型 函数名(类型名1,类型名2,„);
Βιβλιοθήκη Baidu
形参为整形变量x和y
int main(void) { int a1 = 12, b1 = 36, a2 = 24, b2 = 46, a3 = 5, b3 = 25; int ave1, ave2, ave3;;
变量a1和b1为实际参数 ave1 = Average(a1, b1); ave2 = Average(a2, b2); ave3 = Average(a3, b3); printf("Average of %d and %d is %d.\n", a1, b1, ave1); printf("Average of %d and %d is %d.\n", a2, b2, ave2); printf("Average of %d and %d is %d.\n", a3, b3, ave3);
注意:如果函数严格遵循先定义后调用原则就无需进行函数 原型声明。
17
例6:函数原型声明(先调用后定义函数)
#include <stdio.h> double Fac(int n); int main(void) { … f1 = Fac(m); … } double Fac(int n) { …. }
理解函数的调用 参数的传递
ave = Average(a, b); printf("Average of %d and %d is %d.\n", a, b, ave); return 0; }
11
例3:定义求n!函数,然后调用该函数求 sum=1!+2!+3!+…m!的值。
#include <stdio.h>
该程序的 输出是什 么?
}
14
例5:定义求素数的函数,然后调用该函数求100
到200之间的所有素数。
#include <stdio.h> #include <math.h> int Prim(int x) { int i, j, k; k = (int)sqrt(i); for ( j = 2; j <= k; j++) { if ( i % j == 0) { break; } }
return 0; }
8
四、函数的调用
1、函数调用的一般形式:
函数名(实在参数表) 其中: 形参(形式参数)定义函数时在函数名后括号中声明的 参数;实参( 实际参数 )在主调函数中调用函数时函数名后 面括号中的参数(或表达式); 调用函数时实参的个数、顺序、类型必须与形参一一对
应(赋值相容);实参可是常量、变量、函数或表达式;
}
int main(void) { int a = 45, b = 78, c = 99, d, e; d = max(a, b); printf("max1 = %d\n", d); printf("max2 = %d\n", max(a, b)); e = c - max(a, b); printf("e = %d\n", e); printf("max3 = %d\n", max(max(a, b), c)); return 0;
21
例9:函数的嵌套调用
#include <stdio.h> float b (float m) { float n; n = m * 10; return (n); } float add (float x, float y) { float z; z = b(x) + y; return (z); } int main(void) { float a = 1.2, b = 3.4, c; c = add(a, b); printf (“c = %f\n”, c); return 0; }
2
二、函数的分类
(一)从用户的角度分 1.标准函数,即库函数
ANSI C预先定义的用户可直接使用的函数;使用库函数 时,必须用#include把该函数所在的头文件包含进来。
2.用户自定义函数 是用户为了解决各种应用问题而自行设计的函 数。用户自定义函数必须先定义后使用! (二)从形式上分 1.无参函数:
main
add 函数
b函数
调用add 函数
调用b 函数
结束
22
七、函数的递归调用
在调用一个函数的过程中,出现直接或间接地调用该 函数本身,称为函数的递归调用。 f函数 int f(int x) { int y, z; 调用f函数 z = f(y); return (2 * z); } f1函数 f2函数
函数调用时实参和形参是采用单向值传递形式即将实参 的数值或地址单向传给对应的形参。
9
2、具体调用形式
有返回值时(即函数功能为某种计算功能)
返回值 = 函数名(实参表列);
例如:以赋值语句形式调用函数 如 c = max(a,b); 例如:作为另一个函数的参数形式调用函数 如 c = max(max(a, b), c); printf("%d\n", max(a, b));
15
if ( j >= k + 1) { return 1; } else { return 0; }
} int main(void) { int i; for (i = 100; i <= 200; i++) { if ( Prim(i) ) { printf(“%d, ”, i); } } return 0 ; }
20
六、函数的嵌套调用
在调用一个函数的过程中,又调用其他的函数,称为 函数的嵌套调用。 以下为函数调用与调用返回过程: int main() a 函数 ③ { { ① ② … b(); … a(); … ⑥ … ⑦ ⑤ return; return 0; } } b函数 { … ④ … return; }
return 0;
}
13
#include <stdio.h> int max ( int x, int y ) { int z;
if (x > y) { z = x; } else { z = y; } return (z);
例4:函数定义与调用
max1 = 78 max2 = 78 e = 21 max3 = 99
例1:无参函数的定义。
#include<stdio.h> void PrintMessage (void) { printf("\t*******************\n"); printf("\t Programming is fun.\n"); printf("\t*******************\n"); } int main(void) { PrintMessage ( ); PrintMessage ( ); PrintMessage ( ); return 0; }
即无形式参数的函数。 如:getchar()
2.有参函数
即带有形式参数的函数 如:putchar(ch)、sqrt(x)„
3
三、函数的定义
1、 无参函数的定义
函数返回值类型 函数名( void )
{
函数体 } 其中:函数返回值类型表示函数的返回结果值类型,函数只能 有一个返回值,若函数无返回值即用void声明;返回函数值需 使用:return 变量|表达式; 函数名由用户按标识符的命名规则自行给定,但不能与 标准函数同名; 圆括号中的关键字void表示函数无形式参数; 函数体是由实现函数功能必需的语句组成。 4
#include <stdio.h>
int Average(int x, int y);
/*声明Average()函数*/
int main(void) { int a = 12; int b = 24; int ave = Average(a, b); printf("Average of %d and %d is %d.\n", a, b, ave); return 0; } int Average(int x, int y) { int result; result = (x + y) / 2; return result; }
函数Fac的原型声明
先调用函数Fac
函数Fac的定义出现在调用之后
18
例7:以下函数为先定义后调用,不用声明原型
#include <stdio.h>
int Average(int x, int y) { int result; result = (x + y) / 2; return result; }
6
例2:定义有参函数计算两个整数的平均。
int { Average(int x, int y)
int result; 函数首部
result = (x + y) / 2;
return } result;
函数体
7
#include <stdio.h> int Average(int x, int y) { int result; result = (x + y) / 2; return result; }
第5 章
5.1 5.2 5.3 5.4 5.5 5.6
函 数
程序设计的艺术 函数的定义和使用 数组作函数参数 变量的作用域 变量的存储类别 预处理指令
1
5.1 程序设计的艺术 (略) 5.2 函数的定义和使用 一、函数的概念
函数是形式上独立、功能上完整的程序段(块)。 在C程序设计中常将一些常用功能模块编写成函数。函 数可以完成特定的计算或操作处理功能。 C程序由函数组成;函数在形式上是平行的,不允 许嵌套定义;C程序只执行主函数,子函数必须通过主 函数或其他子函数的调用才能被执行;子函数不能调 用主函数。实质上,设计程序就是设计函数。