C语言课件第8章 函数.ppt
《C语言课件第8章 函数.ppt》由会员分享,可在线阅读,更多相关《C语言课件第8章 函数.ppt(61页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第8章 函数主要内容:主要内容:主要内容:主要内容:1 1、函数的定义、函数的定义2 2、函数的调用(包括嵌套调用和递归调用)、函数的调用(包括嵌套调用和递归调用)4 4、局部变量和全局变量、局部变量和全局变量5 5、变量的存储类别、变量的存储类别 重点重点重点重点:1)1)如何定义函数(即如何编写函数)如何定义函数(即如何编写函数)2)2)如何调用函数(包括库函数和自定义函如何调用函数(包括库函数和自定义函数)数)函数的引入n n函数:函数是完成某些特定功能的代码块。函数:函数是完成某些特定功能的代码块。n n使用函数的优点:使用函数的优点:1 1)实现模块化设计:将一个大任务分解成一个个的
2、)实现模块化设计:将一个大任务分解成一个个的小任务,然后每个任务分别用函数实现。小任务,然后每个任务分别用函数实现。2 2)实现)实现“编写一次,多次调用编写一次,多次调用”,避免在不同的程,避免在不同的程序中重复编写相同的函数。序中重复编写相同的函数。3 3)便于程序调试和维护,因为每个函数之间是相互)便于程序调试和维护,因为每个函数之间是相互独立的。独立的。函数的分类:库函数和用户自定义函数函数的分类:库函数和用户自定义函数8.1 函数的定义函数的定义例例例例8.18.1编写函数编写函数编写函数编写函数maxmax:求两个整数求两个整数求两个整数求两个整数x x和和和和y y中的较大数。中
3、的较大数。中的较大数。中的较大数。int int max(max(int int x,x,int int y)y)/*/*函数头函数头函数头函数头*/*/int int z=x;z=x;/*/*函数体函数体函数体函数体*/*/if(xy)z=y;if(xb?a:b);return(ab?a:b);或或 intint max(a,b)max(a,b)intint a,b;a,b;/*/*形参的类型在函数体前、函数名后说明形参的类型在函数体前、函数名后说明*/*/return(ab?a:b);return(ab?a:b);前者为标准格式,后者为传统格式,通常用前者。前者为标准格式,后者为传统格式,
4、通常用前者。4.4.函数体函数体函数体函数体:即即函数功能的具体实现。函数功能的具体实现。函数功能的具体实现。函数功能的具体实现。它包括两部分:它包括两部分:说明部分和执行部分说明部分和执行部分说明部分和执行部分说明部分和执行部分,其中说明部分,其中说明部分包括函数中所用的局部变量等的说明、函数中要调用包括函数中所用的局部变量等的说明、函数中要调用的函数的说明。的函数的说明。注意:注意:函数不能嵌套定义,即函数内不能再定义函数,这样可函数不能嵌套定义,即函数内不能再定义函数,这样可以保证函数间是相互独立的,以实现模块化程序设计。以保证函数间是相互独立的,以实现模块化程序设计。5.5.5.5.空
5、函数:空函数:空函数:空函数:函数类型函数类型函数类型函数类型 函数名函数名函数名函数名()()()()调用此函数时,什么也不做。只是表明这里要调用此函数时,什么也不做。只是表明这里要 调用一调用一个函数,而现在这个函数的功能还没实现。个函数,而现在这个函数的功能还没实现。空函数在程空函数在程空函数在程空函数在程 序设计中常常用到的:序设计中常常用到的:序设计中常常用到的:序设计中常常用到的:1 1 1 1)预留函数,便于以后扩充程序功能。)预留函数,便于以后扩充程序功能。)预留函数,便于以后扩充程序功能。)预留函数,便于以后扩充程序功能。2 2 2 2)便于程序的模块化设计和调试:程序设计中
6、往往)便于程序的模块化设计和调试:程序设计中往往)便于程序的模块化设计和调试:程序设计中往往)便于程序的模块化设计和调试:程序设计中往往根据需要确定若干模块,分别由一些函数来实现。根据需要确定若干模块,分别由一些函数来实现。根据需要确定若干模块,分别由一些函数来实现。根据需要确定若干模块,分别由一些函数来实现。一个大系统,需要编写很多用户函数,而这些函一个大系统,需要编写很多用户函数,而这些函一个大系统,需要编写很多用户函数,而这些函一个大系统,需要编写很多用户函数,而这些函数不可能数不可能数不可能数不可能 也没有必要同步完成,通常足从一些基也没有必要同步完成,通常足从一些基也没有必要同步完成
7、,通常足从一些基也没有必要同步完成,通常足从一些基本模块开始,编写一个调试一个,对于没有编写本模块开始,编写一个调试一个,对于没有编写本模块开始,编写一个调试一个,对于没有编写本模块开始,编写一个调试一个,对于没有编写 的函数就需要用空函数代替。从而也有利于集体的函数就需要用空函数代替。从而也有利于集体的函数就需要用空函数代替。从而也有利于集体的函数就需要用空函数代替。从而也有利于集体创作。创作。创作。创作。空函数举例空函数举例n n例例8.3 8.3 编写小学生算术练习系统的主程序:编写小学生算术练习系统的主程序:显显示主菜单,用户选择,根据选择执行加、减、示主菜单,用户选择,根据选择执行加
8、、减、乘、除、退出乘、除、退出5 5项功能之一。项功能之一。重复上述步骤,直至选择退出。重复上述步骤,直至选择退出。其中主程序调用的函数有:显示主菜单函数其中主程序调用的函数有:显示主菜单函数list_menu(),list_menu(),加、减、乘、除、退出函数分别是加、减、乘、除、退出函数分别是add(),sub(),add(),sub(),mulmul(),divide(),end().(),divide(),end().以上函数除以上函数除list_menulist_menu()()外此时均为空函数。外此时均为空函数。程序:程序:l8_1_4.cl8_1_4.c#include inc
9、lude stdiostdio.h /*l8_1_4.c*/.h /*l8_1_4.c*/main()main()void add(),sub(),void add(),sub(),mulmul(),divide(),end(),list_menu()(),divide(),end(),list_menu();int int n;n;do do list_menu()list_menu();scanf scanf(%d,&n);(%d,&n);getchar getchar();();switch(n)switch(n)case 1:case 1:add();add();break;break
10、;case 2:case 2:sub()sub();break;break;case 3:case 3:mulmul();();break;break;case 4:case 4:divide()divide();break;break;case 5:case 5:end()end();break;break;default:default:printfprintf(n enter error,please again.);(n enter error,please again.);while(n!=5);while(n!=5);void list_menu()void list_menu()
11、printfprintf(n*the exercise system for primitive(n*the exercise system for primitive students*);students*);printf printf(n*1.add *);(n*1.add *);printf printf(n*2.sub *);(n*2.sub *);printf printf(n*3.(n*3.mul mul *);*);printf printf(n*4.divide*);(n*4.divide*);printf printf(n*5.end *n);(n*5.end *n);vo
12、id add()void add()void sub()void sub()voidvoid mul mul()()void divide()void divide()void end()void end()问题:如何定义一个函数如何定义一个函数n n第一步:第一步:分析函数需要的参数,包括参数的的个数分析函数需要的参数,包括参数的的个数分析函数需要的参数,包括参数的的个数分析函数需要的参数,包括参数的的个数以及每个参数的类型以及每个参数的类型以及每个参数的类型以及每个参数的类型,n n第二步:第二步:分析函数返回值的类型,若无返回值,分析函数返回值的类型,若无返回值,分析函数返回值的类型,若
13、无返回值,分析函数返回值的类型,若无返回值,则为则为则为则为 voidvoid。函数的返回值可看作是函数执行完后需输出的函数的返回值可看作是函数执行完后需输出的函数的返回值可看作是函数执行完后需输出的函数的返回值可看作是函数执行完后需输出的一个一个一个一个数据。数据。数据。数据。n n第三步:第三步:编写函数体编写函数体编写函数体编写函数体说明:说明:参数和返回值是函数之间的接口,即函数之间通过参参数和返回值是函数之间的接口,即函数之间通过参参数和返回值是函数之间的接口,即函数之间通过参参数和返回值是函数之间的接口,即函数之间通过参数和返回值进行通信。参数包括执行该函数时需要数和返回值进行通信
14、。参数包括执行该函数时需要数和返回值进行通信。参数包括执行该函数时需要数和返回值进行通信。参数包括执行该函数时需要的数据信息,以及返回数据的有关信息。的数据信息,以及返回数据的有关信息。的数据信息,以及返回数据的有关信息。的数据信息,以及返回数据的有关信息。例如:例如:1 1)求求求求n!:n!:要处理的数据是要处理的数据是要处理的数据是要处理的数据是n n,因此必须有一个参数因此必须有一个参数因此必须有一个参数因此必须有一个参数n n,类型为类型为类型为类型为 intint。返回值为返回值为返回值为返回值为long long 型。即型。即型。即型。即 long fact(long fact(
15、int int n)n)2 2)打印表头打印表头打印表头打印表头:不需输入任何数据即可执行该函数,因此无参不需输入任何数据即可执行该函数,因此无参不需输入任何数据即可执行该函数,因此无参不需输入任何数据即可执行该函数,因此无参数。执行该函数无返回值,因此函数类型为数。执行该函数无返回值,因此函数类型为数。执行该函数无返回值,因此函数类型为数。执行该函数无返回值,因此函数类型为 voidvoid。即即即即 void linevoid line()()3 3)求两个整数求两个整数求两个整数求两个整数mm和和和和n n的最小公倍数,执行该功能时必须有两个的最小公倍数,执行该功能时必须有两个的最小公倍
16、数,执行该功能时必须有两个的最小公倍数,执行该功能时必须有两个整型参数,返回值为整型。程序:整型参数,返回值为整型。程序:整型参数,返回值为整型。程序:整型参数,返回值为整型。程序:l8_1_5.cl8_1_5.c int int min_multiple(min_multiple(intint m,m,int int n)n)(见下页)见下页)见下页)见下页)4 4)求一批整型数据()求一批整型数据()求一批整型数据()求一批整型数据(n n个)中的最大值。实现该功能的函数个)中的最大值。实现该功能的函数个)中的最大值。实现该功能的函数个)中的最大值。实现该功能的函数的参数有两个:该批数据的
17、首地址及数据的个数。返回值的参数有两个:该批数据的首地址及数据的个数。返回值的参数有两个:该批数据的首地址及数据的个数。返回值的参数有两个:该批数据的首地址及数据的个数。返回值为一个整型数。为一个整型数。为一个整型数。为一个整型数。int int max(max(int int data,data,int int n)n)/*/*例例例例3:3:计算两个整数的最小公倍数计算两个整数的最小公倍数计算两个整数的最小公倍数计算两个整数的最小公倍数 l8_1_5.c*/l8_1_5.c*/main()main()intint m,n,min;m,n,min;intint min_multiple(mi
18、n_multiple(int int,int int);/*);/*函数声明函数声明函数声明函数声明*/*/printfprintf(n input m,n:);(n input m,n:);scanf scanf(%d%d,&m,&n);(%d%d,&m,&n);min=min=min_multiple(m,n);/*min_multiple(m,n);/*函数调用函数调用函数调用函数调用*/*/printfprintf(n(n bei shu bei shu:%d,min);:%d,min);intint min_multiple(min_multiple(intint x,x,intin
19、t y)/*y)/*函数定义函数定义函数定义函数定义*/*/intint i;i;i=1;i=1;while(x*i%y!=0)i+;while(x*i%y!=0)i+;return(x*i);return(x*i);8.2 函数的调用函数的调用n n重点重点重点重点:1 1、对被调函数的声明、对被调函数的声明、对被调函数的声明、对被调函数的声明2 2、如何调用一个函数、如何调用一个函数、如何调用一个函数、如何调用一个函数3 3、主调函数和被调函数之间如何进行数据传递、主调函数和被调函数之间如何进行数据传递、主调函数和被调函数之间如何进行数据传递、主调函数和被调函数之间如何进行数据传递 例例例
20、例8.5 8.5 调用函数调用函数调用函数调用函数fact()fact()求求求求n!(nn!(n由用户输入)。由用户输入)。由用户输入)。由用户输入)。分三种情况:分三种情况:(1)(1)函数函数函数函数fact()fact()与主函数在同一文件中,且与主函数在同一文件中,且与主函数在同一文件中,且与主函数在同一文件中,且main()main()在在在在fact()fact()前面。前面。前面。前面。(2)(2)函数函数函数函数fact()fact()与主函数在同一文件中,且与主函数在同一文件中,且与主函数在同一文件中,且与主函数在同一文件中,且mainmain在在在在factfact之后。
21、之后。之后。之后。(3)(3)函数函数函数函数factfact与与与与mainmain不再同一程序文件中不再同一程序文件中不再同一程序文件中不再同一程序文件中。main()/*(1)main()/*(1)main()main()在在fact()fact()前面前面*/*/intint n;long p;n;long p;long fact(long fact(intint););/*/*函数声明函数声明函数声明函数声明*/*/scanfscanf(%d,&n);(%d,&n);p=p=fact(n);fact(n);/*/*函数调用函数调用函数调用函数调用*/*/printfprintf(n%
22、ld,p);(n%ld,p);long fact(long fact(int int m)m)/*/*函数定义函数定义函数定义函数定义*/*/intint i;long s=1;i;long s=1;for(i=1;i=m;i+)for(i=1;i=m;i+)s*=i;s*=i;return(s);return(s);/*/*函数返回函数返回函数返回函数返回*/*/结论结论:被调函数在后,需在主调函数中先声明后调用。被调函数在后,需在主调函数中先声明后调用。被调函数在后,需在主调函数中先声明后调用。被调函数在后,需在主调函数中先声明后调用。/*(2)/*(2)主调函数在被调函数之后主调函数在被
23、调函数之后主调函数在被调函数之后主调函数在被调函数之后*/*/long fact(long fact(int int m)m)/*/*函数定义函数定义函数定义函数定义*/*/intint i;long s=1;i;long s=1;for(i=1;i=m;i+)for(i=1;i=m;i+)s*=i;s*=i;return(s);return(s);main()main()intint n;long p;/*n;long p;/*不需函数声明不需函数声明不需函数声明不需函数声明*/*/scanfscanf(%d,&n);(%d,&n);p=p=fact(n);fact(n);/*/*函数调用函
24、数调用函数调用函数调用*/*/printfprintf(n%ld,p);(n%ld,p);结论结论:被调函数先于主调函数被编译,因此在编译主调函数:被调函数先于主调函数被编译,因此在编译主调函数:被调函数先于主调函数被编译,因此在编译主调函数:被调函数先于主调函数被编译,因此在编译主调函数时已知被调函数的类型等信息。故不需函数声明时已知被调函数的类型等信息。故不需函数声明时已知被调函数的类型等信息。故不需函数声明时已知被调函数的类型等信息。故不需函数声明。/*(3)/*(3)设设设设fact()fact()函数存放在文件函数存放在文件函数存放在文件函数存放在文件f1.cf1.c中,则编写主调函
25、数时需中,则编写主调函数时需中,则编写主调函数时需中,则编写主调函数时需用用用用include include 命令对被调函数声明命令对被调函数声明命令对被调函数声明命令对被调函数声明*/*/#include include main()main()intint n;long p;n;long p;scanf scanf(%d,&n);(%d,&n);p=fact(n);p=fact(n);printf printf(n%ld,p);(n%ld,p);结论:该程序的效果与(结论:该程序的效果与(2 2)相同,由此可)相同,由此可实现将多个文件实现将多个文件实现将多个文件实现将多个文件连接成一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言课件第8章 函数 语言 课件
限制150内