找回密码
 立即注册

微信扫码登录

使用验证码登录

搜索
查看: 80|回复: 0

14.第14节课第七章用函数实现模块化程序设计

[复制链接]

6476

主题

3

回帖

1万

积分

管理员

积分
19556
发表于 2024-4-15 08:49:11 | 显示全部楼层 |阅读模式
我们来看一下函数调用的过程。在定义函数中,指定的形参在未出现函数调用时呢,它们并不占内存中的存储单元。在发生函数调用时,函数的形参呢,才被临时分配内存单元。将时参的值传递给对应行参,在执行函数期间,由于行参已经有值。可以利用形参呢进行有关的运算,通过retire语句呢,将函数值带回到主调函数。那么,我们应该要注意,

我们返回值的类型呢?与函数的类型呢?那么是要是一要一样的。如果函数不需要返回值,就不需要return语句,这个时候函数的类型呢,应该定义为void型表示啊,它没有返回值,返回值的类型呢,是一个空值,那么定义为void是一个我们的void型。调用结束形参函数被释放,那么我们的实参单元呢?仍然保留原值没有改变,如果在执行一个被调用函数时,

形参的值发生改变。不会改变主调函数的实参的值,因为实参和形参呢是两个不同的存储单元。我们行时参向行参的数据传递呢,是值传递单向传递,只能由时参传给行参,而不能由行参传给时参。时参和形参呢,在内存中占有不同的存储单元,时参无法得到形参的值好,我们再来看一下。好,我们再来看一下。我们函数的返回值通常呢,希望通过函数调用使用主调函数得到一个确定的值。

这就是函数值,函数的返回值,函数的返回值啊,是通过函数中的return语句获得的一个return,一个函数中呢可。可以有一个以上的retire语句,执行到哪一个retire语句呢?哪一个retire语句就起作用?retire语句后面的括号可以不要,比如说我们的retire z返回z的值。那么,可以写成retiree tard z或者说retard括号z,我们的括号了,那么可以可以写那么可以了,可以写这个部分那么可以写了吧?

可以可以不写的这样一个方法可以不写。return后面呢,可以是一个表达式函数值的类型,函数值呢类型在定义函数时。进行使用。在定义函数时呢,指定的函数类型一般呢,应和retire语句中的表达式类型一致。在如果函数值的类型和return中的表达式的值不一致,则以函数类型为准。对于数值型数据呢,可以自动进行类型转换。即函数类型决定返回值的类型,对于不带回值的,参函数应当使用定义函数为位的类型或者称为空类型。

这样呢,系统就保证不使函数带回任何值,即禁止在调用函数中使用被调函数的返回值。那么,此时在函数体中呢?不能出现return语句,那么我们看一下函数的返回值的这样一个定义的方式,我们比如说这个例子当中int max。这里的int呢表示,函数的返回值是一个整型,这里的大恰letter。这里的恰表示我们函数值呢?函数的返回值呢?是一个字符型,这里的double命。

double命令。double呢,表示函数的返回值,它的值的类型呢,是我们的双精度型。我们的函数调用使数函数得到一个确定的值,这就是一个函数值函数的返回值,那么这是我们函数返回值的部分。好,接下来呢,我们来看一下我们。说我们来讲一下我们函数的这样一个声明的,这样一个方式。那么,在一个函数中呢?

调用另外一个函数,那么需要具备一些条件,首先被调用的函数。必须是已经定义的函数是库函数,或者说用户自己的定义的函数呢都可以。但是呢,如果使用库函数还应该在本文件开头,用井号include。指令呢,将该函数有关的信息呢,包含在本文件中。如果是用户自己定义的函数,而该函数呢?在主调函数就是调用它的函数的后面。在主调函数中,

应该被对被调函数呢进行声明,声明的作用呢是把函数名函数参数的个数和参数类型等信息呢。通知编译系统,以便在遇到函数调用时,编译系统能识别函数并检查函数的。这样一个正确的,这样一个部分。好,接下来我们看一下关于函数声明的部分,如果被调用函数的定义。出现在主调函数,也就是说调用它的函数之前则可以了,不必不必加以声明。因为编译系统呢,已经知道了已定义函数的有关情况,

会根据函数首部提供的信息呢,对函数的调用做正确性检查。那么,这是我们函数声明的这样一些方式。那么,如果在原文件模块的开头,已对本文件中所调用的所有函数进行了声明,那么它们的作用范围呢?是全局性的。编译系统呢,就可以由此知道各被调用函数的有关信息,因此不必在各函数中呢再对。所调用函数了,做声明,那么这是我们函数声明的这样一些类型,

这样一些内容。好,接下来我们看一下这样一个例子。我们把例在max函数中呢,定义的变量z改为float型,那么我们看一下这些部,看一下这个部分。井号includes gdo点hint main。int max float x floaty float abi n tcs can f百分号f百分f。符号a符号b取a的地址取b的地址,把我们输入的数据呢放在我们的这样一个变量AB当中,接下来对函数进行调用。c=max AB max是我们的函数名AB是我们的实参,那么实参和形参呢?进行值传递,

那么进行我们的函数中的这样一个运算运算部分。那么,最后呢,进行一个输出printf max is百分号d反斜杠nc return 0?我们的这样定义的函数呢?那么就是我们的定义的函数的两个两个函数呢?比较大小的这样比较大小的这样一个部分,就是因特max float x floaty,那么接下来比较大小float z。z=x大于y问号x冒号y return z函数呢?返回一个它的一个值返回z的这样一个值。我们内函数,大家看一下这个部分内函数的形参呢,是float型实参,也是float型。

在函内函数中。输出给输入给a和b的值呢?那么是一点五和一点二点六,在调用max AB的时候呢?把a和b的值一点五和二点六传递给形参x和y执行函数max中的条件表达式。z=x大于y问号x冒号y使变量z的值呢?得到二点六,那么函数定义为zin t型,而retire语中的z呢?为float型。要把z的值作为函数的返回值,二者不一致,按照赋值规则处理了,先将z的值转换为int型得到二,那么它就是函数得到的返回值。

那么,这是我们的函数的返回值的部分,如果将被函数的c呢改为float型呢?用我们的百分号f呢?格式输出得到二点零零零。因为调用函数得到了这样一个是int型,而函数的值为整数二,那么这是我们函数的。学券的这样一个使用方式。那么,对被调用函数的声明和函数类型,那么刚才我们讲过,在一个函数中调用另一个函数呢?就是被调用函数呢?需要具备一些条件。

首先,被调用函数必须是已经定义的函数,比如说库函数,或者说用户自己定义的函数。如果使用库函数,那么应当在本文件的开头呢,用井号include指令,将调用有关库函数所收到的信息呢。包含在本文件中,如果使用用户自己定义的函数,而该函数的位置呢,在调用它的主函数的后面。在应当呢,在主函数和被调用的函数中做声明,声明的作用呢是把函数名函数参数的个数。

参数类型等信息呢?通知编译系统,以便以后在用到函数调用的时候呢?编译系统能正确的识别函数并检查调用是否合法?那么我们我们刚才还我们刚才讲那么在使用函数声明的这样一个部分呢,如果被调用函数的定义了,那么。出现在主调函数之前,可以不必加声明。那么,这是我们的函数声明的这样一个部分。如果在原文件的开头。已对本文件中所使用的所有函数进行了声明,则它们的作用范围是全局性的,那么也不必呢,

再对函在函各函数中对所调用的函数来进行声明。那么我们再来看一下这个例子,对被调函数的声明和函数类型输入两个实数,用一个函数求出它们之和。大家看一下这个程序井号include。sddl点hin term接下来就是对函数呢进行声明。float add float,float x floaty这是对我们的add函数r的函数做声明。float是函数使用的数据类型。r的是函数名后面的括号当中呢?是它的这样一个形式参数。接下来定义三个浮点型变量ABC printf please enter enter a band b提示输入我们这样一个数据,接下来sky f百分号f百分号f这样一个符号a符号b取地址a取地址b将我们输入的数据呢放?在我们的变量a和b当中,接下来调用我们add函数c=add AB,

那么最后呢,进行输出printf sun等于百分号f反斜杠nc输出两数之和。returning那么这里的调用呢?就是调用我们的add函数进行运算,将它的返回值呢?将它的值呢?返回的这样一个值呢?赋给我们的c。那么,我们来看一下函数的定义float 2的float x float xy。float是我们的函数使用的数据类型,浮点型函数返回一个浮点型数据add是我们函数名float x floaty是我们的这样一个形式参数。后面两个大括号之间呢,是我们的函数起函数的功能部分,那我们来看一下float z定义一个。

浮点型变量zz=x+y retire z,把变量z的值呢?作为函数值进行返回,那么我们函数声明和函数定义中的第一行呢?基本上是相同的。那么那么只差一个分号的,这样一个部分只差一个分号函数的首行称为函,就是函数的首部。称为函数的原型,那么因为在函数的首部中呢,包含了检查调用函数是否合法的基本信息,它包含了函数名函数值类型参数个数。参数类型和参数顺序,因此呢,在函数调用时,

检查函数类原型是否与函数生命一致,这样呢,就能保证函数的正确使用。那么,这是我们被调用函数的生命和函数原型。那么我们再看一下,我们被调用函数对被调用函数的声明和函数原型,那么我们这样一个方式呢?是函数类型函数名后面加上我们的形式参数部分。形式参数呢?有我们的参数类型,一参数名,一逗号参数类型,二参数名,二逗号,

那么后面的是我们的参数类型n和参数名n。或者说我们的函数类型函数名后面跟上我们的参数参数类型一函数参数类型参数类型二后面的参数逗号后面的参参数类型n。在函数声明中呢形参名呢,可以省略不写啊,只写形参的类型。比如说我们看一下这样一个例子float r float x floaty,那么我们可以了形参的名字呢?可以省省略不写,那么我们就直接写了。float r的float float。那么我们还可以呢,把我们的形参的名字呢,改成另外的其他的部分,其他的类,其他的形式,

比如说。a和b float 2,float afloat b那么参数名呢?不用x和a和用AB那么也是可以的,也是可以的,这个部分也是可以的。如果在已在文件的开头了,所有函数之前已对本文件中所调用函数进行了声明。则在各函数中呢,不必再对其调用的函数进行再做声明,那么我们看一下这个部分。它在所有函数之前,且在函数外部对进函数进行声明char letter。恰恰夫恰这样一个函数,这样一个参数类型,

恰float f float float inti float float float。在所有函数之前,且在函数外部进行了声明,那么在main函数中呢?要调用letter f和I这三个函数。则不必再对所调用的这三个函数了进行声明,那么这是我们函数的这样一个声明的。这样一个运用的这样一个部分。在对函数的定义和声明呢,不是一样的,函数的定义呢,是指对函数功能的确立,包括指定函数名。函函数值类型形参及其类型及函数题等,它是一个完整的,

独立的函数单位。而函数的声明作用呢,则是把函数的名字,函数类型及形参的类型,个数和顺序通知编译系统。以便在调用该函数时呢,系统按此进行检查,对照它不包括函数体。那么,接下来我们再看一下函数的嵌套调用。C语言的函数定义呢,是相互平行的,独立的,也就是说在定义函数时,一个函数内不能再定义另一个函数。

既不能嵌套定义,但可以嵌套的调用函数,也就是说,在调用一个函数的过程中,再调用另外一个函数。比如说我们看一下这个例子。被函数调用a函数。a函数呢?在调用b函数。b函数呢,也可以再调用b函数b函数呢。b函数呢诶,是我们这样一个调用的哈b函数呢,可以调用b函数b函数调用的这样一个。全学着这样一个具体的。

折去的这样一个运行的。实现的部分那么a函调用a函数了a函数再调用b函数b函数了,那么运行完后呢,回到b函数那么再回到a函数那么进行结束。那么,这样一个。提起来的这样一个运用方式,那么我们首先呢,是执行类函数的开头部分,遇到函数调用函数呢,调用函数a流程转序,执行a函数。执行a函数的开头部分遇到函数调用语句,调用函数b流程转序,执行函数b遇执行b函数,

如果再无其他欠条的函数,则完成b函数的全部操作。返回到a函数中,调用b函数的位置继续执行a函数中尚未执行的部分,直到a函数结束,返回类函数中,调用b函数的位置继续执行类函数的剩余部分的指导结束。那么,我们来看一下函数的调用不调用方式。输入四个整数,找出其中最大的数用函数的嵌套来来进行处理。那么我们看一下这个程序井号int ludesgi点hint May函数声明int max 4。int aint BI nt cin TD对max 4进行函数声明,那么再定义四五个再定义这样一些整型变量in tab CDMA x。printf please enter for integra mbers输入四个数scan f百分号d百分号d百分号d百分号d取a的地址取b的地址取c的地址取c的地址取c的地址。

将我们所有的数据呢,放在我们的整型,放在我们的整变量当中。max=max 4 abcd调用max 4函数得到四个数中最大者。printf max等于百分号d返型iMax输入四个数中的最大值,返回它零还是返回一个零值程序结束,我们看一下我们定义的这样一个max函数。int max.4 int aint BI nt cin TD那么定义max 4函数,那么int max 2 in taint b。对1 max 2进行函数声明intm定义,一个整型变量MM=max。二,AB。调用max。

二函数得到a和b的最大值,放在m当中,接下来m=max 2 MC调用。max 2函数得到ABC中的最大值,放在m当中m=max 2 md调用max。二函数得到mabcd中的最大值,放在m中retire m,把m作为函数值的返回内函数,我们来看一下这个妹,这个max 2。int max 2,in taint b定义max 2函数if a大于等于bret I rea else。return b那么a大于b了,这个这样一个。条条件判断条件,

判条件判断表达式,那么它如果成立的话,那么if后面的括号当中的逻辑值为真,逻辑值为真呢,执行后面的语句return a返回一个a的值,返回a的值。否则呢?那么为假的话那么返回b的值,那么就是我们max max 2函数的这样一个部分,这样一个工,这样一个作,这样一个方式。在主函数中呢,要调用max 4函数,因此呢,

在主函数的开头呢,要对max 4函数呢,做声明,在max 4函数呢中呢,三次调用max 2函数。因此呢,要在max 4函数的开头呢,对max 2函数做声明,由于在max主函数中呢,没有直接调用max 2函数,因此在主函数中不必对max 2函数做声明。只需在max 4函数中呢,做声明就可就就就可以对吧?就可以这个部分就可以那么max执设执行的过程呢?第一次调用max 2函数,

得到的函数值是AB中的大者,把它赋给m。第二次调用max 2中的MC中的大者,也就是ABC中的最大值,把它赋给m。第三次调用max 2得到m和d中的大者,也是abcd中的最大者,再把它赋给m。那么,这是我们求最大数的这样一个方式的,这样一个不这样一个方式。那么我们可以呢,将max 2函数呢?函数体呢?只改用一个return语句,

就是一个函数表达式的值,那么就是int max 2 in tain TB return a大于等于b问号a。冒号b那么返回条件表达式的值,就是a和b中的最大值,那么在max 4函数中呢?三个调用max语句的语句呢?可以可以使用这样一个方式,比如说。m=m=max 2 max 2。max 2 AB。CD把函数调用了,作为函数参数,那么这样一些方式,那么甚至可以取消掉变量m,那么max 4呢?

可以写成。int max 4 inta bint aint BI nt cin TD int max 2 in taint bre tell。max.2 max 2 max 2 abcd那么这是我们这样一个函数的,那么使用的这样一个类型。那么,我们先调用max 2 AB得到AB中的最大值,再调用我们max 2那么括号当中的max 2 AB呢?作为一个。函数参数,然后c那么其中的max 2 AB呢?为已知得到ABC中的最大值,最后由max 2 max 2。max 2 ABC作为一个函数参数,那么一个d一个d则求得abcd呢?

四者中的较大最大者。好同学们,今天呢?我们讲过了。函数使用的这些方式呃,包括了我们为什么要使用函数?为什么要使用函数?那么也就是说我们函数呢?在C语言那么我们再给大家讲一下,在我们C语言中呢规定的函程序中使用到的所有函数呢?必须先定义后使用,那么这些这些函数啊,都必须先定义后使用。定义函数呢,应该包括指定函数的名字,

指定函数的类型,指定函数的参数和类名参数的名字和类型。指定函数应当完成的操作,那么这是我们要定义函数的方式,那么我们的函数呢?又分为了无参函数和有参函数。我们可以调用有参无参函数也可以呢,调用无参函数那么在调用有参函数呢和调用无参函数呢?调用无参函数呢,就完成一些功能,这功能这些功能的部分完成这些功能定义有参函数呢,定义有。定义无参函数呢?和定义有参函数调用调用我们的函函数部分呢?我们可以对我们的函数呢进行调用。

那么,调用我们的这些参数呢?那么。函数呢,我们可以调用无参函数,也可以调用有参函数,无参函数呢,我们的括号当我们函数后面的括号当中呢,就没有我们的参数。调用有参函数呢,我们函数后面的括号当中呢,就是我们的实参,那么实参表列呢,如果包含多个实参,则各参数呢,

要用逗号隔开。实参与形参呢,按顺序对应向形参呢传递数据,那么这是我们行函数的调用的这样一个方式,另外呢,最后呢,我们讲了这样一个函数的嵌套调用的方式。函数的嵌套调用呢,那么就是我们的。在一个函数中呢。又调用另外了一个函数的,这样一个部分,那么这是我们函数的嵌套调用那么?那么大家下来之后呢?那么可以看一下我们讲过的这些部分,

那么进行一个了解,那么进行一个熟悉好今天的课呢?我们就讲到这里好,谢谢大家。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|5432考试网 ( 蜀ICP备2022024372号|川公网安备51152402000101号 )|网站地图

GMT+8, 2024-5-19 16:38 , Processed in 0.076551 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表