计算机等级考试二级C语言考前密卷[3]
一、选择题((1)-(10)每题2分,(11)-(50)每题1分,共60分)
下列问题A)、B)、C)、D)四个选项中只有一个是正确的。请在答题卡的相应位置涂上正确的选项。
(1)算法的时间复杂度是指_ _ _ _ _ _ _ _。
A)执行算法程序所需的时间
B)算法程序的长度
C)算法执行过程中所需的基本运算次数
D)算法程序中的指令数
答案:C
注释:所谓算法的时间复杂度,
(2)下列说法中,正确的是_ _ _ _ _ _ _ _ _。
A)线性表是线性结构b)栈和队列是非线性结构
C)线性链表是非线性结构d)二叉树是线性结构
答案:A
点评:一般来说,数据结构分为线性结构和非线性结构两种。线性表、栈和队列、线性链表都是线性结构,而二叉树是非线性的。
(3)下列关于完全二叉树的说法中,错误的是_ _ _ _ _ _ _ _ _ _ _。
A)除了最后一层,每层的节点数都达到了值
B)可能有部分左右叶节点缺失
C)完全二叉树一般不是完全二叉树
D)有节点的完全二叉树的深度是[log2n]+1
答:B完全二叉树是指除了最后一层,每层的节点数都达到了值,并且只有少数子节点(叶节点)在
(4)结构化程序设计主要强调_ _ _ _ _ _ _。
A)程序的规模B)程序的可读性
c)程序的执行效率D)程序的可移植性
答案:B
点评:结构化程序设计主要强调结构化程序清晰易读,具有良好的可理解性。程序员可以逐步提炼、证明、测试程序,保证程序的正确性。
(5)在软件生命周期中,能够准确确定一个软件系统必须做什么,必须具备什么功能的阶段是_ _ _ _ _ _ _ _。
A)概要设计B)详细设计C)可行性分析D)需求分析
回答:D
评估:需求分析是对要开发的软件进行需求分析并给出详细的定义,即准确确定软件系统的功能。编写软件规范和初步用户手册,并提交审查。
(6)数据流图用于抽象地描述软件的逻辑模型。数据流图由一些特定的图标组成。以下图标名称标识的图标是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
A)控制流B)处理C)数据存储D)源和池
答:A
点评:数据流图从数据传输和处理的角度描绘了数据流从输入到输出的移动和转换过程。数据流图中的主要图形元素有:处理(转换)、数据流、存储文件(数据源)、源和池。
(7)一般来说, 软件需求分析应该确定用户的_ _ _ _ _ _ _ _ _ _ _ _ _ _系统
A)功能需求B)非功能需求C)性能需求D)功能需求和非功能需求
回答:D
评价:在软件需求分析中,需要构建一个完整的系统逻辑模型,理解每个功能和性能需求是用户的任务。 因此,需求分析应该确定用户对软件的功能性需求和非功能性需求。
(8)下列关于数据库系统的说法正确的是_ _ _ _ _ _ _ _ _。
A)数据库系统减少数据冗余
B)数据库系统避免所有冗余
C)
数据库系统中数据的一致性是指数据类型的一致性
D)数据库系统可以比文件系统管理更多的数据
答案:A [/br数据的一致性是指相同数据的不同出现在系统中应该保持相同的值。9)关系表中的每一行称为一个_ _ _ _ _ _ _ _。
A)元组b)字段c)属性d)代码
答案:A
点评:在关系数据库中,关系模型是用二维表来表示的,简称“表”。二维表由表框架和表元组组成。在表框架中,数据可以按行存储,每一行数据称为元组。
(10)数据库设计包括两个方面,分别是_ _ _ _ _ _ _ _ _。
A)概念设计和逻辑设计B)模式设计和内部模式设计
C)内部模式设计和物理设计D)结构和行为设计
答:A
评价:数据库设计可分为概念设计和逻辑设计。该概念的目的是分析数据之间的内在语义关系,并在此基础上构建数据的抽象模型。逻辑设计的主要工作是将ER图转换成RDBMS中指定的关系模型。
(11)请阅读程序:
# include
main()
{
int a;浮动b,c;
scanf("%2d%3P%4f ',&a,&b,& c);
printf("\na=%d,b=%ec .%f\n ",a,b,c);
}
如果在运行时从键盘输入9876543210l,上述程序的输出结果是_ _ _ _ _ _ _ _ _。
a) a = 98,b = 765,c = 4321
b) a = 10,b = 432,c = 8765
c) a = 98,b = 765.00000,c第3、4、5位存储在单精度实变量B中,第6、7、8、9位存储在单精度实变量c中,用户输入的第10位被scanf()放弃。此时变量A,B,C的值分别为:98,765.00000,4321.0000。
(12)一个好的算法由以下基本结构组成,但不包括_ _ _ _ _ _ _ _ _ _ _ _ _ _。
A)序列结构B)选择结构C)循环结构D)跳转结构
回答:D
点评:1966年,Bohra和Jacopini提出了以下三种基本结构,作为基本单位来表示一个好的算法:1 .序列结构;2.选择结构;3.圆形结构。
(13)请选择下列程序的输出结果_ _ _ _ _ _ _ _ _。
#include
sub(x,y,z)
int x,y,* z:
{ * z = y-x;}
main(){
int a,b,c;
sub(10,5,& a);第(7,a和b)款;sub(a、b和c);
printf("%d,%d,%d\n ",a,b,c);
}
A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7
答案:B
注释:sub即A和Z指向同一个存储单元。函数执行后,A的值随*z变化,所以调用这个函数后,A的值为y-x=-5。同样,sub(7,a,&b)之后,B的值发生变化,其值为-5-7=-12。在sub (A,&B)
(14)中,屏幕上以下程序的输出是_ _ _ _ _ _ _ _ _。
main()
{
printf(" ab \ b \ b c ");
}
A)ab \ B \ B C B)A C C)ABC d)ab C
答案:B
备注:C语言中允许使用特殊形式的字符常量,,它是以“\”开头的字符序列。这样的字符称为are的常见转义字符:\ n,换行符;\ t,横向制表;\ b,退格;\ r,请输入。
(15)如果x是整型变量,pb是指针变量,其基类型是整型,那么正确的赋值表达式是_ _ _ _ _ _ _ _。
A)Pb = & x;b)Pb = x;c)* Pb = & x;D)*pb=*x
答案:A
注释:选项A将变量X的地址赋给指针变量pb,使pb指向X,'选项B将X的值赋给指针pb作为地址,Db指向一个地址等于X的内存单元;选项c将x的地址分配给存储单元,该存储单元的地址等于指针pb指向的x。
(16)设整数i=5,则printf ("%d ",i+++I);的输出是_ _ _ _ _ _ _ _。
A)10 B)1l C)12 D)语法错误
回答:D
点评:C语言中有基本的算术运算符(+、*、/),包括自增自减运算符(++、-),在C语言解析表达式时总是进行。
(17)使用下面的程序片段将指针变量P指向一个存储整数变量的动态存储单元
int * P;
p = _ _ _ _ _ _ _ _ _ _ _ _ _ _ malloc(sizeof(im));
那么应该填_ _ _ _ _ _ _ _ _。
a)int b)int c)(* int)d)(int *)
回答:D
点评:无论P指向什么类型的指针变量,都可以通过强制类型转换使其具有相同的类型,强制类型转换的格式为(数据类型+)。(18)下列程序输出的结果是_ _ _ _ _ _ _ _ _。
main()
{
int I = 5,J=9,x;
x=(I==j?I:(j = 7));
}
A)5,7 B)5,5 C)语法错误D)7,5
答案:A
注释:条件表达式的一般形式是:表达式I?表情2:表情3;首先,求解表达式1;如果为真,求解表达式2;如果表达式l的值为假,则求解表达式3。这个问题,先判断i==j,执行J = 7;然后执行x=7。所以这个题目是a.
(19)如果在执行下面的程序时从键盘输入5,
main()
{
int x:
scanf(" % d ",& x);
if(x++>5)printf("%d\n ",x);
else printf("%d\n ",x-);
}
那么输出是_ _ _ _ _ _ _ _ _。
A)7 B)6 C)5 D)4
答案:B
备注:根据C语言的语法,x++是在使用X后给X的值加1,在if语句中,X的值是5,条件不成立。在else之后执行语句,因为X的值已经
(20)如果有以下定义和语句:
int a[]={l,2,3,4,5,6,7,8,9,10},* p = a;
那么值为3的表达式就是_ _ _ _ _ _ _ _ _。
A)p+=2,*(p++) B)p+=2,*++p
C)p+=3,*p++ D)p+=2,++*p
答案:A [/br] (2)指针方法,如*(a+i)或*(p+i)。数组的下标从0开始,值为3的数组元素是a[2]。B和C的内容是a[3],D在前面加a[2],结果是4。
(21)设A,B,C都是int变量,a=3,b=4,c=5,那么在下面的表达式中,值为0的表
满足_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _。
A)'a'&&'b' B)a答案:D
评论Z选项A:' a'&&'b '是字符A和B的相位,不是0;选项B: A (22)下面的程序运行后,输出结果是_ _ _ _ _ _ _ _ _。
main()
{
char * d[].{"ab "," CDE " };
printf("%x ",d[1]);
}
A)cde B)字符C的ASCII码值
C)字符C的地址C)错误
答案:C
注释:指针数组中的每个元素都相当于一个指针变量。一维指针数组定义为:类型名+数组名[数组长度]。指针数组D在本主题的main函数中定义。它有两个元素,初始值分别是“ab”和“cde”的第一个地址。dB]的值是“cde”的第一个地址。% x将整数输出称为十六进制数。
(23)有如下程序
# include
main()
{
int * * k,*j,I = 100
j = & I;k = & j;
printf(" % d \ n " ,* * k);
}
上述程序的输出结果是_ _ _ _ _ _ _ _ _。
A)运行错误B) 100 C)i的地址D)j的地址
答案:B
注释:j=&i,J的值就是I的地址,*j=100,把J的地址赋给K,那么*k=j,那么,。
(24)有以下语句,其中对数组A的元素引用不正确的是:_ _ _ _ _ _ _(其中O≤iint a=[10]={0,1,2,3,4,5,6,7,8,9,},* p = A.
A)a[p-a] B).(&a[i]) C)p[I] D)*(*(a+i))
回答:D
点评:观察程序显示A实际上是数组A的第一个地址,所以“+(a+i)”表示数组A中的第I个元素。
(25)下面的程序出货后,输出结果是_ _ _ _ _ _ _ _。
main()
{
int a[2][3]= { 1,3,5,7,9,1 1},*s[2],**pp,* p;
s[0]=a[0],s[1]= a[1];
PP = s;
p =(int *)malloc(sizeof(int));
* * PP = s[1][1];
p = * PP;
printf("%d\n ",* p);
}
A)lb)7c)9d)1l
答案:C
备注:S是一个有两个元素的指针数组,pp是指针变量的指针,s[O]是二维数组A行下标为0的元素的第一个地址,即A . PP的值为s[O]的地址。* * PP = S[1][L]后,a[0][0]的值会赋给all[L]的值,执行P = * PP之后p将是s[0]的值,最后一条输出语句将输出地址s[0]所指向的数据,即a[0][O]。(8)下列关于数据库系统的说法正确的是_ _ _ _ _ _。
A)数据库系统减少数据冗余
B)数据库系统避免所有冗余
C)数据库系统中的数据一致性是指数据类型的一致性
D)数据库系统可以比文件系统管理更多的数据
答案:A
点评:按数据来说,数据的一致性是指相同数据的不同出现在系统中应该保持相同的值。
(9)关系表中的每一行称为一个_ _ _ _ _ _ _ _ _。
A)元组b)字段c)属性d)代码
答案:A
点评:在关系数据库中,关系模型是用二维表来表示的,简称“表”。二维表由表框架和表元组组成。在表框架中,数据可以按行存储,每一行数据称为元组。
(10)数据库设计包括两个方面,分别是_ _ _ _ _ _ _ _ _。
A)概念设计和逻辑设计B)模式设计和内部模式设计
C)内部模式设计和物理设计D)结构和行为设计
答:A
评价:数据库设计可分为概念设计和逻辑设计。该概念的目的是分析数据之间的内在语义关系,并在此基础上构建数据的抽象模型。逻辑设计的主要工作是将ER图转换成RDBMS中指定的关系模型。
(11)请阅读程序:
# include
main()
{
int a;浮动b,c;
scanf("%2d%3P%4f ',&a,&b,& c);
printf("\na=%d,b=%ec .%f\n ",a,b,c);
}
如果在运行时从键盘输入9876543210l,上述程序的输出结果是_ _ _ _ _ _ _ _ _。
a) a = 98,b = 765,c = 4321
b) a = 10,b = 432,c = 8765
c) a = 98,b = 765.00000,c第3、4、5位存储在单精度实变量B中,第6、7、8、9位存储在单精度实变量c中,用户输入的第10位被scanf()放弃。此时变量A,B,C的值分别为:98,765.0 00000,4321.00000。
(12)一个好的算法由以下基本结构组成,但不包括_ _ _ _ _ _ _ _ _ _ _ _ _ _。
A)序列结构B)选择结构C)循环结构D)跳转结构
回答:D
点评:1966年,Bohra和Jacopini提出了以下三种基本结构,作为基本单位来表示一个好的算法:1 .序列结构;2.选择结构;3.圆形结构。
(13)请选择下列程序的输出结果_ _ _ _ _ _ _ _ _。
#include
sub(x,y,z)
int x,y,* z:
{ * z = y-x;}
main(){
int a,b,c;
sub(10,5,& a);第(7,a和b)款;sub(a、b和c);
printf("%d,%d,%d\n ",a,b,c);
}
A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7
答案:B
注释:sub即A和Z指向同一个存储单元。函数执行后,A的值随*z变化,所以调用这个函数后,A的值为y-x=-5。同样,sub(7,a,&b)之后,B的值发生变化,其值为-5-7=-12。在sub (A,&B)
(22)中,运行以下程序后,输出结果是_ _ _ _ _ _ _ _ _。
main()
{
char * d[].{"ab "," CDE " };
printf("%x ",d[1]);
}
A)cde B)字符C的ASCII码值
C)字符C的地址C)错误
答案:C
注释:指针数组中的每个元素都相当于一个指针变量。一维指针数组定义为:类型名+数组名[数组长度]。指针数组D在本主题的main函数中定义。它有两个元素,初始值分别是“ab”和“cde”的第一个地址。dB]的值是“cde”的第一个地址。% x将整数输出称为十六进制数。(23)它有如下程序
# include
main()
{
int * * k,*j,i = 100
j = & I;k = & j;
printf(" % d \ n " ,* * k);
}
上述程序的输出结果是_ _ _ _ _ _ _ _ _。
A)运行错误B) 100 C)i的地址D)j的地址
答案:B
注释:j=&i,J的值就是I的地址,*j=100,把J的地址赋给K,那么*k=j,那么,。
(24)有以下语句,其中对数组A的元素引用不正确的是:_ _ _ _ _ _ _(其中O≤iint a=[10]={0,1,2,3,4,5,6,7,8,9,},* p = A.
A)a[p-a] B).(&a[i]) C)p[I] D)*(*(a+i))
回答:D
注释:观察程序显示A实际上是数组A的第一个地址,所以“+(a+i)”表示数组A中的第I个元素。
(25)下面的程序运行后,输出结果是_ _ _ _ _ _ _ _。
main()
{
int a[2][3]= { 1,3,5,7,9,1 1},*s[2],**pp,* p;
s[0]=a[0],s[1]= a[1];
PP = s;
p =(int *)malloc(sizeof(int));
* * PP = s[1][1];
p = * PP;
printf("%d\n ",* p);
}
A)lb)7c)9d)1l
答案:C
备注:S是一个有两个元素的指针数组,pp是指针变量的指针,s[O]是二维数组A行下标为0的元素的第一个地址,即A . PP的值为s[O]的地址。* * PP = S[1][L]后,a[0][0]的值会赋给all[L]的值,执行P = * PP之后p将是s[0]的值,最后一条输出语句将输出地址s[0]所指向的数据,即a[0][O]。
0条评论