1、第四套C语言笔试题一、 选择题:(1)下列选项中不符合良好程序设计风格的是( D )。A)源程序要文档化 B)数据说明的次序要规范化C)避免滥用goto语句 D)模块设计要保证高耦合、高内聚【解析】一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序设计风格总体而言应该强调简单和清晰,程序必须是可以理解的。可以认为,著名的清晰第一、效率第二的论点已成为当今主导的程序设计风格。良好的程序设计风格主要应注重和考虑下述几个因素:源程序文档化。它包括以下3个方面:一是符号的命名应具有一定的含义;二是正确的注释能够帮助读者理解程序;三是视觉组织,可以在程序中利用空格、空行、缩进等技巧
2、使程序层次清晰。数据说明的方法。它包括以下3个方面:一是数据说明的次序规范化;二是说明语句中变量安排有序化;三是使用注释来说明复杂数据的结构。语句的结构应该简单直接,不应该为提高效率而把语句复杂化。输入和输出方式和风格应尽可能方便用户的使用。(2)从工程管理角度,软件设计一般分为两步完成,它们是( A )。A)概要设计与详细设计 B)数据设计与接口设计C)软件结构设计与数据设计 D)过程设计与数据设计【解析】软件设计是开发阶段最重要的步骤。从工程管理的角度来看可分为两步:概要设计和详细设计。概要设计是将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;详细设计是指确立每个模
3、块的实现算法和局部数据结构,用适应方法表示算法和数据结构的细节。从技术观点来看,软件设计包括软件结构设计(定义软件系统各主要部件之间的关系)、数据设计(将分析时创建的模型转化为数据结构)、接口设计(描述软件内部、软件与协作系统之间以及软件与人之间如何通信)、过程设计(把系统结构部件转换成软件的过程)4个步骤。(3)下列选项中不属于软件生命周期开发阶段任务的是( C )。A)软件测试 B)概要设计 C)软件维护 D)详细设计【解析】软件生命周期是指软件产品从提出、实现、使用、维护到停止使用退役的过程。软件开发期包括概要设计、详细设计、实现和测试4个阶段。软件维护属于软件运行维护期。(4)在数据库
4、系统中,用户所见的数据模式为( B )。A)概念模式 B)外模式 C)内模式 D)物理模式【解析】用户所见到的数据模式是外模式也称用户模式。它是用户的数据视图,由概念模式导出。一个概念模式可以有若干个外模式,每个用户只关心与它有关的外模式,这样不仅可以屏蔽大量无关信息,而且有利于数据维护。(5)数据库设计的4个阶段是:需求分析、概念设计、逻辑设计和( D )。A)编码设计 B)测试阶段 C)运行阶段 D)物理设计【解析】数据库设计目前一般采用生命周期法,即把整个数据库应用系统的开发分解成目标独立的若干阶段。它们分别是需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运
5、行阶段、进一步修改阶段。(6)设有下列3个关系表下列操作中正确的是( C )。A)T=RS B)T=RS C)T=RS D)T=R/S【解析】对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m元关系S,它们分别有p、q 个元组,则关系R与S经笛卡尔积记为RS,该关系是一个m+n元关系,元组个数是pq,由R与S的有序组组合而成。由题目的已知条件可知,关系T是由关系R与关系S进行笛卡尔积运算所得。(7)下列叙述中正确的是( D )。A)一个算法的空间复杂度大,则其时间复杂度也必定大B)一个算法的空间复杂度大,则其时间复杂度必定小C)一个算法的时间复杂度大,则其空间复杂度必定小D)上述3种
6、说法都不对【解析】算法的复杂度主要包括时间复杂度和空间复杂度。算法的时间复杂度是指执行算法所需要的计算工作量,算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数,即算法的工作量=f(n),其中n是问题的规模;算法的空间复杂度,一般是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。根据各自的定义可知,算法的时间复杂度与空间复杂度并不相关。(8)在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为( B )。A)63 B)64 C)6 D)7【解析】
7、顺序查找又称顺序搜索。顺序查找一般是指在线性表中查找指定的元素,其基本方法如下:从线性表的第一元素开始,依次将线性表中的元素与被查找的元素进行比较,若相等则表示找到(即查找成功),若线性表中所有元素都与被查元素进行了比较但都不相等,则表示线性表中没有要找的元素(即查找失败)。如果线性表中的第一个元素就是要查找的元素,则只需要做一次比较就查找成功;但如果要查找的元素是线性表中的最后一个元素,或者要查找元素不在线性表中,则需要与线性表中所有元素进行比较,这是顺序查找的最坏情况,比较次数为线性表的长度。(9)数据库技术的根本目标是要解决数据的( B )。A)存储问题 B)共享问题 C)安全问题 D)
8、保护问题【解析】数据库中的数据具有集成、共享之特点,即是数据库集中了各种应用的数据,进行统一的构造与存储,而使它们要被不同的应用程序所使用。因而数据库技术的根本目标是解决数据的共享问题。(10)对下列二叉树 进行中序遍历的结果是( A )。A)ACBDFEG B)ACBDFGE C)ABDCGEF D)FCADBEG【解析】所谓中序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树,并且在遍历左、右子树时,仍然按照这样的顺序遍历,因而中序遍历二叉树的过程是一个递归的过程。其简单的遍历过程为:若二叉树为空,则结束返回。否则:中序遍历左子树;访问根
9、结点;中序遍历右子树。根据题目中给出的二叉树的结构可知中序遍历的结果是:ACBDFEG。(11)下列叙述中错误的是( A )。A)一个C语言程序只能实现一种算法 B)C程序可以由多个程序文件组成C)C程序可以由一个或多个函数组成 D)一个C函数可以单独作为一个C程序文件存在【解析】算法是指为解决某个特定问题而采取的确定且有限的步骤。在C语言中一个算法是用函数来实现的。一个C语言源程序由许多函数组成,这些函数都是根据实际任务,确定具体的算法,由用户自己编写。C语言源程序可以放在不同的文件中,同一个源程序中的函数也可放在不同的文件中,所以一个C语言程序可以实现多种算法。(12)下列叙述中正确的是(
10、 D )。A)每个C程序文件中都必须要有一个main( )函数B)在C程序中main( )函数的位置是固定的C)C程序中所有函数之间都可以相互调用,与函数所处位置无关D)在C程序的函数中不能定义另一个函数【解析】当一个程序作为另一个程序的子程序,并且它自己不独立执行时,这该程序可以没有主函数。主函数的位置不固定,并且可以调用程序中的其他函数,而其他函数不可以调用main()函数。C语言规定,不能在函数的内部定义函数,故本题的答案为选项D)。(13)下列定义变量的语句中错误的是( )。A)int _int; B)double int_; C)char For; D)float US$;【解析】C
11、语言规定,变量的标识符只能由字母、数字或下划线3种字符组成,且首字符必须为字母或下划线。在C语言中大写字母和小写字母被认为是两个不同的字符。选项A)定义的变量标识符_int和选项B)定义的变量标识符int_与C语言的关键字int 是不同的,是正确的变量标识。选项C)定义的变量标识符For与C语言中的关键字for是两个不同的标识符,所以选项C)是正确的,而在选项D)包含有特殊字符$,因而其不符合C语言的变量命名规定。(14)若变量x、y已正确定义并赋值,下列符合C语言语法的表达式是( A )。A)+ +x,y=x- B)x+1=y C)x=x+10=x+y D)double(x)/10 【解析】
12、用逗号将表达式连接起来的式子称为逗号表达式。其表达式的一般形式为:表达式1,表达式2,表达式n。最后一个表达式的值就是此逗号表达式的值。所以选项A)为C语言中的逗号表达式,选项A)为正确答案。赋值表达式的左侧只能是变量,不能是常量或表达式,因此选项B)和选项C)均不正确。强制类型转换表达式的形式为:(类型名)(表达式),其中(类型名)称为强制类型转换运算符,数据类型两边的圆括号不能省略,所以选项D)不正确。(15)下列关于逻辑运算符两侧运算对象的叙述中正确的是( D )。A)只能是整数0或1 B)只能是整数0或非0整数 C)可以是结构体类型的数据 D)可以是任意合法的表达式【解析】逻辑运算符两
13、侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(真),或者为0(假)。(16)若有定义int x,y; 并已正确给变量赋值,则下列选项中与表达式(x-y)?(x+ +):(y+ +)中的条件表达式(x-y)等价的是( D )。A)(x-y0) B)(x-y0) C)(x-y0) D)(x-y= =0)【解析】条件表达式的形式如下:表达式1?表达式2 : 表达式3。其含义为当表达式1的值为非零时,求出表达式2的值,此时表达式2的值就是整个条件表达式的值;当表达式1的值为零时,则求表达式3的值,这时表达式3的值就是整个表达式的值。本题条件表达式的执行顺序是先求解表达式x-y的值,
14、若其值为非0(可以是正数,也可以是负数),则再求表达式x+的值,其值就是条件表达式的值;若表达式x-y的值为0,则再求表达式y+的值,其值就是条件表达式的值。因此,本题的答案为选项D)。(17)有下列程序:main( ) int x,y,z;x=y=1;z=x+ +,y+ +,+ +y;printf(%d,%d,%dn,x,y,z);程序运行后的输出结果是( C )。A)2,3,3 B)2,3,2 C)2,3,1 D)2,2,1【解析】在程序中,整型变量x、y的初值都为1,赋值语句z=x+,y+,+y右边的x+,y+,+y是一个逗号表达式,所以逗号表达式的值为+y的值。执行逗号表达式x+,y+
15、,+y后,x的值为2,y的值为3,z取逗号表达式的值,为1。因此,本题的答案为选项C)。(18)设有定义: int a; float b; 执行scanf(%2d%f,&a,&b);语句时,若从键盘输入876543.0,a和b的值分别是( B )。A)876和543.000000 B)87和6.000000 C)87和543.000000 D)76和543.000000【解析】在输入函数scanf的输入格式符%2d%f中,2d表示输入的数据的宽度为2,所以当从键盘输入876543.0时,这时把输入数字串的前两位87赋给变量a,然后将紧接着将6按照格式控制符%f的形式赋给变量b,所以b的值为6.
16、000000,故本题的答案为选项B)。(19)有下列程序:main( ) int a=0,b=0;a=10; /*给a赋值b=20; 给b赋值 */printf(a+b=%dn,a+b); /*输出计算结果 */程序运行后的输出结果是( A )。A)a+b=10 B)a+b=30 C)30 D)出错【解析】C语言规定,在字符/*和其后紧跟的第一个字符*/中间的部分是注释内容,且注释部分的内容不参与程序的编译和运行,因此,本题中程序语句b=20;没有执行,故本题的答案为选项A)。(20)在嵌套使用if语句时,C语言规定else总是( C )。A)和之前与其具有相同缩进位置的if配对 B)和之前与其最近的if配对C)和之前与其最近的且不带else的if配对 D)和之前的第一个if配对【解析】C语言的语法规定:else子句总是与前面最近的不带else的if相结合,与书写格式无关。所以选项C)为正确答案。