文章教程

全国计算机等级考试二级C语言8.3函数参数和函数返回值

8/22/2020 10:24:52 PM 人评论 次浏览

8.3 函数参数和函数返回值

考点3 函数参数及函数的返回值

真考链接

考点3要求在选择题中通常填写相应的形式参数或者实际参数。此知识点难度适中,要重点理解重点掌握,其考核概率为80%。在操作题考试中,通常要求编写一个子函数实现某种特定的功能,且返回必要的值,考核概率为60%。

1.形式参数和实际参数

在程序中调用函数时,绝大多数情况下,主调函数和被调函数之间会发生数据传递关系,这就要用到前面提到的有参函数。在定义函数时,函数名后面括号中的变量称为“形式参数”(简称“形参”);在主调函数中,函数名后面括号中的参数(可以是一个表达式)称为“实际参数”(简称“实参”)。

说明:

(1)实参可以是常量、变量或表达式。

(2)在被定义的函数中必须指定形参类型。

(3)实参与形参的类型应相同或赋值相兼容。

(4)C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递。只能由实参传递给形参,而不能由形参返回来给实参。在内存中,实参单元与形参单元是不同的存储单元。

(5)在调用函数时,给形参分配存储单元,并将实参对应的值传递给该存储单元。调用结束后,形参单元被释放,实参单元仍保留并维持原值。

2. 函数的返回值

函数的返回值就是通过函数调用使主调函数能得到一个确定的值。函数的值通过 return 语句返回,return 语句的形式如下:

return 表达式;

或return(表达式);

或return;

return 语句中表达式的值就是所求的函数值。此表达式值的类型必须与函数首部所说明的类型一致。若类型不一致,则以函数首部的类型为准,由系统自动进行强制转换。

小提示

1.数组元素可以作为函数的实参,与用变量作为实参一样,按照单向值传递的方式进行传递。

2.可以用数组名作为函数参数,此时实参与形参都应有数组名,此时的数组名是整个数组的首地址。

如果要确保函数没有返回值,最好使用void定义函数为无类型函数。

常见问题

如果子函数没有指明返回值,源程序应如何处理?

当函数没有指明返回值,或没有返回语句时,函数执行后实际不是没有返回值,而是返回一个不确定的值,这有可能给程序带来某种意外影响。因此,为了使函数不返回任何值,C语言规定,可以使用void定义无类型函数。

真题精选

【例1】有以下函数调用语句

func((exp1,exp2),(exp3,exp4,exp5));

其中含有的实参个数和是( )。

A.1    B.2    C.4    D.5

【答案】B

【解析】在调用函数时,实参可以是表达式,若有两个以上的实参时,实参之间用逗号隔开。在以上调用语句中,(exp1,exp2)和(exp3,exp4,exp5)是两个用括号括起来的逗号表达式,它们之间用逗号隔开,因此,该函数调用语句中含有两个实参。总结:本题要求读者正确掌握前面学过的逗号表达式,这样才能理解本题函数调用语句中实参的个数。

【例2】以下程序的输出结果是(  )

#include <stdio.h>

func(int a,int b)

{ int temp=a;

a=b;b=temp;

main()

{ int x,y;

x=10;y=20;

func(x,y);

printf("% d,% d\n",x,y);

A.10,20    B.10,10    C.20,10    D.20,20

【答案】A

【解析】这里是传值调用,不会改变实参的值,所以输出为10,20。注意:传值调用时,只将实参的副本传给形参,在函数中只对副本进行修改,不会影响实参的值。

【例3】下列给定程序中函数fun()的功能是:计算S=f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+fn)的值

例如,当n的值为5时,函数值应为10.407143。

fx)函数定义如下:

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。

试题程序

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

/*****found*****/

f(double x)

if(x==0.0||x==2.0)

return 0.0;

else if(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

double fun(int n)

int i;double s=0.0,y;

for(i= -n;i< =n;i++)

{y=f(1.0*i);s+ =y;}

/*****found*****/

return s

void main()

{ printf("% f\n",fun(5));

【答案】(1)doublef(doublex)

2)return s;

【解析】本题考查:函数定义,其一般形式为“类型标识符函数名(形式参数列表)”,其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。

该程序的流程是:fun()函数对fn)项循环累加,fun()函数采用条件选择语句计算函数fx)的值。第一处错误在于未定义函数f(doublex)的类型,因此返回值类型为double型,所以此处函数应定义为double。第二处错误在于语法错误。

教程类别