C笔试33次doc.docx
《C笔试33次doc.docx》由会员分享,可在线阅读,更多相关《C笔试33次doc.docx(17页珍藏版)》请在冰豆网上搜索。
![C笔试33次doc.docx](https://file1.bdocx.com/fileroot1/2023-2/25/d3f50447-67b6-4df6-b420-6ad8cfdc9180/d3f50447-67b6-4df6-b420-6ad8cfdc91801.gif)
C笔试33次doc
四川省普通高等学校计算机应用知识和能力
第三十三次等级考试
二级(C与C++语言)笔试试卷
时间:
2010年10月23日
上午9:
00—11:
00
第一部分
软件技术基础
(共15分)
一、是非判断题(每小题1分,共10分)
(判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B)
1.栈是一种先进先出的线性表,只能采用顺序存储结构。
(1)
2.从循环链表中任意一个结点出发都能访问到整个链表。
(2)
3.为了便于对单链表实现结点的插入、删除操作,通常增设一个表头结点。
(3)
4.队列在操作系统的各种资源请求排队及数据缓冲区管理中广泛使用。
(4)
5.死锁产生的根本原因是操作系统能够提供的资源比请求该资源的进程数少。
(5)
6.虚拟设备技术能将独占设备转换为可共享的设备,提高资源利用率。
(6)
7.进程控制块是进程存在的唯一标志。
(7)
8.软件维护是长期的过程,交付使用的软件仍然需要排错、修改和扩充。
(8)
9.墨盒测试要求测试人员根据程序内部逻辑结构设计或选择测试用例。
(9)
10.软件设计时,应力求增加模块的内聚,减少模块间的耦合。
(10)
二、选择题(每小题1分,共5分)
1.如果进栈序列为1、2、3、4,则可能的出栈序列是(11)。
11(A)3、1、4、2(B)2、4、3、1(C)3、4、1、2(D)任意顺序
2.已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,则它的前序遍历序列是(12)。
12(A)acbed(B)decab(C)deabc(D)cedba
3.下列的进程状态变化中,(13)变化是不可能发生的。
13(A)运行就绪(B)运行等待(C)等待运行(D)等待就绪
4.很好地解决了碎片问题的存储管理方法是(14)。
14(A)页式存储管理(B)段式存储管理(C)可变分区管理(D)多重分区管理
5.在软件生命周期中,所花费用最多的阶段是(15)。
15(A)详细设计(B)软件编码(C)软件测试(D)软件维护
第二部分
C与C++语言程序设计
(共85分)
一、单项选择题(每小题1分,共10分)
1.已知inti=10;表达式"5<=i<=10"的值是(16)。
(考点:
关系运算表达式)
16(A)0(B)1(C)10(D)没有正确答案
2.求取满足式12+22+32+……+n2≤1000的n,正确的语句是(17)。
(考点:
循环结构)
17(A)for(i=1,s=0;(s=s+i*i)<=1000;n=i++);
(B)for(i=1,s=0;(s=s+i*i)<=1000;n=++i);
(C)for(i=1,s=0;(s=s+i*++i)<=1000;n=i);
(D)for(i=1,s=0;(s=s+i*i++)<=1000;n=i);
3.以下叙述中正确的是(18)。
(考点:
循环语法)
18(A)C语言中所有的循环语句都是先判断条件再执行循环体
(B)break语句只能中断循环
(C)continue语句可以结束所有的循环
(D)C语言中,任意表达式都可作为循环条件,只要能做出0和非0的判断即可
4.设有以下定义:
structnode
{
intdata;
structnode*next;
}*p;
则以下的语句中正确的是(19)。
(考点:
结构体指针、动态分配存储空间函数)
19(A)p=malloc(sizeof(structnode))(B)p=(structnode*)malloc(sizeof(structnode))
(C)*p=(structnode*)malloc(4)(D)p=(structnode)malloc(sizeof(structnode))
5.运行以下程序的输出结果为(20)。
(考点:
枚举类型)
#include
voidmain()
{
enumcolor{Black=1,Red,Blue,Green};
enumcolorc1,c2;
c1=Red;c2=Blue;
printf("%d,%d\n",c1,c2);
}
20(A)2,3(B)1,2(C)1,1(D)0,-1
6.若变量x和y都为int类型,x=100,y=200,下面程序段的输出结果是(21)。
(考点:
逗号运算)
printf("%d",(x,y));
21(A)200(B)100(C)100200(D)输出不确定的值
7.以下程序的输出结果是(22)。
(考点:
带参数的宏)
#include
#definef(x)x*x
voidmain()
{
inta=6,b=2,c;
c=f(a+b)/f(a-b);
printf("%d\n",c);
}
22(A)-2.5(B)-2(C)64(D)4
8.C语言中fscanf函数的正确调用形式是(考点:
文件)
23(A)fscanf(文件指针,格式字符串,输出列表);
(B)fscanf(格式字符串,输出列表,文件指针);
(C)fscanf(格式字符串,文件指针,输入列表);
(D)fscanf(文件指针,格式字符串,输入列表);
9.设有定义:
inta=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是(24)。
(考点:
if语句)
24(A)if(a>b)c=a,a=b,b=c;(B)if(a>b){c=a,a=b,b=c;}
(C)if(a>b)c=a;a=b;b=c;(D)if(a>b){c=a;a=b;b=c;}
10.以下选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是(25)。
(考点:
switch语句)
25(A)switch(a)(B)switch(a==1)
{case1:
a=b;break;{case0:
a=b;break;
default:
a++;case1:
a++;
}}
(C)switch(a)(D)switch(a==1)
{default:
a++;break;{case1:
a=b;break;
case1:
a=b;case0:
a++;
}}
二、读程序回答问题(每个选择3分,共45分)
1.有如下程序:
(考点:
函数、变量的作用域)
#include
intk=1;
voidfun(intm)
{
m+=k;k+=m;
{
chark='D';
printf("\n%d",k-'C');/*①*/
}
}
voidmain()
{
inti=4;
fun(i);
printf("\n%d,%d",i,k);/*② */
}
①处输出结果为(26)。
26(A)2(B)1(C)3(D)A、B、C参考答案都不对
②处输出结果为(27)。
27(A)4,1(B)5,6(C)4,6(D)A、B、C参考答案都不对
2.有如下程序(考点:
函数、字符数组)
#include
voidfun(char*s)
{
inti;charc;
c=s[0];
for(i=1;s[i]!
='\0';i++)
s[i-1]=s[i];
s[i-1]=c;
}
voidmain()
{
chars[10]="abcdefg";
inti;
for(i=1;i<=3;i++)
fun(s);
puts(s);
}
函数fun的功能是(28)。
28(A)左移一个字符,并将第一个字符放到字符串末尾
(B)右移一个字符,并将最后一个字符放到字符串开头
(C)删除第一个字符(D)删除最后一个字符
程序的运行结果是(29)。
29(A)bcdefga(B)defgabc(C)efgabcd(D)bcdefg
3.有下列程序(考点:
递归函数)
#include
voidfun(intn)
{intm;m=n/10;
if(m!
=0)fun(m);
putchar(n%10+'0');
}
voidmain()
{intn;
scanf("%d",&n);
if(n<0)
{putchar('-');
n=-n;
}
fun(n);
}
若输入整数-1234,请回答下面两个问题:
函数fun的调用次数为(30)。
30(A)5(B)4(C)3(D)2
程序的输出结果为(31)。
31(A)4321(B)1234(C)-4321(D)-1234
4.有下列程序(考点:
函数(地址参数)、指针运算)
#include
voidfun1(int*x,int*y)
{int*z;
z=x;x=y;y=z;
}
voidfun2(int*x,int*y)
{intz;
z=*x;*x=*y;*y=z;
(*x)++;(*y)++;
}
voidmain()
{inta=5,b=9;
fun1(&a,&b);
printf("a=%d,b=%d\n",a,b);
fun2(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
main函数中第一个printf输出结果为(32)。
32(A)a=9,b=5(B)a=5,b=9(C)a=10,b=6(D)a=6,b=10
main函数中第二个printf输出结果为(33)。
33(A)a=9,b=5(B)a=5,b=9(C)a=10,b=6(D)a=6,b=10
5.有如下程序(设其文件名为2-5.c)(考点:
命令行参数)
#include
voidmain(intargc,char*argv[])
{inti;char*p;
printf("%d\n",argc);
if(argc>2)p=argv[1];
puts(p+1);
}
若运行该程序时,在命令提示符后输入('↙'表示回车换行符):
2-5file1file2file3↙
则执行printf("%d\n",argc);时,输出结果为(34)。
34(A)1(B)2(C)3(D)4
执行puts(p+1);时,输出结果为(35)。
35(A)file1(B)file2(C)ile1(D)ile2
6.有下列程序(考点:
字符数组、函数(地址参数))
#include
#include
longfun(charstr[])
{inti;longs=0,t;
for(i=0;str[i]!
='\0';i++)
{t=0;
while(str[i]>='0'&&str[i]<='9')
{t=t*10+str[i]-'0';i++;}
s=s+t;
}
returns;
}
voidmain()
{
charstring[]="Welcome123To456Sichuan789";
longlen;
len=fun(string);
printf("%ld\n",len);
}
(1)程序运行的输出结果为(36)
36(A)123456789(B)9(C)1368(D)450
(2)该程序的功能是(37)
37(A)取出字符串中的数字子串连接起来
(B)统计数字子串在字符串中出现的次数
(C)将数字了串转换为整数并累加
(D)将字符串中的数字字符转换为数字,结果加起来乘以10
7.有如下程序:
(考点:
字符数组、循环、switch语句)
#include
voidmain()
{staticchars[]="SSSWiLTECH1\11W\1WALLMP1";
intj;
charch;
for(j=2;(ch=s[j])!
='\0';j++)
{switch(ch)
{
case'A':
putchar('a');continue;
case'1':
break;
case1:
while((ch=s[++j])!
='\n'&&ch!
='\0');
case9:
putchar('#');
case'E':
case'L':
continue;
default:
putchar(ch);continue;
}
putchar('*');
}
printf("\n");
}
①程序的运行结果是(38)。
38(A)SWiTCH*#(B)SSSWiTCH*#
(C)SWiTCH*#W#(D)SSSWiLTECHWWALLMP
②字符串"SSSWiLTECH1\11W\1WALLMP1"中的“\1”是(39)。
39(A)字符1(B)十制制数值1(C)两个字符(D)八进制数值1
8.在下面程序中,若file.dat文件中原有内容为:
abc,则运行程序后file.dat文件中的内容为(40)。
(考点:
文件打开方式)
#include
voidmain()
{FILE*fp;
fp=fopen("file.dat","w");
fprintf(fp,"def");
fclose(fp);
}
40(A)abcdef(B)abc(C)def(D)NULL
注意:
①请把下面“程序填空”中各小题答案写在主观题答题纸上
②每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空(每空2分,共30分)
1.下面程序的功能是按学生的姓名(假设没有重名)查询其成绩排名和平均成绩。
查询可以连续进行,直到输入0时查询结束。
请填空。
(考点:
结构体类型,顺序查找算法)
#include
#include
#defineNUM4
structstud
{intcode;
char*name;
floatscore;
};
structstudstu[]={2,"liuying",85.5,3,"wangyong",79.6,
4,"ligang",92.5,1,"tianling",88.2};
voidmain()
{charstr[10];
inti;
do
{prnitf("Enteraname:
");
scanf("%s",str);
for(i=0;iif(strcmp(①,str)==0)
{printf("Name:
%s\n",stu[i].name);
printf("Code:
%3d\n",stu[i].code);
printf("Average:
%5.1f\n",sut[i].score);
②;
}
if(③)printf("Notfound.\n");
}while(strcmp(str,"0")!
=0);
}
2.函数fun的功能是:
求出无符号十进制数n中包含0的个数,及各位数字的最大值。
最大值通过函数值返回,0的个数通过形参指针zero带回。
在main函数中输入n的值,调用fun函数并输出结果。
例如:
n=300800,则0的个数为4,各位数字的最大值为8。
请填空。
(考点:
求最值、整数的分解算法)
#include
intfun(unsignedintn,int*zero)
{intcnt=0,max=0,t;
while(n!
=0)
{t=①;
if(t==0)cnt++;
if(maxn=n/10;
}
②=cnt;
returnmax;
}
voidmain()
{unsignedintn;
intzero,max;
printf("Inputn:
");
scanf("%u",&n);
max=fun(③);
printf("max=%d,zero=%d\n",max,zero);
}
3.以下程序的功能是把从键盘输入的字符依次存放在文件test.txt中,但是要过滤掉其中的数字字符,在输入字符‘%’并回车作为结束标志。
请填空。
(考点:
文件、字符串)
#include
voidmain()
{FILE*fp;
charch;
charfname[12]="test.txt";
if((fp=fopen(fname,"w"))==①)
printf("Fileopenerror!
\n");
else
{printf("Pleaseentercharacters:
\n");
while((ch=getchar())!
='%')
if(ch>='0'&&ch<='9')
②;
else
fputc(ch,③);
fclose(fp);
}
}
4.以下程序是建立一个带头结点的单向链表,并用随机函数为各个结点赋值。
函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
请填空。
(考点:
单链表)
#include
#include
typedefstructaa
{intdata;
structaa*next;
}NODE;
intfun(NODE*h)
{intsum=0;
①;
p=②;
while(p)
{if(p->data%2==0)
sum+=p->data;
p=③;
}
returnsum;
}
NODE*creatlink(intn)
{NODE*h,*p,*s;
inti;
h=p=(NODE*)malloc(sizeof(NODE));
for(i=1;i<=n;i++)
{s=(NODE*)malloc(sizeof(NODE));
s->data=rand()%16;
s->next=p->next;
p->next=s;
p=p->next;
}
p->next=NULL;
returnh;
}
outlink(NODE*h)
{NODE*p;
p=h->next;
while(p)
{printf("->%d",p->data);
p=p->next;
}
}
voidmain()
{NODE*head;
inteven;
head=creatlink(12);
head->data=9000;
outlink(head);
even=fun(head);
printf("\nThesumofevennumbers:
%d\n",even);
}
5.程序的功能是计算
,其中,m与n为两个正整数。
请在程序中编号处填写适当的表达式,使程序得出正确的结果。
(考点:
循环、阶乘算法)
#include
intfun(intx)
{longs=1;
inti;
for(i=1;i<=x;i++)
①;
return②;
}
voidmain()
{intm=12,n=8;
printf("P=%f\n",1.0*fun(m)/fun(n)/③);
}