全国计算机等级考试二级C语言试题及答案1Word文档下载推荐.docx
《全国计算机等级考试二级C语言试题及答案1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言试题及答案1Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
B)scanf("
%d%d%d"
a,b,c);
C)scanf("
p);
D)scanf("
(17)有以下程序
main()
{intx,y,z;
x=y=1;
z=x++,y++,++y;
printf("
%d,%d,%d\n"
x,y,z);
}
程序运行后的输出结果是
A)2,2,3B)2,2,2C)2,3,1D)2,1,1
(18)若已定义:
inta=25,b=14,c=19;
以下三目运算符(?
:
)所构成语句的执行后a<
=25&
&
b--<
=2&
c?
printf("
***a=%d,b=%d,c=%d\n"
a,b,c):
###a=%d,b=%d,c=%d\n"
,a,b,c);
程序输出的结果是
A)***a=25,b=13,c=19B)***a=26,b=14,c=19
C)###a=25,b=13,c=19D)###a=26,b=14,c=19
(19)下列程序段的输出结果是
inta=1234;
floatb=123.456;
doublec=12345.54321;
-,%2.1f,%2.1f"
A)无输出B)12,123.5,12345.5C)1234,123.5,12345.5D)1234,123.4,1234.5
(20)有以下程序
{inta=0,b=0;
a=10;
/*给a赋值
b=20;
给b赋值*/
a+b=%d\n"
a+b);
/*输出计算结果*/
程序运行后输出结果是
A)30B)a+b=30C)a+b=0D)出错
(21)若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是
#include
main()
{charc;
intv0=1,v1=0,v2=0;
do{switch(c=getchar())
{case′a′:
case′A′:
case′e′:
case′E′:
case′i′:
case′I′:
case′o′:
case′O′:
case′u′:
case′U′:
v1+=1;
default:
v0+=1;
v2+=1;
}
}while(c!
=′\n′);
v0=%d,v1=%d,v2=%d\n"
v0,v1,v2);
A)v0=11,v1=4,v2=11B)v0=8,v1=4,v2=8
C)v0=7,v1=4,v2=7D)v0=13,v1=4,v2=12
(22)有以下程序
#include
main()
{inty=9;
for(y>
0;
y--)
if(y%3==0)printf("
--y);
}
程序的运行结果是
A)732B)433C)852D)874
(23)设有以下程序段
intx=0,s=0;
while(!
x!
=0)s+=++x;
s);
则
A)运行程序段后输出0B)运行程序段后输出1
C)程序段中的控制表达式是非法的D)程序段执行无限次
(24)有以下程序
fun(intx,inty){return(x+y);
{inta=1,b=2,c=3,sum;
sum=fun((a++,b++b,a+b),c++);
%d\n"
sum);
执行后的输出结果是
A)5B)7C)8D)3
(25)执行下面的程序段后,变量k中的值为
intk=3,s[2];
s[0]=k;
k=s[1]*10;
A)不定值B)35C)31D)20
(26)以下叙述中错误的是
A)改变函数形参的值,不会改变对应实参的值
B)函数可以返回地址值
C)可以给指针变量赋一个整数作为地址值
D)当在程序的开头包含文件stdio.h时,可以给指针变量赋NULL
(27)以下程序段的描述,正确的是
x=-1;
do
{x=x*x;
}while(!
x);
A)是死循环B)循环执行两次C)循环执行一次D)有语法错误
(28)有以下程序
fun(intx,inty)
{staticintm=0,i=2;
i+=m+1;
m=i+x+y;
returnm;
}
main()
{intj=1,m=I,k;
k=fun(j,m);
k);
k)
执行后的输出结果是
A)5,5B)5,11C)11,11D)11,5
(29)有以下程序
fun(intx)
{intp;
if(x==0║x==1)return(3);
p=x-fun(x=2);
retump;
}main()
{prinf("
fun(7));
A)7B)3C)3D)0
(30)在16位编译系统上,右有定义inta[]={10,20,30},*p=&
a;
当执行p++;
后,下列说法错误的是
A)p向高地址移了一个字节B)p抽高地址移了一个存储单元
C)p向高地址移了两个字节D)p与a+1等价
(31)有以下程序
{inta=1,b=3,c=5;
int*p1=&
a,*p2=&
b,*p=&
*p=*p1*(*p2);
printf("
c);
A)1B)2C)3D)4
(32)下列程序执行后的输出结果是
voidfunc1(inti);
voidfunc2(inti);
charst[]="
hello,friend!
"
;
voidfunc1(inti)
{printf("
%c"
st[i]);
if(i<
3){i+=2;
func2(i);
voidfunc2(inti)
func1(i);
{inti=0;
func1(i);
\n"
);
A)helloB)helC)hloD)hlm
(33)在下述程序中,判断i>
j共执行的次数是
{inti=0,j=10,k=2,s=0;
for(;
)
{i+=k;
if(i>
j)
s);
break;
}s+=i;
A)4B)7C)5D)6
(34)以下函数返回a所指数组中最大值所在的下标值
fun(int*a,intn)
{inti,j=0,p;
p=j;
for(i=j;
iif(a[i]>
a[p]);
return(p);
在下划线处应填入的内容是
A)i=pB)a[p]=a[i]C)p=jD)p=i
(35)下列程序执行后的输出结果是
{inta[3][3],*p,i;
p=&
a[0][0];
for(i=1;
i<
9;
i++)p[i]=i+1;
%d\n"
a[1][2]);
A)3B)6C)9D)随机数
(36)有以下程序
voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*/
{intt,i,j;
for(i=0;
ifor(j=i+1;
jif(a}
{intc[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for(i=0;
i<
10;
i++)printf("
%d,"
\n"
程序运行的结果是
A)1,2,3,4,5,6,7,8,9,0,B)0,9,8,7,6,5,1,2,3,4,
C)0,9,8,7,6,5,4,3,2,1,D)1,2,3,4,9,8,7,6,5,0,
(37)以下程序的输出结果是#include
voidprt(int*x,int*y,int*z)
%d,%d,%d\n"
++*x,++*y,*(z++));
{inta=10,b=40,c=20;
prt(&
a,&
b,&
c);
A)11,42,31
12,22,41
B)11,41,20
12,42,20
C)11,21,40
11,21,21
D)11,41,21
12,42,22
(38)有以下程序:
voidfun(char*t,char*s)
{
while(*t!
=0)t++;
while((*t++=*s++)!
=0);
charss[10]=”acc”,aa[10]=”bbxxyy”;
fun(ss,aa);
printf(“%s,%s\n”,ss,aa);
程序运行结果是
A)accxyy,bbxxyyB)acc,bbxxyy
C)accxxyy,bbxxyyD)accbbxxyy,bbxxyy
(39)有以下程序
{FILE*fp;
inti=20,j=30,k,n;
fp=fopen("
d1.dat"
"
w"
);
fprintf(fp,"
i);
j);
fclose(fp);
r"
fscanf(fp,"
%d%d"
,&
k,&
n);
%d%d\n"
k,n);
程序运行后的输出结果是
A)2030B)2050C)3050D)3020
(40)有以下程序
{intx[3][2]={0},I;
for(I=0;
I<
3;
I++)scanf("
x[i]);
%3d%3d%3d\n"
x[0][0],x[0][1],x[1][0]);
若运行时输入:
246<
回车>
,则输出结果为
A)200B)204C)240D)246
(41)有以下程序
#include<
string.h>
main(intargc,char*argv[])
{inti=1,n=0;
while(i<
arge){n=n+strlen(argv[i]);
i++;
printf(“%d\n”,n);
该程序生成的可执行文件名为:
proc.exe。
若运行时输入命令行:
proc1234567
则程序的输出结果是
A)3B)5C)7D)11
(42)有以下程序
voidfun2(chara,charb){printi(“%b%c”,a,b);
chara=‘A’,b=‘B’;
voidfun1(){a=‘C’lb=‘D’;
main()
{fun1()
printf(“%c%c”,a,b);
fun2(‘E’,‘F’);
程序的运行结果是
A)CDEFB)ABEFC)ABCDD)CDAB
(43)有以下程序
stdio.h>
#defineN5
#defineMN+1
#definef(x)(x*M)
{inti1,i2;
i1=f
(2);
i2=f(1+1);
printf(“%d%d\n”,i1,i2);
A)1212B)117C)1111D)127
(44)设有以下语句
typedefstructTT
{charc;
inta[4];
}CIN;
则下面叙述中正确的是
A)可以用TT定义结构体变量B)TT是struct类型的变量
C)可以用CIN定义结构体变量D)CIN是structTT类型的变量
(45)有以下结构体说明、变量定义和赋值语句
structSTD
{charname[10];
intage;
charsex;
}s[5],*ps;
ps=&
s[0];
则以下scanf函数调用语句中错误引用结构体变量成员的是
A)scanf(“%s”,s[0].name);
B)scanf(“%d”,&
s[0].age);
C)scanf(“%c”,&
(ps>
sex));
D)scanf(“%d”,ps>
age);
(46)若有以下定义和语句
uniondata
{inti;
charc;
floatf;
}x;
inty;
则以下语句正确的是
A)x=10.5;
B)x.c=101;
C)y=x;
D)printf(“%d\n”,x);
(47)若变量已正确定义,则以下语句的输出结果是
s=32;
s^=32;
printf(“%d”,s);
A)-1B)0C)1D)32
(48)若程序中有宏定义行:
#defineN100则以下叙述中正确的是
A)宏定义行中定义了标识符N的值为整数100
B)在编译程序对C源程序进行预处理时用100替换标识符N
C)对C源程序进行编译时用100替换标识符N
D)在运行时用100替换标识符N
(49)以下叙述中正确的是
A)C语言中的文件是流式文件,因此只能顺序存取数据
B)打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
C)在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
D)当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
(50)有以下程序
{FILE*fp;
inti;
charch[]=”abcd”,t;
fp=fopen(“abc.dat”,”wb+”);
for(i=0;
4;
i++)fwriter&
ch[],1,1fp;
fseek(fp,-2L,SEEK_END);
fread(&
t,1,1,fp);
fclose(fp);
printf(“%c\n”,t);
程序执行后的输出结果是
A)dB)cC)bD)a
二、填空题(每空2分,共40分)
(1)在面向对象方法中,类之间共享属性和操作的机制称为【1】。
(2)一个关系表的行称为【2】。
(3)耦合和内聚是评价模块独立性的两个主要标准,其中【3】反映了模块内各成分之间的联系。
(4)线性表的存储结构主要分为顺序存储结构和链式存储结构.队列是一种特殊的线性表,循环队列是队列的【4】存储结构.
(5)【5】的任务是诊断和改正程序中的错误。
(6)以下程序的输出结果是【6】.
{intn=12345,d;
while(n!
=0){d=n%10;
d);
n/=10;
(7)以下程序运行后的输出结果是【7】。
intm=011,n=11;
%d%d\n"
++m,n++);
(8)有以下程序,若运行时从键盘输入:
18,11<
,则程序输出结果是【8】。
{inta,b;
Entera,b:
scanf("
%d,%d"
b);
while(a!
=b)
{while(a>
b)a-=b;
while(b>
a)b-=a;
%3d%3d\n"
a,b);
(9)有以下程序段,且变量已正确定义和赋值
for(s=1.0,k=1;
k<
=n;
k++)s=s+1.0/(k*(k+1));
s=%f\n\n"
请填空,使下面程序段的功能为完全相同
s=1.0;
k=1;
while(_【9】_______){s=s+1.0/(k*(k+1));
_【10】_______;
(10)执行以下程序的输出结果是【11】______.
{inti,n[4]={1};
=3;
i++)
{n=n[i-1]*2+1;
n);
(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换.请填空.
viodf(intx[],intn)
{intp0,p1,i,j,t,m;
i=j=x[0];
p0=p1=0;
for(m=0;
m{if(x[m]>
i){i=x[m];
p0=m;
elseif(x[m]}
t=x[p0];
x[p0]=x[n-1];
x[n-1]=t;
t=x[p1];
x[p1]=_【12】_______;
【13】______=t;
{inta[10],u;
for(u=0;
u<
u++)scanf("
a);
f(a,10);
u++)printf("
a);
(12)下列程序中的函数strcpy2()实现字符串两次复制,即将t所指字符串复制两次到s所指内存空间中,合并形成一个新的字符串。
例如,若t所指字符串为efgh,调用strcpy2后,s所指字符串为efghefgh。
请填空。
#include<
voidstrcpy2(char*s,char*t)
{char*p=t;
while(*s++=*t++);
s=【14】;
while(【15】=*p++);
{charstr1[100]="
abcd"
str2[]="
efgh"
strcpy2(str1,str2);
%s\n"
str1);
(13)以下程序统计从终端输入的字符中大写字母的个数,num[0]中统计字母A的个数,num[1]中统计字母B的个数,其它依次类推.用#号结束输入,请填空.
{intnum[26]={0},i;
while((_【16】_______)!
='
#'
)
if(isupper(c))num[c-‘A’]+=【17】_______;
26;
Printf("
%c:
i+'
A'
num);
(14)以下程序中,函数fun的功能是计算x2-2x+6,主函数中将调用fun函数计算:
y1=(x+8)2-2(x+8)+6
y2=sin2(x)-2sin(x)+6
#include"
math.h"
doublefun(doublex){return(x*x-2*x+6);
doublex,y1,y2;
Enterx: