C语言第7讲函数省公共课一等奖全国赛课获奖课件.pptx
《C语言第7讲函数省公共课一等奖全国赛课获奖课件.pptx》由会员分享,可在线阅读,更多相关《C语言第7讲函数省公共课一等奖全国赛课获奖课件.pptx(68页珍藏版)》请在咨信网上搜索。
第7讲 函 数C语语言言是是经经过过函函数数来来实实现现模模块块化化程程序序设设计计。所所以以较较大大C语语言言应应用用程程序序,往往往往由由一一个个主主函函数数和和若若干干个个函函数数组组成成。由由主主函函数数调调用用其其它它函函数数,其其它它函函数数也也能能够够相相互互调调用用。同同一一个个函函数数能能够够被被一一个个或或多多个个函函数数调调用用任任意屡次。意屡次。7.1函数定义与调用函数定义与调用7.2函数嵌套调用与递归调用函数嵌套调用与递归调用7.3数组作为函数参数数组作为函数参数7.4内部变量与外部变量内部变量与外部变量7.5变量动态存放与静态存放变量动态存放与静态存放Return第1页7.1函数定义与调用函数定义与调用7.1.1 7.1.1 函数定义函数定义7.1.2 7.1.2 函数返回值与函数类型函数返回值与函数类型7.1.3 7.1.3 对被调用函数说明和函数原型对被调用函数说明和函数原型7.1.4 7.1.4 函数调用函数调用7.1.5 7.1.5 函数形参加实参函数形参加实参 Return第2页7.1.1函数定义函数定义1任任何何函函数数(包包含含主主函函数数main())都都是是由由函函数数说说明明和和函函数数体体两两部部分分组组成成。依依据据函函数数是是否否需需要要参参数数,可可将将函函数数分分为为无无参参函函数数和和有有参函数两种。参函数两种。(1)无参函数普通形式)无参函数普通形式函数类型函数类型函数名函数名(void)说明语句部分;说明语句部分;可执行语句部分;可执行语句部分;注注意意:在在旧旧标标准准中中,函函数数能能够够缺缺省省参参数数表表。但但在在新新标标准准中中,函函数数不不可可缺缺省省参参数数表表;假假如如不不需需要要参参数数,则则用用“void”表表示示,主主函函数数main()例外。例外。第3页(2)有参函数普通形式)有参函数普通形式函数类型函数类型函数名函数名(数据类型数据类型参数参数,数据类型,数据类型参数参数2)说明语句部分;说明语句部分;可执行语句部分;可执行语句部分;有有参参函函数数比比无无参参函函数数多多了了一一个个参参数数表表。调调用用有有参参函函数数时时,调调用用函函数将赋予这些参数实际值。数将赋予这些参数实际值。为为了了与与调调用用函函数数提提供供实实际际参参数数区区分分开开,将将函函数数定定义义中中参参数数表表称称为为形式参数表,简称形参表。形式参数表,简称形参表。第4页案例案例7.1定义一个函数,用于求两个数中大数。定义一个函数,用于求两个数中大数。/*案案例例代代码码文文件件名名:AL7_1.C功功效效:定定义义一一个个求求较较大大数数函函数数并并在在主主函函数数中调用中调用*/#includeintmax(intn1,intn2)/*定义一个函数定义一个函数max()*/intc;if(n1n2)c=n1;elsec=n2;returnc;main()intnum1,num2,nmax;printf(inputtwonumbers:n);scanf(%d%d,&num1,&num2);nmax=max(num1,num2);printf(max=%dn,nmax);return(n1n2?n1:n2);第5页2说明说明(1)函数定义不允许嵌套。)函数定义不允许嵌套。在在语语言言中中,全全部部函函数数(包包含含主主函函数数main())都都是是平平行行。一一个个函函数数定定义义,能能够够放放在在程程序序中中任任意意位位置置,主主函函数数main()之之前前或或之之后后。但在一个函数函数体内,不能再定义另一个函数,即不能嵌套定义。但在一个函数函数体内,不能再定义另一个函数,即不能嵌套定义。(2)空函数)空函数既无参数、函数体又为空函数。其普通形式为:既无参数、函数体又为空函数。其普通形式为:函数类型函数类型函数名函数名(void)Return第6页7.1.2 函数返回值与函数类型函数返回值与函数类型语语言言函函数数兼兼有有其其它它语语言言中中函函数数和和过过程程两两种种功功效效,从从这这个个角角度度看,又可把函数分为有返回值函数和无返回值函数两种。看,又可把函数分为有返回值函数和无返回值函数两种。1函数返回值与函数返回值与return语句语句有参函数返回值,是经过函数中有参函数返回值,是经过函数中return语句来取得。语句来取得。(1)return语句普通格式:语句普通格式:return(返回值表示式返回值表示式);(2)return语语句句功功效效:返返回回调调用用函函数数,并并将将“返返回回值值表表示示式式”值带给调用函数。值带给调用函数。注注意意:调调用用函函数数中中无无return语语句句,并并不不是是不不返返回回一一个个值值,而而是是一一个个不不确确定定值值。为为了了明明确确表表示示不不返返回回值值,能能够够用用“void”定定义义成成“无(空)类型无(空)类型”。第7页2函数类型函数类型在在定定义义函函数数时时,对对函函数数类类型型说说明明,应应与与return语语句句中中、返返回值表示式类型一致。回值表示式类型一致。假假如如不不一一致致,则则以以函函数数类类型型为为准准。假假如如缺缺省省函函数数类类型型,则则系统一律按整型处理。系统一律按整型处理。良良好好程程序序设设计计习习惯惯:为为了了使使程程序序含含有有良良好好可可读读性性并并降降低低犯犯错错,凡凡不不要要求求返返回回值值函函数数都都应应定定义义为为空空类类型型;即即使使函函数数类类型型为为整型,也不使用系统缺省处理。整型,也不使用系统缺省处理。Return第8页7.1.3 对被调用函数说明和函数原型对被调用函数说明和函数原型在在ANSIC新新标标准准中中,采采取取函函数数原原型型方方式式,对对被被调调用用函函数数进进行行说说明明,其其普普通格式以下:通格式以下:函数类型函数类型 函数名函数名(数据类型数据类型 参数名参数名,数据类型数据类型 参数名参数名2)2);语言同时又要求,在以下语言同时又要求,在以下2种情况下,能够省去对被调用函数说明:种情况下,能够省去对被调用函数说明:(1)当当被被调调用用函函数数函函数数定定义义出出现现在在调调用用函函数数之之前前时时。因因为为在在调调用用之之前前,编译系统已经知道了被调用函数函数类型、参数个数、类型和次序。编译系统已经知道了被调用函数函数类型、参数个数、类型和次序。(2)假假如如在在全全部部函函数数定定义义之之前前,在在函函数数外外部部(比比如如文文件件开开始始处处)预预先先对对各个函数进行了说明,则在调用函数中可缺省对被调用函数说明。各个函数进行了说明,则在调用函数中可缺省对被调用函数说明。Return第9页7.1.4函数调用函数调用在在程程序序中中,是是经经过过对对函函数数调调用用来来执执行行函函数数体体,其其过过程程与与其其它它语语言言子子程序调用相同。程序调用相同。语言中,函数调用普通形式为:语言中,函数调用普通形式为:函数名函数名(实际参数表实际参数表)切切记记:实实参参个个数数、类类型型和和次次序序,应应该该与与被被调调用用函函数数所所要要求求参参数数个个数数、类型和次序一致,才能正确地进行数据传递。类型和次序一致,才能正确地进行数据传递。在语言中,能够用以下几个方式调用函数:在语言中,能够用以下几个方式调用函数:(1)函函数数表表示示式式。函函数数作作为为表表示示式式一一项项,出出现现在在表表示示式式中中,以以函函数返回值参加表示式运算。这种方式要求函数是有返回值。数返回值参加表示式运算。这种方式要求函数是有返回值。(2)函函数数语语句句。C语语言言中中函函数数能能够够只只进进行行一一些些操操作作而而不不返返回回函函数数值,这时函数调用可作为一条独立语句。值,这时函数调用可作为一条独立语句。(3)函函数数实实参参。函函数数作作为为另另一一个个函函数数调调用用实实际际参参数数出出现现。这这种种情情况况是是把把该该函函数数返返回回值值作作为为实实参参进进行行传传送送,所所以以要要求求该该函函数数必必须须是是有有返返回回值。值。第10页7.1.5 函数形参加实参函数形参加实参函函数数参参数数分分为为形形参参和和实实参参两两种种,作作用用是是实实现现数数据据传传送。送。形参出现在函数定义中,只能在该函数体内使用。形参出现在函数定义中,只能在该函数体内使用。发生函数调用时,调用函数把实参值复制发生函数调用时,调用函数把实参值复制1份,传送给被份,传送给被调用函数形参,从而实现调用函数向被调用函数数据传调用函数形参,从而实现调用函数向被调用函数数据传送。送。案例案例7.3实参对形参数据传递。实参对形参数据传递。/*实参对形参数据传递。实参对形参数据传递。*/*案例代码文件名:案例代码文件名:AL7_3.C*/第11页#includevoidmain()voids(intn);/*说明函数说明函数*/intn=100;/*定义实参定义实参n,并初始化,并初始化*/s(n);/*调用函数调用函数*/printf(n_s=%dn,n);/*输出调用后实参值,便于进行比较输出调用后实参值,便于进行比较*/voids(intn)inti;printf(n_x=%dn,n);/*输出改变前形参值输出改变前形参值*/for(i=n-1;i=1;i-)n=n+i;/*改变形参值改变形参值*/printf(n_x=%dn,n);/*输出改变后形参值输出改变后形参值*/程序演示第12页说明:说明:(1)实实参参能能够够是是常常量量、变变量量、表表示示式式、函函数数等等。不不论论实实参参是是何何种种类类型型量量,在在进进行行函函数数调调用用时时,它它们们都都必必须须含含有有确确定定值值,方方便便把把这这些些值值传传送送给形参。给形参。所以,应预先用赋值、输入等方法,使实参取得确定值。所以,应预先用赋值、输入等方法,使实参取得确定值。(2)形形参参变变量量只只有有在在被被调调用用时时,才才分分配配内内存存单单元元;调调用用结结束束时时,即即刻释放所分配内存单元。刻释放所分配内存单元。所所以以,形形参参只只有有在在该该函函数数内内有有效效。调调用用结结束束,返返回回调调用用函函数数后后,则则不能再使用该形参变量。不能再使用该形参变量。(3)实实参参对对形形参参数数据据传传送送是是单单向向,即即只只能能把把实实参参值值传传送送给给形形参参,而而不能把形参值反向地传送给实参。不能把形参值反向地传送给实参。(4)实参和形参占用不一样内存单元,即使同名也互不影响。)实参和形参占用不一样内存单元,即使同名也互不影响。Return第13页7.2函数嵌套调用和递归调用7.2.1函数嵌套调用函数嵌套调用函函数数嵌嵌套套调调用用是是指指,在在执执行行被被调调用用函函数数时时,被被调调用用函函数数又又调调用用了了其其它它函函数数。这这与与其其它它语语言言子子程程序序嵌嵌套套调调用用情情形形是是类类似似,其其关关系系可可表示如图表示如图7-1。第14页案例案例7.4计算计算s=1k+2k+3k+Nk/*案例代码文件名:案例代码文件名:AL7_4.C功效:函数嵌套调用功效:函数嵌套调用*/#include#defineK4#defineN5longf1(intn,intk)/*计算计算nk次方次方*/longpower=n;inti;for(i=1;ik;i+)power*=n;returnpower;longf2(intn,intk)/*计算计算1到到nk次方之累加和次方之累加和*/longsum=0;inti;for(i=1;i=n;i+)sum+=f1(i,k);returnsum;main()printf(Sumof%dpowersofintegersfrom1to%d=,K,N);printf(%dn,f2(N,K);第15页7.2.2 函数递归调用函数递归调用函数递归调用是指,一个函数在它函数体内,直接或间接地调函数递归调用是指,一个函数在它函数体内,直接或间接地调用它本身。用它本身。语语言言允允许许函函数数递递归归调调用用。在在递递归归调调用用中中,调调用用函函数数又又是是被被调调用用函函数数,执执行行递递归归函函数数将将重重复复调调用用其其本本身身。每每调调用用一一次次就就进进入入新新一一层。层。为为了了预预防防递递归归调调用用无无终终止止地地进进行行,必必须须在在函函数数内内有有终终止止递递归归调调用用伎伎俩俩。惯惯用用方方法法是是加加条条件件判判断断,满满足足某某种种条条件件后后就就不不再再作作递递归归调调用,然后逐层返回。用,然后逐层返回。了解了解“回推回推”和和“递推递推”过程。过程。第16页案例案例7.5用递归法计算用递归法计算n!。/*功效:经过函数递归调用计算阶乘功效:经过函数递归调用计算阶乘*/#includelongpower(intn)longf;if(n1)f=power(n-1)*n;elsef=1;return(f);main()intn;longy;printf(inputainteagernumber:n);scanf(%d,&n);y=power(n);printf(%d!=%ldn,n,y);程序演示程序演示经典古典问题经典古典问题:Hanoi塔问题(课下了解)塔问题(课下了解)Return第17页4月月1、在、在C语言中,函数返回值类型最终取决于语言中,函数返回值类型最终取决于()A)函数定义时在函数首部所说明函数类型函数定义时在函数首部所说明函数类型B)return语句中表示式值类型语句中表示式值类型C)调用函数时主函数所传递实参类型调用函数时主函数所传递实参类型D)函数定义时形参类型函数定义时形参类型第18页9月月1、若函数调用时实参为变量时,以下关于函数形参和实参叙述中正、若函数调用时实参为变量时,以下关于函数形参和实参叙述中正确是确是A)函数实参和其对应形参共占同一存放单元函数实参和其对应形参共占同一存放单元B)形参只是形式上存在,不占用详细存放单元形参只是形式上存在,不占用详细存放单元C)同名实参和形参占同一存放单元同名实参和形参占同一存放单元D)函数形参和实参分别占用不一样存放单元函数形参和实参分别占用不一样存放单元第19页4月月1、有以下程序、有以下程序#includeintf(intx)inty;if(x=0|x=1)return(3);y=x*x-f(x-2);returny;main()intz;z=f(3);printf(%dn,z);程序运行结果是程序运行结果是A)0B)9C)6D)8第20页4月月2、以下程序输出结果是【、以下程序输出结果是【13】。】。#includevoidfun(intx)if(x/20)fun(x/2);printf(%d,x);main()fun(3);printf(n);13第21页9月月1、下面函数调用语句中、下面函数调用语句中func函数实参个数是函数实参个数是func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8);A)3B)4C)5D)82、有以下程序有以下程序#includeintfun(inta,intb)if(b=0)returna;elsereturn(fun(-a,-b);main()printf(%dn,fun(4,2);程序运行结果是程序运行结果是A)1B)2C)3D)4第22页9月月3、以下叙述中错误是、以下叙述中错误是A)用户定义函数中能够没有用户定义函数中能够没有return语句语句B)用户定义函数中能够有多个用户定义函数中能够有多个return语句,方便能够调用一次返回多语句,方便能够调用一次返回多个函数值个函数值C)用户定义函数中若没有用户定义函数中若没有return语句,则应该定义函数为语句,则应该定义函数为void类型类型D)函数函数return语句中能够没有表示式语句中能够没有表示式第23页3月月1、有以下程序、有以下程序#includeintf(intx,inty)return(y-x)*x);main()inta=3,b=4,c=5,d;d=f(f(a,b),f(a,c);printf(%dn,d);程序运行后输出结果是程序运行后输出结果是A)10B)9C)8D)7第24页3月月2、有以下程序、有以下程序#includeintfun(intx,inty)if(x=y)return(x);elsereturn(x+y)/2);main()inta=4,b=5,c=6;printf(%dn,fun(2*a,fun(b,c);程序运行后输出结果是程序运行后输出结果是A)3B)6C)8D)12第25页9月月1、有以下程序、有以下程序#includevoidfun(intp)intd=2;p=d+;printf(%d,p);main()inta=1;fun(a);printf(%dn,a);程序运行后输出结果是程序运行后输出结果是A)32B)12C)21D)22第26页9月月2、有以下程序、有以下程序#includefun(intx)if(x/20)fun(x/2);printf(%d,x);main()fun(6);printf(n);程序运行后输出结果是【程序运行后输出结果是【】136第27页3月月1、以下关于、以下关于return语句叙述中正确是语句叙述中正确是A)一个自定义函数中必须有一条一个自定义函数中必须有一条return语句语句B)一个自定义函数中能够依据不一样情况设置多条一个自定义函数中能够依据不一样情况设置多条return语句语句C)定义成定义成void类型函数中能够有带返回值类型函数中能够有带返回值return语句语句D)没有没有return语句自定义函数在执行结束时不能返回到调用处语句自定义函数在执行结束时不能返回到调用处第28页题盘练习题盘练习第一部分第一部分第29页7.3数组作为函数参数数组作为函数参数数组用作函数参数有两种形式:一个是把数组元素数组用作函数参数有两种形式:一个是把数组元素(又称下标变量)作为实参使用;另一个是把数组名作(又称下标变量)作为实参使用;另一个是把数组名作为函数形参和实参使用。为函数形参和实参使用。7.3.1数组元素作为函数参数数组元素作为函数参数7.3.2数组名作为函数形参和实参数组名作为函数形参和实参Return第30页7.3.1 数组元素作为函数参数数组元素作为函数参数数数组组元元素素就就是是下下标标变变量量,它它与与普普通通变变量量并并无无区区分分。数数组组元元素素只只能能用用作作函函数数实实参参,其其使使用用方方法法与与普普通通变变量量完完全全相相同同:在在发发生生函函数数调调用用时,把数组元素值传送给形参,实现单向值传送。时,把数组元素值传送给形参,实现单向值传送。案例案例7.6写一函数,统计字符串中字母个数。写一函数,统计字符串中字母个数。/*案例代码文件名:案例代码文件名:AL7_6.C*/*功效:数组元素作为函数实参功效:数组元素作为函数实参*/第31页#includeintisalp(charc)if(c=a&c=A&c=Z)return(1);elsereturn(0);main()inti,num=0;charstr255;printf(Inputastring:);gets(str);for(i=0;stri!=0;i+)if(isalp(stri)num+;puts(str);printf(num=%dn,num);程序演示程序演示第32页说明:说明:(1)用用数数组组元元素素作作实实参参时时,只只要要数数组组类类型型和和函函数数形形参参类类型型一一致致即即可可,并并不不要要求求函函数数形形参参也也是是下下标标变变量量。换换句句话话说说,对对数数组组元元素素处处理是按普通变量对待。理是按普通变量对待。(2)在在普普通通变变量量或或下下标标变变量量作作函函数数参参数数时时,形形参参变变量量和和实实参参变变量量是是由由编编译译系系统统分分配配两两个个不不一一样样内内存存单单元元。在在函函数数调调用用时时发发生生值值传传送,是把实参变量值赋予形参变量。送,是把实参变量值赋予形参变量。Return第33页7.3.2 数组名作为函数形参和实参数组名作为函数形参和实参数组名作函数参数时,既能够作形参,也能够作实参。数组名作函数参数时,既能够作形参,也能够作实参。数数组组名名作作函函数数参参数数时时,要要求求形形参参和和相相对对应应实实参参都都必必须须是是类类型型相相同同数组(或指向数组指针变量),都必须有明确数组说明数组(或指向数组指针变量),都必须有明确数组说明案例案例7.7已知某个学生已知某个学生5门课程成绩,求平均成绩。门课程成绩,求平均成绩。/*案例代码文件名:案例代码文件名:AL7_7.C*/floataver(floata)/*求平均值函数求平均值函数*/inti;floatav,s=0;for(i=0;i5;i+)s+=ai;av=s/5;returnav;第34页voidmain()floatsco5,av;inti;printf(ninput5scores:n);for(i=0;i5;i+)scanf(%f,&scoi);av=aver(sco);/*调用函数,实参为一数组名调用函数,实参为一数组名*/printf(averagescoreis%5.2fn,av);程序演示程序演示深入:深入:思索思索1:将函数将函数aver改写成通用求改写成通用求n个数平均数?个数平均数?floataver(floata,intn)调用处改为:调用处改为:av=aver(sco,5);思思索索2:假假如如在在函函数数aver中中改改变变了了数数组组值值,调调用用函函数数中中是是否否随随之之改变?改变?第35页元素元素起始起始地址地址a010001000a110021002a210041004a310061006ai10081008a510101010a610121012a710141014a810161016a910181018a数组数组元素元素起始起始地址地址sco010001000sco110021002sco210041004sco310061006scoi10081008sco510101010sco610121012sco710141014sco810161016sco910181018第36页说明说明:(1)用用数数组组名名作作函函数数参参数数,应应该该在在调调用用函函数数和和被被调调用用函函数数中中分分别别定定义义数数组组,且且数数据据类类型型必必须须一一致致,不不然然结结果果将将犯犯错错。比比如如,在在本本案案例例中中,形形参参数数组组为为a,实实参参数数组组为为sco,它它们们数据类型相同。数据类型相同。(2)C编编译译系系统统对对形形参参数数组组大大小小不不作作检检验验,所所以以形形参参数数组能够不指定大小。比如,本案例中形参数组组能够不指定大小。比如,本案例中形参数组a。Return第37页7.4内部变量与外部变量内部变量与外部变量语语言言中中全全部部变变量量都都有有自自己己作作用用域域。变变量量说说明明位位置置不不一一样样,其其作作用用域域也也不不一一样样,据据此此将将语语言言中中变变量分为内部变量和外部变量。量分为内部变量和外部变量。7.4.1 内部变量内部变量7.4.2 外部变量外部变量Return第38页7.4.1 内部变量内部变量在在一一个个函函数数内内部部说说明明变变量量是是内内部部变变量量,它它只只在在该该函数范围内有效。函数范围内有效。也也就就是是说说,只只有有在在包包含含变变量量说说明明函函数数内内部部,才才能能使使用用被被说说明明变变量量,在在此此函函数数之之外外就就不不能能使使用用这这些些变变量量了。所以内部变量也称了。所以内部变量也称“局部变量局部变量”。第39页比如:比如:intf1(inta)/*函数函数f1*/intb,c;/*a,b,c作用域:仅限于函数作用域:仅限于函数f1()中中*/intf2(intx)/*函数函数f2*/inty,z;/*x,y,z作用域:仅限于函数作用域:仅限于函数f2()中中*/main()intm,n;/*m,n作用域:仅限于函数作用域:仅限于函数main()中中*/第40页关于局部变量作用域还要说明以下几点:关于局部变量作用域还要说明以下几点:1主主函函数数main()中中定定义义内内部部变变量量,也也只只能能在在主主函函数数中中使使用用,其其它它函函数数不不能能使使用用。同同时时,主主函函数数中中也也不不能能使使用用其其它它函函数数中中定定义义内内部部变变量量。因因为为主主函函数数也也是是一一个个函函数数,与与其其它它函函数数是是平平行行关关系系。这这一一点点是是与与其其它它语语言不一样,应给予注意。言不一样,应给予注意。2形形参参变变量量也也是是内内部部变变量量,属属于于被被调调用用函函数数;实实参参变变量量,则则是是调调用函数内部变量。用函数内部变量。3允允许许在在不不一一样样函函数数中中使使用用相相同同变变量量名名,它它们们代代表表不不一一样样对对象象,分配不一样单元,互不干扰,也不会发生混同。分配不一样单元,互不干扰,也不会发生混同。4在复合语句中也可定义变量,其作用域只在复合语句范围内。在复合语句中也可定义变量,其作用域只在复合语句范围内。Return第41页7.4.2 外部变量外部变量在在函函数数外外部部定定义义变变量量称称为为外外部部变变量量。以以这这类类推推,在在函数外部定义数组就称为外部数组。函数外部定义数组就称为外部数组。外外部部变变量量不不属属于于任任何何一一个个函函数数,其其作作用用域域是是:从从外外部变量定义位置开始,到本文件结束为止。部变量定义位置开始,到本文件结束为止。外外部部变变量量可可被被作作用用域域内内全全部部函函数数直直接接引引用用,所所以以外外部变量又称全局变量。部变量又称全局变量。第42页案案例例7.9输输入入长长方方体体长长(l)、宽宽(w)、高高(h),求求长长方方体体体体积积及正、侧、顶三个面面积。及正、侧、顶三个面面积。/*功效:利用全局变量计算长方体体积及三个面面积功效:利用全局变量计算长方体体积及三个面面积*/ints1,s2,s3;intvs(inta,intb,intc)intv;v=a*b*c;s1=a*b;s2=b*c;s3=a*c;returnv;main()intv,l,w,h;printf(ninputlength,widthandheight:);scanf(%d%d%d,&l,&w,&h);v=vs(l,w,h);printf(v=%ds1=%ds2=%ds3=%dn,v,s1,s2,s3);程序演示第43页对于全局变量还有以下几点说明:对于全局变量还有以下几点说明:(1)在在同同一一源源文文件件中中,允允许许外外部部变变量量和和内内部部变变量量同同名名。在在内内部部变变量作用域内,外部变量将被屏蔽而不起作用。量作用域内,外部变量将被屏蔽而不起作用。(2)外外部部变变量量作作用用域域是是从从定定义义点点到到本本文文件件结结束束。假假如如定定义义点点之之前前函函数数需需要要引引用用这这些些外外部部变变量量时时,需需要要在在函函数数内内对对被被引引用用外外部部变变量量进进行行说明。外部变量说明普通形式为:说明。外部变量说明普通形式为:extern数据类型数据类型外部变量外部变量,外部变量,外部变量2;注意注意:外部变量定义和外部变量说明是两回事。外部变量定义,:外部变量定义和外部变量说明是两回事。外部变量定义,必须在全部函数之外,且只能定义一次。而外部变量说明,出现在要必须在全部函数之外,且只能定义一次。而外部变量说明,出现在要使用该外部变量函数内,而且能够出现屡次。使用该外部变量函数内,而且能够出现屡次。第44页案例案例7.10外部变量定义与说明。外部变量定义与说明。/*案例代码文件名:案例代码文件名:AL7_10.C*/intvs(intxl,intxw)externintxh;/*外部变量外部变量xh说明说明*/intv;v=xl*xw*xh;/*直接使用外部变量直接使用外部变量xh值值*/returnv;main()externintxw,xh;/*外部变量说明外部变量说明*/intxl=5;/*内部变量定义内部变量定义*/printf(xl=%d,xw=%d,xh=%dnv=%d,xl,xw,xh,vs(xl,xw);intxl=3,xw=4,xh=5;/*外部变量外部变量xl、xw、xh定义定义*/程序演示程序演示Return第45页7.5变量动态存放与静态存放介绍变量动态存放与静态存放介绍在在语语言言中中,对对变变量量存存放放类类型型说说明明有有以以下下四四种种:自自动动变变量量(auto)、存存放放器器变变量量(register)、外外部部变变量量(extern)、静静态态变变量量(static)。自自动动变变量量和和存存放放器器变变量量属属于于动动态态存存放放方方式式,外外部部变变量量和和静静态态内内部部变变量量属属于于静态存放方式。静态存放方式。7.5.1内部变量存放方式内部变量存放方式7.5.2 外部变量存放方式外部变量存放方式Return第46页7.5.1内部变量存放方式内部变量存放方式1静态存放静态存放静态内部变量静态内部变量(1)定义格式:)定义格式:static数据类型数据类型内部变量表;内部变量表;(2)存放特点)存放特点1)静静态态内内部部变变量量属属于于静静态态存存放放。在在程程序序执执行行过过程程中中,即即使使所所在在函函数数调调用用结结束束也也不不释释放放。换换句句话话说说,在在程程序序执执行行期期间间,静静态态内内部部变变量量一一直直存存在在,但但其其它它函函数数是是不不能能引引用用它它们。们。2)定定义义但但不不初初始始化化,则则自自动动赋赋以以(整整型型和和实实型型)或或0(字字符符型型);且且每每次次调调用用它它们们所所在在函函数数时时,不不再再重重新赋初值,只是保留上次调用结束时值!新赋初值,只是保留上次调用结束时值!第47页2动态存放动态存放自动局部变量(又称自动变量)自动局部变量(又称自动变量)(1)定义格式:)定义格式:auto数据类型数据类型变量表;变量表;(2)存放特点)存放特点1)自自动动变变量量属属于于动动态态存存放放方方式式。在在函函数数中中定定义义自自动动变变量量,只只在在该函数内有效;函数被调用时分配存放空间,调用结束就释放。该函数内有效;函数被调用时分配存放空间,调用结束就释放。2)定定义义而而不不初初始始化化,则则其其值值是是不不确确定定。假假如如初初始始化化,则则赋赋初初值值操作是在调用时进行,且每次调用都要重新赋一次初值。操作是在调用时进行,且每次调用都要重新赋一次初值。3)因因为为自自动动变变量量作作用用域域和和生生存存期期,都都局局限限于于定定义义它它个个体体内内(函函数数或或复复合合语语句句),所所以以不不一一样样个个体体中中允允许许使使用用同同名名变变量量而而不不会会混混同同。即即使使在在函函数数内内定定义义自自动动变变量量,也也可可与与该该函函数数内内部部复复合合语语句句中中定定义义自自动变量同名。动变量同名。第48页案例案例7.13自动变量与静态局部变量存放特征。自动变量与静态局部变量存放特征。/*案例代码文件名:案例代码文件名:AL7_13.C*/voidauto_static(void)inta=0;/*自动变量:每次调用都重新初始化自动变量:每次调用都重新初始化*/staticintb=0;/*静态局部变量:只初始化静态局部变量:只初始化1次次*/printf(“%d,%dn”,a,b);+a;+b;main()inti;for(i=0;i5;i+)auto_static();程序演示程序演示第49页7.5.2 外部变量存放方式外部变量存放方式外部变量属于静态存放方式:外部变量属于静态存放方式:(1)静态外部变量)静态外部变量只允许被根源文件中函数引用只允许被根源文件中函数引用其定义格式为:其定义格式为:static数据类型数据类型外部变量表;外部变量表;(2)非静态外部变量)非静态外部变量允许被其它源文件中函数引用允许被其它源文件中函数引用定定义义时时缺缺省省static关关键键字字外外部部变变量量,即即为为非非静静态态外外部部变变量量。其其它它源源文文件件中中函函数数,引引用用非非静静态态外外部部变变量量时时,需需要要在在引引用用函函数数所所在在源源文文件件中中进进行说明:行说明:extern数据类型数据类型外部变量表;外部变量表;注意注意:在函数内:在函数内extern变量说明,表示引用根源文件中外部变量!变量说明,表示引用根源文件中外部变量!而函数外(通常在文件开头)而函数外(通常在文件开头)extern变量说明,表示引用其它文件中外变量说明,表示引用其它文件中外部变量。部变量。第50页静态局部变量和静态外部变量同属静态存放方式,但二者区分较大:静态局部变量和静态外部变量同属静态存放方式,但二者区分较大:(1)定定义义位位置置不不一一样样。静静态态局局部部变变量量在在函函数数内内定定义义,静静态态外外部部变变量量在在函数外定义。函数外定义。(2)作作用用域域不不一一样样。静静态态局局部部变变量量属属于于内内部部变变量量,其其作作用用域域仅仅限限于于定定义它函数内;即使生存期为整个源程序,但其它函数是不能使用它。义它函数内;即使生存期为整个源程序,但其它函数是不能使用它。静静态态外外部部变变量量在在函函数数外外定定义义,其其作作用用域域为为定定义义它它源源文文件件内内;生生存存期期为为整个源程序,但其它源文件中函数也是不能使用它。整个源程序,但其它源文件中函数也是不能使用它。(3)初始化处理不一样。静态局部变量,仅在第)初始化处理不一样。静态局部变量,仅在第1次调用它所在函数次调用它所在函数时被初始化,当再次调用定义它函数时,不再初始化,而是保留上时被初始化,当再次调用定义它函数时,不再初始化,而是保留上1次调次调用结束时值。而静态外部变量是在函数外定义,不存在静态内部变量用结束时值。而静态外部变量是在函数外定义,不存在静态内部变量“重重复复”初始化问题,其当前值由最近初始化问题,其当前值由最近1次给它赋值操作决定。次给它赋值操作决定。第51页4月月1、有以下程序、有以下程序inta=4;intf(intn)intt=0;staticinta=5;if(n%2)inta=6;t+=a+;elseinta=7;+=a+;returnt+a+;main()()ints=a,i=0;for(;(;i2;i+)s+=f(i);printf(“%dn”,s);程序运行后输出结果是程序运行后输出结果是()A)24B)28C)32D)36第52页4月月2、以下程序运行结果是、以下程序运行结果是_。intk=0;voidfun(intm)m+=k;k+=m;printf(“m=%dk=%d”,m,k+);main()inti=4;fun(i+);printf(“i=%dk=%dn”,i,k);m=4k=4i=5k=5第53页9月月1、在一个、在一个C语言源程序文件中所定义全局变量,其作用域为:语言源程序文件中所定义全局变量,其作用域为:A)所在文件全部范围所在文件全部范围B)所在程序全部范围所在程序全部范围C)所在函数全部范围所在函数全部范围D)由详细定义位置和由详细定义位置和extern说明来决定范围说明来决定范围第54页9月月1、有以下程序、有以下程序#includeinta=1;intf(intc)staticinta=2;c=c+1;return(a+)+c;main()inti,k=0;for(i=0;i2;i+)inta=3;k+=f(a);k+=a;printf(“%dn”,k);程序运行结果是程序运行结果是A)14B)15C)16D)17第55页4月月1、在、在C语言中,只有在使用时才占用内存单- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 函数 公共课 一等奖 全国 获奖 课件
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文