内  容
 
一、在以下每一题的四个选项中,请选择一个正确的答案。
1、以下对C语言函数的有关描述中,正确的是 
A、在C语言中调用函数时,只能把实参的值转送给形参,形参的值不能转送给实参。
BC函数既可以嵌套定义,又可以递归调用。
C、函数必须有返回值,否则不能使用函数。
DC程序中有调用关系的所有函数必须放在同一个源程序文件中。
2、函数调用语句“f((e1,e2),(e3,e4,e5));”中参数的个数是 
A1  B2  C4  D5
3、将一个函数说明为static后,该函数将 
A、既能被同一源文件中的函数调用,也能被其他源文件中的函数调用。
B、只能被同一源文件中的函数调用,不能被其他源文件中的函数调用。
C、只能被其他源文件中的函数调用,不能被同一源文件中的函数调用。
D、既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用。
4C语言中规定函数的返回值的类型由 
Areturn语句中的表达式类型所决定。
B、调用该函数时的主调用函数类型所决定。
C、调用该函数时系统临时决定。
D、在定义该函数时所指定的函数类型所决定。
5、以下正确的说法是 
A、定义函数时,形参的类型说明可以放在函数体内。
Breturn后边的值不能为表达式。
C、如果函数值的类型与返回值类型不一致,以函数值类型为准。
D、如果形参与实参的类型不一致,以实参类型为准。
6、下列存储类标识符中, 的可见性与存在性不一致。
A、外部类  B、自动类  C、内部静态类  D、寄存器类
7、以下不正确的说法是 
1A
2B
3B
4D
5C
6C 
7D
   内  容
 
A、在不同函数中可以使用相同名字的变量。
B、形参是局部变量。
C、在函数内定义的变量只在本函数范围内有效。
D、在函数内的复合语句中定义的变量在本函数范围内有效。
8、以下叙述中正确的是 
A、用#include包含的头文件的后缀不可以是“.a”。
B、在对某个含有错误的头文件进行修改后,包含此头文件的源程序不必重新进行编译。
C、宏名必须用大写字母表示。
D、宏替换不占用运行时间。
9、有一个如下定义的函数func(a) { printf(%d,a); }
则该函数的返回值的类型是 
A、与参数a的类型相同。  Bvoid类型
C、没有返回值       D、无法确定
10、以下错误的描述为 
A、在函数之外定义的变量称为外部变量,外部变量是全局变量。
B、在一个函数中既可以使用本函数中的局部变量a,又可以使用同名的外部变量a
C、外部变量定义和外部变量说明的含义不同。
D、若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。
二、判断下列各叙述的正确性。
11( )全局变量与函数体内定义的局部变量重名时,全局变量优先。
12( )C程序中,有调用关系的所有函数必须放在同一个源程序文件中,
13( )对于不需要使用函数返回值的函数,可以不定义类型。
14( )C程序文件中每个函数都将被本文件调用。
15( )一个函数可以定义在别的函数的内部,即嵌套定义。
16( )返回值为intchar类型时,函数声明可以缺省。
8A
9B
10B
11×
12×
13
14×
15×
16
   内  容
 
17( )C语言中允许函数之间的嵌套调用。
18( )局部静态变量是在编译时赋初值的,即只赋初值一次。
19( )外部变量必须定义在文件的开头部分。
20( )函数的形参在退出该函数后就被释放了。
三、填空。
21C语言程序的基本组成单位是
22C语言程序总是从    开始执行。
23、当函数的返回值与函数值类型不一致时,就会发生 
24、凡在函数中未指定存储类别的变量,其隐含的存储类别为
25、静态型局部变量的作用域是   
26C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递方式是
27、若定义的函数没有返回值时,则应在该函数说明时加一个类型说明符
28、在C语言中,一个函数直接或间接地调用自身,便构成了函数的
29、函数的形式参数的作用域为 
30、如果被调用的用户函数和主调函数不在同一编译单位,则在定义函数的编译单位中应将该函数定义成  ,在主调函数的函数中将该函数说明为   
四、阅读下面的程序,写出程序运行结果。
31#include stdio.h         
void  f1(int s)
{ int i,j=3;
  for(i=1;i<10;++i,++j)
  { s=i+j;
if(s>=100)
17
18
19×
20
21函数
22scanf返回值被忽略是怎么回事主函数
23类型转换
24auto
25
该函数的函数体内
26单向的值传递
27void
28递归调用
29
从调用该函数后开始直到返回主调函数前结束 
30extern
extern
31s=20
   内  容
 
  break;
  }
  printf(s=%d\n,s);
}
main( )
{ int s=10;
  f1(s);
}
32#include stdio.h             
main( )                           
{ int i=0,a=10;                   
  void s( );
  while(i<3)
  { ++a;
printf(%d,,a++);
s( );
i++;
  }
}
void  f1(int s)
{ int z=300;
  z++;
  printf(%d\n,z++);
}
33#include stdio.h               
int  func(int x,int y)           
    { int  z;                             
  z=x+y;
3211,301
13,301
15,301
336
13
22
   内  容
 
  return  z++;
}
main( )
{ int i=3,j=2,k=1;
  do
  { k+=func(i,j);
  printf(%d\n,k);
  i++;
  j++;
  }while(i<=5);
}
34#include stdio.h             
#define N 5                       
void fun( );                     
main( )                           
{ int i;
for(i=1;i<N;i++)
  fun( );
}
void  fun( )
{ static  int  a;
  int b=2;
  printf((%d%d)\n,a+=3,a+b);
}
五、程序填空,请在下面程序空白处填入合适的语句。
35、下面的运行结果是输出如下图形,请填空。
34(3,2)
(6,5)
(9,8)
(12,11)
   内  容
 
*
  ***
  *****
*******
#include stdio.h
void  disp(int i)
{ int j,k;
for(j=0;j<=8-i;j++)
  printf( );
for(k=0;k<      ;k++)
  printf(*);
        ;
}
main( )
{ int i;
for(i=0;i<4;i++)
          ;
}
36、下面是一个计算阶乘的程序,请填空。
#include stdio.h
double  factorial(int);
main( )
{ int n;
printf(Enter an integer:);
scanf(%d,&n);
printf(\n%d!=%lg\n,      ,        );
}
double  factorial(int i)
352*i-1
printf(\n)
disp(i)
36n
factoria(n)
return result
   内  容
 
{ double  result=1.0;
int  j;
for(j=1;j<=i;j++)
  result*=j;
        ;
}