您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 第4章函数_1207
博学谷——让IT教学更简单,让IT学习更有效1第4章函数学习目标掌握如何定义函数及调用函数了解内存四区的概念及栈区、堆区的工作原理掌握外部函数与内部函数的概念及其区别掌握局部变量与全局变量的概念及其屏蔽规则通过前面几章的学习,相信大家会编写一些简单的C语言程序了,但是,随着程序功能的增多,main()函数中的代码也会越来越多,导致main()函数中的代码繁杂、可读性太差,维护也变的很困难。此时,可以将功能相同的代码提取出来,将这些代码模块化,在程序需要的时候直接调用。这就好比组装机器,需要什么直接装上就可以了。C语言的函数类似于机器的组装部件,它用于实现某些特定的功能,本章将针对函数的相关知识进行详细地讲解。4.1初识函数4.1.1函数的概念日常生活中解决实际问题时,经常把一个大任务分解为多个较小任务后,由多人分工协作完成。用C语言编写程序时也采用类似的方法,即把一个较大的程序分解为多个程序模块,然后逐步编写每一个程序模块。当面对的程序有成千上万行代码时,一般先将它划分为若干程序模块,每个模块用来实现一个特定的功能;然后再分别实现各个模块,组成一个完整的程序。这样的思路不仅易于理解、便于操作,而且由于“好”的模块便于重复使用,还可以大量减少编写重复代码的工作量,提高编程效率。在C语言中,最简单的程序模块就是函数。函数被视为程序设计的基本逻辑单位,一个C程序是由一个main()函数和若干个其他函数组成的。程序执行从main()函数开始,由main()函数调用其他函数,函数之间可以相互调用。在使用函数时,有几点需要注意一下,接下来针对这几点进行说明,具体如下:1、C程序的执行是从main()函数开始的。2、一个C程序是由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。而一个源程序文件由一个或多个函数以及其他有关内容(如指令、数据声明与定义等)组成。3、所有函数都是平行的,即在定义函数时是分别进行的,是互相独立的。一个函数并不从属于另一个函数,即函数不能嵌套定义。4、从用户使用的角度看,函数分为两种:一是库函数,它由系统提供,用户不必自己定义即可直接使用;二是用户自己定义的函数,它是用以解决用户专门需要的函数。博学谷——让IT教学更简单,让IT学习更有效25、从函数的形式看,函数分为两种:一是无参函数,即不带参数的函数;二是有参函数,即带有参数的函数。4.1.2函数的定义在C语言中,定义一个函数的具体语法格式如下:返回值类型函数名([[参数类型参数名1],[参数类型参数名2],……,[参数类型参数n]]){执行语句………return返回值;}为了让读者更好地理解函数的各个组成部分,接下来对上述语法格式进行简要说明,具体如下:返回值类型:用于限定函数返回值的数据类型;函数名:表示函数的名称,该名称可以根据标识符命名规范来定义;参数类型:用于限定调用方法时传入参数的数据类型;参数名:用于接收调用方法时传入的数据;return关键字:用于结束函数,并返回函数指定类型的值;返回值:被return语句返回的值,该值会返回给调用者。如果函数没有返回值,则返回值类型要声明为void,此时,函数体中的return语句可以省略不写。在上面的语法格式中,函数中的“[[参数类型参数名1],[参数类型参数名2],…,[参数类型参数n]]”被称作参数列表,它用于描述函数在被调用时需要接收的参数。如果函数不需要接收任何参数,则参数列表为空,这样的函数被称为无参函数。相反地,参数列表不为空的函数就是有参函数。接下来分别讲解这两种函数。1、无参函数在C语言中,无参函数的定义很简单,先来看一个定义无参函数的示例代码,具体如下:voidfunc(){printf(这是我的第一个函数!\n);}上述示例代码中,func()函数就是一个无参函数,参数列表为空。要想执行这个函数,需要在main()函数中调用它,接下来通过一个案例来演示,如例4-1所示。例4-11#includestdio.h2voidfunc()3{4printf(这是我的第一个函数!\n);5}6voidmain()7{8func();9}运行结果如图4-1所示。博学谷——让IT教学更简单,让IT学习更有效3图4-1运行结果从图4-1中可以看出,func()函数被成功调用了。在程序中,第2行代码定义了一个无参函数func(),第4行代码将字符串打印到控制台,第8行代码在main()函数中调用该无参函数。下面通过一张流程图来说明上面例子中函数的调用过程,具体如图4-2所示。main(){func();}func(){}进入主函数func()函数图4-2主函数中调用子函数func()的流程图从图4-2可以看出程序是由上至下按顺序执行的,程序首先从主函数开始执行,遇到“func();”语句后跳转到func()函数,执行func()函数体中的代码。执行完func()函数后返回到主函数原来的调用点(即“func()”语句),接着执行调用点后面的语句,如果后面没有其他语句,则主函数执行结束。2、有参函数与无参函数相比,有参函数在函数定义时,需要在函数名称后面的括号中填写参数。所谓的参数是一个变量,用于接收调用者传入的数据。定义有参函数的示例代码如下:voidfunc(intx,inty){intsum=x+y;printf(x+y=%d\n,sum);}上述代码中,定义了一个实现加法运算的函数func(),并指定了两个int类型的参数x和y。为了初学者更好地掌握有参函数的用法,接下来在main()函数中调用func(intx,inty)函数,如例4-2所示。例4-21#includestdio.h2voidfunc(intx,inty)3{4intsum=x+y;5printf(x+y=%d\n,sum);6}7voidmain()8{9func(3,5);10}博学谷——让IT教学更简单,让IT学习更有效4运行结果如图4-3所示。图4-3运行结果在例4-2中,第2~6行代码定义了一个函数func(),该函数包含两个参数,分别是x和y。当在main()函数中调用func()函数时,传入函数中的参数是3和5,即在func(intx,inty)中执行了3+5的操作,因此,程序打印的结果为“x+y=8”。接下来通过一张图例来描述func()函数的调用过程,具体如图4-4所示。main(){func(3,5);}func(intx,inty){}进入主函数func()函数x=3y=5图4-4主函数中调用子函数func()的流程图从图4-4可以看出,有参函数和无参函数的调用过程类似,但在调用有参函数时,需要传入实参,并将传入的实参赋值给形参,然后在函数体中执行3+5的操作,最终将结果输出到控制台。值得一提的是,在定义有参函数时指定的参数x和y是形式参数,简称形参,它们只在形式上存在。调用函数时传入的参数(如案例中的3和5)是实际参数,简称实参,与形参相对,实参则是指实际参加运算的参数。4.1.3函数的返回值通过前面的讲解可知,函数的返回值是指函数被调用之后,返回给调用者的值。函数的返回值具体语法格式如下:return表达式;对于返回值类型为void的函数,可以直接在return语句后面加分号,具体语法格式如下:return;为了让读者更好的学习如何使用return语句,接下来对例4-2进行改写,使func(intx,inty)函数能够返回求和计算的结果,修改后的具体代码如例4-3所示。例4-31#includestdio.h2intfunc(intx,inty)3{4intsum=x+y;5returnsum;6}7voidmain()8{博学谷——让IT教学更简单,让IT学习更有效59intsum=func(3,5);10printf(x+y=%d\n,sum);11}运行结果如图4-5所示。图4-5运行结果从图4-5中可以看出,例4-3与例4-2实现了同样的功能。接下来通过一个图例来演示func()函数的整个调用过程以及return语句的返回过程,如图4-6所示。returnx+y;进入主程序func(intx,inty)xyx、y被释放继续执行为x、y分配内存并传值x=3y=5intsum=func(3,5)返回结果图4-6func()函数的调用过程从图4-6可以看出,在程序运行期间,参数x和y相当于在内存中定义的两个变量。当调用func(intx,inty)函数时,传入的参数3和5分别赋值给变量x和y,并将x+y的结果通过return语句返回,整个函数的调用过程结束,变量x和y被释放。return语句还有一个重要的作用,就是能提前结束函数的执行,即当函数执行到return语句时,就会立即跳出,不再执行后面的代码。下面通过一个案例来了解return语句提前跳出函数,如例4-4所示。例4-41#includestdio.h2intfunc(inta,intb)3{4intresult;5printf(开始计算%d与%d的和\n,a,b);6result=a+b;7returnresult;8printf(开始计算%d与%d的乘积\n,a,b);9result=a*b;10returnresult;11}12voidmain()13{14intresult=func(3,5);博学谷——让IT教学更简单,让IT学习更有效615printf(func()函数的返回值是%d\n,result);16}运行结果如图4-7所示。图4-7运行结果例4-4中,第2-11行代码定义了func()函数,该函数的return语句后面还有一段代码。从图4-7中可以看出,func()函数在执行到第一个return语句后就跳出函数体,不再继续往下执行了,说明return语句可以提前结束函数的执行。需要注意的是,return后面表达式的类型和函数定义返回值的类型应保持一致。如果不一致,就有可能会报错。为保证程序的可读性和逻辑性,没有返回值的函数都应定义为void。4.1.4printf()函数和scanf()函数在C语言开发中,经常会进行一些输入输出操作,为此,C语言提供了printf()和scanf()函数,其中,printf()函数用于向控制台输出字符,scanf()函数用于读取用户的输入,下列将分别讲解这两个函数的用法。1、printf()函数在前面的章节中,经常使用printf()函数输出数据,它可以通过格式控制字符输出多个任意类型的数据。表4-1列举了printf()函数中常用的格式控制字符。表4-1常用printf()格式字符常用格式字符含义%s输出一个字符串%c输出一个字符%d以十进制输出一个有符号整型%u以十进制输出一个无符号整型%o以八进制输出一个整数%x以十六进制输出一个小写整数%X以十六进制输出一个大写整数%f以十进制输出一个浮点数%e以科学计数法输出一个小写浮点数%E以科学计数法输出一个大写浮点数表4-1中列举了很多格式控制字符,使用这些格式控制符可以让printf()输出指定类型的数据,接下来通过一个具体的案例来演示这些格式控制符的使用,如例4-5所示。例4-51#includestdio.h2voidmain()3{4printf(%c%c,'H','\n');5printf(%s,Hello,world!\n);博学谷——让IT教学更简单,让IT学习更有效76printf(%d%d%d\n,1,2,3);7printf(%f%f\n,2.1,2.2);8}运行结果如图4-7所示。图4-8运行结果在例4-5的printf()函数中,通过格式控制字符“%c”、“%s”、“%d”、“%f”,分别输出了字符、字符串、整数、浮点数。脚下留心:程序中处处都能看到逗号的身影,但不是所有逗号都是逗号运算符,例如下面的程序:inta=1,b=2,c=3;printf(%d\n,a,b,c);该程序的运行结果是“1”。printf()函数虽然用了三个逗号,但在这里逗号的作
本文标题:第4章函数_1207
链接地址:https://www.777doc.com/doc-2156468 .html