全国计算机二级C语言笔试模拟363.docx
- 文档编号:16050851
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:31
- 大小:43.91KB
全国计算机二级C语言笔试模拟363.docx
《全国计算机二级C语言笔试模拟363.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言笔试模拟363.docx(31页珍藏版)》请在冰点文库上搜索。
全国计算机二级C语言笔试模拟363
二级C语言笔试模拟363
一、选择题
下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。
1.在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为。
A.63
B.64
C.6
D.7
答案:
B
[解答]对有序线性表进行顺序查找,首先用被查找的数据和线性表的第一个数据元素进行比较,若相等,则查找成功;否则,继续进行比较,即和线性表的第二个数据元素进行比较。
同样,若相等,则查找成功;否则,继续进行比较。
依次类推,直到在线性表中查找到该数据或查找到线性表的最后一个元素,算法才结束。
因此,在长度为64的有序线性表中进行顺序查找,最坏的情况下需要比较64次。
2.下列叙述中正确的是。
A.一个算法的空间复杂度大,则其时间复杂度也必定大
B.一个算法的空间复杂度大,则其时间复杂度必定小
C.一个算法的时间复杂度大,则其空间复杂度必定小
D.上述三种说法都不对
答案:
D
[解答]时间复杂度是指一个算法执行时间的相对度量;空间复杂度是指算法在运行过程中临时占用所需存储空间大小的度量。
人们都希望选择一个既省存储空间、又省执行时间的算法。
然而,有时为了加快算法的运行速度,不得不增加空间开销;有时为了能有效地存储算法和数据,又不得不牺牲运行时间。
时间和空间的效率往往是一对矛盾,很难做到两全。
但是,这不适用于所有的情况,也就是说时间复杂度和空间复杂度之间虽然经常矛盾,但是二者不存在必然的联系。
因此,选项A)、B)、C)的说法都是错误的。
故本题的正确答案是D)。
3.下列描述中正确的是。
A.软件工程只是解决软件项目的管理问题
B.软件工程主要解决软件产品的生产率问题
C.软件工程的主要思想是强调在软件开发过程中需要应用工程化原则
D.软件工程只是解决软件开发中的技术问题
答案:
C
[解答]软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科,所谓软件工程是指,采用工程的概念、原理、技术和方法指导软件的开发与维护。
软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。
由此可见,选项A)、选项B)和选项D)的说法均不正确,选项C)正确。
4.下列叙述中正确的是。
A.软件测试应该由程序开发者来完成
B.程序经调试后一般不需要再测试
C.软件维护只包括对程序代码的维护
D.以上三种说法都不对
答案:
D
[解答]因为-测试的目的在于发现错误,从心理学角度讲,由程序的编写者自己进行测试是不合适的,为了达到最好的测试效果,应该由独立的第三方进行测试工作,所以选项A)错误;程序调试,修改一个错误的同时可能引入了新的错误,解决的办法是在修改了错误之后,必须进行回归测试,所以选项B)错误;所谓软件维护,就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程,可见选项C)也是错误的。
5.数据流程图(DFD图)是。
A.软件概要设计的工具
B.软件详细设计的工具
C.结构化方法的需求分析工具
D.面向对象方法的需求分析工具
答案:
C
[解答]常见的需求分析方法有:
结构化分析方法和面向对象的分析方法。
结构化分析就是使用数据流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明的目标文档。
6.下面不属于软件工程的3个要素的是。
A.工具
B.过程
C.方法
D.环境
答案:
D
[解答]软件工程包括3个要素,即方法、工具和过程。
7.下列叙述中错误的是。
A.在数据库系统中,数据的物理结构必须与逻辑结构一致
B.数据库技术的根本目标是要解决数据的共享问题
C.数据库设计是指在已有数据库管理系统的基础上建立数据库
D.数据库系统需要操作系统的支持
答案:
A
[解答]本题考查数据库系统的基本概念和知识。
数据的逻辑结构,是数据间关系的描述,它只抽象地反映数据元素之间的逻辑关系,而不管其在计算机中的存储方式。
数据的存储结构,又叫物理结构,是逻辑结构在计算机存储器里的实现。
这两者之间没有必然的联系。
因此,选项A)的说法是错误的。
数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。
因此,数据库具有为各种用户所共享的特点。
不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。
数据库的根本目标是要解决数据的共享问题。
因此,选项B)的说法正确。
8.对于现实世界中事物的特征,在窦体一联系模型中使用。
A.属性描述
B.关键字描述
C.二维表格描述
D.实体描述
答案:
A
[解答]本题考查对实体一联系模型的理解和掌握。
在实体一联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为,因此正确答案为选项A)。
9.数据独立性是数据库技术的重要特点之一。
所谓数据独立性是指。
A.数据与程序独立存放
B.不同的数据被存放在不同的文件中
C.不同的数据只能被对应的应用程序所使用
D.以上三种说法都不对
答案:
D
[解答]数据具有两方面的独立性:
一是物理独立性,即由于数据的存储结构与逻辑结构之间由系统提供映象,使得当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改;二是逻辑独立性,即由于数据的局部逻辑结构(它是总体逻辑结构的一个子集,由具体的应用程序所确定,并且根据具体的需要可以作一定的修改)与总体逻辑结构之间也由系统提供映象,使得当总体逻辑结构改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。
综上所述,本题的正确答案是D)。
10.设有如下三个关系表:
下列操作中正确的是。
A.T=R∩S
B.T=R∪S
C.T=R×S
D.T=R/S
答案:
B
[解答]两个相同结构关系的“并”是由属于这两个关系的元组组成的集合。
11.用C语言编写的代码程序。
A.可立即执行
B.是一个源程序
C.经过编译即可执行
D.经过编译解释即可执行
答案:
B
[解答]本题考核的知识点是C程序的基本概念。
C语言是一种高级语言,C语言源程序经过C语言编译程序编译之后,生成一个后缀为.obj的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此obj文件与C语言提供的各种库函数连接在一起,生成一个后缀exe的可执行文件。
显然C语言不能立即执行,故选项A)错误;根据以上定义,选项C)和选项D)错误,所以,4个选项中选项B)符合题意。
12.以下选项中不能作为C语言合法常量的是。
A)'cd'B)0.1e+6C)"\a"D)'\011'
答案:
A
[解答]本题考查的是C语言的常量。
0.1e+6是实型常量的指数形式,代表0.1×10的6次方,所以选项B)是合法的;"\a"是合法的字符串常量,\a是一个非打印的转义字符表示响铃,所以选项C)是合法的;'\011'是一个字符常量,\011是一个用3位八进制表示的转义字符,所以选项D)也是合法的。
在C语言中,字符常量是用单引号括起来的一个字符,选项A)中的'cd'包含了2个字符,所以是不正确的。
13.以下不能定义为用户标识符是。
A.Main
B.0
C.int
D.sizeof
答案:
D
[解答]本题考查的是C语言中的标识符与关键字。
合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。
另外,C语言规定了一批关键字,它们在程序中都代表着固定的含义,不能另作他用,所以合法的标识符也不能是C语言的任一关键字。
本题中,选项A)、B)、C)都符合上述条件,只有选项D)sizeof是C语言中的关键字,所以,4个选项中选项D)符合题意。
14.若变量均已正确定义并赋值,以下合法的C语言赋值语句是。
A)x=y=5;B)x=n%2.5;C)x+n=i;D)x=5=4+1;
答案:
A
[解答]本题考查的知识点是:
赋值语句、“%”运算符。
赋值语句由两个运算分量和一个赋值运算符组成。
赋值运算符包括“=”、“+=”、“+=”等。
其中,赋值运算符左侧的运算分量称为左值,右侧的叫右值。
任何合法表达式都可用做右值,但临时值、常量不能用做左值。
“%”运算符的作用是求模,意思是做除法求余,这就要求两个运算分量均为整数。
选项B)中,2.5不是整数,故非法;选项C)中,表达式X+n计算后得到的是一临时值,临时值不能做左值,故非法;选项D)中,由于“=”运算符的结合性是“从右到左”,故先计算5=4+1,5是常量不能对其赋值,故非法。
15.以下叙述中错误的是。
A.gets函数用于从终端读入字符串
B.getchar函数用于从磁盘文件读入字符
C.fputs函数用于把字符串输出到文件
D.fwrite函数用于以二进制形式输出数据到文件
答案:
B
[解答]本题主要考查的是输入输出函数。
从终端输入的函数有:
scanf、getchar、gets。
输出到屏幕的函数有:
printf、putchar、puts。
从磁盘文件输入的函数有:
fscanf、fgetc、fgets、fread、getc。
输出到磁盘文件的函数有:
fprintf、fputc、fputs、fwrite、putc。
由此可见,选项B)的说法是错误的。
16.以下关于long、int和short类型数据占用内存大小的叙述中正确的是。
A.均占4个字节
B.根据数据的大小来决定所占内存的字节数
C.由用户自己定义
D.由C语言编译系统决定
答案:
D
[解答]在C语言的标准中,short占2个字节、long占4个字节,但int的大小和编译系统相关。
例如在TurboC2.0中,int占2个字节,但在VisualC++6.0(VC6可以用做C语言编译器)中占4个字节。
故本题应该选择D)。
17.在以下给出的表达式中,与while(E)中的(E)不等价的表达式是。
A.(!
E=0)
B.(E>0||E<0)
C.(E==0)
D.(E!
=0)
答案:
C
[解答]本题考查的是逻辑表达式。
在C语言中,整型值可以转换为逻辑值,规则是当整型值为0时,它表示逻辑假;当整型值不为O时,它表示逻辑真。
所以题目中的while(E)循环是当E等于0时,循环结束,E不等于0时,继续循环。
选项C)中,当E等于0时,表达式“E==0”为真继续循环,而E不等于0时,表达式为假则循环结束,这与题目中的条件不等价,故应该选择C)。
18.下列叙述中正确的是。
A.break语句只能用于switch语句
B.在switch语句中必须使用default
C.break语句必须与switch语句中的case配对使用
D.在switch语句中,不一定使用break语句
答案:
D
[解答]本题主要考查switch语句的概念。
break语句除了能用于switch语句外,还可以用于循环语句中,因此选项A)不正确。
在switch语句中,可以使用default来执行所有case均失配时的分支,也可以不使用default,此时若所有case均失配则跳出switch,因此选项B)不正确。
在switch语句中,每个case的作用就是标出一个执行的起点,当符合某个case时,程序就从该case所标出的起点处开始执行,若没有break语句中断执行的话,程序会一直执行到switch的最后一条语句,而不是碰到下一个break才停止执行,所以C)不正确。
19.有以下程序:
#include
voidWriteStr(char*fn,char*str)
{FILE*fp;
fp=fopen(fn,"w");
fputs(str.fp);
fclose(fp);
}
main()
{WriteStr("t1.dat","start");
WriteStr("t1.dat","end");
}
程序运行后,文件t1.dat中的内容是。
A.start
B.end
C.startend
D.endrt
答案:
B
[解答]本题考查的是文件操作。
题中“fopen(fn,"w")”的作用是打开fn所指向的文件,使用文件方式为“写入”;“fputs(str,fp)”的作用是将字符str的值输出到fp所指向的文件中去。
在程序中,两次使用“写入”的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所以此次写入的数据覆盖了文件原有的数据,故本题中t1.dat的内容为end。
故本题答案为B)。
20.有以下程序:
#include
main()
{inti=5;
do
{if(i%3==1)
if(i%S==2)
[printf("*%d",i);break;]
i++;
}while(i!
=0);
printf("\n");
}
程序的运行结果是。
A.*7
B.*3*5
C.*5
D.*2*6
答案:
A
[解答]本题考查的是break语句。
do…while循环是“先执行,后判断”,所以无论条件如何,它都至少会执行一遍。
程序首先初始化变量i为5,然后进入do…while循环体,首先判断(i%3==1),因为5%3=2,所以if条件不满足,跳过下面的if语句,执行i++,i变为6。
第1遍循环结束,判断(i!
=0)为真,继续循环。
现在1%3=6%3=0,所以if语句还是不被执行,继续i++,i变为7,仍然满足(i!
=0),继续循环。
第3遍循环1%3=7%3=1,满足条件(i%3==1),继续判断条件i%5==2成立,即输出*7,然后执行break语句跳出循环。
21.设变量已正确定义,则以下能正确计算f=n!
的程序段是。
A.f=0;
for(i=1;i<=n;i++)f*=i;
B.f=1;
for(i=1;i<n;i++)f*=i;
C.f=1;
for(i=n;i>1;i++)f*=i;
D.f=1;
for[i=n;i>=2;i--)f*=i;
答案:
D
[解答]本题考查的是for循环的应用。
n!
表示1*2+3*…*n。
因此,for循环应该遍历1(或者2)~n的范围,而f的初始值应该为1,然后让f累乘每次循环的循环变量即可。
选项A)让f初始化为0不正确,因为0乘以任何数都为0,最后结果肯定是0;选项B)的循环变量是从1~n-1,也不对;选项C)的for循环是一个死循环;选项D)的循环从n递减到2故满足要求,所以选D)。
22.有以下程序:
main()
{inti;
for(i=1;1<=40;i++)
{if(i++%5==0)
if(++i%8==0)printf("%d",i);
}
printf("\n");
}
执行后的输出结果是。
A.5
B.24
C.32
D.40
答案:
C
[解答]本题考查了自增运算符。
自增运算符“++”分为前缀和后缀两种形式。
两种形式的作用效果是一样的,都是使运算分量的值加1,但是它们的表达式的值不一样,前缀形式表达式的值为运算分量加1之后的值,而后缀形式表达式的值为运算分量加1之前的值。
题目中使用了一个for循环,循环变量i从1递增到40。
在循环体中有两条嵌套的if语句,首先判断i++%5==0,即判断i++的值(i加1之前的值)是否能被5整除(判断后i被加1),然后再判断++i的值(i加1之后的值)是否能被8整除(判断后i被加1),若两个条件都满足了,就输出i的值,只有i=30时,满足i++%5=0,此时i=31,++i%8==0成立,此时1=32。
23.有以下程序:
main()
{chars[]="ABCD",*p;
for(p=s+1;p<s+4;p++)printf("%s\n",p);
}
程序运行后的输出结果是。
A.ABCD
BCD
CD
D
B.A
B
C
D
C.B
C
D
D.BCD
CD
D
答案:
D
[解答]本题考核的知识点是指针的应用。
本题中首先定义一个字符数组s,并将字符串“ABCD”存到数组s中,定义了一个字符指针变量p,在接下来for循环中,循环体共执行了三次,第一次p指向s[1],所以此时输出的p所指的字符串的值为BCD;第二次循环p指向s[2],所以此时输出的p所指的字符串的值为CD;第三次循环p指向s[3],因此此时输出的p所指的字符串的值为D。
所以,4个选项中选项D)符合题意。
24.有以下程序:
charfun(charx,chary)
{if(x<y)returnx;
returny;
}
main()
{inta='9',b;'8',c='7';
printf["%c\n",fun(fun(a,B),fun(b,C)));
}
程序的执行结果是。
A.函数调用出错
B.8
C.9
D.7
答案:
D
[解答]本题考核的知识点是函数的返回值以及返回值作为函数的参数。
经过分析得出函数fun()的功能是比较形参x和形参y的大小,返回较小的一个。
函数fun()有两个参数。
本题中,首先定义了三个整型变量a、b和c,分别赋初值为9、8和7。
然后执行函数fun(fun(a,b),fun(b,C))。
在该函数中分别将fun(a,b)和fun(b,c)函数的返回值作为该函数的两个实参。
在函数fun(a,b)中,由于a>b,故返回较小值b即8,在函数fun(b,C)中,由于b>c,故返回较小值c即为7,因此调用函数fun(fun(a,b),fun(b,C)),即fun(8,7),故返回较小值为7。
25.以下叙述中错误的是。
A.对于double类型数组,不可以直接用数组名对数组进行整体输入或输出
B.数组名代表的是数组所占存储区的首地址,其值不可改变
C.当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息
D.可以通过赋初值的方式确定数组元素的个数
答案:
C
[解答]本题考查的是数组的基本概念。
在C语言中,除字符数组外,一个数组不能通过数组名对数组进行整体引用,因此选项A)是对的。
数组名中存放的是一个地址常量,它代表整个数组的首地址,因此选项B)是对的。
C语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项C)是错误的。
C语言规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小,因此选项D)也是正确的。
所以,4个选项中选项C)符合题意。
26.有以下程序:
voidswap(char*x,char*y)
{chart;
t=*x;*x=*y;*y=t;
}
main()
{char*s1="abc",*s2="123";
swap(s1,s2);printf("%s,%s\n",s1,s2);
}
程序执行后的输出结果是。
A.123,abc
B.abc,123
C.1bc,a23
D.321,cba
答案:
C
[解答]本题考查的是指针的运用。
首先看swap()函数,函数中定义了一个临时字符变量C,然后将形参指针x所指内容存入t,再将形参指针y所指内容存入到x所指内容中,最后将临时变量t的内容存入到y所指内容中。
所以该函数实现的是:
交换两个字符指针所指向的内容。
在主函数中,首先定义了两个字符指针s1和s2,同时用字符串“abc”和“123”来初始化它们,此时它们指向的是两个字符串的第1个字符。
所以,在调用完swap()函数后,彼此交换了两个字符串的第1个字符,最后输出结果为1bc,a23。
故应该选择C)。
27.设有以下定义和语句:
inta[3][2]={1,2,3,4,5,6},*p[3];
p[0]=a[1];
则*(p[0]+1)所代表的数组元素是。
A.a[0][1]
B.a[1][0]
C.a[1][1]
D.a[1][2]
答案:
C
[解答]本题考核的知识点是二维数组的定义和指针数组的基本概念。
本题中首先定义了一个3行2列的数组a,一个长度为3的指针数组p,接着把地址a[1]赋给p[0]此时p[0]为a[1][0]的地址,p[0]+1为a[1][1]的地址,故+(p[0]+1)代表的元素为a[1][1]。
所以,4个选项中选项C)符合题意。
28.有以下程序;
main()
{infa[]=[2,4,6,8,10],y=0,x,*p;
p=&a[1];
for(x=1;x<3;x++)
y+=p[x];
printf("%d\n",y);
}
程序运行后的输出结果是。
A.10
B.11
C.14
D.15
答案:
C
[解答]本题考查的是指针的运用。
题目首先申请了一个整型数组a,并让一个指针变量p指向数组的元素a[1]。
然后使用一个for循环,循环变量x从1递增到2,即循环两次。
在循环体中每次让y累加p[x]的值,而p[x]写成指针形式就是+(p+x)。
所以两次y加的值分别是a[2]和a[3]的值,故最终输出6+8=14。
应该选择C)。
29.以下能正确定义一维数组的选项是。
A.inta[5]=[0,1,2,3,4,5];
B.inta[]={0,1,2,3,4,5};
C.chara=('A','B','C');
D.inta[5]="0123";
答案:
B
[解答]本题考查的是一维数组的定义及初始化。
定义并初始化一维数组的一般形式如下:
类型名数组名[常量表达式]={初始化列表};
当使用初始化列表初始化数组时,需要注意以下几点:
初始化列表项的个数必须小于等于常量表达式的值,因此选项A)是错误的;常量表达式可以省略,但不能省略其外面的中括号,因此选项C)是错误的;当类型名为char时,(初始化列表]可以用一个字符串常量来代替,由于字符串常量必须以'\0'结尾,所以此时的初始化列表项的个数是字符串常量的长度加1,选项D)的类型是int,不能使用字符串常量初始化,所以D)错误。
30.以下数组定义中错误的是。
A.intx[][3]=[0];
B.intx[2][3]={[1,2],[3,4],[5,6]};
C.infx[][3]={[1,2,3],[4,5,6)};
D.intx[2][3]={1,2,3,4,5,6};
答案:
B
[解答]本题考核的知识点是二维数组的定义及初始化。
在定义一个二维数组同时初始化时,其第一维的长度可以省略。
二维数组的初始化列表可以只使用一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国计算机 二级 语言 笔试 模拟 363