您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 3第三章C程序设计结构(函数)
第3章函数三峡大学科技学院53.1函数的定义与调用3.2函数的递归3.3函数的参数3.4变量的类型与存储3.5程序举例12345本章目录三峡大学科技学院3.1函数的定义与调用在设计较复杂的程序时,我们一般采用的方法是:把问题分成几个部分,每部分又可分成更细的若干小部分,逐步细化,直至分解成很容易求解的小问题。这样的话,原来问题的解就可以用这些小问题来表示。基本模块模块模块模块模块模块模块模块模块模块模块结构图模块设计的原则模块独立规模适当层次分明功能专一下一页独立性原则表现在模块完成独立的功能,和其它模块间的关系简单,各模块可以单独调试。修改某一模块,不会造成整个程序的混乱。要做到模块的独立性要注意以下几点每个模块有特定功能每个模块力求简单每个模块应用独立变量模块不能太大,但也不能太小。模块的功能复杂,可读性就不好,而且也违背独立性原则。但如果做得太小,实际上也会复杂各个模块间反复调用,可读性也会降低。这点需要慢慢积累经验,好好把握。下一页分解模块要注意层次,更多层次的分解任务,要注意对问题进行抽象化。开始不要过于注意细节,要做到逐步细化求精。C语言程序由基本语句和函数组成,每个函数可完成相对独立的任务,依一定的规则调用这些函数,就组成了解决某个特定问题的程序。下一页把大任务分解成若干功能模块,用多个函数来实现这些功能模块。通过函数的调用来实现完成大任务的全部功能。任务、模块与函数的关系:一个大任务分成多个功能模块,功能模块则由一个或多个函数实现。模块化的程序设计是靠设计函数和调用函数实现的。3.1函数的定义与调用“函数”的主要知识点函数的定义函数的参数和返回值函数的调用嵌套和递归变量的作用域下一页三峡大学科技学院1、程序举例***************************ThisisaCprogram***************************Verygood!***************************Programisveryinteresting***************************三峡大学科技学院main(){printf(“***************************\n”);printf(“ThisisaCprogram\n”);printf(“***************************\n”);printf(“Verygood!\n”);printf(“***************************\n”);printf(“Programisveryinteresting\n”);printf(“***************************\n”);}1、程序举例-参考程序三峡大学科技学院main(){inti;for(i=1;i=28;i++)printf(“*”);printf(“\n”);printf(“ThisisaCprogram\n”);for(i=1;i=28;i++)printf(“*”);printf(“\n”);printf(“Verygood!\n”);for(i=1;i=28;i++)printf(“*”);printf(“\n”);printf(“Programisveryinteresting\n”);for(i=1;i=28;i++)printf(“*”);printf(“\n”);}三峡大学科技学院main(){voidstar();star();printf(“ThisisaCprogram\n”);star();printf(“Verygood!\n”);star();printf(“Programisveryinteresting\n”);star();}voidstar(){inti;for(i=1;i=28;i++)printf(“*”);printf(“\n”);}三峡大学科技学院在C程序设计中,函数是独立的C程序模块,它完成一个特定任务并可选择是否将一个值返回调用程序。在C语言中,子程序被称为函数,它相应于其它高级语言中的过程(无返回值的子程序)和函数(通过函数名返回一个值的子程序)。一个C程序一般由多个函数组成,其中必须有一个且仅有一个名为main的主函数,其余为被main函数或其它函数调用的函数,无论main函数位于程序中什么位置,C程序总是从main函数开始执行。理解:三峡大学科技学院说明:1、一个C程序可以由一个或多个源程序文件组成。2、C程序的执行从main函数开始,由主函数调用其它函数,其它函数也可以相互调用,程序流程最后回到main函数,在main函数中结束整个程序的运行。3、一个(主调)函数可以多次调用多个(被调)函数。同一个函数也可以被一个或多个(主调)函数调用任意多次。注意:4、main函数是系统定义的,只能由系统调用。三峡大学科技学院5、所有函数在定义时都是平行的,相互独立(一个函数并不从属于另一个函数),即函数不能嵌套定义,但可以相互调用。6、函数分类使用情况库函数(标准函数):由系统提供,用户不必自己定义,可以直接使用用户自定义函数:解决用户的专门需要函数形式无参函数:主调函数与被调函数之间没有数据传递有参函数:主调函数与被调函数之间有数据传递任务情况带返回值不带返回值三峡大学科技学院C语言的库函数1、库函数不是C语言本身的组成部分。它是编译系统生产厂家开发的函数,存放在库文件中;用户可以根据需要调用这些函数。2、各编译系统所提供的库函数不尽相同,但一般都提供了ANSIC标准所建议的数百个库函数。3、标准库函数包括输入输出函数、字符和字符串函数、数学函数、内存管理函数、进程管理函数、时间函数等。4、使用库函数时应用#include命令将有关头文件包含在程序中。5、除标准库函数外,各编译系统还提供了种类和数量繁多的非标准库函数,如图形函数、与系统有关的函数等。三峡大学科技学院2、函数的定义2.1、函数定义的一般形式:函数类型说明符函数名([类型名形式参数1,类型名形式参数2,……]){变量说明部分语句部分}可以把完成一个任务的过程写成函数。intA_to_a(intcapital){intsmall;if(capital=‘A’&&capital=‘Z’)small=capital–(‘A’-’a’);returnsmall;}返回值类型名函数名注意不要与已有库函数重名参数说明和参数列表调用函数时输入参数的格式要与之相同定义局部变量最好只使用局部变量,这样将方便调试。另外请注意这样的判断,如写成‘A’capital‘Z’是不行的下一页如果不需返回则可return0;返回值三峡大学科技学院2.2、说明:①、函数类型说明符:说明函数返回值的类型。intmax(intx,inty){……}voidstars(intn){……}②、函数名:是用户给函数起的名字,需符合标识符的规定。③、形式参数表:说明参数的个数和类型。④、变量说明:说明函数中用到的除形参以外的其它变量。⑤、语句部分:为了完成特定的功能而设计的一个或多个语句。intA_to_a(intcapital){……}三峡大学科技学院2.3、函数定义-示例:①、打印一行信息“Howdoyoudo!”函数的定义:voidprint_message(){printf(Howdoyoudo!\n);}②、求整数x的n次幂(n0)intpower(intx,intn){inti,mul=1;for(i=1;i=n;i++)mul=mul*x;return(mul);}三峡大学科技学院2.4、注意事项:①、C语言中不允许一个函数内定义另一个函数,一个C程序可以由多个函数组成,但所有函数在书写时都是平行的,不能嵌套。main(){……}voidstars(intn){……}voidprint_message(){……}②、C程序中,允许有空函数存在。定义形式为:函数类型说明符函数名(){}其它函数可以调用空函数,调用时什么也不做。三峡大学科技学院③、另一种函数定义方法:函数类型说明符函数名(形式参数1,形式参数2,……)形式参数说明;{变量说明部分语句部分}intmax(intx,inty){intz;z=xy?x:y;return(z);}intmax(x,y)intx,y;{intz;z=xy?x:y;return(z);}三峡大学科技学院3、函数的调用一、一般调用形式:1、函数调用的一般形式为:函数名(实际参数1,实际参数2,……)2、说明:①、若调用无参函数,则无实参表列,但括弧不能省略;②、如果实参表列包含多个实参,则各参数间用逗号隔开;③、实参与形参的个数应相等,类型应一致;④、实参与形参按顺序一一对应传递数据;三峡大学科技学院二、调用方式:按函数在程序中出现的位置来分,可以有以下三种函数调用方式:1、函数语句:由函数调用加上分号构成,在主调函数中可作为一个独立的语句stars(20);print_message();2、函数表达式:函数调用作为一个运算对象出现在表达式中,此时要求函数带回一个确定的值以参加表达式的运算c=max(a,b);3、函数参数:函数调用作为另一个函数的实参,其值作为一个实际参数传给被调函数的形参进行处理;此时也要求函数带回一个确定值m=max(a,max(b,c));printf(%d,max(a,b));求1!+2!+3!+…+10!算法:i=1;s=0;当i=10s=s+i!定义求i!的函数下一页voidmain(){longmm(int);/*自定义求阶乘函数应先声明*/inti;longs=0;for(i=1;i=10;i++)s+=mm(i);/*调用求阶乘函数,求I的阶乘*/printf(“\n%ld”,s);}举例longmm(intn){longt=1;inti;for(i=1;i=n;i++)t*=i;returnt;}定义n!的函数同样的,在调用m=max(a,b)时,其形参的值是a和b而m将会得到y的值函数的参数intmax(inta,intb){inty;y=(ab)?a:b;returny;}调用时:m=max(3,6);m=max(a,b);返回值括号里是实参在这一句调用时,形参的值是3和6其返回值y将被赋给调用语句中的m下一页括号里是形式参数形式参数与实际参数的关系1)形式参数在函数中是变量名,在函数调用时,形参被分配相应的内存。2)实际参数是表达式负责向对应的形参标识的内存单元传递数据。3)实参与形参必须个数相同。4)对应的形参和实参的类型必须一致。下一页主调函数中有如下语句:scanf(%d,%d,&a,&b);m=max(a,b+3);如果输入6,2函数intmax(inta,intb)形参a得到第一个实际参数a的值6形参b得到第二个实际参数b+3的值5例如函数返回值函数返回值通过return语句获得函数返回值的类型就是函数的类型returny;将变量y的值返回给调用者returny+3;将表达式的值返回给调用者return的数据类型与函数的类型矛盾时,自动将数据转换成函数的类型下一页intfunct1(){charch;while((ch=getch())'a'||(ch'z');returnch;}调用:i=funct1();返回的是int类型函数没有返回值,函数定义成空类型voidputline(){inti;for(i=0;i35;i++)printf(-);printf(\n);}函数的功能就是输出35个‘-’调用:putline();应该的语句形式i=putline();是错的下一页三峡大学科技学院三、说明:1、被调用的函数必须已经存在;但仅有这一条件还不够。2、使用库函数时,应在文件开头用#include命令将有关库函数信息包含进来;#includestdio.h#includemath.h3、若用户自己定义的函数在主调
本文标题:3第三章C程序设计结构(函数)
链接地址:https://www.777doc.com/doc-3361732 .html