2023年12月22日发(作者:)

试卷编号:313

所属语言:C语言

试卷方案:第八章函数

试卷总分:100分

共有题型:4种

一、填空 共12题 (共计48分)

第1题 (4.0分) 题号:824

以下程序运行后输出结果为【1】.(2007年春江苏省二级C)

#include"stdio.h"

int mystery(int a,int b)

{

if(b==1) retutn a;

else return a+mystery(a,b-1);

}

void main()

{ int x=5,y=3; printf("%dn",mystery(x,y));}

答案:

=======(答案1)=======

15

第2题 (4.0分) 题号:820

以下程序运行时,输出结果是【1】.(2006年春江苏省二级C)

#include

main()

{ int s,i,sum(int);

for(i=1;i<=5;i++)

s=sum(i);

printf("%dn", s);

}

sum(int k)

{ static int x=0;

return x+=k;

}

答案:

=======(答案1)=======

15

第3题 (4.0分) 题号:823

以下程序运行后输出结果为【1】.(2007年春江苏省二级C)

#include"stdio.h"

int a;

int m(int a)

{ static int s; return(++s)+(--a);}

void main()

{ int a=2; printf("%d",m(m(a)));}

答案:

=======(答案1)=======

3

第4题 (4.0分) 题号:821

以下程序运行时,输出结果为【1】.(2006年春江苏省二级C)

#include

main( )

{ printf("%dn",f(21,35));}

int f(int a,int b)

{ if(a==b)return a;

else

if(a>b) return f(a-b,b);

else return f(a,b-a);

}

答案:

=======(答案1)=======

7

第5题 (4.0分) 题号:819

以下程序运行时输出的结果的第二行是【1】,第四行是【2】,第六行是【3】.

(2005年春江苏省二级C)

#include

void change( int s[3][3] , int d )

{ int i , j , k ;

if( d== 0 )

{ for( i = 0 ; i<3; i++)

for( j = i+1 ; j<3 ; j++)

{ k = s[i][j] ; s[i][j] = s[j][i] ; s[j][i] = k ; }

}

else

for( i = 0 ; i<3 ; i++)

for( j = 0 ; j<3-i ; j++)

{ k = s[i][j] ; s[i][j] = s[2-j][2-i] ; s[2-j][2-i] = k ; }

}

main()

{ int s[3][3] = ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ) , I , j , k , n ;

change( s , 0 ) ;

for( i = 0 ; i<3 ; i++)

{ for( j = 0 ; j<3 ; j++) printf("%4d" , s[i][j]) ;

printf("n") ;

}

change( s , 1 ) ;

for( i = 0 ; i<3 ; i++)

{ for( j = 0 ; j<3 ; j++) printf("%4d" , s[i][j] ) ;

printf("n") ;

}

}

答案:

=======(答案1)=======

2 5 8

=======(答案2)=======

9 8 7

=======(答案3)=======

3 2 1

第6题 (4.0分) 题号:816

在声明局部变量时,不能使用的存储类别标识符是【1】.(2007年春江苏省二级C)

答案:

=======(答案1)=======

extern

第7题 (4.0分) 题号:818

以下程序运行时输出结果是【1】.(2004年秋江苏省二级C)

#include

void num()

{ extern int x , y ;

int a = 15 , b = 10 ;

x = a-b ; y = a+b ;

}

int x , y ;

main()

{ int a = 7 , b = 5 ;

x = a+b ; y = a-b ;

num() ;

printf("%d,%d n" , x , y ) ;

}

答案:

=======(答案1)=======

5 , 25

第8题 (4.0分) 题号:814

一个用C语言编写的程序在运行时,如果没有发生任何异常情况,则只有在执行了【1】函数的最后一条语句或该函数中的return语句后,程序才会终止运行.(2005年春江苏省二级C)

答案:

=======(答案1)=======

main

第9题 (4.0分) 题号:174

为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的【1】语句配对.

答案:

=======(答案1)=======

if

第10题 (4.0分) 题号:813

若有函数定义int f( ){ int x=4,y=3,z=2;return x,y,z;},则调用函数f后的返回值是【1】.(2004年春江苏省二级C)

答案:

=======(答案1)=======

2

第11题 (4.0分) 题号:817

在以下程序的main函数中,语句"fun(x,10);"内的实参x表示数组x的【1】.(2007年春江苏省二级C)

void fun(int a[10],int n)

{ int i;for(i=0;i

main()

{ int x[10]={0}; fun(x,10);}

答案:

=======(答案1)=======

第一个元素地址或起始地址或首地址

第12题 (4.0分) 题号:822

以下程序运行时,输出结果的第一行是【1】,第二行是【2】.(2006年春江苏省二级C)

#include

void change(int x, int m)

{ char ch[]={'0','1', '2', '3', '4', '5', '6', '7', '8', '9'},b[80];

int i=0,r;

while(x)

{ r=x%m; x/=m;

b[i++]= ch[r];

}

for(--i; i>=0; i--)

printf("%c",b[i]);

}

main()

{ int a,b;

change(10,2);

printf("n");

change(10,8);

}

答案:

=======(答案1)=======

1010

=======(答案2)=======

12

二、单项选择 共20题 (共计40分)

第1题 (2.0分) 题号:2305

以下叙述中不正确的是()(2000年秋江苏省二级C)

A:一个变量的作用域完全取决于变量说明语句的位置

B:外部变量可以在函数以外的任何位置定义

C:内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用

D:用static说明的一个外部变量是为了限制其他编译单位的引用

答案:C

第2题 (2.0分) 题号:2322

已知在函数f中声明了局部变量x,如果希望f函数第一次被调用返回后变量x中存储的数据保持到下次f函数被调用时仍可以使用,则在声明x时必须指定其存储类型为 ().(2007年秋江苏省二级C)

A:auto

B:register

C:static

D:extern

答案:C

第3题 (2.0分) 题号:2308

在以下程序中,需要在main函数之后定义一个函数,以下选项中()可以用作该函数的名字. (2003年春江苏省二级C)

#define p 3.14

int y;

main()

{ int a=1;

函数名(a);

...... /* 若干执行语句 */

}

int 函数名(int x)

{ return x*x; }

A:main

B:y

C:p

D:print

答案:D

第4题 (2.0分) 题号:2312

以下关于函数形式参数的声明中正确的是().(2004年秋江苏省二级C)

A:int a[ ]

B:int a[][]

C:int a[]={0}

D:int a[2][]

答案:A

第5题 (2.0分) 题号:2323

以下函数定义中正确的是().(2009年春江苏省二级C)

A:double fun(double x, double y) {}

B:double fun(double x;double y) {}

C:double fun(double x, double y) ;{}

D:double fun(double x, y) {}

答案:A

第6题 (2.0分) 题号:2321

以下关于C语言源程序的叙述中错误的是().(2007年春江苏省二级C)

A:一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main函数定义

B:函数定义由函数头部和函数体两部分组成

C:在一个函数定义的函数体中允许定义另一个函数

D:在一个函数定义的函数体中允许调用另一个函数或调用函数自身

答案:C

第7题 (2.0分) 题号:2320

若有数组 A和B的声明"static char A[ ] = "ABCDEF",B[ ] = { 'A', 'B', 'C', 'D', 'E', 'F'} ;",则数组A和数组B的长度分别是().(2006年秋江苏省二级C)

A:7,6

B:6,7

C:6,6

D:7,7

答案:A

第8题 (2.0分) 题号:2317

设有下列程序段:

static char b=2;

void Y ( )

{ static float d=4;....... }

int a=1;

void X ( )

{ int c=3; ...... }

关于程序段中各变量的属性,以下叙述中错误的是().(2006年春江苏省二级C)

A:a是全局变量,函数X可以访问,函数Y不能访问

B:b是全局变量,函数X和函数Y都可以访问

C:c是动态变量,函数X可访问,函数Y不可访问

D:d是静态变量,函数X和函数Y都可以访问

答案:D

第9题 (2.0分) 题号:2318

若已定义一个有返回值的函数,则以下关于调用该函数的叙述中错误的是().(2006年春江苏省二级C)

A:函数调用可以作为独立的语句存在

B:函数调用可以出现在表达式中

C:函数调用可以作为一个函数实参

D:函数调用可以作为一个函数形参

答案:D

第10题 (2.0分) 题号:2316

已知有函数f的定义如下:

int f( int a , int b)

{ if(a

在main函数中若调用函数f(2,3),得到的返回值是().(2005年春江苏省二级C)

A:2

B:3

C:2和3

D:3和2

答案:B

第11题 (2.0分) 题号:2314

已知函数f的定义如下:

void f(void)

{printf("That's great!");}

则调用f函数的正确形式是(). (2004年秋江苏省二级C)

A:f;

B:f( );

C:f(void);

D:f(1);

答案:B

第12题 (2.0分) 题号:2311

以下程序运行时输出结果为() .(2004年秋江苏省二级C)

int x=1;

main( )

{printf(″%d″,f(x));}

#define x 2

intf(int y)

{return x+y;}

A:1

B:2

C:3

D:4

答案:C

第13题 (2.0分) 题号:2310

以下全局变量声明中正确的是 ().(2004年秋江苏省二级C)

A:auto int i=1;

B:float a=1,b=0.5,c=a+b;

C:char for=1;

D:static char ch;

答案:D

第14题 (2.0分) 题号:2304

C语言中函数返回值的类型是由()决定的. (1998年秋江苏省二级C)

A:return语句中的表达式类型

B:调用该函数的主函数类型

C:定义函数时所指定的函数类型

D:传递给函数的实参类型

答案:C

第15题 (2.0分) 题号:2309

若有函数fun的定义为:

void fun (...)

{ static int a=1;

......

}

则下列叙述中不正确的是()(2004年春江苏省二级C)

A:在每次调用fun函数时,变量a的值是上次调用结束时a的值

B:在fun函数之外,可以用变量名a直接引用a的值

C:在其它函数中,可以出现声明 double a=2.5;

D:fun函数的形式参数不能取名为a

答案:D

第16题 (2.0分) 题号:2313

关于函数返回值,以下叙述中正确的是() .(2004年秋江苏省二级C)

A:函数返回值的类型由函数体内return语句包含的表达式的类型决定

B:函数返回值的类型由函数头部定义的函数类型决定

C:若函数体中有多个return语句,则函数的返回值是排列在最后面的retum语句中表达式的值

D:若函数体内没有retum语句,则函数没有返回值

答案:B

第17题 (2.0分) 题号:2315

以下函数定义中正确的是 () .(2005年春江苏省二级C)

A:int fun(int a,b) {}

B:int fun(int a[][]) {}

C:int fun(void) {}

D:int fun(static int a,int b) {}

答案:C

第18题 (2.0分) 题号:2307

以下关于函数的叙述中,正确的是()(2003年春江苏省二级C)

A:在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值

B:在函数体中必须至少有一个return语句

C:在函数体中可以定义另一个函数

D:在函数体中可以调用函数自身

答案:D

第19题 (2.0分) 题号:2306

在以下程序中,需要在fun函数中声明一个int型的变量,以下选项中()不能用作该变量的名字.

(2002年秋江苏省二级C)

#include

int y;

main()

{ int a=1;

fun(a);

}

int fun(int x)

{ ; /* int型变量声明语句位置 */

...... /* 若干执行语句 */

}

A:x

B:y

C:fabs

D:fun

答案:A

第20题 (2.0分) 题号:2278

若有声明"int i,k=1; unsigned j;",则下列语句执行时会出现无限循环的语句是 .(2008年春江苏省二级C)

A:for(j=15;j>0;j-=2) k++;

B:for(j=0;j<15;j+=2) k++;

C:for(i=0;i<15;i+=2) k++;

D:for(i=15;i>0;i-=2) k++;

答案:A

三、程序填空 共1题 (共计6分)

第1题 (6.0分) 题号:54

/*-------------------------------------------------------

【程序填空】

---------------------------------------------------------

功能:求一个二维数组中每行的最大值和每行的和。

-------------------------------------------------------*/

#include

main()

{

int a[5][5],b[5],c[5],i,j,k,s=0;

for(i=0;i<5;i++)

for(j=0;j<5;j++)

a[i][j]=random(40)+20;

for(i=0;i<5;i++)

{

/***********SPACE***********/

k=a[i][0]; 【?】 ;

for(j=0;j<5;j++)

{

/***********SPACE***********/

if(k

s=s+a[i][j];

}

b[i]=k;

/***********SPACE***********/

【?】 ;

}

for(i=0;i<5;i++)

{

for(j=0;j<5;j++)

/***********SPACE***********/

printf("%5d", 【?】 );

printf("%5d%5d",b[i],c[i]);

printf("n");

}

}

答案:

=======(答案1)=======

s=0

=======(答案2)=======

k=a[i][j]

=======(答案3)=======

c[i]=s

=======(答案4)=======

a[i][j]

四、程序改错 共1题 (共计6分)

第1题 (6.0分) 题号:55

/*------------------------------------------------------

【程序改错】

--------------------------------------------------------

功能:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输

出主对角线上的元素之和sum。

------------------------------------------------------*/

#include

void fun()

{

int a[3][3],sum;

int i,j;

/**********FOUND**********/

a=0;

for(i=0;i<3;i++)

for(j=0;j<3;j++)

/**********FOUND**********/

scanf("%d",a[i][j]);

for(i=0;i<3;i++)

/**********FOUND**********/

sum=sum+a[i][j];

/**********FOUND**********/

printf("sum=%fn",sum);

}

main()

{

fun();

}

答案:

=======(答案1)=======

sum=0;

=======(答案2)=======

scanf("%d",&a[i][j]);

=======(答案3)=======

sum= sum + a[i][i] ;

=========或=========

sum+=a[i][i];

=======(答案4)=======

printf("sum=%dn",sum);