《C语言程序设计第四版ppt-谭浩强课件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第四版ppt-谭浩强课件.ppt(54页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7 7章章 函数函数资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值引例引例 求阶乘求阶乘n!int i,n;float fac=1;printf(n=);scanf(%d,&n);for(i=1;i=n;i+)fac=fac*i;printf(%d!=%.0fn,n,fac);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值引例引例求任意求任意3个正整数的阶乘的和个正整数的阶乘的和 a!+b!+c!fa=1;for(i=1;i=a;i+)
2、fa=fa*i;fb=1;for(i=1;i=b;i+)fb=fb*i;fc=1;for(i=1;i=c;i+)fc=fc*i;printf(%d!+%d!+%d!=%.0f,a,b,c,fa+fb+fc);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值引例引例求任意求任意3个正整数的阶乘的和个正整数的阶乘的和 a!+b!+c!#include stdio.hint main()float factorial(int n);int a,b,c;float sum;printf(a=);scanf(%d,&a);pri
3、ntf(b=);scanf(%d,&b);printf(c=);scanf(%d,&c);sum=factorial(a)+factorial(b)+factorial(c);printf(%d!+%d!+%d!=%.0f,a,b,c,sum);return 0;float factorial(int n)int i;float fac;fac=1;for(i=1;i=n;i+)fac=fac*i;return fac;资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值引例引例 求任意求任意3个正整数的阶乘的和个正整数的
4、阶乘的和 a!+b!+c!使用函数可减少程序的重复段落使用函数可减少程序的重复段落使用函数可使程序功能相对独立,便使用函数可使程序功能相对独立,便于维护于维护模块化的程序设计模块化的程序设计资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值应用程序应用程序源程序文件源程序文件1函数函数1函数函数2函数函数3源程序文件源程序文件2函数函数1函数函数2C应用程序的构成应用程序的构成资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的概念函数的概念#
5、include int main()int max(int x,int y);int a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(max=%d,c);return 0;int max(int x,int y)int z;if(xy)z=x;else z=y;return z;程序必备的程序必备的 main函数函数有返回值的函数有返回值的函数资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的概念函数的概念上述问题也可只用一个上述问题也可只用一个main函数实现函数实现int
6、main()int a,b,c;scanf(%d,%d,&a,&b);if(ab)c=a;else c=b;printf(max=%d,c);return 0;资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的概念函数的概念int main()void stars();stars();printf(Hello!n);stars();printf(Bye!n);stars();return 0;void stars()int i;for(i=1;i=8;i+)printf(*);printf(n);无返回值的函数无返
7、回值的函数资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的概念函数的概念int main()void stars(int n);int n=20;stars(10);printf(Hello!n);stars(5);printf(Bye!n);stars(n);return 0;void stars(int n)int i;for(i=1;i=n;i+)printf(*);printf(n);有参数,无返回值有参数,无返回值资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值
8、的这部分资金就是原有资金的时间价值函数的概念函数的概念int main()void stars(int,char);int n=20;stars(10,%);printf(Hello!n);stars(5,-);printf(Bye!n);stars(n,$);return 0;void stars(int n,char c)int i;for(i=1;iy)z=x;else z=y;return z;函数首部函数首部函数体函数体函数的返回值,类函数的返回值,类型与首部定义一致型与首部定义一致函数首部,不是语函数首部,不是语句,行尾无分号句,行尾无分号资金是运动的价值,资金的价值是随时间变化而
9、变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的定义函数的定义关于函数类型的说明关于函数类型的说明u无返回值的函数类型为无返回值的函数类型为void;u有返回值的函数,其类型根据返回值有返回值的函数,其类型根据返回值类型决定;省略类型时默认为类型决定;省略类型时默认为int(建议(建议不要省略)不要省略)资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的调用函数的调用调用函数的准备工作调用函数的准备工作包含或声明包含或声明u调用库函数应在调用库函数应在C文件开头部分使用文件开
10、头部分使用#includeu要调用要调用其他自定义函数其他自定义函数,应在,应在本函数本函数体体开始的声明部分加上开始的声明部分加上被调用函数的声被调用函数的声明明(与(与函数首部内容函数首部内容相同的一个语句),相同的一个语句),供编译时使用供编译时使用如果如果被调用函数被调用函数出现出现在在本函数本函数之前可省略此部分之前可省略此部分 详见详见7.4节节资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的调用函数的调用函数(实参列表)函数(实参列表)调用无返回值的函数可以把上述函数调用无返回值的函数可以把上述函数
11、直接作为语句使用,以完成其功能。直接作为语句使用,以完成其功能。例如:例如:stars(10);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的调用函数的调用函数(实参列表)函数(实参列表)调用有返回值的函数,应注意返回值调用有返回值的函数,应注意返回值的处理,如赋值或输出等。的处理,如赋值或输出等。例如:例如:c=max(a,b);或或 printf(%d,max(a,b);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的参数函数
12、的参数u形式参数(形参,形式参数(形参,Formal parameter):):定义函数时首部括号中定义的变量定义函数时首部括号中定义的变量u实际参数(实参,实际参数(实参,Actual parameter):):调用函数时,在函数名后括号中使用调用函数时,在函数名后括号中使用的表达式的表达式调用函数时,实参将值传递给形参调用函数时,实参将值传递给形参资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的参数函数的参数形式参数和实际参数形式参数和实际参数void main()int max(int x,int y);i
13、nt a,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(max=%d,c);return 0;int max(int x,int y)int z;if(xy)z=x;else z=y;return z;资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的参数函数的参数形式参数和实际参数形式参数和实际参数u形参在函数调用时分配内存单元,调用结束形参在函数调用时分配内存单元,调用结束后释放;后释放;u实参可以是常量、变量、表达式实参可以是常量、变量、表达式u实参与形参的数目、类型应一致
14、实参与形参的数目、类型应一致uC语言中,实参向形参传递其值语言中,实参向形参传递其值“值传值传递递”,不传递地址,形参值变化不影响实参,不传递地址,形参值变化不影响实参资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的返回值函数的返回值u通过函数体通过函数体return语句中的表达式值获语句中的表达式值获得,例如:得,例如:int max(int x,int y)return xy?x:y;u无返回值的函数可省略无返回值的函数可省略return语句语句u函数执行到函数执行到return语句结束语句结束资金是运动的价
15、值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值关于例题和习题关于例题和习题 通过本章例题、习题,不仅要掌握函数定义和通过本章例题、习题,不仅要掌握函数定义和调用的语法,也要掌握更多算法和编程技巧。调用的语法,也要掌握更多算法和编程技巧。正如学习语文、英语要大量阅读一样,学习计正如学习语文、英语要大量阅读一样,学习计算机语言也要阅读例题,掌握一些基本的编程思算机语言也要阅读例题,掌握一些基本的编程思路、技巧和表达,才可能对新的问题较快地找到路、技巧和表达,才可能对新的问题较快地找到解决方法;同时要多了解语法规则解决方法;同时要多了解
16、语法规则相当于认相当于认字。另外,还应对计算机的工作原理和方式多一字。另外,还应对计算机的工作原理和方式多一些了解。些了解。资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值例:最大公约数函数和最小公倍数函数例:最大公约数函数和最小公倍数函数求最大公约数的算法:求最大公约数的算法:从从1开始,逐个找公约数,直至两数中较小开始,逐个找公约数,直至两数中较小的一个;的一个;辗转求余辗转求余(循环结构实验指导有流程图循环结构实验指导有流程图);.求最小公倍数的算法:求最小公倍数的算法:从两数中较大的一个开始,由小到大找公倍从两
17、数中较大的一个开始,由小到大找公倍数,直至找到;数,直至找到;两数的乘积两数的乘积/两数的最大公约数。两数的最大公约数。资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的嵌套调用函数的嵌套调用调用最小公倍数函数调用最小公倍数函数(两数乘积两数乘积/两数的最大两数的最大公约数公约数),当中需要调用最大公倍数函数,当中需要调用最大公倍数函数函数的嵌套调用:在一个被调用的函数中调函数的嵌套调用:在一个被调用的函数中调用另一个函数用另一个函数例:例:P183 例例7.5资金是运动的价值,资金的价值是随时间变化而变化的,是时
18、间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的递归调用函数的递归调用概念:在一个被调用的函数中直接概念:在一个被调用的函数中直接或间接地调用函数本身或间接地调用函数本身n!=1 ,n=0,1n(n-1)!,n1资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的递归调用函数的递归调用递归的另一个典型实例递归的另一个典型实例 汉诺塔(汉诺塔(P.189例例7.8)算法讲解算法讲解http:/ 实参是数组元素,对应的形参是变量实参是数组元素,对应的形参是变量以以数组名数组名作为函数的参数作为
19、函数的参数 实参和形参都是数组名实参和形参都是数组名资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值数组元素作为函数的参数数组元素作为函数的参数数组元素数组元素作为作为实参实参形参是普通变量,形参是普通变量,值传递值传递int main()int a11,i;float fac(int n);for(i=1;i=10;i+)ai=i;printf(%d!=%.0fn,ai,fac(ai);return 0;float fac(int n)float t=1;int i;for(i=1;i=n;i+)t=t*i;retu
20、rn t;等价于普通变量等价于普通变量资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值数组作为函数的参数数组作为函数的参数以以数组名作数组名作为函数的参数为函数的参数实参向形参实参向形参传递首元素地址传递首元素地址int main()int max(int a,int n);int x6,i;for(i=0;i=5;i+)scanf(%d,&xi);printf(max=%d,max(x,6);return 0;int max(int a,int n)int m,i;m=a0;for(i=1;im)m=ai;retur
21、n m;实参为数组名实参为数组名形参为数组,形参为数组,不指定大小不指定大小资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值数组作为函数的参数数组作为函数的参数以以数组名数组名作为函数的参数作为函数的参数注意事项注意事项形参和实参都是数组名,类型要一致;形参和实参都是数组名,类型要一致;形参中不指定数组大小,指定无实际作用形参中不指定数组大小,指定无实际作用;形参数组名形参数组名获得获得实参首元素实参首元素的的地址地址,即形参第,即形参第一个元素与实参第一个元素占用相同的地址一个元素与实参第一个元素占用相同的地址这就是
22、这就是“地址传递地址传递”方式方式,形参值改变会引起实形参值改变会引起实参值的变化参值的变化为了使形参获得实参数组的大小为了使形参获得实参数组的大小(元素个数元素个数),通常在形参和实参对应地增加一个数值型的参数通常在形参和实参对应地增加一个数值型的参数资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值数组作为函数的参数数组作为函数的参数以以数组名作数组名作为函数的参数为函数的参数考虑:如何写一个排序函数?考虑:如何写一个排序函数?多个函数组成的程序中多个函数组成的程序中变量引用的一些规则变量引用的一些规则资金是运动的价
23、值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值C应用程序的构成应用程序的构成应用程序应用程序源程序文件源程序文件1函数函数1函数函数2函数函数3源程序文件源程序文件2函数函数1函数函数2资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量u局部变量局部变量只在一个函数内或只在一个只在一个函数内或只在一个复合语句内有效的变量(复合语句内有效的变量(“花括号内有效花括号内有效”)u全局变量(外部变量)全局变量
24、(外部变量)在一个模块内在一个模块内多个函数中均有效多个函数中均有效u扩展的外部变量扩展的外部变量在多个程序文件的函在多个程序文件的函数中有效(数中有效(extern)资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量局部变量局部变量函数内定义,只在该函数有效函数内定义,只在该函数有效#include int main()int a,b,c;.float fac(int n)float t=0;.return t;主函数中不存在主函数中不存在变量变量n和和tfac函
25、数中不存在函数中不存在变量变量a和和b资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量局部变量局部变量复合语句内定义,只在语句内复合语句内定义,只在语句内有效有效编译错编译错误:变误:变量量k未未定义定义int main()int i;for(i=0;i=10;i+)int k;k=i*2;printf(%dn,k);printf(%dn,i);printf(%dn,k);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的
26、这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量局部变量局部变量在函数内定义,只在该函数内有效在函数内定义,只在该函数内有效在复合语句内定义,只在该语句内有效在复合语句内定义,只在该语句内有效形式参数也是局部变量,只在函数内有效形式参数也是局部变量,只在函数内有效资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量全局变量全局变量在函数外定义,在其后的多个在函数外定义,在其后的多个函数中均有效函数中均有效#include int
27、 A,B,C;int main()int X,Y;float f1(int n)int f2()资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量全局变量全局变量 例:例:#include int A,B,C;int main()int f1(int n);void f2();printf(%dn,f1(3);printf(main:%dn,A);A=88;f2();int f1(int n)int m;m=n*n;A=n*n*n;return m;void f2(
28、)printf(f2:%dn,A);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变量和全局变量扩展的外部变量扩展的外部变量在多个程序文件的函在多个程序文件的函数中有效(见数中有效(见7.9.3节)节)在程序中可以调用其他文件中的函数(外在程序中可以调用其他文件中的函数(外部函数)部函数)可通过全局变量在函数间传递多个数据可通过全局变量在函数间传递多个数据资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价
29、值变量作用域变量作用域局部变量和全局变量局部变量和全局变量判断下面程序的运行结果:判断下面程序的运行结果:#include int a,b,n;int main()void f1(int n);a=18;b=100;n=20;printf(main:a=%d,b=%d;n=%dn,a,b,n);f1(50);void f1(int n)float a=13.89;printf(f1:a=%f,b=%d;n=%dn,a,b,n);资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量作用域变量作用域局部变量和全局变量局部变
30、量和全局变量关于全局变量应用的说明关于全局变量应用的说明u全局变量命名时通常首字母大写全局变量命名时通常首字母大写u通过使用全局变量,使函数能够传递实通过使用全局变量,使函数能够传递实参参-形参和返回值之外的其他数据形参和返回值之外的其他数据u滥用全局变量会造成系统资源占用,降滥用全局变量会造成系统资源占用,降低函数可移植性和程序的清晰度低函数可移植性和程序的清晰度(P.202-203)u在函数中定义了与外部变量(全局变量)在函数中定义了与外部变量(全局变量)同名的局部变量时,外部变量被屏蔽同名的局部变量时,外部变量被屏蔽资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的
31、推移而增值,其增值的这部分资金就是原有资金的时间价值变量的存储方式和生存期变量的存储方式和生存期u动态存储(自动变量,形式参数)动态存储(自动变量,形式参数)临时、动态地分配存储单元临时、动态地分配存储单元u静态存储(全局变量,静态局部变量)静态存储(全局变量,静态局部变量)程序运行整个过程中都存在程序运行整个过程中都存在资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值局部变量的存储方式和生存期局部变量的存储方式和生存期u自动局部变量自动局部变量(auto):函数中定义的变函数中定义的变量和形参。函数被调用时动态分配存
32、储空量和形参。函数被调用时动态分配存储空间,调用结束时释放。默认方式。间,调用结束时释放。默认方式。u静态局部变量静态局部变量(static):函数中加函数中加static定义的变量,编译时赋初值,调用结束时定义的变量,编译时赋初值,调用结束时保留存储空间和当前值。保留存储空间和当前值。P.206-207说明。说明。u寄存器变量寄存器变量(register):保存在保存在CPU中,中,现已少用。现已少用。资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值全局变量的存储方式和生存期全局变量的存储方式和生存期均为静态存储均为
33、静态存储u在同一文件定义点之前引用全局变量在同一文件定义点之前引用全局变量引用前使用引用前使用 extern 声明声明u引用另一文件中的全局变量引用另一文件中的全局变量引用前使用引用前使用 extern 声明声明u限制全局变量的作用域在本文件中限制全局变量的作用域在本文件中定义时增加定义时增加 static 声明声明“定义定义”与与“声明声明”的区分的区分资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值函数的函数的“定义定义”和和“声明声明”#include int main()int f1(int);int f2()
34、;.a=f1(5)+f2();int f1(int n).int f2().函数定义函数定义确定确定函数的名称、类函数的名称、类型、功能型、功能函数声明函数声明(函数原型函数原型)确定要调用函数的名称、确定要调用函数的名称、参数类型参数类型函数调函数调用,运用,运行函数行函数代码代码资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值变量的变量的“定义定义”与与“声明声明”#include int main()int a,b,c;/*定义性声明定义性声明建立存储空间建立存储空间*/extern X;/*非定义性声明非定义性
35、声明不建立存储空间不建立存储空间*/.int X;/*定义性声明定义性声明建立存储空间建立存储空间*/int f1()函数的作用域问题函数的作用域问题资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值内部函数和外部函数内部函数和外部函数内部函数内部函数只能在本文件中被调用,只能在本文件中被调用,加加static定义定义外部函数外部函数可供其他文件中的函数调可供其他文件中的函数调用,加用,加extern定义(或默认)。在调用定义(或默认)。在调用前加前加extern声明声明(亦可省略亦可省略extern)#include命
36、令的实质是统一地声明调用命令的实质是统一地声明调用库函数库函数(一组已定义的外部函数一组已定义的外部函数)多个源文件的程序多个源文件的程序操作步骤操作步骤资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值如何使多个文件中的变量、函数如何使多个文件中的变量、函数协同工作?协同工作?(见补充材料见补充材料)将它们组织成项目(将它们组织成项目(Project,或称工,或称工程),操作步骤:程),操作步骤:建立项目建立项目(工程,工程,*.dsp),系统同时建立,系统同时建立一个工作区一个工作区(*.dsw)项目中添加多个源代码
37、文件项目中添加多个源代码文件(*.c或或*.cpp)分别编译源文件,连接并构建分别编译源文件,连接并构建exe文件文件以后打开工作区即可打开这个多文件组以后打开工作区即可打开这个多文件组成的项目成的项目资金是运动的价值,资金的价值是随时间变化而变化的,是时间的函数,随时间的推移而增值,其增值的这部分资金就是原有资金的时间价值如何使多个文件中的变量、函数如何使多个文件中的变量、函数协同工作?协同工作?(见补充材料见补充材料)或将包含函数的源文件保存在系统文或将包含函数的源文件保存在系统文件夹的件夹的include目录下(以目录下(以*.c或或*.h的形式)的形式),main函数所在文件中使用函数所在文件中使用#include声明调用声明调用