四川计算机二级第34次C语言笔试真题答案.docx
《四川计算机二级第34次C语言笔试真题答案.docx》由会员分享,可在线阅读,更多相关《四川计算机二级第34次C语言笔试真题答案.docx(17页珍藏版)》请在冰豆网上搜索。
四川计算机二级第34次C语言笔试真题答案
四川省普通高等学校计算机应用知识和能力
第三十四次等级考试
二级(C与C++语言)笔试试卷
时间:
2011年4月16日
上午9:
00—11:
00
第一部分
软件技术基础
(共15分)
一、是非判断题(每小题1分,共10分)
(判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B)
1.作业与进程的主要区别是前者由用户提交,后者是由系统自动生成。
(A)
2.从循环链表中任意一个结点出发都能访问到整个链表。
(A)
3.如果分时操作系统的时间片一定,那么用户数越少,则响应时间越长。
(A)
4.队列在操作系统的各种资源请求排队及数据缓冲区管理中广泛使用。
(A)
5.死锁产生的根本原因是操作系统能够提供的资源比请求该资源的进程数少。
(B)
分析:
死锁产生原因:
争夺共享资源;进程推进顺序不当
6.虚拟设备技术能将独占设备转换为可共享的设备,提高资源利用率。
(A)
7.链栈与顺序栈相比,有一个明显的优点是通常不会出现栈满的情况。
(A)
8.软件维护是长期的过程,交付使用的软件仍然需要排错、修改和扩充。
(A)
9.墨盒测试要求测试人员根据程序内部逻辑结构设计或选择测试用例。
(B)
分析:
白盒测试才是根据程序内部逻辑结构设计测试用例,黑盒测试是功能测试
10.软件设计时,应力求增加模块的耦合,减少模块间的内聚。
(B)
分析:
软件设计时,应力求增加模块的内聚,减少模块间的耦合
二、选择题(每小题1分,共5分)
1.设已将元素a1、a2、a3依次入栈,元素a4正等待进栈。
那么下列4个序列中不可能出现的出栈序列是(A)。
11(A)a3、a1、a4、a2(B)a3、a2、a4、a1
(C)a3、a4、a2、a1(D)a4、a3、a2、a1
2.以下哪一个不是操作系统的特征(B)。
12(A)并发(B)分解(C)共享(D)虚拟
3.下列的进程状态变化中,(C)变化是不可能发生的。
13(A)运行就绪(B)运行等待(C)等待运行(D)等待就绪
4.很好地解决了碎片问题的存储管理方法是(D)。
14(A)多重分区管理(B)段式存储管理(C)可变分区管理(D)页式存储管理
5.作业从进入后备队列到被调度程序选中的时间间隔称为(B)。
15(A)周转时间(B)等待时间(C)响应时间(D)触发时间
第二部分
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)。
#include"stdio.h"
voidmain()
{
inta=-1,b=4,k;
k=(++a)&&!
(b--<=0);
printf("%d%d%d\n",k,a,b);
}
18(A)104(B)103(C)003(D)004
4.以下程序的输出结果是(C)。
#include
voidmain()
{
charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde";
strcpy(p+strlen(q),r);
strcat(p,q);
printf("%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)。
#include"stdio.h"
voidmain()
{
inta[]={7,4,6,3,10};
intm=10,k,*ptr=&a[0];
for(k=0;k<5;k++)
m=*(ptr+k)*(ptr+k):
m;
printf("%d\n",m);
}
21(A)10(B)4(C)6(D)3
7.有如下程序
#include"stdio.h"
voidmain()
{
inta=2,b=-1,c=2;
if(a
if(b<0)c=0;
else
c++;
printf("%d\n",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"stdio.h"
#defineR1+2
#defineS(r)r*r
#defineV(r)S(r)*R
voidmain()
{
intr1=1+2;
printf("%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.读下面程序并回答问题:
#include"stdio.h"
voidmain()
{
intx=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
{
case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf("%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.读下面程序并回答问题:
#include"stdio.h"
#include"string.h"
voidabc(char*name[],intlen)
{
char*temp;inti,j,k;
for(i=0;i{
k=i;
for(j=i+1;jif(strcmp(name[k],name[j])>0)k=j;
if(i!
=k)
{temp=name[i];name[i]=name[k];name[k]=temp;}
}
}
voidmain()
{
staticchar*name[]={"turboc","fortan","basic","forbase","java"};
inti,n=5;
abc(name,n);
for(i=0;i<5;i++)
printf("%c",*name[i]);
printf("\n");
}
函数abc的功能是(B)。
28(A)按字符排序(B)按字符串排序
(C)交换字符串(D)字符串倒序
程序的运行结果是(C)。
29(A)tfbfj(B)turbo(C)bffjt(D)java
3.读下面程序并回答问题:
#include"stdio.h"
intfunc(intx)
{
inty=0;
staticintz=3;
x=z++,y++;
returnx;
}
voidmain()
{
inta=2,i,b;
for(i=0;i<2;i++)
b=func(a++);
printf("%d\n",b);
}
该程序运行的结果是(C)。
30(A)2(B)3(C)4(D)5
4.有下列程序(考点:
函数(地址参数)、指针运算)
#include"stdio.h"
inttemp;
voidmain()
{
intfun(intn);
intnum,sum;
num=5684;
temp=num;
sum=fun(num);
printf("=%d\n",sum);
}
intfun(intn)
{
intremind;
staticintsum=0;
if(n>=10)
fun(n/10);
remind=n%10;
sum+=remind;
if(temp>n)
printf("%d+",remind);
else
printf("%d",remind);
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.读下面程序并回答问题。
#include"stdio.h"
charx[4][8]={"First","Second","Third","Four"};
inta[4]={6,7,6,5};
voidmain()
{
inti;
chary[4][8];
FILE*fp;
fp=fopen("TEST.txt","w");
for(i=0;i<4;i++)
fputs(x[i],fp);
fclose(fp);
fp=fopen("TEST.txt","r");
for(i=0;i<4;i++)
fgets(y[i],a[i],fp);
fclose(fp);
for(i=0;i<4;i++)
printf("%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.读下面程序并回答问题。
#include"stdio.h"
voidmain()
{
chars[50]="de123116abc5656";
inti,b[10]={0},cnt=0;
for(i=0;s[i]!
='\0';i++)
{
if(s[i]>='0'&&s[i]<='9')
b[s[i]-'0']++;
elsecnt++;
}
printf("%d\n",cnt);
for(i=0;i<10;i++)
printf("%d",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.读下面程序,回答问题。
#include"stdio.h"
intfun(int*a,intn)
{
if(n>1)return*a+fun(a+1,n-1);
else
return*a;
}
voidmain()
{
inta[10]={1,2,3,4,5,6,7,8,9,10},s;
s=fun(a+3,3);
printf("%d\n",s);
}
(1)函数fun与下面非递归程序等价的是(A)。
37(A)intfun(int*a,intn)(B)intfun(int*a,intn)
{{
inti,s=0;inti,s=0;
for(i=0;is=s+a[i];s=s+*a;
returns;returns;
}}
(C)intfun(int*a,intn)(D)intfun(int*a,intn)
{{
inti,s=0;inti,s=0;
for(i=0;is=a[i];s=s+a[n-i];
reutrns;returns;
}}
(2)程序的输出结果为(C)。
38(A)55(B)12(C)15(D)18
8.读下面程序,回答问题。
#include"stdio.h"
voidsort(inta[],intn)
{
inti,j,t;
for(i=0;ifor(j=0;j
if(a[j]>a[i])
{t=a[j];a[j]=a[i];a[i]=t;}
}
voidmain()
{
intx[10]={1,0,-76,4,8,12,65,100,-45,123};
inti;
sort(x+5,5);
printf("%d",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。
请填空。
#include"stdio.h"
#defineN20
intfun(char*str,charch,int*bb)
{
inti=0,n=0;
while(*str)
{
if(str[i]==ch)
bb[n++]=i;
str++;
i++;
}
returnn;
}
voidmain()
{
charstr[N],ch;
intbb[N]={0},i,n;
printf("\nInputtheoriginalstring:
");
gets(str);
printf("\nInputcharacter:
");
scanf("%c",&ch);
n=fun(str,ch,bb);
printf("\nThenumberofcharacteris:
%d\n",n);
printf("\nThesuffixofcharacter:
");
for(i=0;iprintf("%d",bb[i]);
}
2.已知head指向单链表的第一个结点,以下程序调用函数print输出这一单链表。
请填空。
#include"stdio.h"
#include
#defineLensizeof(structstudent)
structstudent
{
intdata;
structstudent*next;
};
structstudent*creat()
{
......
return(head);
}
print(structstudent*head)
{
structstudent*p;
printf("\nThelinklistis:
");
p=head;
if(head=!
NULL)
while(p->next!
=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("%d",p->data);
}
voidmain()
{
structstudent*head;
head=creat();
print(head);
}
3.下列程序的功能是:
假设a数组中的数,按由小到大的顺序存放。
将数组a中相邻相同的数删得只剩一下,然后以每行5个数的形式输出a数组中的数。
请填空。
#include"stdio.h"
#defineMAX20
voidmain()
{
inta[MAX],i,j,n;
for(i=0;iscanf("%d",a+i);
n=i=MAX-1;
while(i)
{
if(a[i]==a[i-1])
{
for(j=i;j<=n;j++)
a[j-1]=a[j];
n=n-1;
}
i=i-1;
}
for(i=0;i<=n;i++)
{
if(i%5==0)
printf(“\n”);
printf("%3d",a[i]);
}
printf("\n");
}
4.函数fun的功能是:
求S=1×2+2×3+3×4+…+n×(n+1)的和,S的值作为函数值返回。
在main函数中输入n的值,调用fun函数,并输出最后的结果。
请填空。
#include"stdio.h"
longfun(intn)
{
inti;
longs=0;
for(i=1;i<=n;i++)
s=s+i*(i+1);
returns;
}
voidmain()
{
intn;
longs;
printf("Inputn:
\n");
scanf("%d",&n);
s=fun(n);
printf("s=%ld\n",s);
}
5.函数fun的功能是:
将10到99之间的每位数字的乘积大于每位数字的和的整数放入形参数组a中,数组a的个数作为函数值返回。
例如:
整数23:
2*3>2+3,所以23满足条件,应存入数组a中。
在main函数中,调用fun函数,并按一行5个整数进行输出。
请填空。
#include"stdio.h"
intfun(int*a)
{
inti=0,n,k,s,m;
for(n=10;n<100;n++)
{
k=1;
s=0;
m=n;
printf("k=%d\n",k);
while(m!
=0)
{
k=k*(m%10);
s=s+m%10;
m=m/10;
}
printf("n=%d,k=%d,s=%d\n",n,k,s);
if(k>s)
{
a[i]=n;
i++;
}
}
returni;
}
voidmain()
{
inta[100],n,i;
n=fun(a);
for(i=0;i{
printf("%4d",a[i]);
if((i+1)%5==0)printf("\n");
}
}