C语言22次.docx
《C语言22次.docx》由会员分享,可在线阅读,更多相关《C语言22次.docx(19页珍藏版)》请在冰豆网上搜索。
C语言22次
四川省普通高等学校计算机应用知识和能力
第二十二次等级考试
二级(C与C++语言)笔试试卷
时间:
2005年4月16日
上午9:
00—11:
00
第一部分
软件技术基础
(共15分)
一、是非判断题(每小题1分,共10分)
(判断下列各题是否正确,如正确,在客观答题纸上对应编号选A,否则选B)
1.C++语言中所定义的类实际上也是一种数据类型。
(1)
2.数据结构的表示包括数据逻辑结构和存储结构两方面的表示。
(2)
3.冒泡排序算法是一种只能实现升序排序,而不能实现降序排序的排序算法。
(3)
4.线性表采用链式存储时,结点的存储地址必须是连续的。
(4)
5.栈顶的位置是随着进栈和退栈操作而变化的。
(5)
6.在软件生存期内,软件必须进行维护,维护不会产生副作用。
(6)
7.采用动态重定位进行地址转换,允许程序在执行过程中在内在中移动。
而静态重定位则不可以。
(7)
8.在软件的需要分析阶段,要直接面向用户,主要考虑用户的经济承受能力和费用的支付问题。
(8)
9.需求分析阶段的主要任务应由系统分析员主持完成。
(9)
10.操作系统是最重要的系统软件。
(10)
二、选择题(每小题1分,共5分)
1.以下特征中哪个不是算法的特征(11)。
11(A)可行性(B)确定性(C)有穷性(D)唯一性
2.在多道程序设计系统中,处于后备状态的作业要经过(12)调度后才能真正执行。
12(A)作业调度(B)作业调度和进程调度
(C)进程调度(D)作业调度和设备调度
3.为解决CPU和I/O设备之间速度匹配问题,常采用“缓冲区”方法。
“缓冲区”的结构多为(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.下列程序运行的结果是(16)
#include
voidswap(intx,inty)
{x^=y;y^=x;x^=y;}
main()
{
inta=010,b=1;
swap(a,b);
printf("%d,%d\n",a,b);
}
16(A)10,1(B)8,1(C)1,8(D)1,10
2.有以下程序
#include
#include
main()
{
char*p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf("%s%s",p,q);
printf("%s,%s",p,q);
}
若输入:
abcdef<回车>,则输出为(17)。
17(A)def,def(B)abc,def(C)abc,d(D)d,d
3.下列程序的输出是(18)。
#include
voidmain()
{
inta=-1,b=4,k;
k=(a++<=0)&&(!
(b--<=0));
cout<}
18(A)003(B)103(C)112(D)012
4.关于类概念的描述中,(19)是错误的。
19(A)类就是C语言中的结构体类型
(B)类是创建对象的样板
(C)类是具有共同行为的若干对象的统一描述体
(D)类是抽象数据类型的实现
5.下列程序的运行结果是(20)。
#include
main()
{
voidfu();
fu();
fu();
}
voidfu()
{
staticinta=0;
printf("a=%d,",!
a?
1:
8);
}
20(A)a=8,a=8,(B)a=1,a=8(C)a=8,a=1,(D)a=1,a=1,
6.以下程序中,输出值是(21)。
#include
#defineM3
#defineNM+1
#defineNNN*N/2
main()
{
printf("%d\n",NN);
}
21(A)3(B)4(C)6(D)8
7.若有语句:
chars1[]="string1",s2[8],*s3,*s4="string2";则(22)是对库函数strcpy的错误调用。
22(A)strcpy(s1,"string2");(B)strcpy(s4,"string1");
(C)strcpy(s3,"string1");(D)strcpy("string2",s2);
8.以下(23)为不正确的if语句。
23(A)if(x>y);(B)if(x==y)x+=y;
(C)if(x!
=y)x=x*xelsex+=1;(D)if(x9.关于C++函数参数的描述中,错误的是(24)。
24(A)实参个数与形参个数可以不同
(B)缺省参数必须放在形参表的最右端
(C)用引用变量作形参可以实现地址传递
(D)重载函数可以有缺省参数
10.若有如下定义:
structnode
{
intdata;
structnode*next;
}
且已建立下面的链表结构,指针p,q分别指向图中所示结点,则不能将q所指结点插入链表末尾的一组语句是(25)。
head……
25(A)q->next=NULL;p=p->next;p->next=q;(B)p=p->next;q->next=p->next;p->next=q;
(C)p=p->next;q->next=p;p->next=q;(D)p=(*p).next;(*q).next=(*p).next;(*p).next=q;
二、读程序回答问题(每个选择3分,共45分)
1.下列程序运行的结果为(26)。
#include
#include
voidfun(char*s,intm)
{
chart,*p1,*p2;
p1=s;
p2=s+m-1;
while(p1{t=*p1++;*p1=*p2--;*p2=t;}
}
main()
{
chara[]="ABCDEFG";
fun(a,strlen(a));
puts(a);
}
26(A)GFEDCBA(B)AGADAGA
(C)GAGGAGA(D)AGAAGAG
2.读下列C程序,选择正确的输出结果。
#include
#include
voidfun(charstr[][10],intn)
{
chart[20];
inti,j;
for(i=0;ifor(j=i+1;jif(strlen(str[i]){
strcpy(t,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],t);
}
}
main()
{
charstr[][10]={"abc","aabcd","abed","a","acdefg"};
inti;
fun(str,5);
for(i=0;i<5;i++)
printf("%2d",strlen(str[i]));
printf("\n");
for(i=0;i<5;i++)
puts(str[i]);
}
(1)main函数中,第一个for循环的输出结果为:
(27)。
27(A)65431(B)13456
(C)76542(D)24567
(2)main函数中,第二个for循环的输出结果为:
(28)。
28(A)abc(B)a(C)acdefg(D)a
aabcdabcaabcdabc
abedabedabedaabcd
aaabcdabcabed
acdefgacdefgaaabcd
3.以下是一个C++程序,读程序并回答问题。
#include
intfun(intu,intv)
{
inttemp;
while(v!
=0)
{
temp=u%v;
u=v;
v=temp;
}
returnu;
}
voidmain()
{
intu,v;
intt;
cout<<"Inputtwointegers:
";
cin>>u>>v;
t=fun(u,v);
cout<cout<
}
若从键盘中输入1015;回答下列两个问题:
(1)第一条输出语句的输出结果为(29)。
29(A)5(B)10(C)15(D)30
(2)第二条输出语句的输出结果为(30)。
30(A)5(B)10(C)15(D)30
4.以下程序的运行结果是(31)。
#include
chang(char*c,intfg)
{
if(*c=='')
return1;
elseif(fg&&*c<='z'&&*c>='a')
*c+='A'-'a';
return0;
}
main()
{
intflag=1;
charch;
do
{
ch=getchar();
flag=chang(&ch,flag);
putchar(ch);
}while(ch!
='\n');
}
程序运行时,从第一列开始输入以下字符,代表换行符。
Thisisabook!
31(A)tHISISABOOK!
(B)thisIsABook!
(C)ThisIsABook!
(D)ThisIsaBook!
5.以下程序的运行结果是(32):
#include
main()
{
inta=1,b=2,c=3;
a++;
c+=b;
{
intb=4,c;
c=2*b;
a+=c;
printf("%d,%d,%d,",a,b,c);
}
printf("%d,%d,%d\n",a,b,c);
}
32(A)10,4,8,10,2,5(B)6,2,4,6,2,4(C)10,4,8,10,2,8(D)9,4,8,2,2,5
6.以下程序的输出是(33)。
#include
main()
{
intx=1,y=0,a=0,b=0;
switch(x)
{
case1:
switch(y)
{
case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
case3:
a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
33(A)a=1,b=0(B)a=2,b=1(C)a=1,b=1(D)a=2,b=2
7.若有以下程序段:
inta[]={4,0,2,3,1},k,j,t;
for(j=1;j<5;j++)
{
t=a[j];
k=j-1;
while(k>=0&&t>a[k])
{a[k+1]=a[k];k--;}
a[k+1]=t;
}
则该程序段的功能是(34)。
34(A)对数组a进行插入排序(升序)
(B)对数组a进行插入排序(降序)
(C)对数组a进行选择排序(升序)
(D)对数组a进行选择排序(降序)
8.选择下面程序运行的结果。
#include
intm[3][3]={{1},{2},{3}};
intn[3][3]={1,2,3};
main()
{
printf("%d\n",m[1][0]+n[0][0]);
printf("%d\n",m[0][1]+n[1][0]);
}
第1条printf语句行输出的结果是(35)。
35(A)0(B)1(C)2(D)3
第2条printf语句行输出的结果是(36)。
36(A)0(B)1(C)2(D)3
9.选择下面程序运行的结果(设int占2个字节)
#include
main()
{
structdate
{
intyear,month,day;
}today;
union
{
longi;
intk;
charc;
}mix;
printf("date=%d\n",sizeof(structdate));
printf("mix=%d\n",sizeof(mix));
}
第1条printf语句行输出的结果为(37)。
37(A)date=2(B)date=4(C)date=6(D)前3个答案都是错误的
第2条printf语句行输出的结果为(38)。
38(A)mix=2(B)mix=4(C)mix=6(D)前3个答案都是错误的
10.读下面程序,程序的命名为MyCopy.c。
/*---------MyCopy.c---------*/
#include
main(intargc,char*argv[])
{
if(argc!
=3)
printf("\nFormat:
MyCopy\n");
else
{
FILE*source,*desine;
source=fopen(argv[1],"rb");
desine=fopen(argv[2],"wb");
if(source==NULL)
printf("ERROR:
Can'topensourcefile%s!
\n",argv[1]);
elseif(desine==NULL)
printf("ERROR:
Can'topensourcefile%s!
\n",argv[2]);
else
{
while(!
feof(source))
fputc(fgetc(source),desine);
}
fclose(source);
fclose(desine);
}
}
(1)程序的功能是(39)。
40(A)将磁盘文件的信息显示在屏幕上
(B)将一个磁盘文件复制到另一个磁盘文件中
(C)将两个磁盘文件合并
(D)以上答案都不对
(2)当编译、连接后,在命令行键入:
MyCopyFILE1FILE2<回车>,则程序将实现(40)。
41(A)将FILE1的信息显示在屏幕上
(B)将FILE1和FILE2合并
(C)将一个FILE2复制到FILE1中
(D)将一个FILE1复制到FILE2中
注意:
①请把下面“程序填空”中各小题答案写在主观题答题纸上
②每一个空只填一个语句或一个语句所缺的部分内容
三、程序填空(每空2分,共30分)
1.以下程序的功能是将磁盘文件a.dat中的10个整数读入并进行升序排序。
#include
voidsort(int*p,intn)
{
inti,j,t;
for(i=0;ifor(j=i+1;jif(①)
{t=p[i];p[i]=p[j];p[j]=t;}
}
main()
{
inta[10],i;
FILE*fp;
fp=fopen("a.dat","r");
for(i=0;i<10;i++)
②;
fclose(fp);
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
③;
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
2.下列程序用递归算法实现,输入任意一个整数,在各数位之间插入空格后输出。
#include
main()
{
longintn;
voidfunc(long);
scanf("%ld",&n);
①;
}
voidfunc(②)
{
if(m>=0)
③;
printf("%d",m%10);
}
3.程序功能:
有10个数按升序放在一个数组中,输入一个数,要求用折半查找该数是数组中的第几个元素,如果该数不在数组中,打印出“NO”。
折半查找法:
设数组长度为n,则将输入的数m与a[n/2]比较,若ma[n/2],则将a[n/2]到a[n]的数继续折半进行查找。
#include
main()
{
inta[10]={12,32,45,62,71,76,80,85,90,95};
intnum,bott,top,mid;
printf("Inputanumber:
\n");
scanf("%d",&num);
bott=0;
top=9;
while(bott<=top)
{
mid=①;
if(num==a[mid])
{printf("%disthe%dnumber\n",num,mid+1);break;}
elseif(numelsebott=mid+1;
}
if(③)printf("No\n");
}
4.有两个字符串str1和str2,将str1和str2对应字符中ASCII码值较大者存入字符数组str3的对应位置,若str1和str2长度不一致,则将较长字符串中剩余字符直接连接到str3的末尾。
例如:
str1存放字符串"abaxef",str2存放字符串"bac",则str3中的字符串为"bbcxef"。
#include
#include
main()
{
inti;
charstr[80],str2[80],str3[80]="";
char*p1,*p2;
p1=str1;p2=str2;
gets(str1);gets(str2);
for(i=0;①;i++)
{
if(*(p1+i)>*(p2+i))str3[i]=*(p1+i);
elsestr3[i]=*(p2+i);
}
if(②)strcat(str3,p1+i);
else③;
printf("Result:
%s\n",str3);
}
5.下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。
#include
voidmain()
{
inti,s,k,count=0;
for(i=100;i<=1000;i++)
{
s=0;
k=i;
while(①)
{
s=s+k%10;
k=②;
}
if(s!
=5)③;
elsecount++;
}
printf("total=%d\n",count);
}