第七章  函数
一、选择题
1.以下函数定义正确的是:   A  
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   
A)地址传递;        B)单向值传递;
C)双向值传递;      D)由用户指定传递方式
3.以下关于C语言程序中函数的说法正确的是:   B  
A)函数的定义可以嵌套,但函数的调用不可以嵌套;
B)函数的定义不可以嵌套,但函数的调用可以嵌套;
C)函数的定义和调用均不可以嵌套;
D)函数的定义和点用都可以嵌套。
4.以下正确的函数形式是:  D  
Adouble fun(int x,int y)                B)fun (int x,y)
      {z=x+y;return z;}                      {int z;return z;}
C)fun(x,y)                                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  
C 语言规定  A)实参可以是常量、变量或表达式
            B)形参可以是常量、变量或表达式
            C)实参可以是任意类型
D)形参应与其对应的实参类型一致
6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是  B  
A)  float  B) int   C)long 型 D)double 型
7.以下错误的描述是  D  
函数调用可以
    A)出现在执行语句中  B)出现在一个表达式中
      C)做为一个函数的实参 D)做为一个函数的形参
8.若用数组名作为函数调用的实参,传递给形参的是  A 
A)数组的首地址    B)数组第一个元素的值
C)数组中全部元素的值    D)数组元素的个数
9.以下正确的说法是 A  
如果在一个函数中的复合语句中定义了一个变量,则该变量
A)只在该复合语句中有效  B)在该函数中有效
C)在本程序范围内有效  D)为非法变量
10.以下不正确的说法为 D 
A)在不同函数中可以使用相同名字的变量
B)形式参数是局部变量
C)在函数内定义的变量只在本函数范围内有效
D)在函数内的复合语句中定义的变量在本函数范围内有效
11.凡是函数中未指定存储类别的局部变量,其隐含的存储类别为  A  
A)自动(auto)    B)静态(static)
C)外部(extern)  D)寄存器(register)
12.下面程序的正确运行结果是: D  
main( ) 
{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 float()函数 
A return语句中的表达式类型决定
B 调用该函数时的主调函数类型决定
C) 调用该函数时系统临时决定
D 定义该函数时所指定的函数类型决定
14.
14.下面函数调用语句中实参的个数为:  B     
func((exp1,exp2),(exp3,exp4,exp5))
A) 1      B) 2      C) 4      D)  5
115.有一个如下定义的函数:
func(a)  {  printf(%d,a);  }
1616
16.以下正确的说法是    C   
建立函数的目的之一是:A)提高程序的执行效率      B) 提高程序的可读性     
C) 减少程序的篇幅        D)  减少程序文件所占内存
17.以下正确的说法是  C     
A)定义函数时,形参的类型说明可以放在函数体内     
B)return后边的值不能为表达式   
C)如果函数值的类型与返回值类型不一致,以函数值类型为准     
D)如果形参与实参的类型不一致,以实参类型为准
18.以下正确的说法是    B   
A)用户若需调用标准库函数,调用前必须重新定义     
B)用户可以重新定义标准函数,若如此,该函数将失去原有含义     
C)系统根本不允许用户重新定义标准库函数       
D)用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用 户源文件中,系统自动去调
19.以下正确的说法是  D     
C语言中: A)实参和与其对应的形参各占用独立的存储单元     
B) 实参和与其对应的形参共占用一个存储单元
C) 只有当实参和与其对应的形参同名时才共占用存储单元   
D)  形参是虚拟的,不占用存储单元
20.若使用一维数组名作函数实参,则以下正确的说法是    D   
A)必须在主调函数中说明此数组的大小     
B) 实参数组类型与形参数组类型可以不匹配
C) 在被调函数中,不需要考虑形参数组的大小 
D) 实参数组名与形参数组名必须一致
21.有如下函数调用语句
func(rec1,rec2+rec3,(rec4,rec5);
该函数调用语句中,含有的实参个数是    A   
    A) 3     B) 4     C) 5     D) 有语法错
22.有如下程序
int runc(int a,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     
    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\n”,fib(3));
该程序的输出结果    B   
    A}2        B}4       C}6         D} 8
24.有以下程序
voidf(int  x,int  y)
{  int  t;
if(x<y){  t=x;  x=y; y=t; }
}
main()
{ int  a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出的结果是  D     
    A) 3,4,5      B) 5,3,4      C) 5,4,3        D) 4,3,5
25.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。
#define N 10
void arrin(int x[N])
{ int i=0;
while(i<N)
scanf("%d",_________);
}
在下划线处应填入的是  C     
      A) x+i        B) &x[i+1]        C) x+(i++)        D) &x[++i]
26.有以下程序
main()
{ char s[]="\n123\\";
printf("%d,%d\n",strlen(s),sizeof(s));
}
执行后输出结果是    C   
        A) 赋初值的字符串有错        B) 6,7     
C) 5,6                        D) 6,6
27.以下叙述中正确的是  B     
A) 全局变量的作用域一定比局部变量的作用域范围大
B) 静态(static)类别变量的生存期贯穿于整个程序的运行期间
C) 函数的形参都属于全局变量
D) 未在定义语句中赋初值的auto变量和static变量的初值都是随机值
28.main()
{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<y)?x:y;  return(z); }
执行后输出的结果是    C   
A) 3,4,5        B) 5,3,4      C) 5,4,3        D)3,5,4
29.以下程序的输出结果是    A   
  #include <stdio.h>
  int f(void)
  {  static int i = 0;
      int s =1;
s += i;
i++;
return (s);
  }
  void main(void)
  {
int i, a = 0;
for (i=0; i<5; i++) a += f()
printf(“%d\n”, a);