文章教程

全国计算机等级考试二级C语言8.4函数的调用

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

8.4 函数的调用

考点4 函数调用的一般形式和调用方式

1.函数调用的一般形式

函数调用的一般形式为:

函数名(实参表列);

函数的调用可以分为调用无参函数和调用有参函数两种。如果是调用无参函数,则不用“实参表列”,但括号不能省略。在调用有参函数时,若实参列表中有多个实参,各参数间用逗号隔开。实参与形参要求类型一致。

真考链接

考点4 在选择题中主要考查是否掌握了函数的正确调用方法。此知识点应当重点理解重点掌握,其考核概率为10%。

在操作题中常常通过编程题进行考查。要求编写满足特定要求(如能进行特定运算)的子程序,然后让主程序进行调用实现计算的功能,其考核概率为60%。

2.函数调用的方式

(1)函数语句。把函数调用作为一条语句,这时该函数只需要完成一定的操作而不必有返回值。

(2)函数表达式。当一个函数出现在一个表达式中,该表达式就被称为函数表达式。因为要参与表达式中的计算,所以要求该函数有一个确定的返回值提供给表达式。

(3)函数参数。函数调用作为一个函数的实参。

C语言中,调用函数和被调用函数之间的数据可通过3种方式进行传递。

(1)实参与形参之间进行数据传递。

(2)通过return语句把函数值返回到主调用函数中。

(3)通过全局变量。

真题精选

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

试题程序

#include <stdio.h>

main()

{ int i=2,p;

p=f(i,i+1);

printf("% d\n",p);

int f(int a,int b)

{ int c;

c=a;

if(a>b)

c=1;

else if(a==b)

c=0;

else

c= -1;

return(c);

A.-1    B.0    C.1    D.2

【答案】A

【解析】以上程序中定义了名为f()的整型函数,它有两个int类型的形参。在main()函数中调用了f()函数,可以很直观地看到,实参的值分别是2和3,2传给函数形参a,3传给函数形参b。函数返回的值赋给变量p,main()函数中输出的值就是函数中的返回值。在函数f()中,若a的值大于b,c被赋1;若a的值等于b,c被赋0;若a的值小于b,c被赋-1。按照实参传送过来的值,a的值小于b,因此c被赋-1,所以函数的返回值为-1。总结:本题中没有复杂的算法,但读者必须熟练地掌握if...else分支结构的执行流程,同时建立清晰的有关函数定义和函数调用的基本概念,就可得出正确的答案。

【例2】若已定义的函数有返回值,则以下关于该函数调用的叙述中,错误的是(  )

A.函数调用可以作为独立的语句存在    B.函数调用可以作为一个函数的实参

C.函数调用可以出现在表达式中    D.函数调用可以作为一个函数的形参

【答案】D

【解析】函数的形参只能是一般变量,函数调用不可以作为一个函数的形参,但可以作为实参,选项A、B和C的描述都是正确的。

【例3】以下程序用以求阶乘的累加和,请阅读程序并填空

S=0!+1!+2!+…+n!

试题程序

#include <stdio.h>

long f(int n)

{ int i;

long s;

s=______;

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

s=______;

return s;

m ain()

{ long s;

int k,n;

scanf("% d",&n);

s=______;

for(k=0;k< =n;k++)

s=s+______;

printf("% ld\n",s);

【答案】1 s*i 0 f(k)

【解析】本题要求进行累加计算,但每一个累加项是一个阶乘值,阶乘值由0!、1!、2!、3!依次变化到n!。函数f()用于求阶乘值n!(n为形参),由于阶乘的值很大,因此定义函数为long类型。求阶乘的值存于变量s中,因此s的初值应为1,第一个空处填1。连乘的算法可用表达式s=s*i(i从1变化到n中,循环控制变量k的值确定了n的值,调用一次f()函数可求出一个阶乘的值,所以在第四个空处应填f(k) (k从0变化到n)。总结:在进行累加及连乘时,存放乘积或累加和的变量必须赋初值;求阶乘(即连乘)时,存放乘积的变量其初值不能是0。

【例4】编写函数fun(),其功能是计算:

s=ln(1)+ln(2)+ln(3)+…+ln(m

s的平方根作为函数值返回。

在C语言中,可调用log(n)函数求ln(n)。log函数的引用说明为:doublelog(doublex)。

例如,若m的值为20,则fun函数值为6.506583。

注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。

试题程序

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

#include <math.h>

double fun(int m)

void main()

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

【答案】double fun(int m)

{ int i;

double s=0.0;

for(i=1;i< =m;i++)

s=s+log(i);/*计算s=ln(1)+ln(2)+ln(3)+…+ln(m)*/

return sqrt(s);/*对s求平方根并返回*/

【解析】本题考查:计算表达式的值运用for循环语句通过累加操作求和;平方根函数sqrt()的使用

首先计算从1~m的对数的和,因此循环变量的范围是1~m,每次循环都进行一次累加求和。该题需要注意的是,log函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。在返回时求出平方根。

考点5 函数的说明及其位置

真考链接

考点5属于简单识记内容,其在选择题中的考核概率为10%。

1. 函数的说明

C语言中,除了主函数外,对于用户定义的函数要遵循先定义后使用的规则。如果在程序中把函数的定义放在调用之后,应该在调用之前对函数进行说明(或函数原型说明)。函数说明的一般形式如下:

类型名 函数名(参数类型1,参数类型2,……,参数类型n);

例如:intadd(int,int);

或:

类型名 函数名(参数类型1 参数名1,参数类型2 参数名2,……,参数类型n 参数名n);

此处的参数名完全是虚设的,它们可以是任意的用户标识符,既不必与函数首部中的形参名一致,又可以与程序中的任意用户标识符同名,实际上参数名常常省略。函数说明语句中的类型名必须与函数返回值的类型一致。

函数说明可以是一条独立的语句。对函数进行说明,能使C语言的编译程序在编译时进行有效的类型检查。当调用函数时,若实参的类型与形参的类型不能赋值兼容而进行非法转换,C编译程序将会发现错误并报错;当实参的个数与形参的个数不同时,编译程序也会报错。

2. 函数说明的位置

一个函数在所有函数的外部,如在被调用之前说明,则在说明后的所有位置上都可以对该函数进行调用。如在main()函数内部进行说明,则只能在main()函数内部才能识别该函数。

小提示

函数调用可以实现源代码的美观,而且易读,但要确保函数能返回格式和数字都正确的值。

常见问题

在C语言中,调用函数和被调用函数之间的数据使用什么方式进行传递?

调用函数和被调用函数之间的数据传递有3种方式:实参与形参之间进行数据传递、通过return语句把函数值返回到主调用函数中和通过全局变量。通过全局变量进行传递的值总是在程序运行中最新的值。

真题精选

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

#include <stdio.h>

func(int a,int b)

{ int c;

c=a+b;

return c;

main()

{ int x=6,r;

r=func(x,x+ =2);

printf("% d\n",r);

A.14    B.15    C.16    D.17

【答案】C

【解析】对于func()函数,先求右边x+=2参数,它返回8(x=8),然后求左边参数,x为8。所以输出为16

【例2】以下叙述中,正确的是(  )。

A.C语言程序总是从第一个定义的函数开始执行

B.在C语言程序中,要调用的函数必须在main()函数中定义

C.C语言程序总是从main()函数开始执行

D.C语言程序中的main()函数必须放在程序的开始部分

【答案】C

【解析】一个实用的C程序总是由许多函数组成,main()函数可以放在程序的任何位置。C语言规定,不能在一个函数内部定义另一个函数。无论源程序包含了多少函数,C程序总是从main()函数开始执行。对于用户定义的函数,一般必须遵循先定义后使用的原则(除了int和char类型函数之外)。

【例3】若有以下程序

#include <stdio.h>

void f(int n);

main()

{ void f(int n);

f(5);

void f(int n)

{ printf("% d\n",n);

则以下叙述中,不正确的是(  )。

A.若在主函数中对函数f()进行说明,则只能在主函数中正确调用函数f()

B.若在主函数前对函数f()进行说明,则在主函数和其他函数中都可以正确调用f()

C.对于以上程序,编译时系统会报错,提示对f()函数重复说明

D.函数f()无返回值,所以可用void将其类型定义为无值型

【答案】C

【解析】C语言规定,在一个函数中调用另一个函数(即被调用函数)需要具备的条件有:①首先被调用的函数必须是已经存在的函数(是库函数或用户自己定义的函数);②如果使用库函数,一般还应该在本文件开头用#include命令;③如果使用自定义函数,而且该函数与调用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数作声明。

教程类别