《c语言函数》PPT课件.ppt

上传人:m**** 文档编号:569706617 上传时间:2024-07-30 格式:PPT 页数:55 大小:204.10KB
返回 下载 相关 举报
《c语言函数》PPT课件.ppt_第1页
第1页 / 共55页
《c语言函数》PPT课件.ppt_第2页
第2页 / 共55页
《c语言函数》PPT课件.ppt_第3页
第3页 / 共55页
《c语言函数》PPT课件.ppt_第4页
第4页 / 共55页
《c语言函数》PPT课件.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《《c语言函数》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《c语言函数》PPT课件.ppt(55页珍藏版)》请在金锄头文库上搜索。

1、第七章第七章 函数函数7.1 概述概述一、一、C程序的构成程序的构成从结构上:任何复杂结构的程序都可分为三种基本结构。从结构上:任何复杂结构的程序都可分为三种基本结构。顺序结构、选择结构、循环结构的组合。顺序结构、选择结构、循环结构的组合。从组织形式:最简单的程序也要有三个层次构成从组织形式:最简单的程序也要有三个层次构成C程序源文件程序源文件 - C函数函数 - C语句语句 所有函数都是平行的,所有函数都是平行的,即在定义函数时是互相独立的,即在定义函数时是互相独立的,一个函数并不从属于另一个函数,即函数不能嵌套定义,只一个函数并不从属于另一个函数,即函数不能嵌套定义,只可以互相调用可以互相

2、调用,但不能调用,但不能调用main函数。函数。二、二、C函数的两种类型函数的两种类型1、标准函数,即库函数、标准函数,即库函数 这是由系统提供的,用户不必自己定义这些函数,这是由系统提供的,用户不必自己定义这些函数,可以直接使用。可以直接使用。2、自定义函数、自定义函数用户自己定义的函数,以解决用户的专门需要。用户自己定义的函数,以解决用户的专门需要。三、使用函数解决的几个问题三、使用函数解决的几个问题1、提高程序设计效率、提高程序设计效率2、实现程序的模块化,提高可读性,方便编写、修改。、实现程序的模块化,提高可读性,方便编写、修改。3、函数可供反复调用,避免一些程序段的重复书写。、函数可

3、供反复调用,避免一些程序段的重复书写。四、函数的使用四、函数的使用1、函数之间的关系、函数之间的关系main()函数:()函数:主导函数,程序运行从主导函数,程序运行从main()开始,也从此处结束,运()开始,也从此处结束,运行中可以调用其它函数。行中可以调用其它函数。其它函数:其它函数:可以互相调用函数、自调用函数,不能调用可以互相调用函数、自调用函数,不能调用main()。()。2、使用参数、使用参数入口参数:入口参数:主调函数向被调函数传递的数据主调函数向被调函数传递的数据-实参、形参。实参、形参。出口参数:出口参数:被调函数向主调函数传递的数据被调函数向主调函数传递的数据-返回值。返

4、回值。7.2 函数的定义函数的定义问题:问题:1、被调函数如何使用主调函数中的数据。、被调函数如何使用主调函数中的数据。2、假设被调函数有办法使用主调函数中的数据,如何保证、假设被调函数有办法使用主调函数中的数据,如何保证被调函数和主调函数中数据类型的一致。被调函数和主调函数中数据类型的一致。3、如何将被调函数的工作结果告诉主调函数。、如何将被调函数的工作结果告诉主调函数。4、假设有办法将被调函数的工作结果告诉主调函数,、假设有办法将被调函数的工作结果告诉主调函数,如何保证数据类型的一致性。如何保证数据类型的一致性。一、函数定义的一般形式一、函数定义的一般形式(P79-P83)类型说明符类型说

5、明符 函数名函数名(形式参数列表形式参数列表) P79 形式参数类型说明形式参数类型说明 函数体函数体 例如:例如:int max(x,y)int x,y; 函数体函数体二、函数的参数二、函数的参数 (P82)1、形(式)参(数)与实(际)参(数)、形(式)参(数)与实(际)参(数)形参:为构造函数而存在,不具备确切值,其值在函形参:为构造函数而存在,不具备确切值,其值在函数被调用时,从主调函数的实参获得。数被调用时,从主调函数的实参获得。实参:与实际问题紧密联系的具体数据。实参:与实际问题紧密联系的具体数据。实参数值:可以是常量、变量或表达式,但要求他们实参数值:可以是常量、变量或表达式,但

6、要求他们 有确定的值。在调用时将实参的值赋给形参有确定的值。在调用时将实参的值赋给形参 变量。变量。形参数值:变量,其数量、类型与实参一致。形参数值:变量,其数量、类型与实参一致。2、实参、实参 - 形参数据传递形参数据传递函数调用函数调用传值调用传值调用传址调用传址调用(单独的变量或数组元素)(单独的变量或数组元素)传值调用函数的数据传递过程:传值调用函数的数据传递过程:调用函数时:为形参分配临时存储单元调用函数时:为形参分配临时存储单元运行被调用函数时:实参数据装入形参临时存储单元,形运行被调用函数时:实参数据装入形参临时存储单元,形参携带实参数据参与运算。参携带实参数据参与运算。调用结束

7、:形参临时单元被释放,形参数据失效,实参数调用结束:形参临时单元被释放,形参数据失效,实参数 据不变。这就是所谓的据不变。这就是所谓的单值传递单值传递。函数的形参和实参具有以下特点:函数的形参和实参具有以下特点:(1)、)、形参变量只有在被调用时才分配内存单元,在调用形参变量只有在被调用时才分配内存单元,在调用结束时,结束时, 即刻释放所分配的内存单元。即刻释放所分配的内存单元。因此,形参只有在因此,形参只有在函数内部有效。函数内部有效。 函数调用结束返回主调函数后则不能再使函数调用结束返回主调函数后则不能再使用该形参变量。用该形参变量。(2)、实参可以是常量、变量、表达式、函数等,)、实参可

8、以是常量、变量、表达式、函数等, 无论实参无论实参是何种类型的量,是何种类型的量,在进行函数调用时,它们都必须具有确定的在进行函数调用时,它们都必须具有确定的值,值, 以便把这些值传送给形参。以便把这些值传送给形参。 因此应预先用赋值,输入等因此应预先用赋值,输入等办法使实参获得确定值。办法使实参获得确定值。(3)、)、实参和形参在数量上,类型上,顺序上应严格一致实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生否则会发生“类型不匹配类型不匹配”的错误。的错误。(4)、)、函数调用中发生的数据传送是单向的函数调用中发生的数据传送是单向的。 即只能把即只能把实参的值传送给形参,而不能把形

9、参的值实参的值传送给形参,而不能把形参的值反向传送给反向传送给实参。实参。 因此在函数调用过程中,形参的值发生改变,而实参中的因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。值不会变化。 main()int a,b;scanf(%d,%d,&a,&b);swap(a,b);printf(%d,%d,a,b);getch();int swap(x,y)int x,y;int t;t=x;x=y;y=t;请指出程序运行的结果。请指出程序运行的结果。三、函数值三、函数值(P80、P83) 函数的值是指函数被调用之后,函数的值是指函数被调用之后, 执行函数体中的程序段执行函数体中的程序段

10、所取得的并返回给主调函数的值。所取得的并返回给主调函数的值。 1、函数的值只能通过、函数的值只能通过return语句返回主调函数。语句返回主调函数。return 语句的一般形式为:语句的一般形式为: return 表达式;表达式; 或者为:或者为:return (表达式表达式);该语句的功能是计算表达式的值,并返回给主调函数。该语句的功能是计算表达式的值,并返回给主调函数。 有时函数可产生多个运行结果,有时函数可产生多个运行结果, 但但return()语句只能返回语句只能返回一个数据。一个数据。 在函数中允许有多个在函数中允许有多个return语句,但每次调用只能有一个语句,但每次调用只能有一

11、个return 语句被执行,语句被执行, 因此只能返回一个函数值。因此只能返回一个函数值。注意:注意:Return语句有两个作用:一是结束函数的运行,二是带着语句有两个作用:一是结束函数的运行,二是带着运算的结果(表达式的值)返回主调函数。运算的结果(表达式的值)返回主调函数。 如果省略了如果省略了return语句,当函数中所有语句都执行完语句,当函数中所有语句都执行完后,也会自动返回主调函数。后,也会自动返回主调函数。2、函数值(回传值)的类型与被调用函数的类型说明、函数值(回传值)的类型与被调用函数的类型说明函数调用语句函数调用语句 被调函数类型被调函数类型 回传值类型回传值类型在定义函数

12、时,需要指定函数的类型:在定义函数时,需要指定函数的类型:例如:例如:int max(x,y);doubel a(c1,c2); 等等等等注意:注意:(1)、如函数值为整型,在函数定义时可以省去类型说明。)、如函数值为整型,在函数定义时可以省去类型说明。(3)、回传值类型和函数类型矛盾时,则以函数类型为准,)、回传值类型和函数类型矛盾时,则以函数类型为准,自动进行类型转换。自动进行类型转换。 (2)、不返回函数值的函数,可以明确定义为)、不返回函数值的函数,可以明确定义为“空类型空类型”, 类型说明符为类型说明符为“void”。可定义为:可定义为:void s(int n) 7.3 函数的调用

13、函数的调用(P82)一、函数调用的一般形式一、函数调用的一般形式函数名函数名 (实参表列)(实参表列)其中,实参以其中,实参以 “,” 分隔,形、实参数数量相等,类型一致。分隔,形、实参数数量相等,类型一致。 从主调函数和被调函数之间数据传送的角度看又可分为从主调函数和被调函数之间数据传送的角度看又可分为无参函数无参函数和和有参函数有参函数两种。两种。(1)无参函数无参函数函数定义、函数说明及函数调用中均不带参数。函数定义、函数说明及函数调用中均不带参数。 主调函主调函数和被调函数之间不进行参数传送。数和被调函数之间不进行参数传送。 (2)有参函数有参函数在函数定义及函数说明时都有参数,在函数

14、定义及函数说明时都有参数, 称为形式参数称为形式参数(简简称为形参称为形参)。进行函数调用时,主调函数将把实参的值传送给。进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。形参,供被调函数使用。二、函数调用的各种形式二、函数调用的各种形式1、直接调用、直接调用把函数调用作为一个语句:把函数调用作为一个语句:例如:例如:char c=a;putchar(c);这时不要函数带回值,只要求函数完成一定的操作。这时不要函数带回值,只要求函数完成一定的操作。2、构成表达式语句、构成表达式语句 函数作为表达式中的一项出现在表达式中,以函数返回函数作为表达式中的一项出现在表达式中,以函数返回值

15、参与表达式的运算。这种方式要求函数是有返回值的。值参与表达式的运算。这种方式要求函数是有返回值的。例如:例如: z=2*max(x,y);是一个赋值表达式,把是一个赋值表达式,把max的返回值赋予变量的返回值赋予变量z。 3、函数作为另一个函数调用的实际参数出现。、函数作为另一个函数调用的实际参数出现。 这种情况是把该函数的返回值作为实参进行传送,因这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。此要求该函数必须是有返回值的。例如:例如: printf(%d,max(x,y); 即是把即是把max调用的返回值又作为调用的返回值又作为printf函数的实参来使函数的实

16、参来使用的。用的。 例如:例如:max(max(a,b),max(c,d);三、对被调函数的说明三、对被调函数的说明 (P83) 函数说明在主调函数中调用某函数之前应对该被调函函数说明在主调函数中调用某函数之前应对该被调函数进行说明数进行说明, 这与使用变量之前要先进行变量说明是一这与使用变量之前要先进行变量说明是一样的。样的。 在主调函数中对被调函数作说明的目的是使编译在主调函数中对被调函数作说明的目的是使编译系统知道被调函数返回值的类型,系统知道被调函数返回值的类型, 以便在主调函数中按以便在主调函数中按此种类型对返回值作相应的处理。此种类型对返回值作相应的处理。 1、被调函数为库函数、被

17、调函数为库函数 对库函数的调用不需要再作说明,对库函数的调用不需要再作说明, 但必须把该函数的头但必须把该函数的头文件用文件用include命令包含在源文件前部。命令包含在源文件前部。 2、用户自定义的函数、用户自定义的函数一般应该在主调函数中对被调函数的返回值的类型做说明。一般应该在主调函数中对被调函数的返回值的类型做说明。对被调函数的说明也有两种格式,对被调函数的说明也有两种格式,一种为传统格式,其一般格式为:一种为传统格式,其一般格式为: 类型说明符类型说明符 被调函数名被调函数名();另一种为现代格式,其一般形式为:另一种为现代格式,其一般形式为: 类型说明符类型说明符 被调函数名被调

18、函数名(类型类型 形参,类型形参,类型 形参形参); 3、以下几种情况时可以省去主调函数中对被调函数的函数说明、以下几种情况时可以省去主调函数中对被调函数的函数说明 (1)、)、 如果被调函数的返回值是整型或字符型时,如果被调函数的返回值是整型或字符型时, 可以不可以不对被调函数作说明,而直接调用。对被调函数作说明,而直接调用。这时系统将自动对被调函这时系统将自动对被调函数返回值按整型处理。数返回值按整型处理。 (2)、)、当被调函数的函数定义出现在主调函数之前时当被调函数的函数定义出现在主调函数之前时, 在主调函数中也可以不对被调函数再作说明而直接调用。在主调函数中也可以不对被调函数再作说明

19、而直接调用。 (3)、)、如在所有函数定义之前,如在所有函数定义之前, 在函数外预先说明了各在函数外预先说明了各个函数的类型个函数的类型,则在以后的各主调函数中,可不再对被调,则在以后的各主调函数中,可不再对被调函数作说明。函数作说明。 例如:写一个判断素数的函数,在主函数输入一个整数,例如:写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息。输出是否为素数的信息。main()int a,c;scanf(%d,&a);c=ss(a);if(c=1) printf(%d 不是一个素数不是一个素数,a);else printf(%d 是一个素数是一个素数,a);getch();int

20、 ss(y)int y; int z=0,i;for (i=2; iy; i+) if (y%i = 0) z=1;break;return(z);例一:例一: 由键盘输入任意两个整数由键盘输入任意两个整数x、y,编写一个函数,编写一个函数mypow()用来求用来求x的的y次方。次方。main()int x,y,z;scanf(%d,%d,&x,&y);z=mypow(x,y);printf(pow(x,y)=%d,z);getch();int mypow(int x,int y)int i,p;p=1;for(i=1;i=y;i+) p=p*x;return p;例二:例二: 已知已知e=1

21、+1/1!+1/2!+ 1/3!+ 1/n!,试用公式求,试用公式求e的的近似值,要求累计加所有不小于近似值,要求累计加所有不小于106的项值,用函数的项值,用函数fun()完成完成任何数的阶乘。任何数的阶乘。int fun(int i)int j,k;k=1;for(j=1;j1.0e-6) n=1.0/fun(i); i+; e=e+n;printf(%f,e);getch();7.4 函数的嵌套调用函数的嵌套调用 (P194) C语言的函数定义都是互相平行的、独立的,即在定义语言的函数定义都是互相平行的、独立的,即在定义函数时,一个函数内不能包含另一个函数。函数时,一个函数内不能包含另一

22、个函数。 C语言不能嵌套语言不能嵌套定义定义函数,但可以函数,但可以嵌套嵌套调用函数。即在调用函数。即在调用一个函数过程中,又调用另一个函数。调用一个函数过程中,又调用另一个函数。即被调函数可以作为主调函数去调用其它函数。即被调函数可以作为主调函数去调用其它函数。7.5 函数的递归调用函数的递归调用(P198) 在递归调用中,在递归调用中, 主调函数又是被调函数主调函数又是被调函数。执行递归函。执行递归函数将反复调用其自身。数将反复调用其自身。 每调用一次就进入新的一层。每调用一次就进入新的一层。 在调用一个函数的过程中又出现在调用一个函数的过程中又出现直接或间接地调用该直接或间接地调用该函数

23、本身函数本身,称为函数的递归调用。,称为函数的递归调用。int f(int x) int y; z=f(y);return(z); 例如:例如:例如:例如: 有有5个人坐在一起,问第五个人多少岁?他说比第个人坐在一起,问第五个人多少岁?他说比第4个人大个人大2岁。问第岁。问第4个人岁数,他说比第个人岁数,他说比第3个人大个人大2岁。问第三个人,岁。问第三个人,又说比第又说比第2人大两岁。问第人大两岁。问第2个人,说比第一个人大两岁。最个人,说比第一个人大两岁。最后问第一个人,他说是后问第一个人,他说是10岁。请问第五个人多大?岁。请问第五个人多大?特点:问题的第特点:问题的第n项的求解,依赖于

24、项的求解,依赖于n-1项的求解结果。项的求解结果。 main() int c,n; scanf(%d,&n); c=a(n); printf(%d,c); getch();int a(m)int m; int z; if(m=1) z=10; else z=a(m-1)+2; return(z);举例:利用递归方法求举例:利用递归方法求 n!递归公式递归公式 n!=1n=0,1n*(n-1)!n1从递归函数的程序编写角度看,有两个关键点:从递归函数的程序编写角度看,有两个关键点:1、递归的出口:、递归的出口:即递归的结束条件,到何时不再递归调用下去。即递归的结束条件,到何时不再递归调用下去。2

25、、递归表达式:如、递归表达式:如 fact(n)=n*fact(n-1)7.6 数组作为函数参数数组作为函数参数一、数组元素作为函数参数一、数组元素作为函数参数 数组元素作为实参的函数调用与变量作为实参的函数组元素作为实参的函数调用与变量作为实参的函数调用参数的使用上完全相同。数调用参数的使用上完全相同。二、用数组名作为函数参数二、用数组名作为函数参数 数组名作为函数参数时不进行值传送而进行地址传送数组名作为函数参数时不进行值传送而进行地址传送。main()int a; scanf(%d,&a); add(a); printf(%d ,a); getch();add(b)int b;b=b+1

26、;main()int a10,i;for(i=0;i10;i+) scanf(%d,&ai);add(a);for(i=0;i10;i+) printf(%d ,ai);getch();add(b)int b10;int i;for(i=0;i10;i+) bi=bi+1;总结:总结:3、形、实参数组类型应一致保证正确读取数据。、形、实参数组类型应一致保证正确读取数据。2、形参数组通过获得实参数组首地址获得实参数组数据。、形参数组通过获得实参数组首地址获得实参数组数据。1、数组名作为形、实参的函数调用、数组名作为形、实参的函数调用-传址调用。传址调用。4、形、实参数组长度应相同保证读取全部有效

27、数据。、形、实参数组长度应相同保证读取全部有效数据。5、数组名作为形、实参是传址调用。形参数组中各元素的、数组名作为形、实参是传址调用。形参数组中各元素的值发生变化会使实参数组元素的值同时发生变化。值发生变化会使实参数组元素的值同时发生变化。main()static char str100;gets(str);inverse(str);puts(str);getch();例:写一个函数,使输入的一个字符串按反序存放,在主函数例:写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。中输入和输出字符串。inverse(str)char str ;char t;int i;for(

28、i=0;istrlen(str)/2;i+)t=stri;stri=strstrlen(str)-i-1;strstrlen(str)-i-1=t;7.7 局部变量和全局变量局部变量和全局变量 (P86) 局部变量也称为内部变量。局部变量是在函数内作局部变量也称为内部变量。局部变量是在函数内作定义说明的。定义说明的。其作用域仅限于函数内其作用域仅限于函数内, 离开该函数后再离开该函数后再使用这种变量是非法的。使用这种变量是非法的。 1、 主函数中定义的变量也只能在主函数中使用,不能在其主函数中定义的变量也只能在主函数中使用,不能在其它函数中使用。同时,主函数中也不能使用其它函数中定它函数中使用

29、。同时,主函数中也不能使用其它函数中定义的变量。义的变量。一、局部变量一、局部变量2、形参变量是属于被调函数的局部变量,实参变量是属于主、形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。调函数的局部变量。3、允许在不同的函数中使用相同的变量名允许在不同的函数中使用相同的变量名,它们代表不同的,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。对象,分配不同的单元,互不干扰,也不会发生混淆。 4、在一个函数的内部,可以在复合语句中定义变量在一个函数的内部,可以在复合语句中定义变量,这些变,这些变量值只能在本复合语句中有效,这些变量在离开复合语句时量值只能在本复合语

30、句中有效,这些变量在离开复合语句时失效,释放内存变量。失效,释放内存变量。二、全局变量二、全局变量 全局变量也称为外部变量,全局变量也称为外部变量,它是在函数外部定义的变它是在函数外部定义的变量。量。 它不属于哪一个函数,它属于一个源程序文件。它不属于哪一个函数,它属于一个源程序文件。其作其作用域是从定义变量的位置开始到本源文件结束。用域是从定义变量的位置开始到本源文件结束。 全局变量作为函数间数据联系的补充通道全局变量作为函数间数据联系的补充通道主调函数通过全局变量使用被调函数中的多个数据。主调函数通过全局变量使用被调函数中的多个数据。被调函数通过全局变量使用主调函数中的数据。被调函数通过全

31、局变量使用主调函数中的数据。3、外部变量可加强函数模块之间的数据联系,、外部变量可加强函数模块之间的数据联系, 但是又使函数但是又使函数要依赖这些变量,因而使得函数的独立性降低。从模块化程序要依赖这些变量,因而使得函数的独立性降低。从模块化程序设计的观点来看这是不利的,设计的观点来看这是不利的, 因此在不必要时尽量不要使用因此在不必要时尽量不要使用全局变量。全局变量。 1、如果定义外部变量的位置在引用变量的函数之后,应、如果定义外部变量的位置在引用变量的函数之后,应该用该用extern进行说明。进行说明。2、在同一源文件中,允许全局变量和局部变量同名。在局部、在同一源文件中,允许全局变量和局部

32、变量同名。在局部变量的作用域内,全局变量不起作用。变量的作用域内,全局变量不起作用。 例如:有一个一维数组,内放例如:有一个一维数组,内放10个同学成绩,写一个函个同学成绩,写一个函数,求出平均分、最高分和最低分。数,求出平均分、最高分和最低分。float max,min;main()int i;float aver,a10;float average();for(i=0;i10;i+) scanf(%f,&ai);aver=average(a);printf(max=%f,min=%f,aver=%fn,max,min,aver); getch();float average(a)float

33、 a10;float aver,sum=0; int i; max=min=sum=a0;for(i=1;imax) max=ai; if(aimin) min=ai; sum=sum+ai; aver=sum/10; return aver;7.8 动态存储变量和静态存储变量动态存储变量和静态存储变量 (P88)变量的生存期:变量的生存期: 自动变量和静态变量。自动变量和静态变量。变量的作用域:变量的作用域: 全局变量和局部变量。全局变量和局部变量。动态变量动态变量: 在程序运行期间根据需要动态的分配存储空间在程序运行期间根据需要动态的分配存储空间 的方式。的方式。静态变量静态变量: 在程序

34、运行期间分配固定的存储空间的方式。在程序运行期间分配固定的存储空间的方式。一、一、auto变量变量 (P86) 动态存储变量是在程序执行过程中,使用它时才分配存动态存储变量是在程序执行过程中,使用它时才分配存储单元,储单元, 使用完毕立即释放。使用完毕立即释放。 局部变量、函数的形式参数即属于此类存储方式。局部变量、函数的形式参数即属于此类存储方式。 auto int a,b=100;auto在大多数的情况下省略不写的。在大多数的情况下省略不写的。二、用二、用static声明局部变量声明局部变量 (P88) 静态局部变量是在编译时赋初值,即只赋初值一次静态局部变量是在编译时赋初值,即只赋初值一

35、次,在程序运行时它已有初值。以后每次调用函数时不再重新在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是赋初值而只是保留上次函数调用结束时的值保留上次函数调用结束时的值。 动态变量赋初值,不是在编译时进行的,而是在函动态变量赋初值,不是在编译时进行的,而是在函数调用时进行,每次调用函数重新给一次初值,相当于数调用时进行,每次调用函数重新给一次初值,相当于执行一次赋值。执行一次赋值。注意:注意:1、对静态局部变量,编译时、对静态局部变量,编译时自动赋初值自动赋初值0或或0。而对自动变量。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。来说,如果不赋初值则它的值是一个不确定的值

36、。2、虽然静态局部变量在函数调用结束后仍然存在,但其他函、虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能应用它。数不能应用它。f(a)int a;auto int b=0;static int c=3;b=b+1;c=c+1;return(a+b+c);main()int a=2,i;for(i=0;i3;i+) printf(%d,f(a);getch();例如:例如:计算:计算:1-5的阶乘的值的阶乘的值main()int i;for(i=1;i=5;i+) printf(%d!=%dn,i,fac(i);getch();fac(n)int n;static int f=1; f

37、=f*n; return(f);f(int j)static int a=10; int b=1; b+; printf(%d,%d,%dn,a,b,j); a+=10;main()int i; for(i=1;i=3;i+) f(i); getch(); 请写出程序运行的结果请写出程序运行的结果作业:作业:1、写两个函数,分别求两个整数的最大公约数和最小公、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。由键盘输入。2、写一个判断素数的函数,在主函数输入一个整数,输出、写一个判断素数

38、的函数,在主函数输入一个整数,输出是否为素数的信息。是否为素数的信息。3、 由键盘输入任意两个整数由键盘输入任意两个整数x、y,编写一个函数,编写一个函数mypow()用来求用来求x的的y次方。次方。4、有一个一维数组,内放、有一个一维数组,内放10个同学成绩,写一个函数,个同学成绩,写一个函数,求出平均分、最高分和最低分。在主函数中输入是个同求出平均分、最高分和最低分。在主函数中输入是个同学的分数,并输出结果,在自定义函数中求平均分、最学的分数,并输出结果,在自定义函数中求平均分、最高分和最低分。高分和最低分。5、编写一个函数,由实参传来一个字符串,统计此字符串、编写一个函数,由实参传来一个字符串,统计此字符串中字符、数字、空格和其他字符的个数,在主函数输入字中字符、数字、空格和其他字符的个数,在主函数输入字符串,以及输出上述信息。符串,以及输出上述信息。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号