C语言第八章函数测试.docx
《C语言第八章函数测试.docx》由会员分享,可在线阅读,更多相关《C语言第八章函数测试.docx(20页珍藏版)》请在冰点文库上搜索。
![C语言第八章函数测试.docx](https://file1.bingdoc.com/fileroot1/2023-5/31/d0015206-3664-412d-92cb-b6a4ac261827/d0015206-3664-412d-92cb-b6a4ac2618271.gif)
C语言第八章函数测试
试卷编号:
313
所属语言:
C语言
试卷方案:
第八章函数
试卷总分:
100分
共有题型:
4种
一、填空共12题(共计48分)
第1题(4.0分)题号:
824
以下程序运行后输出结果为【1】.(2007年春江苏省二级C)
#include"stdio.h"
intmystery(inta,intb)
{
if(b==1)retutna;
elsereturna+mystery(a,b-1);
}
voidmain()
{intx=5,y=3;printf("%d\n",mystery(x,y));}
答案:
=======(答案1)=======
15
第2题(4.0分)题号:
820
以下程序运行时,输出结果是【1】.(2006年春江苏省二级C)
#include
main()
{ints,i,sum(int);
for(i=1;i<=5;i++)
s=sum(i);
printf("%d\n",s);
}
sum(intk)
{staticintx=0;
returnx+=k;
}
答案:
=======(答案1)=======
15
第3题(4.0分)题号:
823
以下程序运行后输出结果为【1】.(2007年春江苏省二级C)
#include"stdio.h"
inta;
intm(inta)
{staticints;return(++s)+(--a);}
voidmain()
{inta=2;printf("%d",m(m(a)));}
答案:
=======(答案1)=======
3
第4题(4.0分)题号:
821
以下程序运行时,输出结果为【1】.(2006年春江苏省二级C)
#include
main()
{printf("%d\n",f(21,35));}
intf(inta,intb)
{if(a==b)returna;
else
if(a>b)returnf(a-b,b);
elsereturnf(a,b-a);
}
答案:
=======(答案1)=======
7
第5题(4.0分)题号:
819
以下程序运行时输出的结果的第二行是【1】,第四行是【2】,第六行是【3】.
(2005年春江苏省二级C)
#include
voidchange(ints[3][3],intd)
{inti,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()
{ints[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)=======
258
=======(答案2)=======
987
=======(答案3)=======
321
第6题(4.0分)题号:
816
在声明局部变量时,不能使用的存储类别标识符是【1】.(2007年春江苏省二级C)
答案:
=======(答案1)=======
extern
第7题(4.0分)题号:
818
以下程序运行时输出结果是【1】.(2004年秋江苏省二级C)
#include
voidnum()
{externintx,y;
inta=15,b=10;
x=a-b;y=a+b;
}
intx,y;
main()
{inta=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
若有函数定义intf(){intx=4,y=3,z=2;returnx,y,z;},则调用函数f后的返回值是【1】.(2004年春江苏省二级C)
答案:
=======(答案1)=======
2
第11题(4.0分)题号:
817
在以下程序的main函数中,语句"fun(x,10);"内的实参x表示数组x的【1】.(2007年春江苏省二级C)
voidfun(inta[10],intn)
{inti;for(i=0;imain()
{intx[10]={0};fun(x,10);}
答案:
=======(答案1)=======
第一个元素地址或起始地址或首地址
第12题(4.0分)题号:
822
以下程序运行时,输出结果的第一行是【1】,第二行是【2】.(2006年春江苏省二级C)
#include
voidchange(intx,intm)
{charch[]={'0','1','2','3','4','5','6','7','8','9'},b[80];
inti=0,r;
while(x)
{r=x%m;x/=m;
b[i++]=ch[r];
}
for(--i;i>=0;i--)
printf("%c",b[i]);
}
main()
{inta,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)
#definep3.14
inty;
main()
{inta=1;
函数名(a);
....../*若干执行语句*/
}
int函数名(intx)
{returnx*x;}
A:
main
B:
y
C:
p
D:
print
答案:
D
第4题(2.0分)题号:
2312
以下关于函数形式参数的声明中正确的是().(2004年秋江苏省二级C)
A:
inta[]
B:
inta[][]
C:
inta[]={0}
D:
inta[2][]
答案:
A
第5题(2.0分)题号:
2323
以下函数定义中正确的是().(2009年春江苏省二级C)
A:
doublefun(doublex,doubley){}
B:
doublefun(doublex;doubley){}
C:
doublefun(doublex,doubley);{}
D:
doublefun(doublex,y){}
答案:
A
第6题(2.0分)题号:
2321
以下关于C语言源程序的叙述中错误的是().(2007年春江苏省二级C)
A:
一个C语言源程序由若干个函数定义组成,其中必须有且仅有一个名为main函数定义
B:
函数定义由函数头部和函数体两部分组成
C:
在一个函数定义的函数体中允许定义另一个函数
D:
在一个函数定义的函数体中允许调用另一个函数或调用函数自身
答案:
C
第7题(2.0分)题号:
2320
若有数组A和B的声明"staticcharA[]="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
设有下列程序段:
staticcharb=2;
voidY()
{staticfloatd=4;.......}
inta=1;
voidX()
{intc=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的定义如下:
intf(inta,intb)
{if(a
在main函数中若调用函数f(2,3),得到的返回值是().(2005年春江苏省二级C)
A:
2
B:
3
C:
2和3
D:
3和2
答案:
B
第11题(2.0分)题号:
2314
已知函数f的定义如下:
voidf(void)
{printf("That'sgreat!
");}
则调用f函数的正确形式是().(2004年秋江苏省二级C)
A:
f;
B:
f();
C:
f(void);
D:
f
(1);
答案:
B
第12题(2.0分)题号:
2311
以下程序运行时输出结果为().(2004年秋江苏省二级C)
intx=1;
main()
{printf(″%d″,f(x));}
#definex2
intf(inty)
{returnx+y;}
A:
1
B:
2
C:
3
D:
4
答案:
C
第13题(2.0分)题号:
2310
以下全局变量声明中正确的是().(2004年秋江苏省二级C)
A:
autointi=1;
B:
floata=1,b=0.5,c=a+b;
C:
charfor=1;
D:
staticcharch;
答案:
D
第14题(2.0分)题号:
2304
C语言中函数返回值的类型是由()决定的.(1998年秋江苏省二级C)
A:
return语句中的表达式类型
B:
调用该函数的主函数类型
C:
定义函数时所指定的函数类型
D:
传递给函数的实参类型
答案:
C
第15题(2.0分)题号:
2309
若有函数fun的定义为:
voidfun(...)
{staticinta=1;
......
}
则下列叙述中不正确的是()(2004年春江苏省二级C)
A:
在每次调用fun函数时,变量a的值是上次调用结束时a的值
B:
在fun函数之外,可以用变量名a直接引用a的值
C:
在其它函数中,可以出现声明doublea=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:
intfun(inta,b){}
B:
intfun(inta[][]){}
C:
intfun(void){}
D:
intfun(staticinta,intb){}
答案:
C
第18题(2.0分)题号:
2307
以下关于函数的叙述中,正确的是()(2003年春江苏省二级C)
A:
在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值
B:
在函数体中必须至少有一个return语句
C:
在函数体中可以定义另一个函数
D:
在函数体中可以调用函数自身
答案:
D
第19题(2.0分)题号:
2306
在以下程序中,需要在fun函数中声明一个int型的变量,以下选项中()不能用作该变量的名字.(2002年秋江苏省二级C)
#include
inty;
main()
{inta=1;
fun(a);
}
intfun(intx)
{;/*int型变量声明语句位置*/
....../*若干执行语句*/
}
A:
x
B:
y
C:
fabs
D:
fun
答案:
A
第20题(2.0分)题号:
2278
若有声明"inti,k=1;unsignedj;",则下列语句执行时会出现无限循环的语句是.(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()
{
inta[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
voidfun()
{
inta[3][3],sum;
inti,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=%f\n",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=%d\n",sum);