二级C语言程序设计模拟19.docx
《二级C语言程序设计模拟19.docx》由会员分享,可在线阅读,更多相关《二级C语言程序设计模拟19.docx(17页珍藏版)》请在冰豆网上搜索。
![二级C语言程序设计模拟19.docx](https://file1.bdocx.com/fileroot1/2023-1/24/ca60cee9-3065-4c4b-9af1-dd9d63bf559e/ca60cee9-3065-4c4b-9af1-dd9d63bf559e1.gif)
二级C语言程序设计模拟19
[模拟]二级C语言程序设计模拟19
单项选择题
第1题:
下列链表中,其逻辑结构属于非线性结构的是______。
A.二叉链表
B.循环链表
C.双向链表
D.带链的栈
参考答案:
A
在定义的链表中,若只含有一个指针域来存放下一个元素地址,这样的链表就称为单链表或线性链表。
带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。
在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。
循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。
二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构。
答案为A选项。
第2题:
设循环队列的存储空间为Q(1:
35),初始状态为front=rear=35。
现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为______。
A.15
B.16
C.20
D.0或35
参考答案:
D
在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。
在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。
只不过当头尾指针指向向量上界时,其加1操作的结果是指向向量的下界0。
由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。
答案为D选项。
第3题:
下列关于栈的叙述中,正确的是______。
A.栈底元素一定是最后入栈的元素
B.栈顶元素一定是最先入栈的元素
C.栈操作遵循“先进后出”的原则
D.以上说法均错误
参考答案:
C
栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。
栈的修改是按后进先出的原则进行的。
因此,栈称为“先进后出”表,或“后进先出”表,所以选择C选项。
第4题:
在关系数据库中,用来表示实体间联系的是______。
A.属性
B.二维表
C.网状结构
D.树状结构
参考答案:
B
关系模型实体间的联系采用二维表来表示,简称表。
选项A属性刻画了实体,选项C为网状模型实体间的联系,选项D为层次模型实体间的联系。
第5题:
公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,则实体部门和职员间的联系是______。
A.1:
1联系
B.m:
1联系
C.1:
m联系
D.m:
n联系
参考答案:
C
两个实体集间的联系实际上是实体集间的函数关系,主要有一对一联系(1:
1)、一对多联系(1:
m)、多对一联系(m:
1)、多对多联系(m:
n)。
对于每一个实体部门,都有多名职员,则其对应的联系为一对多联系(1:
m),答案选C选项。
第6题:
有两个关系R和S如下:
则由关系R得到关系S的操作是______。
A.选择
B.投影
C.自然连接
D.并
参考答案:
A
由关系R到关系S为一元运算,排除C和D。
关系S是关系R的一部分,是通过选择之后的结果,因此选A选项。
第7题:
数据字典(DD)所定义的对象都包含于______。
A.数据流图(DFD图)
B.程序流程图
C.软件结构图
D.方框图
参考答案:
A
在数据流图中,对所有元素都进行了命名,所有名字的定义集中起来就构成了数据字典。
因此选A选项,而B、C、D选项都不符合。
第8题:
软件需求规格说明书的作用不包括______。
A.软件验收的依据
B.用户与开发人员对软件要做什么的共同理解
C.软件设计的依据
D.软件可行性研究的依据
参考答案:
D
软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。
软件需求规格说明书有以下几个方面的作用:
①作为确认测试和验收的依据,A选项正确;②便于用户、开发人员进行理解和交流,B选项正确;③反映出用户问题的结构,可以作为软件开发工作的基础和依据,C选项正确。
第9题:
下面属于黑盒测试方法的是______。
A.语句覆盖
B.逻辑覆盖
C.边界值分析
D.路径覆盖
参考答案:
C
黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例。
在使用黑盒测试法时,手头只需要有程序功能说明就可以了。
黑盒测试法分等价类划分法、边界值分析法和错误推测法,答案为C。
A、B、D选项均为白盒测试方法。
第10题:
下面不属于软件设计阶段任务的是______。
A.软件总体设计
B.算法设计
C.制定软件确认测试计划
D.数据库设计
参考答案:
C
从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。
所以A、B、D选项正确,C选项为软件测试阶段的任务。
第11题:
以下叙述中正确的是______。
A.N-S流程图只能描述简单的顺序结构的程序
B.程序的算法只能使用流程图来描述
C.结构化程序的三种基本结构是循环结构、选择结构、顺序结构
D.计算机可以直接处理C语言程序,不必进行任何转换
参考答案:
C
N-S流程图是可以描述循环结构、选择结构、顺序结构等多种结构的程序,所以A选项错误。
程序的算法可以用流程图、伪代码、N-S结构图等方法表示,所以B选项错误。
计算机只能处理二进制表示的目标程序,不能直接执行由C语言编写的源程序,所以D选项错误。
第12题:
以下叙述中正确的是______。
A.书写源程序时,必须注意缩进格式,否则程序会有编译错误
B.程序的主函数名除main外,也可以使用Main或_main
C.程序可以包含多个主函数,但总是从第一个主函数处开始执行
D.在C程序中,模块化主要是通过函数来实现的
参考答案:
D
C语言的源程序中对缩进没有要求,所以A选项错误。
C语言中区分大小写,main函数不能写成Main或_main,所以B选项错误。
一个C程序有且只有一个主函数,所以C选项错误。
第13题:
C语言中double类型数据占字节数为______。
A.4
B.8
C.12
D.16
参考答案:
B
double型数据在内存中占8个字节,float型数据占4个字节,int型数据占2个字节,char型数据占1个字节,所以选择B选项。
第14题:
以下叙述中正确的是______。
A.C语言中的关键字不能作变量名,但可以作为函数名
B.标识符的长度不能任意长,最多只能包含16个字符
C.标识符总是由字母、数字和下画线组成,且第一个字符不得为数字
D.用户自定义的标识符必须“见名知义”,如果随意定义,则会出编译错误
参考答案:
C
C语言中的关键字既不能做变量名也不能做用户函数名,所以A选项错误。
标识符的命名规则,即由下画线字母数字组成,且必须以下画线和字母开始,也不能和关键字一致。
不同C语言规定标识符的有效长度可能会不同,但没有限制最大长度,所以B选项错误。
用户定义的标识符只要满足标识符命名规则没有特殊要求,不必一定“见名知义”,所以D选项错误。
第15题:
以下叙述中正确的是______。
A.由printf输出的数据都隐含左对齐
B.scanf和printf是C语言提供的输入和输出语句
C.赋值语句是一种执行语句,必须放在函数的可执行部分
D.由printf输出的数据的实际精度是由格式控制中的域宽和小数的域宽来完全决定的
参考答案:
C
由printf输出的数据都隐含右对齐,所以A选项错误。
scanf和printf是C语言提供的输入/输出函数,所以B选项错误。
Printf输出数据所占的宽度由系统决定,所以D选项错误。
第16题:
以下叙述中正确的是______。
A.复合语句在语法上包含多条语句,其中不能定义局部变量
B.花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的
C.空语句就是指程序中的空行
D.当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改
参考答案:
D
复合语句可以包含多条语句,在其中可以定义局部变量,所以A选项错误。
花括号对{}不仅用来表示函数的开头和结尾,也可以用于表示复合语句,所以B选项错误。
C语言中的语句必须以分号“;”结束,所以空语句表示为“;”,不是空行,所以C选项错误。
第17题:
以下叙述中正确的是______。
A.在C语言中,逻辑真值和假值分别对应1和0
B.关系运算符两边的运算对象可以是C语言中任意合法的表达式
C.对于浮点变量x和y,表达式x==y是非法的,会出编译错误
D.分支结构是根据算术表达式的结果来判断流程走向的
参考答案:
B
A选项错误,在C语言中,逻辑真值对应非0;C选项中,表达式x==y是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值,因此B选项正确。
第18题:
以下叙述中正确的是______。
A.对于逻辑表达式a++||b++,设a的值为1,则求解表达式的值后,b的值会发生改变
B.对于逻辑表达式a++&&b++,设a的值为0,则求解表达式的值后,b的值会发生改变
C.else不是一条独立的语句,它只是if语句的一部分
D.关系运算符的结果有三种:
0,1,-1
参考答案:
C
A选项和B选项中,对于逻辑表达式,其中b的值不会因为表达式的结果发生改变;D选项中,关系运算符的结果有“真”和“假”两种。
因此C选项正确。
第19题:
以下叙述中正确的是______。
A.continue语句使得整个循环终止
B.break语句不能用于提前结束for语句的本层循环
C.使用break语句可以使流程跳出switch语句体
D.在for语句中,continue与break的效果是一样的,可以互换
参考答案:
C
break语句通常用在循环语句和开关语句中。
当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环。
continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。
A、B、D三个选项中均有错误,因此C选项正确。
第20题:
以下叙述中正确的是______。
A.循环发生嵌套时,最多只能两层
B.三种循环for,while,do-while可以互相嵌套
C.循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误
D.for语句的圆括号中的表达式不能都省略掉
参考答案:
B
A选项中,循环发生嵌套时,没有规定层数;C选项中,循环嵌套时,书写代码时没有要求必须缩进;D选项中,for语句的圆括号中的表达式都可以省略掉。
B选项正确。
第21题:
下面选项中合法的字符常量是______。
A."X"
B.´X´
C.´abc´
D.´\´
参考答案:
B
字符常量是用单引号括起来的一个字符。
A选项中,使用双引号,所以是错误的;C选项中,´abc´是字符串,字符常量只能是单个字符,不能是字符串;D选项中,以反斜线“\”开头的是转义字符。
B选项正确。
第22题:
以下叙述中正确的是______。
A.转义字符要用双引号括起来,以便与普通的字符常量区分开
B.字符常量在内存中占2个字节
C.字符常量需要用单引号括起来
D.字符常量是不能进行关系运算的
参考答案:
C
A选项中,转义字符是以反斜线“\”开头,后跟一个或几个字符;B选项中,字符常量在内存中占1个字节;D选项中,字符常量可以进行关系运算,不能参与数值运算。
C选项正确。
第23题:
以下叙述中正确的是______。
A.用户自己定义的函数只能调用库函数
B.实用的C语言源程序总是由一个或多个函数组成
C.不同函数的形式参数不能使用相同名称的标识符
D.在C语言的函数内部,可以定义局部嵌套函数
参考答案:
B
A选项中,“用户自己定义的函数只能调用库函数”描述是不正确的,也可以调用自定义函数;C选项中,对于不同函数的形式参数可以使用相同名称的标识符;D选项中,关于函数的定义不可以嵌套,但函数的调用可以嵌套。
B选项正确。
第24题:
以下叙述中正确的是______。
A.int*p1;int**p2;int*p3;都是合法的定义指针变量的语句
B.指针变量只能通过求地址运算符(&)来获得地址值
C.语句p=NULL;与p=\0;是等价的语句
D.语句p=NULL;执行后,指针p指向地址为0的存储单元
参考答案:
A
B选项描述不正确,指针变量可以通过求地址运算符(&)来获得地址值,可以通过指针变量获得地址值,还可以通过标准函数获得地址值;C选项中,“p=NULL”;和“p=0”;或“p=´\0´”;等价;D选项中,语句“p=NULL”;执行后,指针p并不是指向地址为O的存储单元,而是具有一个确定的值一"空"。
A选项正确。
第25题:
以下叙述中正确的是______。
A.即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同
B.如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息
C.设变量p是一个指针变量,则语句p=0;是非法的,应该使用语句p=NULL;
D.指针变量之间不能用关系运算符进行比较
参考答案:
B
A选项描述不正确,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误;C选项中,“p=NULL”;和“p=0”;是等价的;D选项中,指向同一数组的两指针变量进行关系运算可表示它们所值数组元素之间的关系。
B选项正确。
第26题:
以下叙述中正确的是______。
A.一条语句只能定义一个数组
B.每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
C.数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
D.在引用数组元素时,下标表达式可以使用浮点数
参考答案:
B
A选项中,一条语句只能定义一个数组是不准确的,可以通过一条语句定义多个数组;C选项中,数组说明符的一对方括号中可以是整型常量,可以是整型常量表达式;D选项中,在引用数组元素时,下标表达式必须是整型的。
B选项正确。
第27题:
以下叙述中正确的是______。
A.数组下标的下限是1
B.数组下标的下限由数组中第一个非零元素的位置决定
C.数组下标的下限由数组中第一个被赋值元素的位置决定
D.charc1,c2,*c3,c4[40];是合法的变量定义语句
参考答案:
D
C语言规定,数组下标值的下限一律为0,对于一维数组a[max](max是一个编泽时可知的值)来说,它的第一个和最后一个元素分别是a[0]和a[max-1]。
所以,数组下标值的下限与数组中元素的位置无关,A、B、C选项错误。
第28题:
以下叙述中正确的是______。
A.语句inta[8]={0};是合法的
B.语句inta[]={0};是不合法的,遗漏了数组的大小
C.语句chara[2]={"A","B"};是合法的,定义了一个包含两个字符的数组
D.语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符
参考答案:
A
B选项中,如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。
C选项中,chara[2]={"A","B"};不合法,应为chara[2]={´A´,´B´};。
D选项中,用字符串方式赋值比用字符逐个赋值要多占1个字节,在该选项中应为3个字节。
A选项正确。
第29题:
下面选项中的程序段,没有编译错误的是______。
A.char*sp,s[10];sp="Hello";
B.char*sp,s[10];s="Hello";
C.charstr1[10]="computer",str2[10];str2=str1;
D.charmark[];mark="PROCRAM";
参考答案:
A
本题考查字符数组的初始化以及指向字符串的指针。
B选项不能直接将字符串赋值给数组名,C选项不能将两个字符数组直接互相赋值,D选项中不能这样定义charmark[],必须指定长度或者直接初始化。
第30题:
以下叙述中正确的是______。
A.字符串常量"str1“的类型是:
字符串数据类型
B.有定义语句:
charstrl[]="str1";,数组str1将包含4个元素
C.下面的语句用赋初值方式来定义字符串,其中,´\0´是必须的charstr1[]={´s´,´t´,´r1,´1´,´\0´};
D.字符数组的每个元素可存放一个字符,并且最后一个元素必须是´\0´字符
参考答案:
C
本题考查字符数组的相关操作。
A选项中str1的类型不是字符串类型,B选项中数组str1包含了5个元素,其中有结尾符,D选项中字符数组的最后一个元素可以不是´\0´字符。
第31题:
以下叙述中正确的是______。
A.字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组
B.charca[3][5]={"A","BB","CCC"};是不合语法的
C.charca[][5]={"A","BB","CCC"};是不合语法的
D.char*ca[3]={"A","BB","CCC"};是不合语法的
参考答案:
A
本题考查字符串数组的相关知识,选项B、C、D都是符合语法的。
第32题:
以下叙述中正确的是______。
A.两个字符串可以用关系运算符进行大小比较
B.函数调用strlen(s);会返回字符串s实际占用内存的大小(以字节为单位)
C.C语言本身没有提供对字符串进行整体操作的运算符
D.当拼接两个字符串时,结果字符串占用的内存空间是两个原串占用空间的和
参考答案:
C
本题考查字符串处理函数strlen、strcat、strcmp。
A选项中不能用关系运算符进行大小比较,可以使用strernp。
B选项中strlen返回的是字符串s实际占用内存大小加上结尾符。
D选项当使用连接函数strcat时,内存空间会减少一个字符位置。
第33题:
以下叙述中正确的是______。
A.如果函数带有参数,就不能调用自己
B.所有函数均不能接受函数名作为实参传入
C.函数体中的语句不能出现对自己的调用
D.函数名代表该函数的入口地址
参考答案:
D
本题考查函数调用相关知识。
B选项错误,函数可以接受函数名作为实参传入,引用函数名也是指针。
A、C选项错误,因为递归函数就能调用自己。
第34题:
以下叙述中正确的是______。
A.局部变量不能被说明为static
B.只有全局变量才有自己的作用域,函数中的局部变量没有作用域
C.只有在函数内部定义的变量才是局部变量
D.只要是用户定义的标识符,都有一个有效的作用域
参考答案:
D
本题考查局部变量和全局变量作用域。
A选项错误,因为可以定义个静态局部变量。
B选项中局部变量也有作用域。
C选项中,函数内部定义的也可能是全局变量。
第35题:
下面关于编译预处理的叙述正确的是______。
A.预处理命令行必须使用分号结尾
B.凡是以#号开头的行,都被称为编译预处理命令行
C.预处理命令行不能出现在程序的最后一行
D.预处理命令行的作用域是到最近的函数结束处
参考答案:
B
本题考查预编译的预编译处理命令行,预处理命令行不能以分号结尾,所以A选项错误。
预处理命令行可以出现在程序的最后一行,C选项错误。
预处理命令行作用域是整个文件,D选项错误。
第36题:
以下叙述中正确的是______。
A.使用typedef说明新类型名时,其格式是:
typedef新类型名原类型名;
B.在程序中,允许用typedef来说明一种新的类型名
C.使用typedef说明新类型名时,后面不能加分号
D.在使用typedef改变原类型的名称后,只能使用新的类型名
参考答案:
B
本题考查typedef的使用方法。
typedef对已存在的类型使用一个新的名字,选项A中新类型名应该在原类型名之后,C选项中后面要加分号,D选项中可以使用原类型名。
第37题:
以下叙述中正确的是______。
A.结构体类型中各个成分的类型必须是一致的
B.结构体类型中的成分只能是C语言中预先定义的基本数据类型
C.在定义结构体类型时,编译程序就为它分配了内存空间
D.一个结构体类型可以由多个称为成员(或域)的成分组成
参考答案:
D
本题考查结构体类型。
结构体中各个成分的类型可以是不一样的,所以A选项错误。
结构体类型中的成分可以是结构体,所以B选项错误。
定义结构体时编译程序并不会给它分配内存空间,所以C选项错误。
第38题:
以下叙述中正确的是______。
A.使用typedef定义新类型名后,新类型名与原类型名实际上是等价的
B.结构体类型中的各个成分均不能是数组或指针
C.结构体类型的变量,不能在声明结构体类型组成时一起定义
D.元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义
参考答案:
A
本题考查typedef的使用方法。
typedef对已存在的类型使用一个新的名字,结构体类型中的成分可以是数组和指针,所以B选项错误。
结构体类型的变量可以在声明结构体的时候一起定义,C选项错误。
D选项中可以一起定义。
第39题:
下面选项中关于位运算的叙述正确的是______。
A.位运算的对象只能是整型或字符型数据
B.位运算符都需要两个操作数
C.左移运算的结果总是原操作数据2倍
D.右移运算时,高位总是补0
参考答案:
A
本题考查位运算。
按位取反只需要一个操作数,所以B选项错误。
左移一位是原操作数的2倍,其他情况不是,比如左移两位就是原操作数的4倍,所以C选项错误。
右移运算时,高位在某些情况下不是补0。
第40题:
下面选项中关于“文件指针”概念的叙述正确的是______。
A.文件指针是程序中用FILE定义的指针变量
B.文件指针就是文件位置指针,表示当前读写数据的位置
C.文件指针指向文件在计算机中的存储位置
D.把文件指针传给fscanf函数,就可以向文本文件中写入任意的字符
参考答案:
A
在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。
通过文件指针就可对它所指的文件进行各种操作。
文件指针不是文件位置指针,所以B、C选项错误,D选项中不可以写入任意的字符。
程序填空题
第41题:
下列给定程序中,函数fun的功能是:
计算如下公式直到
,并且把计算结果作为函数值返回。
例如,若形参e的值为1e-3,则函数返回值为0.551690。
请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
注意:
部分源程序在文件BLANK1.C中,不得增行或删行,也不得更改程序的结构!
#include〈stdio.h〉doublefun(doublee){inti,k;doubles,t,x;s=0;k=1;i=2;/**********found**********/x=______/4;/**********found**********/while(x______e){s=s+k*x;k=k*(-1);t=2*i;/**********found**********/x=______/(t*t);