c语言函数的定义ppt,大学计算机C语言函数(1函数的定义和使用).ppt

《大学计算机C语言函数(1函数的定义和使用).ppt》由会员分享,可在线阅读,更多相关《大学计算机C语言函数(1函数的定义和使用).ppt(28页珍藏版)》请在装配图网上搜索。

1、第5章 函 数,5.1 程序设计的艺术 5.2 函数的定义和使用 5.3 数组作函数参数 5.4 变量的作用域 5.5 变量的存储类别 5.6 预处理指令,一、函数的概念 函数是形式上独立、功能上完整的程序段(块)。在C程序设计中常将一些常用功能模块编写成函数。函数可以完成特定的计算或操作处理功能。 C程序由函数组成;函数在形式上是平行的,不允许嵌套定义;C程序只执行主函数,子函数必须通过主函数或其他子函数的调用才能被执行;子函数不能调用主函数。实质上,设计程序就是设计函数。,5.1 程序设计的艺术 (略) 5.2 函数的定义和使用,二、函数的分类 (一)从用户的角度分 1.标准函数,即库函数。

2、 ANSI C预先定义的用户可直接使用的函数;使用库函数时,必须用#include把该函数所在的头文件包含进来。 2.用户自定义函数 是用户为了解决各种应用问题而自行设计的函数。用户自定义函数必须先定义后使用! (二)从形式上分 1.无参函数: 即无形式参数的函数。 如:getchar() 2.有参函数 即带有形式参数的函数 如:putchar(ch)、sqrt(x),三、函数的定义 1、 无参函数的定义 函数返回值类型 函数名( void ) 函数体 其中:函数返回值类型表示函数的返回结果值类型,函数只能有一个返回值,若函数无返回值即用void声明;返回函数值需使用:return 变量|表达。

3、式; 函数名由用户按标识符的命名规则自行给定,但不能与标准函数同名; 圆括号中的关键字void表示函数无形式参数; 函数体是由实现函数功能必需的语句组成。,例1:无参函数的定义。 #include void PrintMessage (void) printf(t*n); printf(t Programming is fun.n); printf(t*n); int main(void) PrintMessage ( ); PrintMessage ( ); PrintMessage ( ); return 0; ,函数返回值类型 函数名(数据类型 参数1, 数据类型 参数2, )函数体 说。

4、明: 函数返回值类型、函数名、函数体的含义与无参函数相同; 形式参数的格式如:数据类型 形式参数1 形式参数(简称形参)必须单个独立定义,形参是用来接收函数被调用时对应实际参数传递的值或地址的,因此形参只能是变量,形参的存储空间是函数被调用时临时分配的动态空间、用完即释放(不能永久存储数据)。,2、有参函数的定义,int Average(int x, int y) int result; result = (x + y) / 2; return result; ,函数首部,例2:定义有参函数计算两个整数的平均。,#include int Average(int x, int y) int re。

5、sult; result = (x + y) / 2; return result; int main(void) int a1 = 12, b1 = 36, a2 = 24, b2 = 46, a3 = 5, b3 = 25; int ave1, ave2, ave3; 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。

6、, b2, ave2); printf(Average of %d and %d is %d.n, a3, b3, ave3); return 0; ,形参为整形变量x和y,变量a1和b1为实际参数,1、函数调用的一般形式: 函数名(实在参数表) 其中: 形参(形式参数)定义函数时在函数名后括号中声明的参数;实参( 实际参数 )在主调函数中调用函数时函数名后面括号中的参数(或表达式); 调用函数时实参的个数、顺序、类型必须与形参一一对应(赋值相容);实参可是常量、变量、函数或表达式; 函数调用时实参和形参是采用单向值传递形式即将实参的数值或地址单向传给对应的形参。,四、函数的调用,有返回值时(。

7、即函数功能为某种计算功能),例如:以赋值语句形式调用函数 如 c = max(a,b);,例如:作为另一个函数的参数形式调用函数 如 c = max(max(a, b), c); printf(%dn, max(a, b);,无返回值时(即函数功能是完成某种操作或处理),例如:以表达式语句形式调用函数 如 display(a, b);,2、具体调用形式,理解函数的调用参数的传递,int main(void) int a = 12; int b = 24; int ave; ave = Average(a, b); printf(Average of %d and %d is %d.n, a, 。

8、b, ave); return 0; ,#include int Average(int x, int y) int result; result = (x + y) / 2; return result; ,例3:定义求n!函数,然后调用该函数求sum=1!+2!+3!+m!的值。,#include double Fac(int n) int i; double p = 1.0; for (i = 1; i n; i+) p *= i; return p; ,int main(void) int i, m; double sum = 0; printf (“Please input m da。

9、ta:”); scanf(“%d”, ,#include int max ( int x, int y ) int z; if (x y) z = x; else z = y; return (z); int main(void) int a = 45, b = 78, c = 99, d, e; d = max(a, b); printf(max1 = %dn, d); printf(max2 = %dn, max(a, b); e = c - max(a, b); printf(e = %dn, e); printf(max3 = %dn, max(max(a, b), c); retur。

10、n 0; ,例4:函数定义与调用,max1 = 78 max2 = 78 e = 21 max3 = 99,该程序的输出是什么?,例5:定义求素数的函数,然后调用该函数求100到200之间的所有素数。,#include #include int Prim(int x) int i, j, k; k = (int)sqrt(i); for ( j = 2; j = k; j+) if ( i % j = 0) break; ,if ( j = k + 1) return 1; else return 0; int main(void) int i; for (i = 100; i = 200; 。

11、i+) if ( Prim(i) ) printf(“%d, ”, i); return 0 ; ,五、函数原型声明(prototype),1、为什么要声明函数原型? 函数应该先定义,然后才能调用。但是,如果函数的调用出现在函数的定义之前,就必须对被向前调用的函数进行函数原型声明,否则就会出现函数调用错误。 2、声明格式: 函数类型 函数名(类型名1 形参数1,); 或 函数类型 函数名(类型名1,类型名2,); 注意:如果函数严格遵循先定义后调用原则就无需进行函数原型声明。,例6:函数原型声明(先调用后定义函数) #include double Fac(int n); int main(vo。

12、id) f1 = Fac(m); double Fac(int n) . ,函数Fac的原型声明,先调用函数Fac,函数Fac的定义出现在调用之后,#include 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 = Average(a, b); printf(Average of %d and %d is %d.n, a, b, ave); return 0; ,函数定义,函数调用,例7:以下函数为。

13、先定义后调用,不用声明原型,#include 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; ,例 8:函数的原型声明(先调用后定义),int main() a(。

14、); return 0; ,a 函数 b(); return; ,b函数 return; ,六、函数的嵌套调用,在调用一个函数的过程中,又调用其他的函数,称为函数的嵌套调用。 以下为函数调用与调用返回过程:,例9:函数的嵌套调用,#include 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); prin。

15、tf (“c = %fn”, c); return 0; ,七、函数的递归调用,在调用一个函数的过程中,出现直接或间接地调用该函数本身,称为函数的递归调用。 int f(int x) int y, z; z = f(y); return (2 * z); ,例10:函数的递归调用,有3个人坐在一起,问第3个人多少岁?他说比第2个人大2岁。问第2个人多少岁?他说比第1个人大2岁。最后问第1个人,他说是10岁。请问第3个人多大? 分析: age(3)=age(2)+2; age(2)=age(1)+2; age(1)=10; 归纳: n=1 age(n)=10 n1 age(n)=age(n-1)。

16、+2,程序如下: #include int age(int n) int c; if (n = 1) c = 10; else if (n 1) c = age(n - 1) + 2; return c; int main(void) printf(“%d”, age(3); return 0; ,程序执行过程如下: int main(void) printf(“%d”, age(3); int age(3) int c; c = age(2) + 2; return c; int age(2) int c; c = age(1) + 2; return c; ,int age(1) int 。

17、c; c = 10; return c; ,课堂习题,#include void func1(int i);void func2(int i);char st = hello,friend!; void func1(int i) printf(%c, sti); if (i 3) i += 2; func2(i); ,void func2(int i) printf(%c, sti); if (i 3) i += 2; func1(i); int main(void) int i = 0; func1(i); return 0; ,A) helloB) helC) hloD) hlm,1下列程。

18、序执行后的输出结果是( ),2有如下程序: #include int func(int a, int b) return (a+b); int main(void) int x = 2, y = 5, z = 8, r ; r = func( func(x, y), z); printf(“%dn”, r);return 0; 该程序的输出的结果是( )。 A) 12B) 13C) 14D) 15,3下面程序的输出结果是( )。 #include int f(int a, int b); int main(void) int i = 2, p; p = f( i, i + 1 ); printf( “%d”, p); return 0; int f( int a, int b) int c; if (a b) c = 1; else if (a = b) c = 0; else c = -1; return c; A) 1B) 0C) 1D) 2。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值