第二套C语言笔试题一、选择题:(1)下列叙述中正确的是(C)。A)程序设计就是编制程序B)程序的测试必须由程序员自己去完成C)程序经调试改错后还应进行再测试D)程序经调试改错后不必进行再测试【解析】程序设计是一个把软件需求转换为软件表示的过程。软件编制是程序设计中的一小部分,所以选项A)是错误的。软件测试是为了发现错误而执行程序的过程;为了达到较好的测试效果,应该由独立的第三方构造测试,因为从心理学角度讲,程序人员或设计人员在测试自己的程序时,要采取客观的态度是程度不同地存在障碍的,所以选项B)是错误的。程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助一定的调试工具去执行软件错误的具体位置。软件测试贯穿整个软件生命周期,调试主要在开发阶段,所以选项C)是正确的。(2)下列数据结构中,能用二分法进行查找的是(A)。A)顺序存储的有序线性表B)线性链表C)二叉链表D)有序线性链表【解析】二分法查找只适应于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排序(即从小到大,但允许相邻元素值相等)。(3)下列关于栈的描述正确的是(C)。A)在栈中只能插入元素而不能删除元素B)在栈中只能删除元素而不能插入元素C)栈是特殊的线性表,只能在一端插入或删除元素D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素【解析】栈是限定在一端进行插入与删除的线性表,在栈中允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。(4)下列叙述中正确的是(D)。A)一个逻辑数据结构只能有一种存储结构B)数据的逻辑结构属于线性结构,存储结构属于非线性结构C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率【解析】数据的逻辑结构是指数据集合中各数据元素之间所固有的逻辑关系;数据的存储结构是在对数据进行处理时,各数据元素在计算机中的存储关系。数据的存储结构是指数据的逻辑结构在计算机中的表示,一种逻辑结构可以表示成多种存储结构;而采用不同的存储结构,其数据处理的效率是不同的。(5)下列描述中正确的是(C)。A)软件工程只是解决软件项目的管理问题B)软件工程主要解决软件产品的生产率问题C)软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D)软件工程只是解决软件开发中的技术问题【解析】软件工程是建立并使用完善的工程化原则,以较经济的手段获得,能在实际机器上有效运行的可靠软件的一系列方法。软件工程主要思想强调在软件开发过程中需要应用工程化原则。(6)在软件设计中,不属于过程设计工具的是(D)。A)PDL(过程设计语言)B)PAD图C)N-S图D)DFD图【解析】DFD(数据流图Data-Flow-Diagram)是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。在软件详细设计的过程阶段,要对每个模块规定的功能以及算法的设计,给出适当的算法描述。常见的过程设计工具有:图形工具:程序流程图、N-S,PAD,HIPO。表格工具:判定表。语言工具:PDL(伪码)。(7)下列叙述中正确的是(A)。A)软件交付使用后还需要再进行维护B)软件工具交付使用就不需要再进行维护C)软件交付使用后其生命周期就结束D)软件维护是指修复程序中被破坏的指令【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需要进行必要而且可能的扩充和删除。(8)数据库设计的根本目标是要解决(A)。A)数据共享问题B)数据安全问题C)大量数据存储问题D)简化数据维护【解析】在数据库应用系统中的一个核心问题就是设计一个能满足用户要求,性能良好的数据库,这就是数据库设计。数据库设计即是在一定平台制约下,根据信息需求与处理需求设计出性能良好的数据模式。数据库设计的根本目标是要解决数据共享的问题。(9)设有如下关系表:则下列操作中正确的是(B)。A)T=R∩SB)T=R∪SC)T=R×SD)T=R/S【解析】关系代数的并运算是指设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组组成的集合,记为R∪S。形式定义为:R∪S≡{t|t∈R∧t∈S},式中t是元组变量。本题中关系T是由属于关系R的或者属于关系S的元组组成,所以T是R∪S的结果。(10)数据库系统的核心的是(B)。A)数据模型B)数据库管理系统C)数据库D)数据库管理员【解析】数据库管理系统(DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。所以数据库管理系统是数据系统的核心。(11)下列叙述中错误的是(A)。A)用户所定义的标识符允许使用关键字B)用户所定义的标识符应尽量做到见名知意C)用户所定义的标识符必须以字母或下划线开头D)用户定义的标识符中、大、小写字母代表不同标识【解析】在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。在C语言程序中,凡是要求标识符的地方都必须按此规划命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到见名知义,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。(12)下列叙述中错误的是(C)。A)C语句必须以分号结束B)复合语句在语法上被看作一条语句C)空语句出现在任何位置都不会影响程序运行D)赋值表达式末尾加分号就构成赋值语句【解析】C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为语句块,其形式如下:{语句1语句2……语句n},即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。(13)下列叙述中正确的是(B)。A)调用printf()函数时,必须要有输出项B)使用putchar()函数时,必须在之前包含头文件stdio.hC)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出D)调节getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码【解析】在调用函数进行输入和输出时,必须在程序的开头出现包含头文件stdio.h的命令行:#includestdio.hputchar()函数的作用是向终端输出一个字符,其调用形式如下:putchar(ch);其中ch可以是字符变量或是字符常量。(14)下列关于函数的叙述中正确的是(B)。A)每个函数都可以被其他函数调用(包括main函数)B)每个函数都可以被单独编译C)每个函数都可以单独运行D)在一个函数内部可以定义另一个函数【解析】C语言规定,不能在函数的内部定义函数,所以选项D)错误;在C语言中函数定义时是互相独立的,可以互相调用,但不能调有main函数,所以选项A)错误。每个函数都可以被单独编译,但不能单独运行。所以选项B)正确。(15)若有语句:char*line[5];下列叙述中正确的是(A)。A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组C)定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函数的指针【解析】本题考察C语言中运算符的优先级,因为[]比*优先级高,因此line先与[5]结合,形成有5个元素的数组line[5],然后再与line前面的*结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char的指针变量。(16)有下列程序段:typedefstructNODE{intnum;structNODE*next;}OLD;下列叙述中正确的是(C)。A)以上的说明形式非法B)NODE是一个结构体类型C)OLD是一个结构体类型D)OLD是一个结构体变量【解析】C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使标识符来代表已存在的类型名,并未产生新的数据类型。原有类型名依然有效。此题中,用使typedef定义了新的类型OLD结构,所以OLD为结构体类型。(17)下列叙述中错误的是(C)。A)在C语言中,对二进制文件的访问速度比文本文件快B)在C语言中,随机文件以二进制代码形式存储数据C)语句FILEfp;定义了一个名为fp的文件指针D)C语言中的文本文件以ASCⅡ码形式存储数据【解析】在C语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为:FILE*指针变量名;此题的选项C)中少了*,所以,选项C)错误。(18)当把四个表达式用作if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是(A)。A)k%2B)k%2==1C)(k%2)!=0D)!k%2==1【解析】整数k对2求余数的两个结果只能是0和1,所以选项A)表示k除以2的余数,其结果是0或1。在选项B)、C)和D)中包括算术求余运算符%,关系等于运算符==和关系不等于运算符!=以及逻辑非运算符!。而逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑非)、算术运算符、关系运算符、&&(逻辑与)、||(逻辑或)、赋值运算符。选项B)含义是判断表达式k%2的结果是否等于1、选项C)的含义是判断表达式k%2的结果是否不等于0,选项D)含义是判断表达式!k%2的结果是否等于1,所以选项B)、C)和D)的含义相同。(19)下列不能正确计算代数式sin2()值的C语言表达式是(A)。A)1/3*sin(1/2)*sin(1/2)B)sin(0.5)*sin(0.5)/3C)pow(sin(0.5),2)/3D)1/3.0*pow(sin(1.0/2),2)【解析】在C语言中,两个整型相除,其值也是整型。所以1/2的结果等于0,而不是0.5,所以,选项A)的表达式计算过程为1/3*sin(1/2)*sin(1/2)=1/3*sin(0)*sin(0)=0,所以选项A)错误。(20)下列能正确定义且赋初值的语句是(B)。A)intnl=n2=10;B)charc=32;C)floatf=f+1.1;D)doublex=12.3E2.5;【解析】C语言规定,可以在定义变量的同时给变量赋初值,称为变量初始化。在选项A)中在给n1和n2进行赋初值,但变量n2没有定义;在选项C)中定义变量f时,不能在赋值表达式的右边出现变量f自身,所以选项C)错误;在选项D)用指数表达式的常量中,字母E后面的数应该为整数,而不应该为小数形式。因此,选项B)正确。(21)下列程序的功能是:给r输入数据后计算半径为r的圆面积s。程序在编译时出错。main()/*Beginning*/{intr;floats;scanf(%d,&r);s=*π*r*r;printf(s=%f\n,s);}出错的原因是(D)。A)注释语句书写位置错误B)存放圆半径的变量r不应该定义为整型C)输出语句中格式描述符非法D)计算圆面积的赋值语句中使用了非法变量【解析】在C语言程序中,可以用一个符号名来代表一个常量,称为符号常量。这个符号名必须在程序中进行特别的指定,并符合标识符的命令规则。在本题中圆周率π是一个符号常量,但在程序中并没有指定其值,所以编译器找不到其值就会报错。所以选项D)正确。