全国计算机等级《二级C语言程序设计》终极押密卷1整理版Word格式.docx
《全国计算机等级《二级C语言程序设计》终极押密卷1整理版Word格式.docx》由会员分享,可在线阅读,更多相关《全国计算机等级《二级C语言程序设计》终极押密卷1整理版Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
![全国计算机等级《二级C语言程序设计》终极押密卷1整理版Word格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/b80fcb93-7e43-4930-963c-086c44c5f861/b80fcb93-7e43-4930-963c-086c44c5f8611.gif)
main( )
{.
while(getchar( )!
='
\n'
}
以下叙述中正确的是( C )。
A.此while语句将无限循环
B.getchar( )不可以出现在while语句的条件表达式中
C.当执行此while语句时,只有按回车键程序才能继续执行
D.当执行此while语句时,按任意键程序就能继续执行
主要是考查while和getchar函数,getchar函数是输入字符函数,while是循环语句,所以当输入的字符为换行符时将执行
7若有定义“intb[8],*p=b;
”,则p+6表示( B )。
A.数组元素b[6]的值B.数组元素b[6]的地址
C.数组元素b[7]的地址D.数组元素b[0]的值加上6
指针中存放的是变量的地址,指针也可以进行增减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。
所以题中p+6指的是将指针向后移动了6个存储单元,即指向b[6],存放的是b[6]的地址。
8以下程序段中,与语句“k—a>
b?
(b>
c?
1:
O):
0;
”功能相同的是( A )。
A.if(a>
b)&
c)k=1;
elsek=0;
B.if((a>
b)‖(b>
c))k=1;
C.if(a<
=b)k=0;
elseif(b>
D.if(a>
b)k=1;
elseif(b<
=c)k=1;
elsek=0:
本题考查了双重三目运算符的用法。
例如:
表达式a>
c:
d可以看成,当a>
b时取C的值,否则取d的值。
在本题中k=a>
0):
0可以看做:
当b>
c时为真,则k=a>
0。
当b<
c时则k=a>
0:
也就是说,当a>
b并且b>
C时,k=1,否则k=0。
所以A选项符合题意。
9有以下程序:
structord
{intX,y;
)dt[2]={1,2,3,4};
{
structord*p=dt;
printf("
%d,"
,++(p->
x));
%d\n"
y));
程序运行后的输出结果是( D )。
A.1,2B.4,1C.3,4D.2,3
p一>
x的值为1,++(p->
x)作用是取p->
x的值加1作为表达式的值即值为2,同理++(p->
y)的值为3。
所以选D。
10设有定义:
“struct{charmarkp[l2];
intnuml;
doublenum2;
}tl,t2;
”,若变量均已正确赋初值,则以下语句中错误的是( C )。
A.t1=t2;
B.t2.num1=tl.numl;
C.t2.mark=tl.mark;
D.t2.num2=tl.num2;
结构体不能通过结构体名字整体赋值,通过结构体名.成员名的方式赋值。
所以C选项错
11若有定义语句:
“intx=10;
”,则表达式x-=x+x的值为( B )。
A.-20B.-l0C.0D.10
表达式x-=x+X可以写成x=x-(x+x),所以X的值为-l0。
12有下列程序:
intfun(intx[],intn)
{staticintsum=0,i;
for(i=0;
i<
n;
i++)sum+=x[i]:
returnsum;
{inta[3]={1,2,3,4,5),b[3]={6,7,8,9),s=0;
s=fun(a,5)+fun(b,4);
%d\n"
,s);
程序执行后的输出结果是( C )。
、
A.45B.50C.60D.55
在函数intfun(intx[],intn)的定义中,变量sum为一个静态局部变量。
由于在整个程序运行期间,静态局部变量在内存中的静态存储中占据着永久的存储单元。
函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和,所以在主函数中,调用函数fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用fun(b,4)后,变量sum=15+6+7+8+9=45,所以s=15+45=60。
13若有定义语句:
“intyear=2009,*p=&
year;
”,以下不能使变量year中的值增至2010的语句是( C )。
A.*p+=1;
B.(*p)++;
C.++(*p);
D.*++P
解析:
此题考查的是指针的自加,*p+=1,即为*p=*p+1,其中B和D都相等,所以答案选择C
14有以下程序
voidfun(intx)
{if(x/Z>
1)fun(x/Z);
%d"
,x);
main()
{fun(7);
\n"
程序运行后的输出结果是(D)。
A.137B.731C.73D.37
本程序主要考查递归函数。
fun(7),首先将参数代入函数,因为(7/2)>
1,所以执行f(3),依此类推直到f(1.5),(1.5/2)<
1,所以执行打印函数,此时X值为3,然后退出f(1.5),返回f(3),打印x值即7。
15右两个关系R和S如下:
则由关系R得到关系S的操作是(C )。
A.自然连接B.并C.选择D.投影
选择:
是在数据表中给予一定的条件进行筛选数据。
投影:
是把表中的某几个属性的数据选择出来。
连接:
有自然连接、外连接,内连接等,连接主要用于多表之间的数据查询。
并:
与数学中的并是一样的。
两张表进行并操作,要求它们的属性个数相同并且需要相容。
16有以下程序:
{intb[3][3]=(0,1,2,0,1,2,0,1,2},i,j,t=l;
for(i=0;
3;
i++)
for(j=1;
j<
=i;
j++)t+=b[i][b[j][i]];
printf("
,t);
程序运行后的输出结果是( C )。
A.1B.3C.4D.0
本题考查了两层for循环。
外层循环增量i的值作为内层循环执行次数的值使用。
17有以下程序
{charcl,c2;
c1='
A'
+'
8'
-'
4'
c2='
5'
;
printf("
%C,%d\n"
,cl,c2);
已知字母A的ASCIl码为65,程序运行后的输出结果是(A )。
A.E,69B.D,69C.E,DD.输出无定值
本值输出两个值,%c为输出一个字母,0/4d输出一个数字。
“A”的ASCIl码为65,再加4之后为69,也就是字母E,所以本题A正确。
18数据库设计中,用E—R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的( C)。
A.需求分析阶段B.逻辑设计阶段C.概念设计阶段D.物理设计阶段
E-R(Entity—Relationship)图为实体一联系图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。
19数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是( C )。
A.DB包含DBS和DBMSB.DBMS包含DB和DBS
C.DBS包含DB和DBMSD.没有任何关系
数据库系统DBS包括数据库DB和数据库管理系统DBMS!
!
20若有以下定义和语句:
chars[10]="
abcd!
"
,*s2="
\nl23\\"
;
Drintf("
%d%d\n"
,strlen(sl),strlen(s2));
则输出结果是( A)。
A.55B.105C.107D.58
\n和\\分别为转义字符,各占据一个字符的位置
21以下选项中表示一个合法的常量是(说明:
符号口表示空格)( B )。
A.9口9口9B.0XabC.123E0.2D.2.7e
当用指数形式表示浮点数据时,E的前后都要有数据,并且E的后面数要为整数
22有以下程序:
intf(intm)
{staticintn=0;
n+=m;
returnn;
{intn=0;
f(++n));
,f(n++));
程序运行后的输出结果是( A )。
A.1,2B.1,1C.2,3D.3,3
由题可知,输出是调用了f函数,其中有f(++n)和f(n++),其中n=0,所以输出的结果为l,2。
23有以下程序
{chara[3O],b[30];
scanf("
%S"
,a);
gets(b);
%s\n%s\\n"
,a,b);
}
程序运行时若输入:
howareyou?
Iamfine<
回车>
则输出结果是( B )。
A.howareyou?
IamfineB.howareyou?
Iamfine
C.howareyou?
IamfineD.howareyou?
此题主要考查scanf函数和gets函数的区别。
答案为B。
&
a)一遇到空格就认不出来,例如你输入hinihao则scanf只能取到hi,而若换成gets则都能去
24下列叙述中正确的是( D )。
A.可以用关系运算符比较字符串的大小
B.空字符串不占用内存,其内存空间大小是0
C.两个连续的单引号是合法的字符常量
D.两个连续的双引号是合法的字符串常量
比较两个字符串大小用函数strcomp(S,t),空字符串有结束符,所以也要占用字节,两个双引号表示的是空字符串。
25有下列程序:
{inti,j,x=0;
for(i=0,i<
2;
{x++;
for(j=0;
=3;
j++)
{if(j%2)continue;
x++:
x=%d\n"
x);
程序执行后的输出结果是(B )。
A.x=4B.x=8C.x=6D.x=12
在第1次外层for循环中,首先x++得到x=1。
进入到内层for循环,只有循环j的值为奇数时,变量x的值才自加1,所以在内层for循环执行过程中,变量x的值自加两次,当退出内层for循环时,x=3,然后执行x++,得到x=4。
在进入执行第2次外层for循环中,首先x++得到x=5。
进入到内层for循环,只有循环变量J的值为奇数时,变量X的值才自加1,所以在内层for循环执行过程中,变量X的值自加l两次,当退出内层for循环时,x=7,然后执行x++,得到x=8,所以打印输出变量x的值为8。
26有以下程序:
stdiO.h>
{FILE*fp;
intk,n,i,a[6]={1,2,3,4,5,6};
fp=fopen("
d2.dat"
,"
w"
6;
i++)fprintf(fp,"
,a[i]);
fclose(fp);
fp(i=0;
i++)fscanf(fp,"
%d%d"
,&
k,&
n);
%d\n,%d\n,k,n);
程序运行后的输出结果是(C )。
A.1,2B.3,4C.5,6D.123,456
此题是考查fprintf和fscanf,其中fprintf是向文件输出,文件为da2.dat文件,fscanf是向文件输入,所以根据程序循环写入和写出.可知答案为C。
27设x=011050,则x=x&01252的值是(A )。
A.0000001000101000
B.1111110100011001
C.0000001011100010
D.1100000000101000
本题主要考查按位与运算,x=Oll050的二进制形式为00010010000101000,Ol252的二进制形式为0000001010101010,两者相与得0000001000101000。
28设有以下语句
charchl,ch2;
scanf("
%c%C"
chl,&
ch2);
若要为变量chl和ch2分别输入字符A和B,正确的输入形式应该是( B )。
A.A和B之间用逗号间隔B.A和B之间不能有任何间隔符
C.A和B之间可以用回车间隔D.A和B之间用空格间隔
scanf输入函数中,格式控制J必须严格按照函数中的要求进行输入,在scanf("
%c%c"
,&
chl,&ch2)的格式控制语句中没有任何字符进行间隔,所以在输入时也不能使用任何字符进行间隔,所以答案选择B。
29下列叙述中正确的是(C )。
A.对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n
B.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)
C.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)
D.对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)
分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。
30某二叉树共有7个结点,其中叶子结点只有l个,则该二叉树的深度为(假设根结点在第1层)( D )。
A.3B.4C.6D.7
有一个叶子节点而节点的总个数为7,根据题意,这个二叉树的深度为7
31有以下程序
#include<
string.h>
{chara[10]=”abcd”;
%d,%d\n"
,strlen(a),sizeof(a));
程序运行后的输出结果是( B )。
A.7,4B.4,10C.8,8D.10,10
strlen是求字符串的长度,结果为4,sizeof是求数组的长度,而数据在定义时已给出长度为10
32相对于数据库系统,文件系统的主要缺陷有数据关联差、数据不一致性和( D )。
A.可重用性差B.安全性差C.非持久性D.冗余性
文件系统所管理的数据文件基本上是分散、相互独立的。
相对于数据库系统,以此为基础的数据处理存在3个缺点:
数据冗余大、数据的不一致性、程序与数据的依赖性强
33有以下程序:
#includc<
voidfun(int*p)
{printf("
,p[5]);
{inta[10]={1,2,3,4,5,6,7,8,9,10};
fun(&
a[3]);
A.5B.6C.8D.9
由题可知,fun(&
a[3])是将&
a[3]作为参数,而fun(int*p)后执行的语句为p[5],由数组a可知输出的为6。
34有以下程序:
main( )
{chars[]="
012xy\O8s34f4w2‘;
inti;
n=0;
,
s[i]!
=0;
if(s[i]>
0'
s[i]<
9'
)n++;
,n);
A.0B.3C.7D.8
考查简单的C程序数组和循环。
for循环是指i=0,如果s/[3]!
=0,则i自动加1。
if循环指的是s[i]中的元素大于等于0且小于等于9,则n加l,所以答案为B。
35软件生命周期中的活动不包括(B )。
A.软件维护B.市场调研C.软件测试D.需求分析
软件生命周期是指从软件的产生到消亡的一个过程,其中包含需求分析、软件的开发、软件测试、软件维护等阶段。
其中不包含市场调研,所以答案选择B。
36.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是(A )。
A.预定义标识符(如库函数中的函数名)可用做用户标识符,但失去原有含义
B.用户标识符可以由字母和数字任意顺序组成
C.在标识符中大写字母和小写字母被认为是相同的字符
D.关键字可用做用户标识符,但失去原有含义
用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键字不能用做用户标识符。
37以下叙述中正确的是( B )
A.在C语言程序中,main函数必须放在其他函数的最前面
B.每个后缀为C的C语言源程序都可以单独进行编译
C.在C语言程序中,只有main函数才可单独进行编译
D.每个后缀为.C的C语言源程序都应该包含一个main函数
C语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为.C的C语言源程序都可以单独进行编译。
38下列关系表达式中,结果为“假”的是( B )。
A.(3+4)>
6B.(3!
=4)>
2C.3<
=4D.E.3F.(3<
4)=1
在一个表达式中,括号的优先级高,先计算3!
=4,为真即是l,1>
2为假
39若有定义和语句:
inta,b;
%d,%d"
a,&
b);
以下选项中的输人数据,不能把值3赋给变量a、5赋给变量b的是( C )。
A.3,5,B.3,5,4C.3,5D.3,5
在输入3和5之间除逗号外不能有其他字符。
40数据库管理系统中负责数据模式定义的语言是( C)。
A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言
模式描述语言(DataDescriptionLanguage,DDL)来描述、定义的,体现、反映了数据库系统的整体观。
二、基本操作题(共18分)
41请补充main()函数,该函数的功能是:
把一个字符串中的所有小写字母字符全部转换成大写字母字符,其他字符不变,结果保存原来的字符串中。
例如,当str[M]="
abcdefl23ABCD"
,结果输出:
ABCDEFl23ABCD"
。
注意:
部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在横线上填人所编写的若干表达式或语句。
试题程序:
stdlib.h>
conio.h>
#defineM80
voidmain()
intj;
charstr[M]="
char*pf=str;
system("
CLS"
***originalstring***\n"
puts(str);
【1】
while(*(pf+j))
{
if(*(pf+j)>
a'
*(pf+j)<
Z'
)
{
*(pf+j)=【2】;
【3】;
}
else
j++;
}
****newstring****\n"
pause"
【1】j=0【2】*(pf+j)-32【3】j++
【解析】由程序中可知,变量j为字符数组的下标,其初始值为0。
因此【l】处填“j=0”;
大写字母的ASCIl码值比小写字母的4、32,要将小写字母变为大写字母,因此,【2】处填“*(pf+j)-32”;
要将字符串数组中的所有小写字母变为大写字母,需要检查其中的每一个字符,因此,【3】处填“j++”。
三、程序改错题(共24分)
42下列给定的程序中,函数proc()的功能是:
用选择法对数组中的m个元素按从小到大的顺序进行排序。
例如,排序前的数据为:
1132-5214
则排序后的数据为:
-52111432
请修改程序中的错误,使它能得到正确结果。
不要改动main()函数,不得增行或删行,也不得更改程序的结构。
#defineM20
voidproc(inta[],intn)