试卷编号:313
所属语言:C语言
试卷方案:第八章函数
试卷总分:100分
共有题型:4种
一、填空共12题(共计48分)
第1题(分)题号:824
以下程序运行后输出结果为【1】.(2007年春江苏省二级C) #include""
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("%d\n",mystery(x,y));}
答案:
=======(答案1)=======
15
说明:5+(5,2);5+5+(5,1);5+5+5
第2题(分)题号:820
以下程序运行时,输出结果是【1】.(2006年春江苏省二级C)
#include <>
main()
{ int s,i,sum(int);
for(i=1;i<=5;i++)
s=sum(i);
printf("%d\n", s);
}
sum(int k)
{ static int x=0;
return x+=k;
}
答案:
=======(答案1)=======
15
说明:子函数中的x是static,所以是累加,x=0+1+2+3+4+5第3题(分)题号:823
以下程序运行后输出结果为【1】.(2007年春江苏省二级C) #include""
int a;
int m(int a)
{ static int s; return(++s)+(--a);}
void main()
{ int a=2; printf("%d",m(m(a)));}
答案:
=======(答案1)=======
3
说明:因为static int s,所以s是静态的,要累加,第一次调用m(2),return(++s)+(--a)相当于return (0+1)+(2-1),下一次调用m(m(a))=m(2), return(++s)+(--a)相当于return (1+1)+(2-1)
第4题(分)题号:821
以下程序运行时,输出结果为【1】.(2006年春江苏省二级C)
#include<>
main( )
{ printf("%d\n",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
说明:第一次调用f(21,35),第二次调用 f(21,14),第三次调用f(7,14),第四次调用f(7,7)第5题(分)题号: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题(分)题号:816
在声明局部变量时,不能使用的存储类别标识符是【1】.(2007年春江苏省二级C)答案:
=======(答案1)=======
extern
第7题(分)题号: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题(分)题号:814
一个用C语言编写的程序在运行时,如果没有发生任何异常情况,则只有在执行了【1】函数的最后一条语句或该函数中的return语句后,程序才会终止运行.(2005年春江苏省二级C)
答案:
=======(答案1)=======
main
第9题(分)题号:174
为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的【1】语句配对.
答案:
=======(答案1)=======
if
第10题(分)题号:813
若有函数定义int f( ){ int x=4,y=3,z=2;return x,y,z;},则调用函数f后的返回值是【1】.(2004年春江苏省二级C)
答案:
=======(答案1)=======
2
第11题(分)题号: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题(分)题号: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 说明:第一行输出为调用change(10,2); 后的输出结果 第二行输出为调用change(10,8);后的输出结果 二、单项选择共20题(共计40分) 第1题(分)题号:2305 以下叙述中不正确的是()(2000年秋江苏省二级C) A:一个变量的作用域完全取决于变量说明语句的位置 B:外部变量可以在函数以外的任何位置定义 C:内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用 D:用static说明的一个外部变量是为了限制其他编译单位的引用 答案:C 说明:static说明的变量值可以保留到下一次使用 第2题(分)题号:2322 已知在函数f中声明了局部变量x,如果希望f函数第一次被调用返回后变量x中存储的数据保持到下次f函数被调用时仍可以使用,则在声明x时必须指定其存储类型为 ().(2007年秋江苏省二级C) A:auto B:register C:static D:extern 答案:C 第3题(分)题号:2308 在以下程序中,需要在main函数之后定义一个函数,以下选项中()可以用作该函数的名字. (2003年春江苏省二级C) #define p int y; main() { int a=1; 函数名(a); ...... /* 若干执行语句 */ } int 函数名(int x) { return x*x; } A:main B:y C:p D:print 答案:D 第4题(分)题号:2312 以下关于函数形式参数的声明中正确的是().(2004年秋江苏省二级C) A:int a[ ] B:int a[][] C:int a[]={0} D:int a[2][] 答案:A 说明:二维数组作为形式参数的时候,必须有列。 第5题(分)题号: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题(分)题号:2321 以下关于C语言源程序的叙述中错误的是().(2007年春江苏省二级C) A:一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main函数定义 B:函数定义由函数头部和函数体两部分组成 C:在一个函数定义的函数体中允许定义另一个函数 D:在一个函数定义的函数体中允许调用另一个函数或调用函数自身 答案:C 第7题(分)题号: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题(分)题号: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题(分)题号:2318 若已定义一个有返回值的函数,则以下关于调用该函数的叙述中错误的是().(2006年春江苏省二级C) A:函数调用可以作为独立的语句存在 B:函数调用可以出现在表达式中 C:函数调用可以作为一个函数实参 D:函数调用可以作为一个函数形参 答案:D 第10题(分)题号: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题(分)题号:2314 已知函数f的定义如下: void f(void) {printf("That's great!");} 则调用f函数的正确形式是(). (2004年秋江苏省二级C) A:f; B:f( ); C:f(void); D:f(1); 答案:B 第12题(分)题号: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题(分)题号:2310 以下全局变量声明中正确的是 ().(2004年秋江苏省二级C) A:auto int i=1; B:float a=1,b=,c=a+b; C:char for=1; D:static char ch; 答案:D 第14题(分)题号:2304 C语言中函数返回值的类型是由()决定的. (1998年秋江苏省二级C) A:return语句中的表达式类型 B:调用该函数的主函数类型 C:定义函数时所指定的函数类型 D:传递给函数的实参类型 答案:C 第15题(分)题号:2309 若有函数fun的定义为: void fun (...) { static int a=1; ...... } 则下列叙述中不正确的是()(2004年春江苏省二级C) A:在每次调用fun函数时,变量a的值是上次调用结束时a的值 B:在fun函数之外,可以用变量名a直接引用a的值 C:在其它函数中,可以出现声明 double a=; D:fun函数的形式参数不能取名为a 答案:B 第16题(分)题号:2313 关于函数返回值,以下叙述中正确的是() .(2004年秋江苏省二级C) A:函数返回值的类型由函数体内return语句包含的表达式的类型决定 B:函数返回值的类型由函数头部定义的函数类型决定 C:若函数体中有多个return语句,则函数的返回值是排列在最后面的retum语句中表达式的值D:若函数体内没有retum语句,则函数没有返回值 答案:B 第17题(分)题号: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题(分)题号:2307 以下关于函数的叙述中,正确的是()(2003年春江苏省二级C) A:在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值 B:在函数体中必须至少有一个return语句 C:在函数体中可以定义另一个函数 D:在函数体中可以调用函数自身 答案:D 第19题(分)题号: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 说明:同一个函数中不能定义重名x变量。 第20题(分)题号: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题(分)题号: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***********/