您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言第7章-函数课件
第7章函数——C程序设计第7章函数本章要点函数的定义和调用函数参数和函数值函数的嵌套和递归调用变量的作用域第7章函数主要内容函数的作用(7.1)函数定义和函数调用(7.2)函数调用中的参数传递(7.3)函数的嵌套调用和递归调用(7.4)函数的返回值为指针(7.5)变量的作用域和存储类别(7.6)内部函数和外部函数(7.7)第7章函数函数的作用(7.1)模块化程序设计引入:若问题较复杂,只有main函数,则函数太长、太复杂,导致跟踪、调试、维护困难。基本思想:将一个程序按功能分割成一些程序模块,每个程序模块作为一个源程序文件。一个源程序文件由若干个函数组成。一个C程序由一个主函数和若干个子函数组成的。各模块(源文件)独立编码、调试、再集成。第7章函数函数的作用(7.1)例7.1函数调用的简单例子返回#includestdio.hvoidmain(){voidprintstar();/*对printstar函数声明*/voidprint_message();/*对print_message函数声明*/printstar();/*调用printstar函数*/print_message();/*调用print_message函数*/printstar();/*调用printstar函数*/}voidprintstar()/*定义printstar函数*/{printf(***************\n);}voidprint_message()/*定义print_message函数*/{printf(Howdoyoudo!\n);}运行结果:***************Howdoyoudo!***************第7章函数说明:C是函数式语言。必须有且只能有一个名为main的主函数。C程序的执行总是从main函数开始,在main中结束。函数不能嵌套定义,可以嵌套调用。函数间的调用关系:由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。函数的作用(7.1)第7章函数函数分类从用户角度标准函数(库函数):由系统提供用户自定义函数从函数形式主调函数是否向被调函数传递数据。无参函数例:getchar()有参函数例:putchar(c)使用库函数的要点:函数功能函数参数的数目和顺序,及各参数意义和类型函数返回值意义和类型需要使用的包含文件函数的作用(7.1)第7章函数函数定义和调用(7.2)无参函数定义的一般形式类型标识符函数名(){声明部分语句部分}如:例7.1中的printstar和print_message函数函数值类型为int类型时可缺省合法标识符有参函数定义的一般形式类型标识符函数名(形式参数表列){声明部分语句部分}形式参数表列一般形式类型标识符1形参名1,…,类型标识符n形参名n合法标识符如:intmax(intx,inty){intz;z=xy?x:y;return(z);}第7章函数函数定义和调用(7.2)空函数一般形式:类型标识符函数名(){}如:voiddummy(){}说明:主调函数调用空函数时,只表明这里要调用一个函数,但函数本身什么工作也不做等,以后扩充函数功能时补充上。第7章函数函数的调用(7.2.2)函数调用的一般形式:函数名(实参表列)实参表列的一般形式:表达式1,表达式2,…,表达式n说明:如果是调用无参函数,则形式为:函数名()()不能省实参与形参个数相等,类型一致(一般情况下),按顺序一一对应。实参表求值顺序视系统而定(TurboC,VC++自右向左)。实参前不能加类型标识符。例7.4:函数的调用。#includestdio.h#includemath.hlongfac(intn){inti=0;longy=1;for(i=1;i=n;i++)y=y*i;return(y);}voidmain(){intn=0;floaty=0;longz=0;scanf(%d,&n);y=sqrt(n);z=fac(n);printf(“%f,%ld,y,z);}第7章函数函数的调用(7.2.2)函数调用的方式函数语句如:printstar();用于调用无返回值的函数或不利用函数返回值的情况。函数表达式如:t=max(a,b);c=2*max(a,b);函数调用出现在一个表达式中。注意:此形式不能用于调用无返回值的函数。函数参数函数调用作为一个函数的实参(无返回值的函数不适用)。如:m=max(a,max(b,c));printf(%d,max(a,b));第7章函数函数的调用(7.2.2)主调函数与被调函数间的数据传递途径参数:通过形式参数和实际参数返回值:用return语句返回计算结果全局变量第7章函数函数的调用(7.2.2)形式参数和实际参数形式参数(形参):定义函数时函数名后面括号中的参数实际参数(实参):调用函数时函数名后面括号中的参数例7.5调用函数时的数据传递。#includestdio.h//例7.5voidmain(){inta,b,t;intmax(int,int);scanf(%d,%d,&a,&b);t=max(a,b);printf(Maxis%d,t);}intmax(intx,inty){intz;z=xy?x:y;return(z);}t=max(a,b);(main函数)(max函数)max(intx,inty){intz;z=xy?x:y;return(z);}运行结果:输入:7,8输出:Maxis8第7章函数函数的调用(7.2.2)形参和实参的说明:形参用标识符表示(一种局部变量),实参用表达式表示。调用函数时,实参必须有确定的值。形参必须指定类型。形参与实参类型一致(一般情况下),个数相同。若形参与实参类型不一致,自动按形参类型转换——函数调用转换。形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放,实参单元仍保留并维持原值。也就是说,形参与实参占用不同的内存单元。实参向形参的数据传递是单向的“值传递”,只由实参传给形参,不能由形参传回给实参。#includestdio.h//例7.5voidmain(){inta,b,t;intmax(int,int);scanf(%d,%d,&a,&b);t=max(a,b);printf(Maxis%d,t);}intmax(intx,inty){intz;z=xy?x:y;return(z);}第7章函数函数的调用(7.2.2)函数的返回值(函数值)返回语句形式:return(表达式);或return表达式;如:intmax(intx,inty){intz;z=xy?x:y;return(z);}功能:使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数。说明:函数中可有多个return语句。若无return语句,执行遇最后一个}时,自动返回调用函数。定义函数时的函数类型一般应和return语句中的表达式类型一致。对无返回值的,函数类型应说明为void型。若函数类型与return语句中表达式值的类型不一致,以函数值类型为准,自动进行类型转换。建议要一致!关于void型函数return(xy?x:y);第7章函数函数的调用(7.2.2)例1返回值类型与函数类型不同。#includestdio.hvoidmain(){intmax(floatx,floaty);floata,b;intt;scanf(%f,%f,&a,&b);t=max(a,b);printf(Maxis%d,t);}intmax(floatx,floaty){floatz;z=xy?x:y;return(z);}运行结果:输入:1.5,2.5输出:Maxis2第7章函数函数的调用(7.2.2)函数声明和函数原型对被调用函数要求:必须是已存在的函数库函数:#include*.h用户自定义函数:函数声明函数声明函数定义位置在调用之后,要求调用之前进行函数声明。函数声明(函数原型)一般形式:函数类型函数名(形参类型1,形参类型2,…,形参类型n);或:函数类型函数名(形参类型1形参名1,…,形参类型n形参名n);注意:;不能缺!作用:告诉编译系统函数类型、参数个数及类型,以便检验。函数声明位置:程序的数据说明部分(函数内或外)(必须出现在函数调用前)。若被调用函数定义出现在主调函数之前,可不必进行函数声明。#includestdio.hvoidmain(){inta,b,t;intmax(int,int);scanf(%d,%d,&a,&b);t=max(a,b);printf(Maxis%d,t);}intmax(intx,inty){intz;z=xy?x:y;return(z);}第7章函数voidmain(){floatadd(float,float);/*函数声明*/floata,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sumis%f,c);}floatadd(floatx,floaty){floatz;z=x+y;return(z);}函数声明例对被调用的函数作声明floatadd(floatx,floaty){floatz;z=x+y;return(z);}voidmain(){floata,b,c;scanf(%f,%f,&a,&b);c=add(a,b);printf(sumis%f,c);}被调函数出现在主调函数之前,可不作函数声明函数的调用(7.2.2)第7章函数函数的调用(7.2.2)函数声明例4.在文件开头声明函数。charletter(char,char);floatf(float,float);inti(float,float);voidmain(){}charletter(charc1,charc2){}floatf(floatx,floaty){}inti(floatj,floatk){}…………在文件开头已作声明,在各函数中不必再作声明第7章函数函数的调用(7.2.2)函数声明函数定义和函数声明的区别函数的定义是指对函数功能的确立,包括指定函数名,函数值类型、形参及其类型、函数体等,它是一个完整的、独立的函数单位。函数的声明的作用则是把函数的名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查。第7章函数函数调用中的参数传递(7.3)简单变量作函数参数例7.10输出Fibonacci数列的前17项。intfib(inta,intb){intc;c=a+b;a=b;b=c;returnc;}voidmain(){inti,first=0,second=1;printf(%3d%3d,first,second);for(i=1;i=15;i++)printf(%3d,fib(first,second));printf(\n);}程序是否实现要求?输出结果01111111111111111第7章函数函数调用中的参数传递(7.3)intfib(inta,intb)//应写为{intc;returna+b;}voidmain(){inti,first=0,second=1,t;printf(%3d%3d,first,second);for(i=1;i=15;i++){t=fib(first,second);printf(%3d,t);first=second;second=t;}printf(\n);}第7章函数711x:y:调用前:例2交换两个数:传值#includestdio.h//程序1voidmain(){intx=7,y=11;voidswap(int,int);printf(x
本文标题:C语言第7章-函数课件
链接地址:https://www.777doc.com/doc-1868137 .html