1、第七章 函数 一、选择题 1.以下函数声明正确的是: C 。(02~03第一学期试题) 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.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。(0级) A)地址传递; B)单向值传递; C)双向值传递; D)由用户指定传递方式 3.以下关于C语言程序中函数的说法
2、正确的是: B 。(0级) A)函数的定义可以嵌套,但函数的调用不可以嵌套; B)函数的定义不可以嵌套,但函数的调用可以嵌套; C)函数的定义和调用均不可以嵌套; D)函数的定义和点用都可以嵌套。 4.以下正确的函数形式是: D 。(1级) A)double fun(int x,int y) B)fun (int x,y) {z=x+y;return z;} {int z;return z;} C)fun(x,y)
3、 D)double fun(int x,int y) {int x,y ; double z; {double z; z=x+y; return z;} z=x+y; return z;} 5.以下说法不正确的是: B 。 (1级) C 语言规定 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)形参应与其对应的实参类型一致 6.C语言允许函数值类型
4、缺省定义,此时该函数值隐含的类型是 B 。(0级) A) float型 B) int 型 C)long 型 D)double 型 7.以下错误的描述是 D 。(0级) 函数调用可以 A)出现在执行语句中 B)出现在一个表达式中 C)做为一个函数的实参 D)做为一个函数的形参 8.若用数组名作为函数调用的实参,传递给形参的是 A 。(0级) A)数组的首地址 B)数组第一个元素的值 C)数组中全部元素的值 D)数组元素的个数 9.以下正确的说法是 A 。(0级) 如果在一个函数中的复合语句中定义了一个变量,
5、则该变量 A)只在该复合语句中有效 B)在该函数中有效 C)在本程序范围内有效 D)为非法变量 10.以下不正确的说法为 D 。(0级) A)在不同函数中可以使用相同名字的变量 B)形式参数是局部变量 C)在函数内定义的变量只在本函数范围内有效 D)在函数内的复合语句中定义的变量在本函数范围内有效 11.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为 A 。(0级) A)自动(auto) B)静态(static) C)外部(extern) D)寄存器(register) 12.下面程序的正确运行结果是: D 。(1级) main
6、 ) {int a=2, i; for(i=0;i<3;i++) printf(“%4d”,f(a) ); } f( int a) { int b=0; static int c=3; b++; c++; return (a+b+c);} A)7 7 7 B)7 10 13 C)7 9 11 D)7 8 9 13.13.C语言规定:函数返回值类型是由: D 。(0级) A) return语句中的表达式类型决定 B) 调用该函数时的主调函数类型决定 C) 调用该函数时系统临时
7、决定 D) 定义该函数时所指定的函数类型 14决定 14.下面函数调用语句中实参的个数为: B 。(1级) func((exp1,exp2),(exp3,exp4,exp5)) A) 1 B) 2 C) 4 D) 5 15返回值的类型15.有一个如下定义的函数: func(a) { printf(“%d”,a); } 则该函数的返回类型是 int 。(1级)f(float a){ return a ;} A) 与参数a的类型相同 B) void类型 C) 没有返回值
8、 D) 无法确定 16建立函数的目的之一是:16.以下正确的说法是 B 。(0级) A)提高程序的执行效率 B) 提高程序的可读性 C) 减少程序的篇幅 D) 减少程序文件所占内存 17.正确以下正确的说法是 C 。(0级) A) 定义函数时,形参的类型说明可以放在函数体内 B) return后边的值不能为表达式 C) 如果函数值的类型与返回值类型不一致,以函数值类型为准 D) 如果形参与实参的类型不一致,以实参类型为准 18.以下正确的说法是 B
9、 。(0级) A) 用户若需调用标准库函数,调用前必须重新定义 B) 用户可以重新定义标准函数,若如此,该函数将失去原有含义 C) 系统根本不允许用户重新定义标准库函数 D) 用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用 户源文件中,系统自动去调 19.以下正确的说法是 A 。(0级) 在C语言中: A)实参和与其对应的形参各占用独立的存储单元 B) 实参和与其对应的形参共占用一个存储单元 C) 只有当实参和与其对应的形参同名时才共占用存储单元 D) 形参是虚
10、拟的,不占用存储单元 20.若使用一维数组名作函数实参,则以下正确的说法是 A 。(0级) A)必须在主调函数中说明此数组的大小 B) 实参数组类型与形参数组类型可以不匹配 C) 在被调函数中,不需要考虑形参数组的大小 D) 实参数组名与形参数组名必须一致 21.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5); 该函数调用语句中,含有的实参个数是 A 。(1级) A) 3 B) 4 C) 5 D) 有语法错 22.有如下程序 int runc(int a
11、int b) { return(a+b);} main( ) { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf(“%\d\n”,r); } 该程序的输出的结果是 D 。(1级) A) 12 B) 13 C) 14 D) 15 23.有如下程序 long fib(int n) { if(n>2) return(fib(n-1)+fib(n-2)); else return(2); } main( ) { printf(“%d
12、\n”,fib(3));
该程序的输出结果是 B 。(1级)
A}2 B}4 C}6 D} 8
24.有以下程序
voidf(int x,int y)
{ int t;
if(x 13、3,4 C) 5,4,3 D) 4,3,5
25.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i 14、intf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是 C 。(1级)
A) 赋初值的字符串有错 B) 6,7
C) 5,6 D) 6,6
27.以下叙述中正确的是 B 。(0级)
A) 全局变量的作用域一定比局部变量的作用域范围大
B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C) 函数的形参都属于全局变量
D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值
28.mai 15、n()
{int a=4,b=3,c=5,d,e,f;
d=f1(a,b); d=f1(d,c);
e=f2(a,b); e=f2(e,c);
f=a+b+c-d-e;
printf("%d,%d,%d\n",d,f,e);
}
f1(int x, int y)
{int z; z=(x>y)?x:y; return(z); }
f2(int x, int y)
{int z; z=(x 16、C) 5,4,3 D)3,5,4
29.以下程序的输出结果是 C 。(1级)
#include 17、 D) –1
30.以下C语言中,对函数不正确的描述是 D 。(0级)
A) 当用数组名作形参时,形参数组改变可使实参数组随之改变
B) 允许函数递归调用
C) 函数形参的作用范围只是局限于所定义的函数内
D) 函数说明必须在主调函数之前
31.以下所列的各函数首部中,正确的是 C 。(1级)
A) void play(var :Integer,var b:Integer) B) void play(int a,b)
C) void play(int a,int b) D) Sub p 18、lay(a as integer,b as integer)
32.以下叙述中不正确的是 C 。(0级)
A) 在C中,函数中的自动变量可以赋初值,每调用一次,赋一次初值。
B) 在C中,在调用函数时,实参数和对应形参在类型上只需赋值兼容。
C) 在C中,外部变量的隐含类别是自动存储类别。
D) 在C中,函数形参可以说明为register变量。
33.以下对C语言函数的有关描述中,正确的是 A 。(0级)
A) 在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
B) C函数既可以嵌套定义又可以递归调用
C) 函数必须有返回值,否 19、则不能使用函数
D) C程序中有调用关系的所有函数必须放在同一个源程序文件中
34.一个数据类型为void的函数中可以没有return语句,那么函数的被调用时 D 。(0级)
A) 没有返回值 B) 返回一个系统默认值
B) 返回值由用户临时决定 D) 返回一个不确定的值
35.在下面的函数声明中,不存在着语法错误的是 D 。(1级)
A)BC(int a, int); B) BC(int,int);
C)DC(int,int=5); D) 20、BC(int x, int y);
36.以下函数值的类型是 A 。(1级)
fun ( float x )
{ float y;
y= 3*x-4;
return y;
}
A) int B) 不确定 C) void D) float
37. 有如下程序段,在Turbo C环境下运行的结果为 B 。(01~02第二学期试题)
main( )
{ int i=2,p,k=1; int f(int a,int b)
p=f(i,++k); 21、 { int c;
printf(“I=%d,p=%d”,k,p); if(a>b) c=1;
} else if (a==b) c=0;
else c=-1; return(c); }
A)1,0 B)2,0 C)2,-1 D)1,1
38. 下面程序的输出结果是: B 。(往届试题)
int m=13;
i 22、nt fun( int x, int y)
{ int m=3;
return( x*y-m); }
main( )
{int a=7,b=5;
printf(“%d\n”, fun(a,b)/m); }
A)1 B)2 C)7 D)10
39. 若有说明语句:static int a[3][4]={0};
则下面叙述正确的是: B 。(往届试题)
A)只有a[0][0]元素可得到初值0;
B)数组a中每个元素均可得到初值0。
C)数组a中各元素都可得到初值,但值不一定为0;
D)此说明语句不 23、正确
40. 以下程序的运行结果是: B 。(往届试题)
main( )
{ int a=2, i ;
for(i=0;i<3;i++) printf(“%4d”,f(a) ) ; }
f( int a)
{ int b=0,c=3;
b++; c++; return(a+b+c); }
A)7 10 13 B)7 7 7
C)7 9 11 D)7 8 9
二、填空题
1.C语言规定,可执行程序的开始执行点是 main 。(0级)
2.在C语言中,一个函数一 24、般由两个部分组成,它们是 函数首部 和 函数体。(0级)
3.函数swap(int x,int y)可完成对x和y值的交换。a[0]=1,a[1]=2
在运行调用函数中的如下语句后,a[0]和a[1] 的值分别为 a[0]=1,a[1]=2 ,原因 单向值传递,不能返回交换后的值 。(1级)
4.函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的如下语句后,a[0] 和a[1]的值分别为 a[0]=2,a[1]=1 ,原因实参是地址,已对指定地址中的内容进行了交换。(1级)
5.设在主函数中有以下定义和函数调 25、用语句,且f un函数为void类型;请写出fun函数的首部 fun (double b[][]) 。要求形参名为b。(1级)
main()
{ double s[10][22];
int n; ┆
┆
fun(s);
┆
}
6.返回语句的功能是从包含它的函数 返回 调用函数 。(0级)
三、程序填空题
1. (1)d=a*b/c
(2)num1 26、4.(1)2﹡i+1
(2)a(i)
(3)a(i)
5.(1) j
(2) str[j-1]
6.(1)n*fac(n-1)
(2)fac(n)
7.(1)i<10
(2)array[i]
(3)average(score)
1.下面程序的功能是利用函数调用求两整数的最大公约数和最小公倍数,请填空。 (1级)
main( )
{ int a, b ,c,d;
scanf(“%d, %d”, &a, &b ) ;
c = gongyue( 27、a, b ) ;
(1) ;
printf(“gongyue=%d,gongbei=%d\n”, c,d ) ; }
gongyue( int num1, int num2 )
{ int temp, x, y ;
if (__ (2) __)
{ temp=num1; num1=num2 ; num2=temp ; }
x=num1 ; y=num2 ;
while(__ (3) _____)
28、 { temp=x%y ; x=y ; y = temp ; }
return (y) ; }
2.以下程序的功能是根据输入的“y”(“Y”)与“n”(“N”),在屏幕上分别显示出“This is YES.”与“This is NO.”。请填空。(1级)
# include 29、’: printf(“\nThis is NO.\n”); }
}
main( )
{char ch; printf(“\nEnter a char ‘y’,’Y’or’n’,’N’:”);
ch= (2) ; printf (”ch: %c”,ch); YesNo(ch); }
3.以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“WELL DONE!!”,否则显示计算后的值。已有函数调用语句Check(ponse,value);请填空。(1级)
viod Check ( int po 30、nse, float value)
{ int val; val= (1) ;
printf (“计算后的值: %d”, val);
if (val= =ponse) printf(“\n WELL DONE!! \n”);
else printf (“\nSorry the correct answer is %d\n”, val);
}
4.以下程序的运行结果是输出如下图形。请填空。(1级)
*
* * *
* * * * *
* * * * * * * *
* * * * *
* * 31、 *
*
# include 32、void fun (char str[])
{
char m; int i, j;
for (i=0, j=strlen(str); i< (1) ; i++, j--)
{ m = str[i];
str[i] = (2) ;
str[j-1] = m;
}
printf("%s\n",str);
}
6.以下程序使用递归法求n!, 请填空。(03试题)
float fac(int n)
{ float f;
if(n<0) {printf(“n<0” data error); f= 33、1;}
else if(n==0||n==1) f=1;
else f=___ (1) ___;
return( f ); }
main( )
{ int n; float y;
printf(“input a integer number”);
scanf(“%d”,&n);
y=___ (2) ____;
printf(“%d! = %15.0f”, n, y ); }
7. 以下程序可计算10名学生1门功课成绩的平均分,请填空。(往届试题)
float average( float array[10] )
34、
{ int i; float aver, sum=array[0];
for ( i=1; __ (1) ___;i++)
sum+=___ (2) ___;
aver=sum/10;
return(aver); }
main( )
{ float score[10], aver ; int i ;
printf(“\ninput 10 scores:”);
for(i=0; i<10;i++) scanf(“%f”,&score[i] );
aver =___ (3) ___;
printf(“\naverage score 35、 is %5.2f\n”, aver);
}
四、读程序写结果题
1. 15
2. i=7;j=6;x=7 36、 { int i=5; printf(“%d\n”, sub(i) ) ; }
sub ( int n )
{ int a ;
if ( n==1) a=1; else a=n+sub(n-1); return( a ) ; }
2.下面程序的运行结果是: 。 (1级)
main( ) { int i=2, x=5, j=7; fun (j,6);
printf(“i=%d; j=%d; x=%d\n”, i, j, x ) ; }
fun (int i, int j ) 37、 { int x=7; printf(“i=%d; j=%d; x=%d\n”, i, j, x) ;
3.以下程序的运行结果是 。(1级)
main( ) { increment ( ); increment ( ); increment ( ); }
increment ( ) { int x=0; x+=1; printf (“%d”, x); }
4.以下程序的运行结果是 。(1级)
int a=5; int b=7;
main( ) { int a=4, b=5,c;
c=plus (a,b); 38、 printf(“A+B=%d\n”,c) ; }
plus (int x, int y) { int z; z=x+y; return (z); }
5.以下程序的运行结果是 。(1级)
main( ) { increment ( ); increment ( ); increment ( ); }
increment ( ) {static int x=0; x+=1; printf (“%d”, x); }
6.以下程序的输出结果是 。 (2级)
void fun()
{ static 39、int a=0;
a+=2; printf(“%d”,a);
}
main()
{ int cc;
for(cc=1;cc<4;cc++) fun()
printf(“\n”);
}
7.以下程序的输出结果是 。 (2级)
#include 40、
for (i=1; i<=3; i++) f( i );
}
8.以下程序的输出结果是 。 (2级)
#include 41、 。(2级)
int f(int x,int y)
{ return((y-x)*x); }
main()
{ int a=3,b=4,c=5,d;
d=f(f(3,4),f(3,5));
printf("%d\n",d);
}
10. 假如在运行程序时输入5 ,写出程序的运行情况及最终结果: 。(01~02第二学期试题)
float fac(int n)
{ float f ;
if(n<0){printf(“n<0,dataerror!”);
f=-1;}
else if (n==0 42、n==1) f=1;
else f=fac(n-1)*n;
return(f);
}
main( )
{int n ;
float y ;
printf(“input a integer number:”);
scanf(“%d”,&n);
y=fac(n);
printf(“%d!=%5.0f”, n,y);
}
11.下面程序的运行结果是: 。(03试题)
func( int x, int y)
{ int z;
z=x+y;
return(z); 43、}
main( )
{ int a=6, b=7, c=8, r;
r=func( ( a--, b++, a+b), c--);
printf(“%d”, r) ; }
12.下面程序的运行结果是: 。(04~05第二学期试题)
func( int a)
{ int b=0,c=3;
b++;c++;
return(a+b+c);}
main( )
{ int a=2,i;
for(i=0;i<3;i++)
printf(“%d”,func(a)); }
13. 下面程序的运行结果是: 44、 。(往届试题)
main( )
{ int i=5 ;
printf(“%d\n”, sub(i) ); }
sub( int n)
{ int a;
if(n==1) a=1;
else a= n+sub(n-1);
return(a); }
14.下面程序的运行结果是:___________。(往届试题)
main( )
{ int i=2,p;
p=f( i++, ++i );
printf(“%d”, p); }
int f( int a, int b )
{ int c;
if(a>b) c=1;
else if( 45、a==b) c=0;
else c=-1;
return(c); }
15. 以下程序的运行结果是:____________。(往届试题)
main( )
{ int a[3][3] = { 1, 3, 5, 7, 9, 11, 13, 15, 17 } ;
int sum ;
sum = func ( a ) ;
printf ( “\nsum = %d\n”, sum ) ;
}
func ( int a[ ][3] )
{ int i, j, sum = 0;
for ( i=0; i<3; i++ )
for ( j=0; j<3; j++ )
{ a[i][j] = i + j ;
if ( i==j ) sum = sum + a[i][j] ;
}
return ( sum );
}






