四川计算机二级第34次C语言笔试真题答案文档格式.docx
《四川计算机二级第34次C语言笔试真题答案文档格式.docx》由会员分享,可在线阅读,更多相关《四川计算机二级第34次C语言笔试真题答案文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
第二部分
C与C++语言程序设计
(共85分)
一、单项选择题(每小题1分,共10分)
1.以下合法的字符常量是(C)。
16(A)“a”(B)‘\72’(C)‘\0x12’(D)‘ab’
2.以下程序的结果是(B)。
#include"
stdio.h"
voidmain()
{
unsignedinta=3,b=10;
printf("
%d\n"
a<
<
2|b>
>
1);
}
17(A)1(B)13(C)12(D)5
3.以下程序的输出结果是(D)。
inta=-1,b=4,k;
k=(++a)&
&
!
(b--<
=0);
%d%d%d\n"
k,a,b);
18(A)104(B)103(C)003(D)004
4.以下程序的输出结果是(C)。
#include<
string.h>
charp[20]={'
a'
'
b'
c'
d'
},q[]="
abc"
r[]="
abcde"
;
strcpy(p+strlen(q),r);
strcat(p,q);
%d%d\n"
sizeof(p),strlen(p));
19(A)209(B)99(C)2011(D)1111
5.下列对C语言字符数组的描述中错误的是(C)。
20(A)字符数组可以存放字符串
(B)字符数组的字符串可以整体输入、输出
(C)可以在程序中用赋值运算符“=”对字符数组进行整体赋值
(D)不可以用关系运算符对字符数组中的字符串进行比较
6.下述程序的输出结果是(D)。
inta[]={7,4,6,3,10};
intm=10,k,*ptr=&
a[0];
for(k=0;
k<
5;
k++)
m=*(ptr+k)<
m?
*(ptr+k):
m;
m);
21(A)10(B)4(C)6(D)3
7.有如下程序
inta=2,b=-1,c=2;
if(a<
b)
if(b<
0)c=0;
else
c++;
printf("
c);
该程序的输出结果是(C)。
22(A)0(B)1(C)2(D)3
8.根据下面的结构体类型及其结构数组的定义,值等于‘A’的表达式是(D)。
structseason
{
charname[10];
intday;
};
structseasons[4]={“Spring”,90,”Summer”,91,”Autumn”,92,”Winter”,92};
23(A)s[3].name[0](B)s[3].name
(C)s[2].name(D)s[2].name[0]
9.运行以下程序的输出结果为(B)。
#include"
#defineR1+2
#defineS(r)r*r
#defineV(r)S(r)*R
intr1=1+2;
%d"
V(r1));
24(A)27(B)11(C)9(D)7
10.以下不能对二维数组a进行正确初始化的语句是(A)。
25(A)inta[2][3]={{1,2},{3,4},{5,6}};
(B)inta[][3]={{1,2},{0}};
(C)inta[2][3]={0};
(D)inta[][3]={1,2,3,4,5,6};
二、读程序回答问题(每个选择3分,共45分)
1.读下面程序并回答问题:
intx=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
case0:
a++;
break;
case1:
b++;
}
case2:
a++;
}
%d,%d\n"
a,b);
(1)程序的运行结果为(A)。
26(A)2,1(B)1,2(C)1,1(D)0,0
(2)将程序中的switch(x)更改为switch(x!
=1),其程序运行结果是(D)。
27(A)2,1(B)1,2(C)1,1(D)0,0
2.读下面程序并回答问题:
string.h"
voidabc(char*name[],intlen)
char*temp;
inti,j,k;
for(i=0;
i<
len-1;
i++)
k=i;
for(j=i+1;
j<
len;
j++)
if(strcmp(name[k],name[j])>
0)k=j;
if(i!
=k)
{temp=name[i];
name[i]=name[k];
name[k]=temp;
staticchar*name[]={"
turboc"
"
fortan"
basic"
forbase"
java"
};
inti,n=5;
abc(name,n);
%c"
*name[i]);
\n"
);
}
函数abc的功能是(B)。
28(A)按字符排序(B)按字符串排序
(C)交换字符串(D)字符串倒序
程序的运行结果是(C)。
29(A)tfbfj(B)turbo(C)bffjt(D)java
3.读下面程序并回答问题:
intfunc(intx)
inty=0;
staticintz=3;
x=z++,y++;
returnx;
inta=2,i,b;
2;
b=func(a++);
b);
该程序运行的结果是(C)。
30(A)2(B)3(C)4(D)5
4.有下列程序(考点:
函数(地址参数)、指针运算)
inttemp;
intfun(intn);
intnum,sum;
num=5684;
temp=num;
sum=fun(num);
=%d\n"
sum);
intfun(intn)
intremind;
staticintsum=0;
if(n>
=10)
fun(n/10);
remind=n%10;
sum+=remind;
if(temp>
n)
%d+"
remind);
else
returnsum;
(1)程序中的fun函数被调用次数为(C)。
31(A)2(B)3(C)4(D)5
(2)程序的输出结果为(A)。
32(A)5+6+8+4=23(B)5+6+8+4+=23(C)4+8+6+5+=23(D)4+8+6+5=23
5.读下面程序并回答问题。
charx[4][8]={"
First"
Second"
Third"
Four"
inta[4]={6,7,6,5};
inti;
chary[4][8];
FILE*fp;
fp=fopen("
TEST.txt"
w"
4;
fputs(x[i],fp);
fclose(fp);
r"
fgets(y[i],a[i],fp);
%s\n"
*(y+i));
(1)程序运行的结果是(A)
33(A)First(B)First(C)“First”(D)Four
SecondFirst“Second”Third
ThirdFirst“Third”Second
FourFirst“Four”First
(2)以下哪种说法是正确的(C)。
34(A)TEST.txt仅在程序运行期间存在,程序结束后就没有了
(B)TEST.txt文件必须在程序运行之前建立好
(C)如果TEST.txt文件不存在,程序运行中会自动建立TEST.txt文件
(D)TEST.txt始终是无内容的空文件
6.读下面程序并回答问题。
chars[50]="
de123116abc5656"
inti,b[10]={0},cnt=0;
s[i]!
='
\0'
if(s[i]>
0'
s[i]<
9'
)
b[s[i]-'
]++;
elsecnt++;
cnt);
10;
b[i]);
(1)main函数中第一个printf输出cnt的值为(B)
36(A)15(B)5(C)9(D)16
(2)该程序的功能是(C)
37(A)取出字符串中的数字子串连接起来
(B)统计数字子串在字符串中出现的次数
(C)将数字子串转换为整数并累加
(D)将字符串中的数字字符转换为数字,结果加起来乘以10
7.读下面程序,回答问题。
intfun(int*a,intn)
1)return*a+fun(a+1,n-1);
return*a;
inta[10]={1,2,3,4,5,6,7,8,9,10},s;
s=fun(a+3,3);
s);
(1)函数fun与下面非递归程序等价的是(A)。
37(A)intfun(int*a,intn)(B)intfun(int*a,intn)
{{
inti,s=0;
inti,s=0;
for(i=0;
n;
i++)for(i=0;
s=s+a[i];
s=s+*a;
returns;
returns;
}}
(C)intfun(int*a,intn)(D)intfun(int*a,intn)
{{
inti,s=0;
for(i=0;
s=a[i];
s=s+a[n-i];
reutrns;
}}
(2)程序的输出结果为(C)。
38(A)55(B)12(C)15(D)18
8.读下面程序,回答问题。
voidsort(inta[],intn)
inti,j,t;
n-1;
for(j=0;
i;
if(a[j]>
a[i])
{t=a[j];
a[j]=a[i];
a[i]=t;
intx[10]={1,0,-76,4,8,12,65,100,-45,123};
sort(x+5,5);
x[5]);
(1)程序中sort函数的功能是(C)
39(A)用起泡法对含有n个元素的数组a从小到大的排序
(B)用选择法对含有n个元素的数组a从小到大的排序
(C)用二分法对含有n个元素的数组a从小到大的排序
(D)用起泡法对含有n个元素的数组a从大到小的排序
(2)该程序的运行输出结果为(B)
40(A)-76(B)-45(C)8(D)123
注意:
①请把下面“程序填空”中各小题答案写在主观题答题纸上
②每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空(每空2分,共30分)
1.程序中函数fun()的功能是:
查找字符串str中指定字符ch出现的次数并返回,并将该字符出现时的下标位置记录于数据组bb中。
例如在字符串"
1233211234567"
中查找字符'
1'
,其结果为3次,下标分别为0,5,6。
请填空。
#defineN20
intfun(char*str,charch,int*bb)
inti=0,n=0;
while(*str)
if(str[i]==ch)
bb[n++]=i;
str++;
i++;
returnn;
charstr[N],ch;
intbb[N]={0},i,n;
\nInputtheoriginalstring:
"
gets(str);
\nInputcharacter:
scanf("
&
ch);
n=fun(str,ch,bb);
\nThenumberofcharacteris:
n);
\nThesuffixofcharacter:
bb[i]);
2.已知head指向单链表的第一个结点,以下程序调用函数print输出这一单链表。
malloc.h>
#defineLensizeof(structstudent)
structstudent
intdata;
structstudent*next;
structstudent*creat()
......
return(head);
print(structstudent*head)
structstudent*p;
\nThelinklistis:
p=head;
if(head=!
NULL)
while(p->
next!
=NULL)
p->
data);
p=p->
next;
p->
data);
structstudent*head;
head=creat();
print(head);
3.下列程序的功能是:
假设a数组中的数,按由小到大的顺序存放。
将数组a中相邻相同的数删得只剩一下,然后以每行5个数的形式输出a数组中的数。
#defineMAX20
inta[MAX],i,j,n;
MAX;
scanf("
a+i);
n=i=MAX-1;
while(i)
if(a[i]==a[i-1])
for(j=i;
=n;
a[j-1]=a[j];
n=n-1;
i=i-1;
if(i%5==0)
printf(“\n”);
%3d"
a[i]);
4.函数fun的功能是:
求S=1×
2+2×
3+3×
4+…+n×
(n+1)的和,S的值作为函数值返回。
在main函数中输入n的值,调用fun函数,并输出最后的结果。
longfun(intn)
longs=0;
for(i=1;
s=s+i*(i+1);
returns;
intn;
longs;
Inputn:
n);
s=fun(n);
s=%ld\n"
5.函数fun的功能是:
将10到99之间的每位数字的乘积大于每位数字的和的整数放入形参数组a中,数组a的个数作为函数值返回。
例如:
整数23:
2*3>
2+3,所以23满足条件,应存入数组a中。
在main函数中,调用fun函数,并按一行5个整数进行输出。
intfun(int*a)
inti=0,n,k,s,m;
for(n=10;
n<
100;
n++)
k=1;
s=0;
m=n;
k=%d\n"
k);
while(m!
=0)
k=k*(m%10);
s=s+m%10;
m=m/10;
n=%d,k=%d,s=%d\n"
n,k,s);
if(k>
s)
a[i]=n;
i++;
returni;
inta[100],n,i;
n=fun(a);
%4d"
if((i+1)%5==0)printf("