C语言22次笔试题含答案Word格式.docx
《C语言22次笔试题含答案Word格式.docx》由会员分享,可在线阅读,更多相关《C语言22次笔试题含答案Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
#include<
stdio.h>
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<
malloc.h>
char*p,*q;
p=(char*)malloc(sizeof(char)*20);
q=p;
scanf("
%s%s"
p,q);
%s,%s"
若输入:
abcdef<
回车>
,则输出为(17)。
17(A)def,def(B)abc,def(C)abc,d(D)d,d
3.下列程序的输出是(18)。
iostream.h>
voidmain()
inta=-1,b=4,k;
k=(a++<
=0)&
&
(!
(b--<
=0));
cout<
<
k<
a<
b<
endl;
18(A)003(B)103(C)112(D)012
4.关于类概念的描述中,(19)是错误的。
19(A)类就是C语言中的结构体类型
(B)类是创建对象的样板
(C)类是具有共同行为的若干对象的统一描述体
(D)类是抽象数据类型的实现
5.下列程序的运行结果是(20)。
voidfu();
fu();
voidfu()
staticinta=0;
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)。
#defineM3
#defineNM+1
#defineNNN*N/2
%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,"
);
(B)strcpy(s4,"
(C)strcpy(s3,"
(D)strcpy("
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(x<
y){x++;
y++;
9.关于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->
q->
next=p->
(C)p=p->
next=p;
(D)p=(*p).next;
(*q).next=(*p).next;
(*p).next=q;
二、读程序回答问题(每个选择3分,共45分)
1.下列程序运行的结果为(26)。
string.h>
voidfun(char*s,intm)
chart,*p1,*p2;
p1=s;
p2=s+m-1;
while(p1<
p2)
{t=*p1++;
*p1=*p2--;
*p2=t;
chara[]="
ABCDEFG"
fun(a,strlen(a));
puts(a);
}
26(A)GFEDCBA(B)AGADAGA
(C)GAGGAGA(D)AGAAGAG
2.读下列C程序,选择正确的输出结果。
voidfun(charstr[][10],intn)
chart[20];
inti,j;
for(i=0;
i<
n-1;
i++)
for(j=i+1;
j<
n;
j++)
if(strlen(str[i])<
strlen(str[j]))
{
strcpy(t,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],t);
charstr[][10]={"
abc"
"
aabcd"
abed"
a"
acdefg"
};
inti;
fun(str,5);
5;
%2d"
strlen(str[i]));
\n"
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++程序,读程序并回答问题。
intfun(intu,intv)
inttemp;
while(v!
=0)
temp=u%v;
u=v;
v=temp;
returnu;
intu,v;
intt;
"
Inputtwointegers:
cin>
>
u>
v;
t=fun(u,v);
t<
u*v/t<
若从键盘中输入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)。
chang(char*c,intfg)
if(*c=='
'
)
return1;
elseif(fg&
*c<
='
z'
&
*c>
a'
)
*c+='
A'
-'
return0;
intflag=1;
charch;
do
ch=getchar();
flag=chang(&
ch,flag);
putchar(ch);
}while(ch!
\n'
程序运行时,从第一列开始输入以下字符,<
CR>
代表换行符。
Thisisabook!
31(A)tHISISABOOK!
(B)thisIsABook!
(C)ThisIsABook!
(D)ThisIsaBook!
5.以下程序的运行结果是(32):
inta=1,b=2,c=3;
a++;
c+=b;
intb=4,c;
c=2*b;
a+=c;
%d,%d,%d,"
a,b,c);
%d,%d,%d\n"
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)。
intx=1,y=0,a=0,b=0;
switch(x)
case1:
switch(y)
case0:
break;
b++;
}
case2:
break;
case3:
b++;
a=%d,b=%d\n"
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;
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.选择下面程序运行的结果。
intm[3][3]={{1},{2},{3}};
intn[3][3]={1,2,3};
m[1][0]+n[0][0]);
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个字节)
structdate
intyear,month,day;
}today;
union
longi;
intk;
charc;
}mix;
date=%d\n"
sizeof(structdate));
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---------*/
main(intargc,char*argv[])
if(argc!
=3)
\nFormat:
MyCopy<
source_file>
<
desine_file>
else
FILE*source,*desine;
source=fopen(argv[1],"
rb"
desine=fopen(argv[2],"
wb"
if(source==NULL)
ERROR:
Can'
topensourcefile%s!
argv[1]);
elseif(desine==NULL)
argv[2]);
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个整数读入并进行升序排序。
voidsort(int*p,intn)
inti,j,t;
n,j++)
if(①)
{t=p[i];
p[i]=p[j];
p[j]=t;
inta[10],i;
FILE*fp;
fp=fopen("
a.dat"
r"
10;
②;
fclose(fp);
%d"
a[i]);
③;
2.下列程序用递归算法实现,输入任意一个整数,在各数位之间插入空格后输出。
longintn;
voidfunc(long);
%ld"
&
n);
①;
voidfunc(②)
if(m>
%d"
m%10);
3.程序功能:
有10个数按升序放在一个数组中,输入一个数,要求用折半查找该数是数组中的第几个元素,如果该数不在数组中,打印出“NO”。
折半查找法:
设数组长度为n,则将输入的数m与a[n/2]比较,若m<
a[n/2],则将a[0]到a[n/2]继续折半进行查找;
若m=a[n/2],则表示找到该数的位置;
若m>
a[n/2],则将a[n/2]到a[n]的数继续折半进行查找。
inta[10]={12,32,45,62,71,76,80,85,90,95};
intnum,bott,top,mid;
Inputanumber:
%d"
num);
bott=0;
top=9;
while(bott<
=top)
mid=①;
if(num==a[mid])
{printf("
%disthe%dnumber\n"
num,mid+1);
elseif(num<
a[mid])②;
elsebott=mid+1;
if(③)printf("
No\n"
4.有两个字符串str1和str2,将str1和str2对应字符中ASCII码值较大者存入字符数组str3的对应位置,若str1和str2长度不一致,则将较长字符串中剩余字符直接连接到str3的末尾。
例如:
str1存放字符串"
abaxef"
,str2存放字符串"
bac"
,则str3中的字符串为"
bbcxef"
。
charstr[80],str2[80],str3[80]="
"
char*p1,*p2;
p1=str1;
p2=str2;
gets(str1);
gets(str2);
①;
if(*(p1+i)>
*(p2+i))str3[i]=*(p1+i);
elsestr3[i]=*(p2+i);
if(②)strcat(str3,p1+i);
else③;
Result:
%s\n"
str3);
5.下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5。
inti,s,k,count=0;
for(i=100;
=1000;
s=0;
k=i;
while(①)
s=s+k%10;
k=②;
if(s!
=5)③;
elsecount++;
total=%d\n"
count);
(参考答案)
第一部分软件技术基础
一、是非判断题(正确选填A,错误选填B)(每小题1分,共10分)
1~10:
A、A、B、B、A、B、B、B、A、A
二、单项选择题:
(每小题1分,共5分)
1~5:
D、C、D、C、D
第二部分C与C++语言程序设计
一、单项选择题(每小题1分,共10分)
1、B2、A3、B4、A5、D
6、C7、D8、C9、D10、C
二、读程序题(每个选择3分,共45分)
1、D2、
(1)A
(2)C3、
(1)A
(2)D
4、C5、A6、B
7、B8、
(1)D
(2)A9、
(1)C
(2)B
10、
(1)B
(2)D
三、程序填空题(每空2分,共30分)
1、①p[i]>
p[j]②fscanf(fp,"
a[i])③sort(a,10)
2、①func(n)②longm③func(m/10)
3、①(bott+top)/2②top=mid-1③bott>
top
4、①str1[i]!
='
\0'
str2[i]!
②strlen(str1)>
strlen(str2)③strcat(str3,p2+i)
5、①k>
0②k/10③continue