收藏 分销(赏)

第八章函数省公共课一等奖全国赛课获奖课件.pptx

上传人:w****g 文档编号:3540281 上传时间:2024-07-09 格式:PPTX 页数:58 大小:257.39KB
下载 相关 举报
第八章函数省公共课一等奖全国赛课获奖课件.pptx_第1页
第1页 / 共58页
第八章函数省公共课一等奖全国赛课获奖课件.pptx_第2页
第2页 / 共58页
第八章函数省公共课一等奖全国赛课获奖课件.pptx_第3页
第3页 / 共58页
第八章函数省公共课一等奖全国赛课获奖课件.pptx_第4页
第4页 / 共58页
第八章函数省公共课一等奖全国赛课获奖课件.pptx_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、8.1概述概述8.2函数定义普通形式函数定义普通形式8.3函数参数和函数值函数参数和函数值8.4函数调用函数调用8.5数组作为函数参数数组作为函数参数8.6局部变量和全局变量局部变量和全局变量8.7变量存放类别变量存放类别8.8内部函数和外部函数内部函数和外部函数8.9怎样运行一个多文件程序怎样运行一个多文件程序第八章第八章 函数函数第1页8.1概述概述(1)一个源程序文件是由一个或多个函数组成。一个源程序文件是)一个源程序文件是由一个或多个函数组成。一个源程序文件是一个编译单位。一个编译单位。(2)一个)一个C程序文件由一个或多个源程序文件组成。程序文件由一个或多个源程序文件组成。(3)C程

2、序执行从程序执行从main函数开始,调用其它函数后回到函数开始,调用其它函数后回到main函数,函数,并在并在main函数中结束整个程序运行。函数中结束整个程序运行。(4)全部函数都是平行,在定义函数时是相互独立,)全部函数都是平行,在定义函数时是相互独立,函数不能嵌套函数不能嵌套定义;函数间能够相互调用,但不能调用定义;函数间能够相互调用,但不能调用main函数。函数。(5)从用户使用角度看,函数分为)从用户使用角度看,函数分为标准函数和用户自定义函数标准函数和用户自定义函数两种。两种。(6)从函数形式看,函数分为)从函数形式看,函数分为无参函数和有参函数无参函数和有参函数两种。两种。如:如

3、:第2页F#includeFprintstar()FFprintf(*n);FFprint_message()FFprintf(Howdoyoudo!n);FFmain()FFprintstar();Fprint_message();Fprintstar();F第3页8.2函数定义普通形式函数定义普通形式1.无参函数定义无参函数定义类型标识符类型标识符函数名()函数名()申明部分申明部分语句语句2.有参函数定义有参函数定义类型标识符类型标识符函数名(形式参数列表)函数名(形式参数列表)申明部分申明部分语句语句3.“空函数空函数”定义定义类型标识符类型标识符函数名()函数名()注意:假如在定义函

4、数时不指定函数参数,系统会隐含指定函数类型为int型。第4页#includeFintmax(intx,inty)/或采取传统方式intmax(x,y)F/intx,y;Fintz;/intz;.Fz=(xy)?x:y;Freturnz;FFmain()FFintc,a,b;Fscanf(%d,%d,&a,&b);Fc=max(a,b);Fprintf(%d,c);Freturn1;第5页8.3函数参数和函数值函数参数和函数值1.形式参数和实际参数形式参数和实际参数实际参数:主调函数中提供数据。能够是常量、变量、表示式等,是详细数值。实际参数:主调函数中提供数据。能够是常量、变量、表示式等,是详

5、细数值。形式参数:被调函数中用以接收主调函数数据变量形式参数:被调函数中用以接收主调函数数据变量。(1)在定义函数中指定形参,在未出现函数调用时,不占内存中存放单元。在调用结束后,形参所占内存单元也被释放。(2)实参能够是常数、变量或表示式,但要求有确定值。调用时将实参值赋给形参(形参是数组名除外)。(3)在被定义函数中,必须指定形参类型。(4)实参加形参类型应相同或赋值兼容。若类型不一样,则进行类型转换,将实参类型转换为形参类型。(5)实参变量对形参变量数据传递是单向值传递。2 2a a2 2x x3 3b b3 3y y2 2a a1010 x x3 3b b1515y y第6页2.函数返

6、回值函数返回值(1)函数返回值是经过函数中return语句取得。return(表示式);或return表示式;(2)函数值类型是在函数定义时指定。C语言要求,凡不加类型说明函数,一律按整型处理。(3)假如函数值类型与return语句中表示式值类型不一致,则以函数类型为准,并自动进行类型转换。(如:见例子)(4)假如被调用函数中没有return语句,函数带回是一个不确定值。(5)为了明确表示“不带回值”,能够用“void”定义“无类型。第7页#includeFintmax(floatx,floaty)FFreturn(xy)?x:y);FFmain()FFintc;Ffloata,b;Fscan

7、f(%f,%f,&a,&b);Fc=max(a,b);Fprintf(%d,c);Freturn1;F第8页8.3函数调用函数调用F主调函数:主动去调用其它函数主调函数:主动去调用其它函数 F被调函数:被其它函数所调用被调函数:被其它函数所调用 1.函数调用普通形式函数调用普通形式函数名(实参列表);函数名(实参列表);含多个实参,则各参数用逗号分开,实参加形参个数应相等(不等则犯错),类型应一致(不一致则转换),实参求值次序是不确定,有从左至右,有从右至左(如TC,MSC)。按函数在程序中出现位置不一样,函数调用可分为:函数语句:printstar();带返回值函数语句:p=f(i,i+);

8、/注意求解次序问题函数表示式:c=2*max(a,b);函数参数:m=max(a,max(b,c);第9页2.对被调函数申明和函数原型对被调函数申明和函数原型在一个函数中调用另一个函数需要具备:(1)被调函数必须是已经存在函数(库函数或自定义函数)。(2)假如被调函数是库函数,普通应该在文件开头用#include命令将相关头文件包含到本文件中来(见附录V)。如:#include(3)假如被调函数是自定义函数,且与主调函数在同一个文件中,普通应该在主调函数中在调用之前对被调函数作申明。格式:函数类型函数类型函数名(参数类型函数名(参数类型1,参数类型,参数类型2,););函数类型函数类型函数名(

9、参数类型函数名(参数类型1参数名参数名1,参数类型,参数类型2参数名参数名2,););(4)函数调用时函数名、实参个数应与函数定义一致,实参类型必须与函数定义中形参类型赋值兼容。第10页F#includeFmain()FFfloatadd(floatx,floaty);Ffloata,b,c;Fscanf(%f,%f,&a,&b);Fc=add(a,b);Fprintf(sumis%f,c);Freturn1;FFfloatadd(floatx,floaty)FFfloatz;Fz=x+y;Freturn(z);F第11页函数申明语句中。(1)函数类型函数类型函数名(参数类型函数名(参数类型1

10、,参数类型,参数类型2,)(2)函数类型函数类型函数名(参数类型函数名(参数类型1参数名参数名1,参数类型,参数类型2参数名参数名2,)称为函数原型:编译系统不检验参数名,所以参数名是什么都无所谓。但应确保函数原型与函数首部写法一致,即函数类型、函数名、参数个数、参数类型和参数次序必须相同。说明:以前C版本只申明函数名和函数类型,不包含参数类型和参数个数。假如函数调用之前,没有对函数作申明,则编译系统会把第一次碰到该函数形式作为函数申明,并将函数类型默认为int型,即假如函数类型为整型或字符型,能够在函数调用之前无须作函数申明(但不对参数类型和个数进行检验)。假如函数定义在主调函数之前,则能够

11、无须申明。也能够在全部函数之前,在函数外部进行函数申明。如:第12页charletter(char,char);floatf(float,float);intI(float,float);main()charletter(charc1,charc2);floatf(floatx,floaty);intI(floatj,floatk);第13页8.4函数嵌套调用函数嵌套调用C语言不允许嵌套定义函数,但能够嵌套调用函数,即,在调用一个函数过程中,又调用另一个函数。函数嵌套调用图示函数嵌套调用图示mainmaina a函数函数b b函数函数调用调用a a函数函数调用调用b b函数函数1 12 23

12、34 45 56 67 78 89 9结束结束第14页8.5函数递归调用函数递归调用递归:在函数调用过程中,直接或间接调用本身。递归:在函数调用过程中,直接或间接调用本身。F1.1.直接递归:在函数体内又调用本身直接递归:在函数体内又调用本身如:如:int f(int x)int f(int x)int y,z;int y,z;z=f(y);z=f(y);return(2*z);return(2*z);F2.2.间接递归间接递归:当函数去调用另一函数时当函数去调用另一函数时,而另一函数反过来又调用而另一函数反过来又调用本身。本身。f1()调用调用f1()f1()f1()函数函数 f2()f2(

13、)函数函数 调用调用f2()f2()函数函数 调用调用f1()f1()函数函数第15页 能够看到,这两种递归调用都是无终止本身调用,处理无终止递能够看到,这两种递归调用都是无终止本身调用,处理无终止递归调用方法是:归调用方法是:确定好结束递归条件确定好结束递归条件。条件成立,进行递归条件成立,进行递归 用用ifif语句控制语句控制 条件不成立:结束递归条件不成立:结束递归第16页例例 有有5 5个人在一起问年纪,第个人在一起问年纪,第5 5个人比第个人比第4 4个人大个人大2 2岁,第岁,第4 4个个人比第人比第3 3个人大个人大2 2岁岁.第第2 2个人比第个人比第1 1个人大个人大2 2岁

14、,第岁,第1 1个人个人为为1010岁。岁。age(5)age(4)age(3)age(2)age(1)=2+age(4)=2+age(3)=2+age(2)=2+age(1)=10=18=16=14=1210n=1用式子表示:用式子表示:age(n)=age(n-1)+2n1第17页问年纪递归程序以下:问年纪递归程序以下:Fage(int n)age(int n)Fint c;int c;F if(n=1)c=10;if(n=1)c=10;F else c=2+age(n-1);else c=2+age(n-1);F return(c);return(c);F Fmain()main()F

15、F printf(“%dn”,age(5);printf(“%dn”,age(5);F 第18页F用递归法求用递归法求n!n!Ffloat fac(int n)float fac(int n)Ffloat f;float f;Fif(n 0)if(n 0)F printf(“n 0 data error!n”);printf(“n1)第19页8.6数组作为函数参数数组作为函数参数F1、数组元素做函数参数、数组元素做函数参数数组元素作实参时,与变量作实参一样,也是数组元素作实参时,与变量作实参一样,也是单向传送单向传送。F2、数组作为函数参数、数组作为函数参数数组名作实参时,数组名作实参时,实参

16、和形参都用数组名,传送是数组地址(地实参和形参都用数组名,传送是数组地址(地址常量)址常量)。调用函数时,对形参数组元素操作,实际上也是对实。调用函数时,对形参数组元素操作,实际上也是对实参数组元素操作参数组元素操作。几点说明:几点说明:F数组名作形、实参数时,应分别在主、被调函数中对其申明为数组;数组名作形、实参数时,应分别在主、被调函数中对其申明为数组;F形、实参数数组类型要形、实参数数组类型要完全一致完全一致(int,charint,char也不能通用);也不能通用);F形参数组能够不形参数组能够不指定大小指定大小,需要时能够用一,需要时能够用一实参将数组长度传递给形参实参将数组长度传递

17、给形参;F数组名作参数时,传递是数组名作参数时,传递是地址值地址值,对形参数组操作实际上也是对实参数组操,对形参数组操作实际上也是对实参数组操作。作。第20页3、多维数组名作为函数参数、多维数组名作为函数参数多维数组名作实参和形参时,多维数组名作实参和形参时,形参数组能够指定每一维大小,也形参数组能够指定每一维大小,也能够省略第一维大小能够省略第一维大小,二者等价。,二者等价。8.7局部变量和全局变量局部变量和全局变量F1、局部变量、局部变量 局部变量:作用域仅限在所定义函数或复合语句内部局部变量:作用域仅限在所定义函数或复合语句内部。说明:说明:(1)(1)在不一样函数(包含在不一样函数(包

18、含mainmain函数)中允许同名,它们占据不一样函数)中允许同名,它们占据不一样内存单元,相互之间互不影响。内存单元,相互之间互不影响。(2)(2)形参属局部变量,只能在其所在函数内部使用。形参属局部变量,只能在其所在函数内部使用。(3)(3)能够在复合语句中定义变量,这些变量只在本复合语句中有效能够在复合语句中定义变量,这些变量只在本复合语句中有效且能够与整个函数变量同名。且能够与整个函数变量同名。第21页2、全局变量、全局变量F全局变量:在一个文件全部函数以外定义变量称为外部或全局变全局变量:在一个文件全部函数以外定义变量称为外部或全局变量。量。F作用域:从定义变量位置开始到源程序结束。

19、作用域:从定义变量位置开始到源程序结束。F说明:说明:F在源程序开始定义全局变量在源程序开始定义全局变量,对源程序中全部函数有效对源程序中全部函数有效F在源程序中间定义全局变量在源程序中间定义全局变量,仅对其后面全部函数有效仅对其后面全部函数有效F在函数或复合语句中定义局部变量假如与全局变量同名在函数或复合语句中定义局部变量假如与全局变量同名,则局部则局部变量优先变量优先,全局变量不起作用全局变量不起作用.F全局变量使用全局变量使用,增加了函数间数据联络渠道增加了函数间数据联络渠道,同一文件中全部函同一文件中全部函数都能引用全局变量值数都能引用全局变量值,当某函数改变了全局变量值时当某函数改变

20、了全局变量值时,便会影响便会影响其它函数。其它函数。第22页F#includeFinta=3,b=5;/*全局变量作用域及其使用情况*/Fmax(inta,intb)FFintc;Fc=ab?a:b;Freturn(c);FFvoidmain()FFinta=8;Fprintf(%d,max(a,b);F第23页8.8变量存放类别变量存放类别F1、动态存放方式与静态存放方式、动态存放方式与静态存放方式F在在C C中,每一个变量和函数有两个属性:数据类型和数据存放类别。中,每一个变量和函数有两个属性:数据类型和数据存放类别。依据变量存放类别,能够知道变量作用域和生存期。从变量值作依据变量存放类别

21、,能够知道变量作用域和生存期。从变量值作用域可分为全局变量和局部变量用域可分为全局变量和局部变量 F从变量值存在时间即生存期来看,又可分为:从变量值存在时间即生存期来看,又可分为:F(1 1)静态存放方式:即程序运行期间为其分配存放单元是固定。)静态存放方式:即程序运行期间为其分配存放单元是固定。F(2 2)动态存放方式:程序运行期间依据需要为其动态分配存放单)动态存放方式:程序运行期间依据需要为其动态分配存放单元。元。F F程序运行时,在内存中存放情况以下:程序运行时,在内存中存放情况以下:第24页代码段代码段数据段数据段程序区程序区静态存放区静态存放区动态存放区动态存放区编译、连接后生成指

22、令代码。编译、连接后生成指令代码。外部、局部静态(外部、局部静态(static)static):程序运行开始到结束一直占用程序运行开始到结束一直占用形参、自动变量、函数调用时形参、自动变量、函数调用时 现场保护和返回值等。现场保护和返回值等。函数调用时分配存放单元,函数调用时分配存放单元,调用结束时释放调用结束时释放用户区用户区第25页2 2、autoauto变量变量 F函数内部无函数内部无staticstatic申明局部变量、函数中形参均为自动变量。当申明局部变量、函数中形参均为自动变量。当变量存放类别为自动时,申明符变量存放类别为自动时,申明符autoauto可省;自动变量被分配在动可省;

23、自动变量被分配在动态区,未赋初值时,其值未定义,每次调用重新赋值。态区,未赋初值时,其值未定义,每次调用重新赋值。F比如:比如:Fint f(int a)int f(int a)Fauto int b,c=3;auto int b,c=3;FF3、用用static申明局部变量申明局部变量F若希望函数调用结束后,其值不消失,下次调用函数时继续使用,若希望函数调用结束后,其值不消失,下次调用函数时继续使用,则用则用static对变量加以申明为对变量加以申明为“静态局部变量静态局部变量”。F如:如:第26页例例考查静态局部变量值考查静态局部变量值f(inta)autointb=0;staticint

24、c=3;b=b+1;c=c+1;return(a+b+c);main()inta=2,i;for(i=0;i3;i+)printf(“%d”,f(a);main()iaf(a)02f(2)12f(2)22f(2)f(a)abcreturn(a+b+c)20314return(7)20415return(8)20516return(9)运行结果:运行结果:789第27页F静态局部变量说明:静态局部变量说明:F(1)(1)分配在静态区,程序运行结束释放存放单元。分配在静态区,程序运行结束释放存放单元。F(2)(2)仅开始时赋初值一次(未赋初值时为仅开始时赋初值一次(未赋初值时为0 0),以后每次调

25、用函数),以后每次调用函数时,变量不再赋值,前次操作结果被保留。时,变量不再赋值,前次操作结果被保留。F(3)(3)局部动态变量若未赋初值,其值是不确定,所分配存放单元是局部动态变量若未赋初值,其值是不确定,所分配存放单元是不固定;而局部静态变量未赋初值,其值为不固定;而局部静态变量未赋初值,其值为0(0(字符型变量值为字符型变量值为0)0),所分配存放单元是固定。,所分配存放单元是固定。F(4)(4)静态局部变量在函数调用结束后虽存在,但其它函数不能引用静态局部变量在函数调用结束后虽存在,但其它函数不能引用它。它。第28页F使用局部静态变量有以下几个情况使用局部静态变量有以下几个情况F(1)

26、需要保留上一次调用结束时值需要保留上一次调用结束时值F例例打印打印15阶乘值阶乘值Fintfac(n)Fintn;Fstaticintf=1;Ff=f*n;return(f);Fmain()Finti;Ffor(i=1;i=5;i+)Fprintf(“%d!=%dn”,i,fac(i);FF(2)初始化后变量只被引用而不改变其值,则用静态局部变量较方初始化后变量只被引用而不改变其值,则用静态局部变量较方便,缺点:从程序运行开始到结束一直占用内存,这么会浪费系便,缺点:从程序运行开始到结束一直占用内存,这么会浪费系统资源。统资源。第29页4、register变量变量FCPU内部有存放器组可用来存

27、放数据,若把数据申明为存放器类内部有存放器组可用来存放数据,若把数据申明为存放器类型,则将该类型数据存放在存放器中,其优点在于:型,则将该类型数据存放在存放器中,其优点在于:F降低数据与内存之间交换频率,降低数据与内存之间交换频率,提升程序效率和速度提升程序效率和速度。Fintfac(intn)Fregisterinti,f=1;Ffor(i=1;i=n;i+)Ff=f*i;Freturn(f);FFmain()Finti;Ffor(i=1;iy?x:y;Freturn(z);Fmain()FexternA,B;/*类型名可写也可省略类型名可写也可省略*/Fprintf(“%d”,max(A,

28、B);intA=13,B=-8;第32页(2 2)在多文件程序中申明外部变量)在多文件程序中申明外部变量 F当一个程序由多个文件组成时,要在一个文件中引用另一文件中当一个程序由多个文件组成时,要在一个文件中引用另一文件中定义外部变量时,此时要用定义外部变量时,此时要用externextern加以申明;加以申明;F若在两个文件中都要使用同一个外部变量,若同时对同名外部变若在两个文件中都要使用同一个外部变量,若同时对同名外部变量申明,则系统将提醒量申明,则系统将提醒“重定义类型错重定义类型错”,处理方法是:在任一,处理方法是:在任一文件中定义外部变量,在另一文件用文件中定义外部变量,在另一文件用e

29、xternextern对该变量作对该变量作“外部变外部变量申明量申明”。F比如,比如,file1.c为:为:FintAFmain()FF文件文件file2.c为:为:FexternA;Fpower(intn);F第33页6、用、用static申明外部变量申明外部变量F若使全局变量只限于定义它文件中函数引用,而不让其它文件中若使全局变量只限于定义它文件中函数引用,而不让其它文件中函数引用,需要用函数引用,需要用static加以说明,称为静态全局变量。加以说明,称为静态全局变量。F(注意:此种说法只在工程方法中有效,而在文件包含中则不起(注意:此种说法只在工程方法中有效,而在文件包含中则不起作用)

30、作用)第34页7、关于变量申明和定义、关于变量申明和定义F申明部分:对相关标识符申明部分:对相关标识符(变量变量,函数函数,结构体结构体)属性进行说明。对属性进行说明。对于函数,申明和定义区分显著,申明是函数原型,定义是函数本于函数,申明和定义区分显著,申明是函数原型,定义是函数本身,是一个独立程序模块;身,是一个独立程序模块;F对于变量,有两种情况:对于变量,有两种情况:F1.定义性申明:需建立存放空间,如定义性申明:需建立存放空间,如inta;也称定义。;也称定义。F2.引用性申明:不建立存放空间,如引用性申明:不建立存放空间,如externAF广义地讲,申明包含定义,但并非全部申明都是定

31、义;广义地讲,申明包含定义,但并非全部申明都是定义;F如如:intA;既包含申明又包含定义;既包含申明又包含定义;FexternA;只是申明,而无定义。;只是申明,而无定义。F约定:建立存放空间申明称定义;约定:建立存放空间申明称定义;不建立存放空间申明称申明。不建立存放空间申明称申明。auto,register,static申明变量时,是在定义变量基础上加上这些关申明变量时,是在定义变量基础上加上这些关键字,不能单独使用。键字,不能单独使用。第35页8 8、存放类别小结、存放类别小结 在在C C中,定义数据需指出数据类型和存放类别。中,定义数据需指出数据类型和存放类别。(1)(1)作用域:作

32、用域:变量在某个文件或函数范围内是有效,则称变量在某个文件或函数范围内是有效,则称该文件或函数是该变量作用域。该文件或函数是该变量作用域。自动自动(动态局部动态局部)变量:离开函数,值消失变量:离开函数,值消失 静态局部变量:离开函数,值仍保留静态局部变量:离开函数,值仍保留 存放器变量:离开函数,值消失存放器变量:离开函数,值消失 形式参数:可定义为自动或存放器变量形式参数:可定义为自动或存放器变量局部变量局部变量静态外部变量:只限本文件引用静态外部变量:只限本文件引用 外部外部(非静态非静态)变量变量:允许其它文件引用允许其它文件引用 全局变量全局变量第36页(2)生存期:变量在某一时刻是

33、存在,认为这一时刻属于该变生存期:变量在某一时刻是存在,认为这一时刻属于该变量生存期:量生存期:自动变量(本函数内有效)自动变量(本函数内有效)存放器变量(本函数内有效)存放器变量(本函数内有效)形式参数形式参数动态存放动态存放静态局部变量(函数内有效)静态局部变量(函数内有效)静态外部变量(本文件内有效)静态外部变量(本文件内有效)外部变量(其它文件可引用)外部变量(其它文件可引用)静态存放静态存放第37页(3)从变量存在位置来分从变量存在位置来分:静态局部变量静态局部变量静态外部变量静态外部变量(函数外部静态变量函数外部静态变量)外部变量(可为其它文件引用)外部变量(可为其它文件引用)内存

34、中静态存放区内存中静态存放区内存中动态存放区内存中动态存放区自动变量和形式参数自动变量和形式参数CPU中中存放器存放器存放器变量存放器变量第38页8.9内部函数和外部函数内部函数和外部函数F函数能否被其它源文件中函数调用,看其是内部还是外函数能否被其它源文件中函数调用,看其是内部还是外部函数部函数F1、内部函数、内部函数F只能被本文件中其它函数所调用只能被本文件中其它函数所调用F形式:形式:static类型标识符类型标识符函数名(形参表列)函数名(形参表列)F若是内部函数,其作用域仅限于定义它所在文件。此时若是内部函数,其作用域仅限于定义它所在文件。此时在其它文件中能够有相同函数名,它们相互之

35、间互不干在其它文件中能够有相同函数名,它们相互之间互不干扰。扰。F2、外部函数、外部函数F能被其它文件中函数所调用能被其它文件中函数所调用。F形式:形式:extern类型标识符类型标识符函数名(形参表列)函数名(形参表列)F注意:注意:extern可省,隐含时,系统默认其为外部函数。可省,隐含时,系统默认其为外部函数。第39页8.10怎样运行一个多文件程序怎样运行一个多文件程序F1.用用turboC集成环境集成环境F(1)工程方法工程方法F建立工程文件名建立工程文件名.prj,其中包含一个程序各文件名,其中包含一个程序各文件名,F在工程菜单项中设置工程文件名在工程菜单项中设置工程文件名F运行工

36、程文件,按运行工程文件,按F9F(2)文件包含方法文件包含方法在主函数头部将本程序各文件用在主函数头部将本程序各文件用#include“文件名文件名.c”,编,编译时,系统自动将译时,系统自动将“文件名文件名.c”放到放到main函数前头,作为一个整函数前头,作为一个整体编译。这时,这些函数被认为是在同一个文件中,函数中体编译。这时,这些函数被认为是在同一个文件中,函数中extern申明能够不要。申明能够不要。运行该程序运行该程序2.在在MSC上上F分别对分别对4个文件进行编译,得到个文件进行编译,得到4个个.obj文件文件Flinkfile1+file2+file3+file4得可执行文件得

37、可执行文件file1.exe第40页以下程序输出结果是:_ 。main()int x=0;sub(&x,8,1);printf(%dn,x);sub(int *a,int n,int k)if(k=n)sub(a,n/2,2*k);*a+=k;第41页#includeinti=10;intmain()inti=1;printf(%dt,i);inti=2;pritnf(%dt,i);externi;i+=1;printf(%dt,i);printf(%dt,+i);printf(%dn,+i);return0;运行结果为运行结果为121132第42页例、写出下面程序执行结果。例、写出下面程序执

38、行结果。intk=3;main()intk=7;printf(k=%dn,k);intk=11;printf(k=%dn,k);k+=1;printf(k=%dn,k);printf(k=%dn,k);printf(k=%dn,k);k=7k=11k=12k=12k=7第43页例、写出以下程序执行结果。例、写出以下程序执行结果。#includestdio.hinti=3;main()inti,j;i=f1();for(j=3;j6;+j)printf(i=%d,j=%dn,i,j);printf(f2(%d)=%dn,i,f2(i);printf(f3(%d)=%dn,i,f3(i);prin

39、tf(f4(%d)=%dn,i+j,f4(i+j);getch();intf1()returni;intf2(intj)returnj=+i;intf3(intj)staticinti=9;returnj=i-;intf4(inti)intj=10;returni=j+=i;i=3,j=3f2(3)=4f3(3)=9f4(6)=16i=3,j=4f2(3)=5f3(3)=8f4(7)=17i=3,j=5f2(3)=6f3(3)=7f4(8)=18第44页以下程序运行后,输出结果是_ func(int a,int b)static int m=0,i=2;i+=m+1;m=i+a+b;retur

40、n(m);main()int k=4,m=1,p;p=func(k,m);printf(“%d,”,p);p=func(k,m);printf(“%dn”,p);第45页编写函数编写函数fun,该函数功效是:从字符中删除指定字符,同一字母该函数功效是:从字符中删除指定字符,同一字母大、小写按不一样字符处理。大、小写按不一样字符处理。void fun(char s,int c)void fun(char s,int c)int i=0;int i=0;char*p;char*p;p=s;p=s;while(*p)while(*p)if(*p!=c)if(*p!=c)si=*p;i+;si=*p;

41、i+;p+;p+;si=0;si=0;第46页请编写一个函数请编写一个函数fun,它功效是:输出一个字符串长度。,它功效是:输出一个字符串长度。(不得调用不得调用C语言提供求字符串长度函数语言提供求字符串长度函数)。intfun(char*s)inti=0;while(*s+)i+;returni;第47页请编写函数请编写函数fun,其功效是:将,其功效是:将s所指字符串中除了下标为偶数、所指字符串中除了下标为偶数、同时同时ASCII值也为偶数字符外,其余全都删除;串中剩下值也为偶数字符外,其余全都删除;串中剩下字符所形成一个新串放在字符所形成一个新串放在t所指一个数组中。所指一个数组中。vo

42、idfun(char*s,chart)inti,j,n;n=strlen(s);for(i=0;in;i+)if(i%2=0&si%2=0)tj=sj;j+;tj=0;第48页请编写一个函数请编写一个函数fun,它功效是:将,它功效是:将ss所指字符串中全部下标所指字符串中全部下标为奇数位置上字母转换为大写为奇数位置上字母转换为大写(若该位置上不是字母则不转换若该位置上不是字母则不转换)。voidfun(char*ss)inti,n;n=strlen(ss);for(i=1;i=a&ssi=z)ssi=ssi-32;第49页一个整数,它加上一个整数,它加上100后是一个完全平方数,再加上后是一

43、个完全平方数,再加上168又是又是一个完全平方数,请问该数是多少?一个完全平方数,请问该数是多少?#includemath.hmain()longinti,x,y,z;for(i=1;i100000;i+)x=sqrt(i+100);/*x为加上为加上100后开方后结果后开方后结果*/y=sqrt(i+268);/*y为再加上为再加上168后开方后结果后开方后结果*/if(x*x=i+100&y*y=i+268)/*假如一个数平方根平方等于该数,假如一个数平方根平方等于该数,这说明此数是完全平方数这说明此数是完全平方数*/printf(n%ldn,i);第50页一个数假如恰好等于它因子之和,这

44、个数就称为一个数假如恰好等于它因子之和,这个数就称为“完数完数”。比如比如6=123.编程找出编程找出1000以内全部完数。以内全部完数。main()staticintk10;inti,j,n,s;for(j=2;j1000;j+)n=-1;s=j;for(i=1;iJ;I+)if(j%i)=0)n+;s=s-i;kn=i;if(s=0)printf(%disawanshu,j);for(i=0;iN;I+)printf(%d,ki);printf(%dn,kn);第51页以下函数调用语句中含有以下函数调用语句中含有_个参数。个参数。func(f1,f2),(),(f2,f3,f4),),f5

45、)A)3B)4C)5D)6以下程序运行结果是以下程序运行结果是_。main()()chararr24;strcpy(arr,“you”););strcpy(arr1,“me”););printf(“%sn”,arr););A)youmeB)youC)meD)arr第52页以下程序输出结果是以下程序输出结果是_。intf()()staticinti=0;ints=1;s+=i;i+;returns;main()()inti,a=0;for(i=0;i5;i+)a+=f();();printf(“%dn”,a););A)20B)24C)25D)15第53页程序中对程序中对fun函数有以下说明:函数

46、有以下说明:void*fun();();此说明含义是此说明含义是_。A)fun函数无返回值函数无返回值B)fun函数返回值能够是任意数据类型函数返回值能够是任意数据类型C)fun函数返回值是无值型指针类型函数返回值是无值型指针类型D)指针指针fun指向一个函数,该函数无返回值指向一个函数,该函数无返回值第54页设有以下程序:设有以下程序:intfun(char*s)intn=0;while(*s)n+;s+;returnn;main()()chary=“this_is_an_example。”;printf(“%dn”,fun(&y6););该程序输出结果是该程序输出结果是_。第55页以下程序

47、功效是以下程序功效是_。intfun(char*a)char*b=a;while(*b)b+;returnb-a;第56页main()charb=Hello,you;b5=0;printf(%sn,b);第57页练习练习1.编写程序求出全部满足以下条件四位数:编写程序求出全部满足以下条件四位数:其前两位数字与其后两位数字之和平方等于其前两位数字与其后两位数字之和平方等于该数本身。比如:该数本身。比如:3025=(30+25)2练习练习2假定输入字符串中只包含字母和假定输入字符串中只包含字母和*号。号。请编写程序将字符串中全部请编写程序将字符串中全部*删除,删除后删除,删除后字符串仍存放在原来数组中。比如,字符串字符串仍存放在原来数组中。比如,字符串中内容为:中内容为:“*ab*A*BC*DEF*G*”,则,则删除后字符串为:删除后字符串为:“abABCDEFG”。练习练习3:输出:输出100-200间全部素数间全部素数第58页

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服