C语言函数练习题(含答案解析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言-函数
1. 以下正确的函数定义形式是()。
A)double fun(int x,int y) B)double fun(int x;int y)
C)double fun(int x,int y);D)double fun(int x, y)
2. 函数调用语句:func((x1,x2),(x3,x4,x5));含有的实参个数是()。
A)1 B)2C)4 D)5
3. 对函数调用描述错误的是()。
A)出现在执行语句中B)出现在表达式中
C)作为函数的实参D)作为函数的形参
4. 以下不正确的说法是()。
A)不同函数中可以使用同名变量
B)函数内定义的变量只在本函数范围内有效
C)形式参数是局部变量
D)复合语句中定义的变量在本函数范围内有效
5.以下正确的说法是()。
在C语言中
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共同占用存储单元
D)形参是虚拟的,不占用存储单元
6.对函数及其参数,在C语言中以下描述不正确的是()。
A)主函数main()可以有参数
B)实参和形参必须类型一致
C)函数调用时是实参传送给形参,而形参不能传送给实参
D)函数的返回值可有可无
7.在C语言程序中,下列说法中()是正确的。
A)函数的定义和调用都可以嵌套
B)函数的定义和调用都不可以嵌套
C)函数的定义可以嵌套,而调用不能嵌套
D)函数的定义不能嵌套,而调用可以嵌套
8.定义一个具有返回值的函数,但没加类型说明,该函数的默认类型为()。
A)int B)void C)float D)不确定
9.函数返回值的类型取决于()。
A)函数的类型
B)return语句中表达式的类型
C)调用函数将值赋给的变量的类型
D)函数类型与return语句中表达式类型中较高的类型
10.C语言中形参的默认存储类别是()。
A)自动(auto)B)静态(static)
C)寄存器( register) D)外部(extern)
11.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传送方式是()。
A)地址传送
B)单向值传送
C)由实参传给形参,再由形参返回实参D)传递方式由用户指定
12.以下程序运行结果是()。
#include "stdio.h"
func(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void 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 13.以下程序的输出结果是()。
#include "stdio.h"
long fun(int n)
{
if(n==1||n==2)
return 2;
else
return( n+fun(n-1) );
}
void main( )
{
printf(“\n%ld”,fun(4));
}
A)7 B)8 C)9 D)10 14.下面程序的输出结果是()。
#include “stdio.h”
void fun( )
{
int a,b;
a=100;
b=200;
}
void main( )
{
int a=5,b=7;
fun( );
printf(“%d%d\n”,a,b);
}
A) 100200 B) 57C) 200100 D) 75 15.下面程序的输出结果是()。
#include “stdio.h”
int x=3;
void main( )
{
int i;
void incre( );
for(i=1;i<x;i++)
incre( );
}
void incre( )
{
static int x=1;
x*=x+1;
printf(“%d ”,x);
}
A) 3 3 B) 2 2 C) 2 6 D) 2 5
16.以下函数返回值的类型是()
fa(float x)
{
printf(“%d\n”,x*x);
}
a) 与参数x的类型相同b) void类型
c) int类型d) 无法确定17.以下程序的输出结果是()。
func(int a, int b)
{ int c;
c=a+b;
return c;
}
main( )
{
int x=6,y=7,z=8, r;
r=func( (x--, y++, x+y),z--);
printf(“%d\n”, r );
}
a) 11 b) 20 c) 21 d) 31
19.以下程序的输出结果是()。
#include “stdio.h”
func(int a, int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return m;
}
main( )
{
int k=4,m=1,p;
p=func(k,m);
printf(“%d□”,p);
p=func(k,m);
printf(“%d\n”,p);
}
a) 8,8 b) 17,17 c) 8,17 d) 17,8
20.以下程序的输出结果是()。
main( )
{
int f(int a, int b);
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
答案
一、选择题
1. 以下正确的函数定义形式是()。
A)double fun(int x,int y) B)double fun(int x;int y)
C)double fun(int x,int y);D)double fun(int x, y)
答案( A )。
注释:主要考函数定义的应用。
有参函数的一般形式
函数类型函数名( 数据类型参数1[,数据类型参数2…] )
{
说明语句部分;
可执行语句部分;
}
2. 函数调用语句:func((x1,x2),(x3,x4,x5));含有的实参个数是()。
A)1 B)2 C)4 D)5
答案( B )。
注释:主要考函数的形参与实参。
实参可以是常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
因此,应预先用赋值、输入等办法,使实参获得确定的值。
3. 对函数调用描述错误的是()。
A)出现在执行语句中B)出现在表达式中
C)作为函数的实参D)作为函数的形参
答案( D )。
注释:主要考察函数的调用。
C语言中函数调用的一般形式为:
函数名([实际参数表])
注意:
实参的个数、类型和顺序,应该与被调用函数所要求的参数个数、类型和顺序一致,才能正确地进行数据传递。
函数调用方式
(1)函数表达式。
函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。
这种方式要求函数是有返回值的。
例如:c=2*max(a,b);
(2)函数语句。
C语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为一条独立的语句。
例如:max(a,b);
(3)函数实参。
函数作为另一个函数调用的实际参数出现。
这种情况是把该函数的返回值作为实参进行传送,因此要求该函数必须是有返回值的。
例如:n=max(a,max(b,c));其中max(b,c)是一次调用,它的值作为max另一次调用的实参。
(4)调用时实参与形参在类型必须匹配。
4. 以下不正确的说法是()。
A)不同函数中可以使用同名变量
B)函数内定义的变量只在本函数范围内有效
C)形式参数是局部变量
D)复合语句中定义的变量在本函数范围内有效
答案( D )。
注释:主要考察局部变量的作用域。
在一个函数内部或一个复合语句内定义的变量称为局部变量,它只在本函数范围或该复合语句内有效,即只有在本函数内或本复合语句内才能使用它们,离开该范围是不能使用这些变量的。
5.在C语言中,以下正确的说法是()。
A)实参和与其对应的形参各占用独立的存储单元
B)实参和与其对应的形参共占用一个存储单元
C)只有当实参和与其对应的形参同名时才共同占用存储单元
D)形参是虚拟的,不占用存储单元
答案( A )。
注释:主要考函数的形参与实参概念。
函数的参数分为形参和实参两种,作用是实现数据传送。
形参出现在函数定义中,只能在该函数体内使用。
发生函数调用时,调用函数把实参的值复制1份,传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。
关于形参与实参的说明:
(1)实参可以是常量、变量、表达式、函数等。
无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。
(2)形参变量只有在被调用时,才分配内存单元;调用结束时,即刻释放所分配的内存单元。
(3)实参对形参的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
(4)实参和形参占用不同的内存单元,即使同名也互不影响。
6.对函数及其参数,在C语言中以下描述不正确的是()。
A)主函数main()可以有参数
B)实参和形参必须类型一致
C)函数调用时是实参传送给形参,而形参不能传送给实参
D)函数的返回值可有可无
答案( D )。
注释:主要考函数的形参与实参概念,同上。
7.在C语言程序中,下列说法中()是正确的。
A)函数的定义和调用都可以嵌套
B)函数的定义和调用都不可以嵌套
C)函数的定义可以嵌套,而调用不能嵌套
D)函数的定义不能嵌套,而调用可以嵌套
答案( D )是正确的。
注释:主要考函数的定义不能嵌套,而调用可以嵌套。
8.定义一个具有返回值的函数,但没加类型说明,该函数的默认类型为()。
A)int B)void C)float D)不确定
答案(A )。
注释:主要考定义一个具有返回值的函数,该函数的默认类型int。
9.函数返回值的类型取决于()。
A)函数的类型
B)return语句中表达式的类型
C)调用函数将值赋给的变量的类型
D)函数类型与return语句中表达式类型中较高的类型
答案(A )。
注释:主要考定义一个具有返回值的函数,取决于函数的类型。
10.C语言中形参的默认存储类别是()。
A)自动(auto)B)静态(static)
C)寄存器( register) D)外部(extern)
答案( A )。
注释:主要考C语言中形参的默认存储类别是auto。
11.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传送方式是()。
A)地址传送
B)单向值传送
C)由实参传给形参,再由形参返回实参
D)传递方式由用户指定
答案式是(B )。
注释:主要考如果实参是简单变量,它与对应形参之间的数据传送方式是单向值传送。
12.以下程序运行结果是()。
#include "stdio.h"
func(int a,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void 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 )。
注释:主要考如果实参是简单变量,它与对应形参之间的数据传送方式是单向值传送。
a,b 和x ,y是不同的变量,他们之间数据传送方式是单向值传送。
13.以下程序的输出结果是()。
#include "stdio.h"
long fun(int n)
{
if(n==1||n==2)
return 2;
else
return( n+fun(n-1) );
}
void main( )
{
printf(“\n%ld”,fun(4));
}
A)7 B)8 C)9 D)10
答案( C )。
注释:主要考C语言中递归的应用。
fun(4)= 4+fun(3)
fun(3)=3+ fun(2)
fun(2)=2
14.下面程序的输出结果是()。
#include “stdio.h”
void fun( )
{
int a,b;
a=100;
b=200;
}
void main( )
{
int a=5,b=7;
fun( );
printf(“%d%d\n”,a,b);
}
A) 100200 B) 57 C) 200100 D) 75
答案(B )。
注释:主要考如果实参是简单变量,它与对应形参之间的数据传送方式是单向值传送。
函数中a,b 和主函数中a,b是不同的变量,他们之间数据传送方式是单向值传送。
15.下面程序的输出结果是()。
#include “stdio.h”
int x=3;
void main( )
{
int i;
void incre( );
for(i=1;i<x;i++)
incre( );
}
void incre( )
{
static int x=1;
x*=x+1;
printf(“%d ”,x);
}
A) 3 3 B) 2 2 C) 2 6 D) 2 5
答案(C)。
注释:主要考察全局变量的作用域,自动,静态变量的应用。
int x=3为全局变量,它的作用域是:从定义变量的位置开始,到本文件结束。
外部变量可被作用域内的所有函数直接引用。
static静态变量属于静态存储。
在程序执行过程中,即使所在函数调用结束也不释放。
换句话说,在程序执行期间,静态变量始终存在。
自动变量属于动态存储方式。
在函数中定义的自动变量,只在该函数内有效;函数被调用时分配存储空间,调用结束就释放。
16.以下函数返回值的类型是()
fa(float x)
{
printf(“%d\n”,x*x);
}
a) 与参数x的类型相同b) void类型
c) int类型d) 无法确定
答案:c)
解析:C语言规定在函数第一行函数名的前面应该是有类型名,此类型名规定了函数返回值的类型;此类型名可以省略,这时C默认函数返回值的类型为int类型,所以本题答案是c)。
17.以下程序的输出结果是()。
func(int a, int b)
{ int c;
c=a+b;
return c;
}
main( )
{
int x=6,y=7,z=8, r;
r=func( (x--, y++, x+y),z--);
printf(“%d\n”, r );
}
a) 11 b) 20 c) 21 d) 31
答案:c)
解析:func( ) 函数的函数值应该是int 类型。
函数的功能是求两个形参的和。
在主函数的调用中,给出了两个实际参数:(x--, y++, x+y)和z--。
其中第一个实参(x--, y++, x+y)是一个逗号表达式,从左到右的最后一个表达式x+y的值就是该表达式的值。
因此x+y的值将传给形参a,由主函数可知,x的初值6,x--后,x为5,y的初值是7,y++后y=8,因此x+y=5+8=13,则形参a的值为13。
第二个实参是z--,在主函数中,z的初值是8,由于z--是后置运算,z--的值应为8,传给b形式参数b=8.调用语句相当于r=func(13,8),执行func()后r=21。
18.以下程序的输出结果是()。
#include “stdio.h”
int max(int x, int y)
{
int z;
if(x>y) z=x;
else z=y;
return(z);
}
main( )
{
int a=3,b=5;
printf(“max=%d\n”,max(a,b));
}
int a=3,b=5;
a) max=3 b) max=4 c) max=5 d) max=6
答案: c)
解析:int a=3,b=5; max(a,b), a,b的值传给x,y,返回二个数中的最大值,并输出。
19.以下程序的输出结果是()。
#include “stdio.h”
func(int a, int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return m;
}
main( )
{
int k=4,m=1,p;
p=func(k,m);
printf(“%d□”,p);
p=func(k,m);
printf(“%d\n”,p);
}
a) 8,8 b) 17,17 c) 8,17 d) 17,8
答案:c)
解析:第一次调用func(4,1),在func( )函数中,i+=m+1;之后,i=3,m=i+a+b;之后m=8,所以返回8。
第二次调用func(4,1) ,在func( )函数中,m,i都是静态内部变量,保持原有上一次的值i=3,m=8,所以执行i+=m+1;语句之后i=12,执行m=i+a+b=12+4+1;之后m=17。
因此输出8,17。
20.以下程序的输出结果是()。
main( )
{
int f(int a, int b);
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)
解析:在主函数中p=f(i,i+1);调用语句,参数的计算是从右到左,相当于p=f(2,3);则2传给a形参变量,3传给b形参变量。
执行f函数a的值<b的值,因此c= -1,则函数的返回值为-1,返回到主函数的调用处,将-1赋给p,因此输出结果是-1。