函数练习题
一、选择题(一题2分,共40分)
1.在c语言中以下不正确的说法是(  )
A.实参可以是常量、变量、或表达式
B.形参可以是常量、变量或表达式
C.实参可以为任意类型
D.形参应与其对应的实参类型一致
2.以下程序有语法性错误,有关错误原因的正确说法是(  )
int main()
  {  int G=5,k;
void  prt_char();
…… 
k=prt_char(G); 
…… }
A.语句void prt_char();有错,它是函数调用语句,不能用void说明
B.变量名不能使用大写字母
C.函数说明和函数调用语句之间有矛盾
D.函数名不能使用下划线
3.以下正确的说法是(  )
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可嵌套
C.函数的定义和调用均不可以嵌套
D.函数的定义和调用均可以嵌套
4.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(  )
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数调用可以作为一个函数的形参
5.以下所列的各函数首部中,正确的是(  )
A、 void play(var :Integer,var b:Integer)
B、 void play(int a,b)
C、 void play(int a,int b)
D、 Sub play(a as integer,b as integer)
6.在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )
A、 地址传递                              B、 单向值传递
C、 由实参传给形参,再由形参传回实参      D、 传递方式由用户指定
7.有以下程序
void fun (int a,int b,int c)
{ a=456; b=567; c=678;}
int main()
{ int x=10, y=20,z=30;
fun (x,y,z);
printf("%d,/%d,%d\n",x,y,z);
return 0;  }
输出结果是(  )
A、30,20,10                B、10,20,30        
C、456,567,678          D、678,567,456
8.下述函数定义形式正确的是(      )。
A、 int f(int x; int y)              B、 int f(int x,y)
C、 int f(int x, int y)              D、 int f(x,y: int)
9.关于函数参数,说法正确的是(      )。
A、 实参与其对应的形参各自占用独立的内存单元
B、 实参与其对应的形参共同占用一个内存单元
C、 只有当实参和形参同名时才占用同一个内存单元
D、 形参是虚拟的,不占用内存单元
10.一个函数的返回值由(      )确定。
A、 return语句中的表达式        B、 调用函数的类型
C、 系统默认的类型                D、 被调用函数的类型
11.以下正确的函数形式是(      )。
A、 double fun(int x,int y)
{ z=x+y; return z; }
B、 fun(int x,y)
{ int z; return z; }
C、 fun(x,y)
{ int x,y; double z; z=x+y; return z; }
D、 double fun(int x,int y)
{ double z; z=x+y; return z; }
12.下列函数中,能够从键盘上获得一个字符数据的函数是(      )。
A、 puts( )      B、 putchar( )      C、 getchar( )      D、 gets( )
13.以下程序的输出结果是(      )。
fun(int a,int b,int c)
{    c=a+b;  }
int main()
{    int c;
    fun(2,3,c);
    printf(%d\n,c);
    return 0;  }
A、 2        B、 3          C、 5          D、 无定值
14.分析以下程序的运行结果(      )。
func(int a,int b)
{    int temp=a;
    a=b; b=temp;  }
int main()
{    int x,y;
    x=10; y=20;
    func(x,y);
printf(%d,%d\n,x,y);
return 0 ;  }
A、 10,20              B、10,10          C20,10          D、20,20
15.现有如下程序
#include "stdio.h"
int fun(int x)
{ printf("x=%d\n",++x); }
int main()
{ fun(12+5); return 0;  }
则程序的输出结果是
Ax=12         Bx=13         Cx=17         Dx=18
16.以下函数 fff(float x )
{ printf(“%d\n”,x*x); } 的类型是(  )
A、与参数X的类型相同 B、void类型 C、int 类型 D、无法确定
17. 以下正确的说法是(   )如果在一个函数中的复合语句中定义了一个变量,则该变量
A.只在该复合语句中有效              B.在该函数中有效 
C.在本程序范围内均有效           D.为非法变量
18. 以下不正确的说法为(  )
A.在不同函数中可以使用相同名字的变量         
B.形式参数是局部变量
C.在函数内定义的变量只在函数范围内有效 
D.在函数内的复合语句中定义的变量在本函数范围内有效
19.有以下程序
  void f(int v , int w)关于printf函数正确的是
  { int t;
  t=v;v=w;w=t;}
  main( )
  { int x=1,y=3,z=2;
  if(x>y) f(x,y);
  else if(y>z) f(y,z);
  else f(x,z);
  printf(“%d,%d,%d\n”,x,y,z);}
  执行后输出结果是
  A、 1,2,3    B、 3,1,2    C、 1,3,2    D、 2,3,1
20. 以下正确的函数形式是( 
Adouble fun(int x,int y)        B.fun(int x,y) 
C. fun(x,y)                      D.double fun(int x,int y) ;
二、判断题(一题1分,共12分)
1.( )return语句作为函数的出口,在一个函数体内只能有一个。   
2.( )在C程序中,函数不能嵌套定义,但可以嵌套调用。         
3.( ) C语言的源程序中必须包含库函数。                         
4.( )在C程序中,函数调用不能出现在表达式语句中。             
5.( )在C函数中,形参可以是变量、常量或表达式。                 
6.(   )在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体。
7.( )若定义的函数没有参数,则函数名后的圆括号可以省略。
8.(  )函数的函数体可以是空语句。
9.( )函数的实参和形参可以是相同的名字。
10.( )C语言中函数返回值的类型由return语句中的表达式的类型决定。
11.( )C语言程序中的main( )函数必须放在程序的开始部分。
12.(   )函数调用中,形参与实参的类型和个数必须保持一致。
三、分析程序写结果(每题2分,共14分)
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)
{ int x=7; printf(“i=%d;j=%d;x=%d\n”,i,j,x); }
2、以下程序的运行结果是_____________
main()
{ increment();
increment();
increment(); }
increment()
{ int x=0;x+=1; printf(“%d”,x); }
3、以下程序的运行结果是_____________
main()
{ int a=1,b=2,c;
c=max(a,b);printf(“max is %d\n”,c); }
max(int x,int y)
{ int z; z=(x>y)?x:y; return(z); }
4、若输入一个整数10,以下程序运行结果是_____________
main()
{ int a,e[10],c,i=0;
printf(“输入一个整数: \n”);
scanf(“%d”,&a);
while(a!=0)
{ c=sub(a); a=a/2; e[I]=c; i++;}
for(;i>0;i--) printf(“%d”,e[i-1]); }
sub(int a)
{ int c;
c=a%2; return c; }
5、以下程序的运行结果是_____________
main()
{int x=2,y=3,z=0;
printf(“(1)x=%d y=%d z=%d\n”,x,y,z);
add(x,y,z);
printf(“(3)x=%d y=%d z=%d\n”,x,y,z);}
add(int x,int y, int z)
{z=x+y; x=x*x; y=y*y;
printf(“(2)x=%d y=%d z=%d\n”,x,y,z);}
6、以下程序的运行结果是_____________
int x;
main()
{x=5; cude(); printf(“%d\n”,x);}
cude()
{x=x*x*x;}
7、函数fun的功能是计算xn
double fun(double x,int n)
{ int i; double y=1;
for(i=1;i<=n;i++) y=y*x;