二级C语言222.docx
- 文档编号:26785405
- 上传时间:2023-06-22
- 格式:DOCX
- 页数:19
- 大小:24.78KB
二级C语言222.docx
《二级C语言222.docx》由会员分享,可在线阅读,更多相关《二级C语言222.docx(19页珍藏版)》请在冰豆网上搜索。
二级C语言222
二级C语言-222
(总分:
100.00,做题时间:
90分钟)
一、选择题(总题数:
40,分数:
100.00)
1.下列关于栈和队列的描述中,正确的是______。
(分数:
2.50)
A.栈是先进先出
B.队列是先进后出
C.队列允许在队头删除元素
D.栈在栈顶删除元素 √
解析:
[解析]栈实际也是线性表,只不过是一种特殊的线性表。
栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。
队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。
2.已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是______。
(分数:
2.50)
A.ABCDE
B.ECABD
C.EACDB √
D.CDEAB
解析:
[解析]由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序遍历的首个元素为E,故排除A和D选项。
由于中序遍历中,元素B在元素根结点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为B,故选项C为正确选项,即该二叉树的前序遍历序列是EACDB。
3.在数据流图中,带有箭头的线段表示的是______。
(分数:
2.50)
A.控制流
B.数据流 √
C.模块调用
D.事件驱动
解析:
[解析]数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。
4.结构化程序设计的3种结构是______。
(分数:
2.50)
A.顺序结构,分支结构,跳转结构
B.顺序结构,选择结构,循环结构 √
C.分支结构,选择结构,循环结构
D.分支结构,跳转结构,循环结构
解析:
[解析]程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。
遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。
5.下列方法中,不属于软件调试方法的是______。
(分数:
2.50)
A.回溯法
B.强行排错法
C.集成测试法 √
D.原因排除法
解析:
[解析]软件调试主要采用以下三种方法:
强行排错法:
作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。
回溯法:
该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。
原因排除法:
原因排除法是通过演绎和归纳,以及二分法来实现。
6.下列选项中,不属于模块间耦合的是______。
(分数:
2.50)
A.内容耦合
B.异构耦合 √
C.控制耦合
D.数据耦合
解析:
[解析]耦合可以分为下列几种,它们之间的耦合度由高到低排列:
内容耦合——若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。
公共耦合——若一组模块都访问同一全局数据结构,则称为公共耦合。
外部耦合——若一组模块都访问同一全局数据项,则称为外部耦合。
控制耦合——若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。
标记耦合——若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。
数据耦合——若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。
非直接耦合——若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。
7.下列特征中不是面向对象方法的主要特征的是______。
(分数:
2.50)
A.多态性
B.标识惟一性
C.封装性
D.耦合性 √
解析:
[解析]面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:
使用现实世界的概念抽象地思考问题从而自然地解决问题。
其特点包括:
标识惟一性、多态性、封装性、模块独立性、继承和多态性好。
8.在数据库设计中,将E-R图转换成关系数据模型的过程属于______。
(分数:
2.50)
A.需求分析阶段
B.概念设计阶段
C.逻辑设计阶段 √
D.物理设计阶段
解析:
[解析]逻辑结构设计的任务:
概念结构是各种数据模型的共同基础,为了能够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。
它包括从E-R图向关系模式转换和逻辑模式规范化及调整、实现。
9.在一棵二叉树上,第5层的结点数最多是______。
(分数:
2.50)
A.8
B.9
C.15
D.16 √
解析:
[解析]根据二叉树的性质:
二叉树第i(i≥1)层上至多有2i-1个结点。
得到第5层的结点数最多是16个。
10.下列有关数据库的描述,正确的是______。
(分数:
2.50)
A.数据库设计是指设计数据库管理系统
B.数据库技术的根本目标是要解决数据共享的问题 √
C.数据库是一个独立的系统,不需要操作系统的支持
D.数据库系统中,数据的物理结构必须与逻辑结构一致
解析:
[解析]数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。
数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:
提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。
11.以下关于C语言的叙述中正确的是______。
(分数:
2.50)
A.预处理命令通常位于函数体外面,但也可以位于函数体中间 √
B.C语言中的变量定义须在其他语句之前
C.在C语言程序的书写中,一个语句必须单占一行
D.一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数
解析:
[解析]源程序中可以有预处理命令(include命令仅为其中的一种)。
C语言中的变量可以在使用之前的任何位置进行定义。
C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。
一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数。
12.下列叙述中错误的是______。
(分数:
2.50)
A.用户所定义的标识符允许使用关键字 √
B.用户所定义的标识符应尽量做到“见名知意”
C.用户所定义的标识符必须以字母或下划线开头
D.用户定义的标识符中,大、小写字母代表不同标识
解析:
[解析]在C语言中,合法标识符的命名规则是:
标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。
在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。
在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。
13.下列选项中可作为C语言合法常量的是______。
(分数:
2.50)
A.-80 √
B.-080
C.-8e1.0
D.-80.0e
解析:
[解析]所谓常量是指在程序运行的过程中,其值不能被改变的量。
在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。
选项B中是以0开头,表示一个八进制数,而八进制数的取值范围是0~7,所以“-080”错误;在C语言中e后面的指数必须是整数,因此选项C和D也不正确。
14.下列定义变量的语句中错误的是______。
(分数:
2.50)
A.int_int;
B.doubleint_;
C.charFor;
D.floatUS$; √
解析:
[解析]C语言规定,变量的标识符只能由字母、数字和下划线3种字符组成,且首字符必须为字母或下划线。
在C语言中大写字母和小写字母被认为是两个不同的字符。
选项A定义的变量标识符int和选项B定义的变量标识符int与C语言的关键字int是不同的,是正确的变量标识。
选项C定义的变量标识符For与C语言中的关键字for是两个不同的标识符,所以选项C是正确的,而选项D包含有特殊字符$,因而其不符合C语言的变量命名规定。
15.下列关于函数的叙述中正确的是______。
(分数:
2.50)
A.每个函数都可以被其他函数调用(包括main函数)
B.每个函数都可以被单独编译 √
C.每个函数都可以单独运行
D.在一个函数内部可以定义另一个函数
解析:
[解析]在C语言中,函数定义是平行的,函数不能嵌套定义,即函数之间没有从属关系。
虽然函数之间可以相互调用,但main()函数不能被调用,选项A错误:
C程序从main()函数开始执行,当main()函数执行完毕时,整个程序就结束了。
C程序的执行必须从main()函数开始,选项C选项错误;函数不能嵌套定义,选项D错误。
16.当a=1、b=2、c=3、d=4时,执行下面程序段后,x的值是______。
if(a<b)
if(c<d)x=1;
else
if(a<c)
if(b<d)x=2;
elsex=3;
elsex=6;
elsex=7;
(分数:
2.50)
A.1 √
B.6
C.3
D.2
解析:
[解析]本题考查的是if-else语句。
第一个if语句,先判断条件,发现a<b条件成立,执行下面的语句。
第二个if语句,先判断条件,发现c<d条件成立,执行下面的语句x=1。
17.以下程序的输出结果是______。
#include<stdio.h>
main()
{inta=4,b=3,c=2,d=1;
printf("%d",a<b?
a:
d<c?
d:
b);
}
(分数:
2.50)
A.1 √
B.3
C.2
D.4
解析:
[解析]条件表达式的格式为:
"a?
b:
c",它的功能是:
当a为真时,表达式的值等于b的值;当a为假时,表达式的值等于c的值。
因为条件运算符的结合方向为“自右向左”。
因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件表达式,再计算左边的条件表达式。
题中应先计算“d<c?
d:
b”的“d<c”关系表达式的值,因为“d=1<c=2”为真,所以取第一个表达式的值,即d的值作为整个表达式的值。
接着计算“a<b?
a:
d”,“a=4<b=3”为假,取第二个表达式的值,即d的值作为整个表达式的值。
18.有以下程序
#include<stdio.h>
main()
{intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0;i<3;i++)
for(j=2;j>=i;j--)t+=b[i][j];
printf("%d/n",t);
}
程序运行后的输出结果是______。
(分数:
2.50)
A.4
B.3
C.8 √
D.9
解析:
[解析]这道题主要考查的是二维数组的有关知识。
在两层for循环语句中,累加上三角元素,所以程序执行的过程为“t=b[0][0]+b[0][1]+b[0][2]+b[1][1]+b[1][2]+b[2][2]=8”。
19.以下程序:
#include<stdio.h>
main()
{charstr[10];
scanf("%s",&str);
printf("%s/n",str);
}
运行上面的程序,输入字符串howareyou,则程序的执行结果是______。
(分数:
2.50)
A.how √
B.howareyou
C..h
D.howareyou
解析:
[解析]当从键盘输入“howareyou”时,由于scanf输入函数的特点是遇到空格时结束读入字符,因此,该程序只将how这3个字符送到了字符数组str中,并在其后自动加上结束符“/0”。
20.设变量x和变量y都是int类型,且x=1,y=2,则printf("%d%d",x,y,(x,y))的输出结果是______。
(分数:
2.50)
A.12 √
B.122
C.1,2
D.输出值不确定
解析:
[解析]本题考查printf函数的格式和逗号表达式。
printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出:
如果有输出项少于格式说明符,则出错,不能输出正确的结果。
本题中逗号表达式(x,y)只返回y的值。
此时格式说明的个数是2,而输出项的个数是3,因此printf函数只输出前两项。
21.以下程序的输出结果是______。
#include<stdio.h>
main()
{inta=8,b=6,m=1;
switch(a%4)
{case0:
m++;
break;
case1:
m++;
switch(b%3)
{default:
m++;
case0:
m++;break;
}
}
printf("%d/n",m);}
(分数:
2.50)
A.1
B.2 √
C.3
D.4
解析:
[解析]本题考查switch语句。
因为a=8,a%4=0,所以执行case0后面的语句,将m加1,遇到break语句跳出switch。
22.定义如下变量和数组:
inti,x[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是______。
for(i=0;i<3;i++)printf("%d",x[i][2-i]);
(分数:
2.50)
A.159
B.147
C.357 √
D.369
解析:
[解析]本题主要考查二维数组的使用。
题中利用for循环来输出x数组中的指定元素:
①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。
23.有下列程序段:
typedefstructNODE
{intnum;structNODE*next;
}OLD;
下列叙述中正确的是______。
(分数:
2.50)
A.以上的说明形式非法
B.NODE是一个结构体类型
C.OLD是一个结构体类型 √
D.OLD是一个结构体变量
解析:
[解析]C语言允许用typedef说明一种新类型名,其一般形式为:
typedef类型名标识符。
typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。
原有类型名依然有效。
此题中,用typedef定义了新的类型OLD结构,所以OLD为结构体类型。
24.下列数组定义中错误的是______。
(分数:
2.50)
A.intx[][3]={0};
B.intx[2][3]={{1,2},{3,4},{5,6}}; √
C.intx[][3]={{1,2,3},{4,5,6}};
D.intx[2][3]={1,2,3,4,5,6};
解析:
[解析]二维数组的初始化有以下几种形式:
①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。
在选项B中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列的数字进行赋初值。
所以出现了边界的越界溢出错误。
25.以下叙述错误的是______。
(分数:
2.50)
A.变量的作用域取决于变量定义语句的位置
B.全局变量可以在函数以外的任何部位进行定义
C.局部变量的作用域可用于其他函数的调用
D.一个变量说明为static存储类型是为了限制其他编译单元的引用 √
解析:
[解析]本题考查函数调用的变量作用域。
全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。
一个函数包含两部分:
函数首和函数体,函数体包括花括号内的所有语句。
26.若定义函数int*func(),则函数func的返回值为______。
(分数:
2.50)
A.一个实数
B.一个指向整型变量的指针 √
C.一个指向整型函数的指针
D.一个整型函数的入口地址
解析:
[解析]本题考查函数返回值。
fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。
27.若有定义inta[5],*p=a;则正确引用数组元素的是______。
(分数:
2.50)
A.*&a[5]
B.*a+2
C.*(p+5)
D.*(a+2) √
解析:
[解析]本题考查通过指针引用数组元素。
用指针引用数组有以下3种形式:
①“(p+n)与(a+n)”表示数组元素a[n]的地址;②“*(p+n)与*(a+n)”表示数组元素a[n];③“p[n]=*(p+n)”,都表示数组元素a[n]。
选项A、B没有这种引用形式:
选项C,“*(p+5)”是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D,“*(a+2)”引用数组的第3个元素。
28.以下对C语言中联合类型数据的正确叙述是______。
(分数:
2.50)
A.定义了联合变量后,即可引用该变量或该变量中的任意成员
B.一个联合变量中可以同时存放其所有成员
C.联合中的各个成员使用共同的存储区域 √
D.在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变
解析:
[解析]联合体的几个特点:
①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。
29.有以下函数定义:
intfun(doublea,doubleb)
{returna*b;}
若以下选项中所用变量都已正确定义并赋值,错误的函数调用是______。
(分数:
2.50)
A.if(fun(x,y)){......}
B.z=fun(fun(x,y),fun(x,y));
C.z=fun(fun(x,y)x,y); √
D.fun(x,y);
解析:
[解析]本题考查函数调用时的参数传递。
选项C中第一个参数的表达式不正确,因此不能得到正确的结果。
30.执行以下语句段后,xy的值是______。
int*pt,xy;
xy=200;
pt=&xy;
xy=*pt+30;
(分数:
2.50)
A.200
B.170
C.260
D.230 √
解析:
[解析]本题考查指针的运用。
通过pt=&xy,将pt指向xy所占的内存地址,而*pt是指针pt所指向内存单元中的内容,即200,所以最后xy的值为230。
31.下述程序的输出结果是______。
#include<stdio.h>
voidmain()
{inta[20],*p[4];
inti,k=0;
for(i=0;i<20;i++)
a[i]=i;
for(i=0;i<4;i++)
p[i]=&a[i*i+1];
for(i=0;i<4;i++)
{k=k+*p[i];}
printf("%d",k);
}
(分数:
2.50)
A.10
B.18 √
C.6
D.数组元素引用不合法,输出结果不定
解析:
[解析]第一个for循环,给数组a的20个元素分别赋值0~19:
第二个for循环,给数组p赋值,p[0]=a[1]=1,p[1]=a[2]=2,p[2]=a[5]=5,p[3]=a[10]=10;第三个for循环,将数组p中元素的值进行累加,k=1+2+5+10=18。
32.有以下程序:
#include<stdio.h>
#defineN8
voidfun(int*x,inti)
{*x=*(x+i)+1;}
main()
{inta[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);
for(i=0;i<N/2;i++)
{printf("%d",a[i]);}
printf("/n");
}
程序运行后的输出结果是______。
(分数:
2.50)
A.1313
B.3234
C.4234 √
D.1234
解析:
[解析]函数“fun(int*x,inti)”的功能是把数组元素x[i]的值加1赋给x[0]。
所以在主函数中执行fun(a,2)后,数组元数a[0]的值等于4。
然后在for循环语句中,输出数组a中的前4个元素的值,分别是4,2,3,4。
33.下面程序的输出结果是______。
#include<stdio.h>
main()
{chara[]={"a","b","c","d","f","g"},*p;
p=a;
printf("%c/n",*p+4);
}
(分数:
2.50)
A..a
B..b
C..e √
D..f
解析:
[解析]“*”号的优先级比“+”的优先级高,所以先执行“*p”;指针p指向的是数组的首地址,因此“*p=a”,再加4得"e"。
34.下面函数的功能是______。
sss(s,t)
char*s,*t;
{while(*s);
while(*t)
*(s++)=*(t++);
returns;
}
(分数:
2.50)
A.将字符串s复制到字符串t中
B.比较两个字符串的大小
C.求字符串的长度
D.将字符串t续接到字符串s中 √
解析:
[解析]本题考查指针变量的运用。
本题中的函数实质上是将字符串t续接到字符串s中。
35.下列程序的运行结果是______。
#include<stdio.h>
voidsub(int*s,int*y)
{staticintm=4;
*y=s[m];
m--;
}
voidmain()
{inta[]={1,2,3,4,5},k,x;
printf("/n");
for(k=0;k<=4;k++)
{sub(a,&x);
printf("%d,",x);
}
}
(分数:
2.50)
A.5,4,3,2,1, √
B.1,2,3,4,5,
C.0,0,0,0,0,
D.4,4,4,4,4,
解析:
[解析]本题考查的是静态变量以及函数的实参与形参之间的地址值传递。
sub()函数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当main()函数中的for循环中语句“sub(a,&x)”;执行时,sub函数中m的值依次是4,3,2,1,0;因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。
36.设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是______。
(分数:
2.50)
A.k=*q1*(*q2);
B.q1=k;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 语言 222