您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计_08章 函数
LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第1页第8章函数8.1概述在C语言里,函数(Function)是指实现一个特定功能的程序模块。用户可以根据自己程序设计的需要,划分出不同的功能模块,再将这些功能模块定义为相应的函数,这种由用户自己所定义的函数,称为“用户自定义函数”。在集成开发环境中,也总是将一些常用的功能模块编写成函数,放在函数库中供公共选用,这些函数称为“库函数”。main函数a函数e函数f函数g…...…...…...函数b函数h函数I函数J…...…...…...函数c函数K函数L函数M…...…...…...LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第2页例8.1函数的调用(演示P143.c)#include“stdlib.h”//VC6.0中使用main(){printstar();print_message();printstar();}printstar(){printf(“***********************\n”);}print_message(){printf(“Howdoyoudo!\n”);}LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第3页说明:1)一个C源程序文件可以由一个或多个函数组成。一个源程序文件就是一个编译单位,而函数不是编译单位。2)一个C程序由一个主函数和若干个一般函数构成,其中主函数是不可缺省的。每个C程序都是由主函数去调用其他函数,其他函数又可相互调用。3)一个C程序由一个或多个源程序文件组成。对于较大的C程序,通常将一些函数和其他内容分别放在若干源文件中,再由若干源文件组成一个C程序。最简单的情况,一个C程序由一个源程序文件组成,这个源程序文件中只包含了一个函数(主函数)。4)C程序的执行是从main函数开始,调用其它函数后流程又回到main函数,在main函数中结束整个程序的运行。main函数是由系统定义的,是一个特殊的函数。5)所有函数在定义时是相互独立的,函数之间可以相互调用。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第4页函数的分类:1)从用户使用的角度函数可分为:•标准函数,即库函数。由系统提供,用户不必定义,直接使用;•用户自定义函数。由用户根据需要,自行编写,以解决专门需要。2)从函数的形式分,函数可分为:•无参数函数。在调用无参函数时,主函数并不将数据传送给被调用函数,一般用来执行指定的一组操作。无参函数可以带回也可以不带回函数值,一般以后者居多;•有参函数。在调用函数时,在主函数和被调用函数之间有数据传递。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第5页8.2函数定义的一般形式1.无参函数的定义形式类型标识符函数名(){声明部分语句}其中,用“类型标识符”指定函数值的类型,即函数返回值的类型。无参函数一般不需要带回函数值,因此可以不写类型标识符。2.有参函数定义的一般形式类型标识符函数名(形式参数表列){声明部分语句}LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第6页例如:intmax(intx,inty){intz;z=xy?x:y;return(z);}说明:1)return(z)的作用是将z的值作为函数值返回到主函数中,这个值称为“函数返回值”。注意返回值的类型要和定义函数的“类型标识符”一致。2)如果在定义函数时不指定函数类型,系统会隐含指定函数类型为int型。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第7页3.可以有“空函数”,形式为:类型说明符函数名(){}例如:dummy(){}说明:1)调用此函数时,什么工作也不做,没有任何实际作用。2)空函数的使用一般用于程序设计的模块设计阶段。表示这是一个待完成的函数,但不影响当前程序的运行。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第8页4.对形参进行声明的方式(在1.3节中已讲)C语言传统声明方式为:对形参类型的声明放在函数定义的第2行,在函数括号外单独指定。传统声明方式:intmax(x,y)intx,y;{intz;z=xy?x:y;return(z);}现代声明方式:intmax(intx,inty){intz;z=xy?x:y;return(z);}LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第9页8.3函数参数和函数的值8.3.1形式参数和实际参数在定义函数时,函数名后面括号中的变量名称为“形式参数”(简称“形参”)。在主调函数中调用一个函数时,函数名后面括弧中的参数(也可是一个表达式)称为“实际参数”(简称“实参”)。例8.2调用函数时的数据传递main(){inta,b,c;scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“Maxis%d”,c)}intmax(intx,inty){intz;z=xy?x:y;return(z);}运行情况如下:7,8Maxis8实参a,b形参x,yLanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第10页关于形参和实参的说明1)在定义函数中指定的形参,在未出现函数调用时,它们并不占据内存单元。只有在发生函数调用时,max函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。2)实参可以是常量、变量、表达式、函数。如:max(3,a+b)但要求它要有一个确定的值。在调用时将实参的值赋给形参(如果实参是一个表达式或函数,则需要先求解出实参的值)。3)在被定义的函数中,必须指定形参的类型。4)实参和形参的类型应相同或赋值兼容,否则会出错。5)C语言规定,实参与形参之间的数据传递遵守“单向值传递”的原则,即只能由实参传给形参,而不能由形参反过来传给实参。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第11页说明:1)如果需要从被调函数带回一个函数值,供主调函数使用,则被调函数中必须包含return语句。2)一个函数中可以有一个以上的return语句,但只有一个return语句被执行。3)return语句后的括弧可以不要。例如:returnz;和return(z);是等效的。4)函数的返回值类型由函数定义时的说明类型决定,return语句中的表达式类型一般应与之一致。如果不一致,对数值型数据,系统会自动进行类型转换。8.3.2函数的返回值通过函数调用使主调函数得到一个确定的值,这个值就是函数的返回值。例如例8.2。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第12页5)如果不需要返回值,则被调函数中可以不要return语句,但此时并不是没有返回值,而是返回了一个不确定的值,C语言也允许用户把该值赋给一个变量。6)如果用户要明确表示“不要返回值”,则可定义被调函数类型为void(空类型)。例如:例8.1中的定义可以改为:voidprintstar(){……}voidprint_message(){……}这样,被调函数就不会返回任何值,系统会禁止在主调函数中使用被调函数的返回值。例如:a=printfstar();×b=print_message();×是不合法的。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第13页8.4函数的调用8.4.1函数调用的一般形式函数调用的一般形式为:函数名(实参表列)说明:1)如果是调用无参函数,则“实参表列”可以没有,但括弧不能省略。2)如果有多个实参,则各参数间用逗号隔开,实参与形参的个数应相等,类型应一致。在TurboC中,对实参求值的顺序是按自右至左的顺序。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第14页补充例题:main(){charc1,c2,c3;c1=getchar();c2=getchar();c3=getchar();printf(“%c%c%c\n”,putchar(c1),putchar(c2),putchar(c3));}如果键盘输入为:abc↙请问:此程序的输出结果是什么?LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第15页8.4.2函数调用的方式按函数在程序中出现的位置来分,可以有以下三种函数调用方式:1.函数语句:把函数调用作为一个语句。如例8.1中的printstar();这种调用方式不要求函数带回值,只要求函数完成一定的操作;2.函数表达式:函数出现在一个表达式中,这种表达式称为函数表达式,这时要求函数带回一个确定的值参加表达式的运算。例如:c=2*max(a,b);3.函数参数:函数调用作为一个函数的实参。这种调用的实质也是函数表达式调用的一种特例。.例如:m=max(a,max(b,c));其中max(b,c)是一次函数调用,它的值作为max第二次调用的实参。LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第16页8.4.3对被调用函数的声明和函数原型在一个函数中调用另一个函数需要具备的条件:1)首先被调用的函数必须是已经存在的函数(库函数或用户自己定义的函数)。此条件必要而不充分。2)如果使用库函数,一般还应在本文件开头用#include命令将相关的“头文件”(含有所用库函数的相关信息)“包含”到本文件中来。例如:#includestdio.h#includemath.hLanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第17页3)如果使用的是用户自定义函数,且被调函数的定义位于主调函数之后(如下例),则在主调函数的可执行语句之前应对被调函数进行声明。函数声明也称为函数原型,其作用主要是提前告诉编译系统所要调用函数的原型,具体的函数定义在后面,便于编译系统在程序的编译阶段对函数调用的合法性进行全面检查。例8.5main(){floatadd(floatx,floaty);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);}声明定义:包括函数首部、函数体部分。调用LanJiming@sohu.comcopyrightSunday,January19,2020四川理工学院计算机科学系《C语言程序设计》第18页关于函数声明的几点说明:1.函数原型。函数原型的一般形式为:1
本文标题:C语言程序设计_08章 函数
链接地址:https://www.777doc.com/doc-3156715 .html