第6章中职类的C语言课件.ppt_第1页
第6章中职类的C语言课件.ppt_第2页
第6章中职类的C语言课件.ppt_第3页
第6章中职类的C语言课件.ppt_第4页
第6章中职类的C语言课件.ppt_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章函数,C程序是模块化和结构化的程序,一个大程序通常被分为多个小程序模块,每一个模块用来实现一个特定的功能。在C语言中,函数就是这样的程序模块。函数是构成C程序的基本单位,一个C程序由一个主函数和若干函数组成,通过函数之间的相互调用来实现函数之间的数据访问。函数是一个能够独立完成某种功能的程序块,其中封装了程序代码和数据,实现了更高级的抽象和数据隐藏。使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现细节。,【学习目标】,掌握函数、函数值(函数返回值)以及函数调用等的基本概念掌握函数的定义和调用方法掌握函数参数的传递方法掌握变量的作用范围,6.1概述,一个较大的程序可以被分成几个功能相对独立的程序模块,每个模块都实现一个特定的功能。这样既可增强程序的层次感,便于阅读,同时还有利于程序的调试。将一个大型的应用程序划分为多个功能模块后,多个程序设计者可以同时分别开发程序的不同模块,从而实现软件的并行开发,大大提高了程序设计的效率。,在C语言中,把这些特定的程序模块叫做函数,一个C语言程序有且只有一个主函数,但是可以包含任意多个其他函数。主函数可以调用任何一个函数,各函数之间也可以相互调用,但是函数不能调用主函数。根据函数调用主体的不同,在一个函数调用过程中包括如下两部分。主调函数:调用另外一个函数的函数。被调函数:被一个函数调用的函数。,6.1.1函数的概念,函数是C程序的机构单位,是模块化程序设计的重要体现。从用户的使用角度看,函数有两种:标准函数(或库函数)和用户自定义函数。()标准函数(或库函数)。库函数是系统已经编好的函数,一个库函数就能实现一个特定的功能。C语言包括了丰富的库函数。关于库函数有以下几点说明。调用标准库函数时要使用include命令,例如:#include。对于每一类库函数,在调用该类库函数时,用户在源程序include命令中都有应该包含的头文件名。,(2)用户自定义函数这种函数由用户自己编写,主要用于执行特定的功能,编写用户自定义函数是使用C语言进行程序设计的重点,相关方法将在稍后详细介绍。此外,从函数的形式来看,函数还可以分为无参函数和有参函数两种,这两种函数的详细情况将在稍后介绍。,6.2函数的定义,函数和变量一样,在使用前需对其定义,用以说明函数的结构和特点。下面分别介绍无参函数和有参函数的定义方法。,1无参函数的定义无参函数没有参数,用法比较单一,常用于执行一些固定操作。2有参函数的定义有参函数带有一个或多个参数,通过参数传递可以获得更加丰富的设计结果。,6.3函数的参数和返回值,6.3.1函数的参数6.3.2函数的返回值,函数的参数和函数的返回值是函数的两个重要属性。参数是主调函数和被调函数交换数据的接口。对于带参数的函数在函数调用时都必须进行参数传递,主调函数要将参数传给被调函数,被调函数根据调用函数传过来的参数进行计算和处理,最后将运算结果返回给调用函数。而函数返回给主调函数的运算结果就是函数的返回值。,6.3.1函数的参数,在C语言中,参数是函数之间进行信息交换的渠道,参数的形式多样,在用法和用途上都有较大差异。(1)参数的类型在C语言中,函数有如下两种类型的参数。形式参数:定义函数时,函数名后面的圆括号中列出的参数,简称形参。例如:intmax(intx,inty);实际参数:在函数调用表达式中,函数名后面的圆括号中列出的参数,简称实参。例如:amax(a,40);,(2)参数的传递在一个程序中实参与形参总是一一对应的,它们的参数个数相等,对应参数的类型相同。在程序的执行过程中,参数由实参向形参传递数据。下面结合实例来说明参数的传递过程。,6.3.2函数的返回值,当实参将参数值传给形参后,即可执行该函数对应的操作,函数的执行情况主要有以下两种。在函数中完成一些打印操作和信息显示输出等任务,不需要返回结果给主调函数,这类函数的类型为void。在执行相应的函数操作后,还要将函数运行结果返回给主调函数,主调函数使用返回值做进一步运算。这类函数带有返回值。要使1个函数返回1个确定的值,就必须要用return语句。,(1)在以前的例子中已经用到了return语句,return语句的格式如下:return(表达式);或者:return表达式;或者:return;,(2)对return语句的用法做如下说明。,return语句中的“表达式”的值就是函数返回给主调函数的值。当程序执行到return语句时,立即退出函数的执行返回主调函数。一个函数中可以包含多个return语句,但是在1次函数调用中只会有1个被执行。return语句中也可以不包含表达式,其作用只是使流程返回主调函数,这时并不返回确定的值。如果函数不需要返回值,则可以在定义函数时使用void类型。函数要返回值必须具有1个确定的类型。例如1个函数可以返回一个整型、实型或字符型的数值。这主要在函数定义时在通过类型标识符指定。函数的返回值必须与函数定义的“类型标识符”一致或者兼容,若类型不一致,则以函数的类型标识为准进行转换,返回1个与函数的类型标识符一致的值。建议尽量使其一致,避免系统的自动转换和人为所造成的数据误差或者错误。,6.4函数的调用,6.4.1函数调用的一般形式6.4.2函数调用,一个C程序由1个主函数和若干个函数组成,因此,C程序是一系列被定义函数的集合体。1个函数可以被主函数main()调用,也可以被其他函数调用。各函数之间可以相互调用。同一函数可以被1个或多个函数任意调用多次。,6.4.1函数调用的一般形式,在讲函数的调用之前,先回顾一下函数的定义,以免混淆两者之间的差异。函数的定义为类型标识符函数名(形参表列)函数体而函数调用的一般形式为函数名(实参表列);两者的区别有如下几点。(1)函数的定义中有“类型标识符”而函数的调用中没有。(2)函数的定义中的参数为“形参”,而函数的调用中的参数为“实参”。(3)函数的定义后没有“;”,而函数的调用中有“;”(函数作为实参除外)。,6.4.2函数调用,1函数的调用方式函数调用的目的是:当主函数运行到某处需要实现某个特定的功能时,执行函数调用,函数调用完毕后,返回主调函数继续向下执行程序。在C程序中,主要有以下3种函数调用方式。,(1)函数语句:把函数调用单独作为一个语句使用。如前面例子中:star(b);YesNo(charch);等都是函数调用语句。这种情况下主调函数通常不需要被调函数返回数值。(2)函数表达式:函数出现在一个表达式中,这种表达式称为函数表达式。如前面表达式中的:c=math(a,b);k=number(c);等都是函数表达式的用法。这种情况下主调函数通常需要被调函数返回1个确定的结果。,(3)函数参数:把函数调用的结果作为另一个函数的参数。例如:m=max(a,min(b,c);其中“min(b,c)”是1次函数的调用,它的返回值将作为另一次函数调用的实参。这种形式较为复杂。为了增强程序的可读性,建议读者在学习的过程中用以下的语句代替该例:n=min(b,c);m=max(a,n);,有关函数的注意事项如下。,调用函数时,函数调用语句中的函数名必须与所调函数的函数名完全一致。实参的数目必须和形参的数目相等。实参可以是任何表达式,在类型上应按书写位置与形参一一匹配。如果类型不匹配,C编译程序则按赋值兼容的规则进行转换。在C语言中,原则上规定函数要先定义后调用。但如果使用在先定义在后,则必须在适当的地方对被调函数给予声明(函数的声明在下一节中将进行讲述)。C语言中,函数可以直接或间接地自己调用自己,这种方法叫函数的递归调用。,2函数的声明,在一个函数中调用另一个函数,不仅要保证被调函数存在,而且还要在函数被调用之前让C编译系统知道该函数已经存在。就像出席会议前要先报到一样,只有在会前向主办单位表明自己已经到达并将出席会议,主办单位才能做好相关的安排工作。如果一个函数使用在先定义在后,在使用该函数之前,必须对该函数进行声明。函数声明的方法比较简单,使用函数原型即可实现对函数的声明。在函数定义中除了函数体之外的部分称为函数头,在1个函数的函数头后面添加一个“;”就构成了函数的原型:函数名(参数类型1参数名1,参数类型2参数名2,);例如:floatmath(floata,floatb);函数声明还可以简化为类型标识符函数名(参数类型1,参数类型2,);例如:floatmath(float,float);,就函数的原型和声明做如下说明。(1)函数的声明常常是作为一条独立的语句,其位置可以有如下两种。在所有函数的外部,在被调用之前声明函数。这种情况下,在函数声明之后的所有位置上都可以调用该函数。函数声明也可放在函数内的说明部分,如在main()函数的内部进行说明。这种情况下,只能在main()函数内部才能调用该函数。(2)对函数进行声明,可以使C语言的编译程序在编译时进行有效的类型检查,进行相应的类型转换。(3)在函数名前没有说明函数返回值的类型时,隐含为整型。如果使用库函数,一般在函数的头部要使用“#include”命令将调用有关库函数时所用到的信息“包含”到源程序中。如前面所有程序中用到的“#include”,“stdio.h”是一个“头文件”,凡是使用输入/输出函数均要用到该文件,在头文件中包含了输入/输出函数的声明。,6.5变量的作用范围,变量可分为局部变量和全局变量,它们的作用范围是不同的。局部变量的作用范围只在被定义的函数的内部,而全局变量的作用范围为从该变量定义开始到程序结束。局部变量就像地方法律,只在某一个地方范围内有效,而全局变量就像是国家的宪法,在全国范围内都有效。,1局部变量,局部变量总是定义在函数体的内部(即大括号内),并且只在该函数内有效。在该函数之外无法使用该变量。如果在变量的作用区域之外使用变量,系统将报告该变量尚未定义。,2全局变量,全局变量又叫全程变量,它是在所有函数的外部定义的变量。其作用范围从定义开始到整个程序结束。,例如:intx,y;charc;/*x,y,c为全局变量,其作用范围从此开始到程序结束*/f1()intm;.floatk;/*k为全局变量,其作用范围从此开始到程序结束*/f2()intn;,全局变量虽然作用范围较局部变量大,但是也存在以下不足。(1)由于在其作用的整个范围内均占用内存,所以增加了内存的开销,不如局部变量节约系统资源。(2)易与局部变量发生冲突,降低了程序的可读性。,习题,一、选择题1下面关于函数参数传递正确的是。A只能传递地址B只能传递数据C传值,即为传递地址和数据D双向传递2void返回类型函数正确的描述是。A返回确定的值B返回不确定的值C返回值D不返回值3下面说法中正确的是。AC语言程序总是从第一个定义的函数开始执行的B在C语言程序中,要调用的函数必须在main()函数中定义CC语言程序总是从main()函数开始执行的DC语言程序中的main()函数必须放在程序的开始部分,4以下正确的函数定义是。Aintadd(intx,inty)Bintadd(intx;inty)Cintadd(intx,inty);Dintadd(intx,y)5若调用一个函数,且此函数中没有return语句,则以下正确的说法是。A没有返回值B返回若干个系统默认值C能返回一个用户所希望的值D返回一个不确定的值6关于参数的传递说明正确的是。A地址传递B单向值传递C由实参传向形参,再由形参传向实参D由用户指定传递方式,7C语言规定,函数的返回值的类型由。Areturn语句中的表达式类型决定B调用该函数时的主调函数类型决定C调用该函数时系统临时决定D定义该函数时所指定的函数类型决定8凡函数中未指定存储类别的局部变量,其默认的存储类别为。A自动B静态C外部D寄存器,二、分析以下程序的功能#includef(intn)inti,j,k;i=n/100;j=n/10-i*10;k=n%10;if(I*100+j*10+k=I*I*I+j*j*j+k*k*k)re

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论