1、二级C语言真题2007年9月答案真题 120一、选择题 下列各题A、B、C、D 四个选项中,只有一个选项是正确的。第1题:参考答案:D答案解析:本题考查软件的定义。软件是计算机系统中与硬件相互依存得另一部分,它包括程序、相关数据及其说明文档得总和。因此,本题得正确答案是选项D。第2题:参考答案:B答案解析:本题考查软件工程调试。调试与测试是两个不同的过程,有着根本的区别:调试是一个随机的、不可重复的过程,它用于隔离和确认问题发生的原因,然后修改软件来纠正问题;测试是一个有计划的,可以重复的过程,它的目的是为了发现软件中的问题。因此,软件调试的目的是为了改正软什中的错误。本题的正确答案是选项 B
2、。第3题:参考答案:C答案解析:通常认为,面向对象方法具有封装性、继承性、多态性几大特点。就是这几大特点,为软件开发提供了一种新的方法学。 封装性:所谓封装就是将相关的信息、操作与处理融合在一个内含的部件中 (对象中)。简单地说,封装就是隐藏信息。这是面向对象方法的中心,也是面向对象程序设计的基础。 继承性:子类具有派生它的类的全部属性 (数据) 和方法,而根据某一类建立的对象也都具有该类的全部,这就是继承性。继承性自动在类勺子类间共享功能与数据,当某个类作了某项修改,其子类会自动改变,子类会继承其父类所有特性与行为模式。继承有利于提高软件开发效率,容易达到一致性。 多态性:多态性就是多种形式
3、。不同的对象在接收到相同的消息时,采用不同的动作。例如,一个应用程序包括许多对象,这些对象也许具有同一类犁的工作,但是却以不同的做法来实现。不必为每个对象的过程取一过程名,造成复杂化,可以使过程名复用。同一类型的工作有相同的过程名,这种技术称为多态性。 经过上述分析可知,在面向对象方法中,实现信息隐蔽是依靠对象的封装。正确答案是选项C。第4题:参考答案:A答案解析:本题考查软件工程的程序设计风格。软件在编码阶段,力求程序语句简单、直接,不能只为了追求效率而使语句复杂化。除非对效率有特殊的要求,程序编写要做到清晰第一、效率第二。 人们在软件生存期要经常阅读程序,特别是在软什测试和维护阶段,编写程
4、序的人和参与测试、维护的人都要阅读程序,因此要求程序的可读性要好。 正确的注释能够帮助读者理解程序,可为后续阶段进行测试和维护提供明确的指导。所以注释不是可有可无的,而是必须的,它对于理解程序具有重要的作用。 I/0信息是与用户的使用直接相关的,因此它的格式应当尽可能方便用户的使用。在以交互式进行输入/输出时,要在屏幕上使用提示符明确提示输入的请求,指明可使用选项的种类和取值范围。 经过上述分析可知,选项A是不符合良好程序设计风格要求的。第5题:参考答案:A答案解析:本题考查程序效率。程序效率是指程序运行速度和程序占用的存储空间。影响程序效率的因素是多方面的,包括程序的设计、使用的算法、数据的
5、存储结构等。在确定数据逻辑结构的基础上,选择一种合适的存储结构,可以使得数据操作所花费的时间少,占用的存储空间少,即提高程序的效率。因此,本题选项A的说法是正确的。第6题:参考答案:D答案解析:本题考查数据结构的基本知识。 数据之间的相互关系称为逻辑结构。通常分为四类基本逻辑结构,即集合、线性结构、树型结构、图状结构或网状结构。存储结构是逻辑结构在存储器中的映象,它包含数据元素的映象和关系的映象。存储结构在计算机中有两种,即顺序存储结构和链式存储结构。顺序存储结构是把数据元素存储在一块连续地址空间的内存中:链式存储结构是使用指针把相互直接关联的节点链接起来。因此,这两种存储结构都是线性的。可见
6、,逻辑结构和存储结构不是一一对应的。因此,选项A和选项B的说法都是错误的。 无论数据的逻辑结构是线性的还是非线性的,只能选择顺序存储结构或链式存储结构来实现存储。程序设计语言中,数组是内存中一段连续的地址空间,可看作是顺序存储结构。可以用数组来实现树型逻辑结构的存储,比如二叉树。因此,选项C的说法是错误的。第7题:参考答案:C答案解析:冒泡排序的基本思想是:将相邻的两个元素进行比较,如果反序,则交换:对于一个待排序的序列,经一趟排序后,最大值的元素移动到最后的位置,其他值较大的元素也向最终位置移动,此过程称为一趟冒泡。对于有n个数据的序列,共需 n-1趟排序,第i趟对从1到n-i个数据进行比较
7、、交换。冒泡排序的最坏情况是待排序序列逆序,第1趟比较n-1次,第2趟比较n-2次,依此类推,最后一趟比较1次,一共进行n-1趟排序。因此,冒泡排序在最坏情况下的比较次数是(n-1)+(n-2)+1,结果为n(n-1)/2。本题的正确答案是选项C。第8题:参考答案:A答案解析:第9题:参考答案:B答案解析:本题考查数据库系统的基本概念和知识。 数据库系统除了数据库管理软件之外,还心须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等。对于大型的多用户数据库系统和网络数据库系统,还需要多用户系统软件和网络系统软件的支持。因此,选项A的说法是错误的。 数据库可以看成是长期存储
8、在计算机内的、大量的、有结构的和可共享的数据集合。因此,数据库具有为各种用户所共享的特点。不同的用户可以使用同一个数据库,可以取出它们所需要的子集,而且容许子集任意重叠。数据库的根本目标是要解决数据的共享问题。因此,选项B的说法是正确的。 通常将引入数据库技术的计算机系统称为数据库系统。一个数据库系统通常由五个部分组成,包括相关计算机的硬件、数据库集合、数据库管理系统、相关软件和人员。 因此,选项C的说法是错误的。 因此,本题的正确答案是选项B。第10题:参考答案:C答案解析:题考查数据库的关系模犁。关系模型的数据结构是一个“二维表”,每个二维表可称为一个关系,每个关系有一个关系名。表中的一行
9、称为一个元组:表中的列称为属性,每一列有一个属性名。表中的每一个元组是属性值的集合,属性是关系二维表中最小的单位,它不能再被划分。关系模式是指一个关系的属性名表,即二维表的表框架。因此,选项C的说法是正确的。第11题:参考答案:B答案解析:本题考查的知识点是:C语言的基本概念。 C浯言源程序的后缀为.c;经过编译得到的目标程序文件的后缀为obj:再将目标程序文件链接后得到可执行文件的后缀为.exe。故本题应该选择B。第12题:参考答案:A答案解析:本题考查的知识点是:标识符。 用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。C语言规定标识符只能由字母、数字和
10、下划线三种字符组成,且第一个字符必须为字母或下划线。另外,标识符不能是C语言关键字。选项B中,y-m-d用了“-”所以不是标识符;选项C,Dr.Tom用了“.”也不是标识符;选项D中,case是 C语言关键字,所以不能用作标识符。故本题应该选择A。第13题:参考答案:B答案解析:本题考查的知识点是:数值常量。 数值常量分为整型和实型两类。其中,整型有卜进制、八进制和十六进制三种表示法;实型有小数形式和指数形式两种表示法。十进制和书面使用的数据表示一样;八进制是以数字0开头,后面跟由07组成的八进制数组成:十六进制是以0x(或OX)开头,后面跟由09与AF(或af)组成的十六进制数组成:小数形式
11、由数字和小数点组成,其整数部分或小数部分如果为0可省略,但不能同时省略。指数形式由小数形式或十进制形式开头,后面跟e(或E),再跟一个十进制整数组成。选项A中, 028是八进制形式,但后面跟的8不在07之内,所以非法;选项C中,4e1.5是指数形式,但e后面所跟的不是整数,所以非法;选项D中,10,000中不能有“,”,所以非法。故本题应该选择B。第14题:参考答案:C答案解析:本题考查的知识点是:C语言的基本概念。 C语言程序将从主函数main()开始执行,故选项A不正确;主函数必须是main(),故选项B不正确;主函数的返回类型必须为int或void,形参可以没有也可以为int,char
12、*。所以不是任意函数都能作为主函数,故选项D不正确。本题应该选择C。第15题:参考答案:C答案解析:本题考查的知识点是:标准输入函数scanf()。 scanf()函数要求,除了第1个参数为格式化字符串以外,其余参数均为相应变量的地址值。本题中,只有p是地址值,故应该选择C。第16题:参考答案:D答案解析:在C语言的标准中,short占2个字节、long占4个字节,但int的大小和编译系统相关。例如在Turbo C 2.0中,int占2个字节,但在VisualC+6.0(VC6可以用做C语言编译器)中占4个字节。故本题应该选择D。第17题:参考答案:A答案解析:本题考查的知识点是:赋值语句、“
13、%”运算符。 赋值语句由两个运算分量和一个赋值运算符组成。赋值运算符包括“二”、“+=”、“*=”等。其中,赋值运算符左侧的运算分量称为左值,右侧的叫右值。任何合法表达式都可用做右值,但临时值、常量不能用做左值。“%”运算符的作用是求模,意思是做除法求余,这就要求两个运算分量均为整数。选项B中,2.5不是整数,故非法:选项C中,表达式x+n计算后得到的是一临时值,临时值不能做左值,故非法;选项D中,由于“=”运算符的结合性是“从右到左”,故先计算5=4+1,5是常量不能做左值,故选项D也非法。选项A,y=5是一个逻辑表达式,其值为真或假,可以用做右值,所以是合法的。故本题应该选择A。第18题:
14、参考答案:B答案解析:本题考查的知识点是:输入格式化控制串。 本题scanf()函数的格式化控制串中,%2d表示输入一个2位的整数:%f表示输入一个浮点数;%s表示输入一个字符串。因此,从键盘上输入55566 7777abc后,前两位55被当作2位整数输入给j;566被当作浮点数输入给y;跳过空格后,剩下的字符串7777abc全部输入给name;故本题应该选择B。第19题:参考答案:B答案解析:本题考查的知识点是:dowhile循环。 dowhile循环会首先执行循环体1遍,然后再判断while后的逻辑表达式是否为真来决定是否进行下一次循环。所以,dowhile循环的循环体至少会被执行1遍。本
15、题中,首先令i为0,然后进入dowhile循环,执行1遍循环体输出i的值0。然后,因为表达式i+的值为0(执行后i的值被增1),所以dowhile循环结束,接下来再输出i的值1。故本题应该选择B。第20题:参考答案:B答案解析:本题考查的知识点是:sqrt()函数。sqrt()函数的作用是计算第21题:参考答案:B答案解析:本题考查的知识点是:逻辑表达式。 在C语言中,逻辑表达式的结果只有两种情况“tree”和“false”。如果要把一个逻辑值看成一个整数的话,true等于1;false等于0。如果要把一个整数看成一个逻辑值的话,非0等于true:0等于false。由此可见,如果EXP表达式的
16、结果为0的话;(EXP)为假:(EXP=0)为真;(EXP!=O)为假;(EXP=1)为假;(EXP!=1)为真。如果EXP表达式的结果为非0的话:(EXP)为真:(EXP0)为假;(EXP!=0)为真;(EXP1)结果不定;(EXP!=1)结果不定。综上所述,只有(EXP!=0)完全等价于表达式(EXP)。故应该选择B。第22题:参考答案:C答案解析:本题考查的知识点是:for循环、%运算符。 本题首先令y为9,然后通过一个for循环,当y还大于0则循环,每次循环让y递减1。循环体中是一条if语句,通过%运算符计算每当y能被3整除的时候,输出-y的值,即先将y减1,然后输出y的值。故当y等于
17、9、6、3时会输出,输出值分别为8、5、2。所以应该选择C。第23题:参考答案:B答案解析:本题考查的知识点是:大写字母的判断。 大写字母从AZ的ASCII码是连续的,所以如果当一个字符大于等于A31小于等于 Z时,那这个字符就一定是一个大写字母,故选项C正确。C语言中的库函数isupper()的作用也正是判断一个字符是否为大写字母的,故选项A正确。在ASCII码中,小写字母的编码也是连续的,对应的小写字符比大写字符的ASCII码值大32,所以选项D经过小写字符-32后,换算成了对应的大写字母z和A,所得到结果和选项C是一致的,故也是正确的。选项B中,C语言的逻辑表达式不能直接连写,而应该写成
18、选项C那样,故是错误的,应该选择B。第24题:参考答案:B答案解析:本题考查的知识点是;for循环的嵌套、%运算符。本题程序中,关键部分是一个for循环的嵌套。外循环将执行3遍,循环变量i的值依次为13。内循环每次将从3循环递增到外循环变量i的值。所以,前两次循环i的值都小于3,故内循环没有被执行,第3次,内循环将执行1次,执行时i等于3。 %运算符的作用是整除求余,55除以3等于18余1,所以整个循环结束后,m的值为1。故应该选择B。第25题:参考答案:D答案解析:本题考查的知识点是:函数的形参和实参。 在定义函数时函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函
19、数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数” (简称实参)。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。故本题应该选择D。第26题:参考答案:C答案解析:本题考查的知识点是:字符变量。 字符变量其实就是整型变量。只不过它只占1个字节,所以表示范围是-128127。它所储存的值为它所代表字符的ASCII码值。“己知字符,A,的ASCII代码值是65,字符变量c1的值是A”这句话告诉我们,c1中存储的值就是65;c2的值为D,但在输出时减了2,所以输出的值为B,也就是66
20、。故本题应该选择C。第27题:参考答案:C答案解析:本题考查的知识点是:函数、指针。 在C语言中,指针变量是不能直接赋给一个整数作为地址值的。因此选项C是错误的。其余选项的说法正确。故应该选择C。第28题:参考答案:D答案解析:本题考查的知识点是:字符串常量。 在C语言中,字符串常量是以双引号括起来的字符序列。故选项B和C不正确。字符序列中可包含一些转义字符,转义字符都是以“”开头的。选项A中包含了三个“”,前两个()代表了个”字符,后面一个和“”一起()被看作一个“”,所以该字符串缺少一个结束的“”,故不正确。选项D的两个“”之间没有任何字符,代表的是一个空串,是合法的字符串常量,故应该选择
21、D。第29题:参考答案:A答案解析:本题考查的知识点是:sizeof()运算符。 sizeof()运算符的作用是计算一个变量所占的内存字节数。选项A传入的是数组名p,数组p由3个字符大小,所以占3个字节。故不能计算出一个char型数据所占字符数。而选项B、C、D传入的都是字符元素或字符类型名char,这些都能计算出一个 char型数据所占字符数。故本题应该选择A。第30题:参考答案:A答案解析:本题考查的知识点是:while循环的简单应用。 aaa()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针 t不断递增,直到t指向字符串结束标志处。当t指向结束标志处时,由于
22、后缀+运算符的原因,它还会被再递增1,所以接卜来的t-;语句让它回到结束标志处。最后返回t-s,因此s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。第31题:参考答案:B答案解析:本题考查的知识点是:二维数组在内存中的存放顺序。 二维数组的元素在内存中是按行列顺序连续存放的。以本题的二维数组a36为例,它的元素在内存中的存放顺序是:a00、a01、a02a05、a10、 a11a15、a20a25。由此可见,第10个元素就是第2行第4个元素,即a13。故应该选择B。第32题:参考答案:A答案解析:本题考查的知识点是;指针数组和二级指针。 本题主函数中定义了一个指针
23、数组a,可以将它看成一个以字符指针为元素的一维数组。和般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针(即字符型二级指针),所以数组名a可以用作函数fun()的实参。 在fun()函数中,+p操作使形参p往后移动一个字符指针的位置,即指针a1的位置。故最后通过printf()函数输出的字符串为Afternoon,应该选择A。第33题:参考答案:C答案解析:本题考查的知识点是:二维数组和指针数组。 无论一个数组有多少维或者是甭含指针类型,该数组最终都可以被看作一个比较特殊的一维数组。例如本题中的int a23可以看作元素为int3(即包含3个int型元素的一维数
24、组),包含2个这样元素的一维数组;而int*p3则可以看作元素为int*,包含3个这样元素的一维数组。选项A中,p为数组名,其值是不能被改变的,故非法:选项B中,p0的类型是int*,而a是二维数组名(类犁为int3),两者无法赋值,故非法;选项C中,p0为int型指针,&a12是int型变量的地址,可以合法赋值;选项D中,p1是血型指针,而&a是二维数组的地址(类型为int(*)23),两者无法赋值,故非法。所以本题应该选择C。第34题:参考答案:D答案解析:本题考查的知识点是:for循环的简单应用。 题目中fun()函数的作用是排序,从形参指针a所指位置开始,对其后n个int型元素进行从大
25、到小排序。主函数中,调用fun()函数传入的两个实参分别为c+4和6,即从数组c的第5个元素开始,对其后连续的6个元素进行从大到小排序。所以,最后通过for循环输出数组c的值为“1,2,3,4,9,8,7,6,5,0,”,故应该选择D。第35题:参考答案:C答案解析:本题考查的知识点是:while循环的简单应用。 题目fun()函数中while循环的意思是:判断s所指内容是否为数字字符,如果是数字字符,则计算表达式11=10*n+*s-0;。其中。s-0的作用是将相应的数字字符转换为数值,例如字符8减去字符0后,得到的结果就是数值8了。n=10*n+的作用是将累计变量n中原来内容乘以10,然后
26、再加上刚转换的数字字符的数值,例如原来n的值为1,*s现在的内容为2,那么执行了n=10*n+*s-0,;语句后,n的值变为12,如果接下来再来一个8字符,执行n=10*n+*s-0;语句后,n的值就是128了。故不难看出fun()函数的作用是“将数字字符串转换为相应的十进制数值,碰到非数字字符时结束”。从主函数中定义的字符数组s的初始化内容可以看出,fun()函数返回值应该是61。故应该选择C。第36题:参考答案:C答案解析:本题考查的知识点是:输入函数。 C语言提供了许多输入函数,其中有:getchar(输入字符)、scanf(格式输入)和gets (输入字符串)等。题目要求输入的是字符串
27、,所以可以排除getchar,而且要求输入的字符串中包含空格,而scanf函数默认将输入的空格字符作为分割符,所以空格不会被输入,故可排除scanf。getc的作用是从文件中输入一个字符,故也不可取。gets函数可以输入一整行作为一个字符串,其中也包括空格字符,故应该选择C。第37题:参考答案:D答案解析:本题考查的知识点是:字符串。 C语言中只有字符串常量而没有字符串变量,故选项A不正确:字符串比较大小是以第1个不相同字符的大小为标准的,跟长度没有关系,故选项B不正确;字符串比较大小除了使用库函数strcn3()以外,就只能靠自己写代码来实现了,而不能通过关系运算符来比较大小。因为字符串在表
28、达式中相当于const char*,即常字符指针,代表的是字符串的首地址,关系运算符会将两个字符串的首地址值比较大小,这是毫无意义的。所以选项C也不正确。空串的长度为0,而以空格打头的字符串的长度至少为 1,故选项D正确,本题应该选择D。第38题:参考答案:D答案解析:本题考查的知识点是:while循环的简单应用。函数fun()中,前一个while循环的作用是:如果形参指针t所指内容不为0,则让t增1,直到它指向0。后一个 while循环的作用是:将s所指内容赋给t所指地址,然后两者同时增1,直到赋给t的内容为0。由此可见,函数fun()的作用就是将形参s所指字符串连接到形参t所指字符串末尾,
29、相当于库函数中的strcat()。主函数中使用fun()将数组aa中的字符串连接到了数组ss中原有字符串之后,所以执行完后,ss中的字符串为accbbxxyy。故最终输出的结果是:accbbxxyy,bbxxyy,应该选择D。第39题:参考答案:D答案解析:本题考查的知识点是:for循环的简单应用,选择排序算法。在函数fun()中有一个两层嵌套的for循环,外循环变量i从0递增到n-2,内循环变量i从i+1循环递增到n-1,这是选择排序算法的标准结构。循环体中因为逆序条件为“si0 sj0”,所以实现的是升序排序。由此可见,fun()函数实现的功能是对一个二维字符数组前n行的首字符进行升序排序
30、。主函数中定义的二维数组初始化为bcc,”bbcc, xy,aaaacc,aabcc,通过fun()函数的排序后,结果将为acc,abcc,by, baaacc,xabcc。故最终输出字符串ss0和ss4的结果为acc,xabcc,应该选择D。第40题:参考答案:D答案解析:本题考查的知识点是:全局变量的作用域。全局变量的有效范围是从定义变量的位置开始到本源文件结束。如果需要在其他源文件中使用该全局变量,则可以在其他源文件中使用extern关键字来声明该全局变量,这样该全局变量的作用域就被扩展到以extern声明了该全局变量的位置开始到此源文件结束。故本题的正确答案为D。第41题:参考答案:A
31、答案解析:本题考查的知识点是:静态局部变量。静态局部变量的作用域跟一般局部变量相同,都是从声明处开始到声明所在函数或语句块结束为止。但静态局部变量的生存周期却是从第1次执行到该静态局部变量的声明语句时起,直到程序结束。而般局部变量的生存周期到离开它的作用域时就结束了。本题的f()函数中static int a=2;语句就声明了一个静态局部变量a,并初始化为2。主函数中,通过一个for循环连着调用了2次f()函数。两次调用形参c都为3,f()函数中让c增1变为4,然后输出(a+) +c,第1次调用a为2,所以输出结果为3+4=6,而第2次调用a被上次调用时的+运算符增1,所以为3,输出结果为3+
32、4=7。所以主函数for循环结束后,k的值是13,下面一条k+=a;语句中的a是全局变量a,值为1。故最终输出结果是14,应该选择 A。第42题:参考答案:A答案解析:本题考查的知识点是:函数的递归调用。在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。本题中的fun()函数直接调用了自身,所以它是一个递归函数。fun()函数中,当形参n为1或2时,让形参p所指内容为1。从这里可以看出形参p的用途是输出一个整数,所以我们不妨记作fun(1)=1、 fun(2)=1。如果是其他情况,那么输出结果*p的内容为f(n)=f(n-1)+f(n-2)。由此可见, fun()函数
33、的作用是求斐波纳契数列第n项的值(斐波纳契数列第1和2项的值为1,以后各项分别为前两项之和:1、1、2、3、5、8、13)。主函数中通过fun()函数,求第3项值;所以输出结果为2,故应该选择A。第43题:参考答案:B答案解析:本题考查的知识点是:宏定义。宏定义是预处理命令,即在C源程序进行编译之前,编译程序对源程序进行编译预处理时所进行的一种替换操作。所以选项C和 D可以排除。宏定义是用宏名代替一个字符串,也就是作简单的置换,不做正确性检查。所以选项A的叙述也不正确,宏替换时100被当作一个字符串来替换宏名的,而不是被看作整数值100。故本题的正确答案为B。第44题:参考答案:A答案解析:本
34、题考查的知识点是:typedef关键字。typedef关键字是用来给已有的类型起个新的名字,以增加程序的可读性的。所以,通过typedef是不可能增加新的类型的,故应该选择A。第45题:参考答案:D答案解析:本题考查的知识点是:结构体数组。题目中定义了一个全局结构体数组a,结构体中包含两个成员:一个int型变量x和一个自身类型指针y。所以,结构体数组a的初始化列表中每两个初始化一个结构体元素。主函数通过一个for循环,连续调用了两次输出函数printf(),每次输出p所指元素的x成员值。p初始化时指向数组 a的首地址,即a0的位置,所以第1次输出的值为20。然后又将a0的成员y的值赋给p,y在
35、初始化时是a+1,所以p在第2次输出时指向的元素是a1,故第2次输出的值为15。所以本题最终输出结果是“20,15,”,应该选择D。第46题:参考答案:C答案解析:本题考查的知识点是:结构体。本题的f()函数中,首先定义了一个STU结构体变量b并初始化为Zhao,m,85.0,90.0,然后分别通过strcpy()库函数、赋值语句和for循环,将b中所有成员分别赋给形参a的相应成员,最后返回a。所以,无论传递给函数fun()的参数是什么,结果返回的都会是函数中定义的STU结构体b的内容Zhao,m,85.0,90.0。故最终输出结果为:Zhao,m,85,90,应该选择C。第47题:参考答案:
36、D答案解析:本题考查的知识点是:联合体。联合体的所有成员共占同一段内存,所以联合体变量的长度与它的最长成员所占长度致,本题中float所占内存字节数为4,而 int类型在TurboC 2.0中是占2字节、在VisualC+6.0中占4字节,所以int类型所占内存字节数不会超过float,那demo就与成员d2所占字节数是相同的,选项A的说法正确。联合体的所有成员的首地址都是相同的,和联合体变量的地址一致。故选项B和C都是正确的。由于int类型数据和float类型数据在内存中的存放格式是不一样的,所以给d1赋99后,d2中不会得到99.0这个值。故选项D不正确,答案应该选择D。第48题:参考答案
37、:D答案解析:本题考查的知识点是:位运算。在C语言中,整型数据在内存中是按二进制形式存放的,位运算就是直接对这些二进制进行操作的一系列运算符。例如题目中a、 b、c的值分别为1、2、3,那它们在内存中存放的样子就是:0001、0010、0011(由于数据不大,int类型本来要占4字节也就是32位二进制的,这里就省写为4位了)。 “”运算符的作用是:按位异或。意思是:两个操作数对应的二进制位如果相异,则结果对应的二进制位为1,否则结果对应二进制位为0。所以00010010=0011。“&”运算符的作用是:位与。意思是:如果两个操作数对应的二进制位同时为1,则结果对应的二进制位为1,否则结果对应二
38、进制位为0。所以0011&0011=0011,也就是十进制的3,故本题最终输出结果为3,应该选择D。第49题:参考答案:C答案解析:本题考查的知识点是:fread()函数。 fread()函数的原型是: int fread(char*pt,unsigned size,unsigned n,FILE*fp); 功能是:从中所指定的文件中读取长度为size的n个数据项,存到pt所指向的内存区。因此本题中的buffer是一个内存块的首地址,代表读入数据存放的地址。故应该选择C。第50题:参考答案:D答案解析:本题考查的知识点是:文件的操作。本题首先定义了个文件指针fp,然后通过fopen()函数打开
39、一个名为d2dat的文件,参数wb的意思是:为写入打开的二进制文件。然后通过fwrite()函数,将数组a的前5个元素2次写入d2.dat文件中,接下来用fclose()函数关闭此文件。然后又使用fopen()函数打开d2.dat文件,参数rb的意思是:为读入打开的二进制文件。接下来通过fread()函数从文件中读入10个int型数据到数组a中。然后又使用fclose()函数再次关闭此文件。最后通过for循环,输出数组a的所有10个元素。不难得知,现在a中的元素已经变为1,2,3,0,0,1,2,3,0,0,故最终输出结果为1,2,3,0,0,1,2,3,0,0,0,。应该选择D。二、填空题第
40、51题:参考答案:正确性详细解答:本题考查软件工程中需求规格说明书的评审。衡量需求规格说明书好坏的标准按重要性次序排列为:正确性、无歧义性、完全性、可验证性、一致性、可理解性、可修改性和可追踪性。因此,划线处应填入“正确性”。第52题:参考答案:白盒 或 白箱 或 白盒子 或 WhiteBox详细解答:本题考查软件工程的测试。测试一般有两种方法:黑盒测试和白盒测试。黑盒测试不考虑程序的内部逻辑结构和处理过程,只着眼于程序的外部特性。用黑盒测试来发现程序中的错误,必须用所有可能的输入数据来检查程序能否都能产生正确的输出。白盒测试是在了解程序内部结构和处理过程的基础上,对程序的所有路径进行测试,检
41、查路径是否都能按预定要求正确工作。因此,划线处应填入“白盒(箱)”或“White Box”。第53题:参考答案:顺序详细解答:本题考查数据结构的队列。队列是一种特殊的线性表,即限定在表的一端进行删除,在表的另一端进行插入操作的线性表。允许删除的一端叫做队头,允许插入的一端叫做队尾。线性表的存储结构主要分为顺序存储结构和链式存储结构。当队列用链式存储结构实现时,就称为链队列;当队列用顺序存储结构实现时,就称为循环表。因此,本题划线处应填入 “顺序”。第54题:参考答案:ACBDFEHGP详细解答:本题考查数据结构中二叉树的遍历。根据对二叉树根的访问先后顺序不同,分别称为前序遍历、中序遍历和后序遍
42、历。这三种遍历都是递归定义的,即在其子树中也按照同样的规律进行遍历。下面就是中序遍历方法的递归定义。当二叉树的根不为空时,依次执行如下3个操作: (1)按中序遍历左子树。 (2)访问根结点。 (3)按中序遍历右子树。 根据如上前序遍历规则,来遍历本题中的二叉树。首先遍历F的左子树,同样按中序遍历。先遍历C的左子树,即结点A,然后访问C,接着访问C的右子树,同样按中序遍历C的右子树,先访问结点B,然后访问结点D,因为结点D没有右子树,因此遍历完C的右子树,以上就遍历完根结点F的左子树。然后访问根结点F,接下来遍历F的右子树,同样按中序遍历。首先访问E的左子树,E的左子树为空,则访问结点E,然后访
43、问结点E的右子树,同样按中序遍历。首先访问G的左子树,即H,然后访问结点G,最后访问G的右子树P。以上就把整个二叉树遍历一遍,中序遍历的结果为ACBDFEHGP。因此,划线处应填入“ACBDFEHGP”。第55题:参考答案:实体 或 实体集 或 Entity详细解答:本题考查数据库的E-R图。E-R模型中,有三个基本的抽象概念:实体、联系和属性。E-R图是E-R模型的图形表示法,在E-R图中,用矩形框表示实体,菱形框表示联系,椭圆形框表示属性。因此,划线处应填入“实体”或“实体集”或“Entity”。第56题:参考答案:12 34详细解答:本题考查的知识点是:Scanf()函数。 scanf(
44、)是标准输入函数;其第1个参数为格式控制字符串。其中“%2d”表示读入一个2个字符宽的整数。所以本题代码将连续读入2个2字符宽的整数分别存到变量a和b中。根据题目要求,输入数据1234567CR,则scanf()读入的两个整数分别为 12和34,故输出结果为12 34。第57题:参考答案:a:b c:t1详细解答:本题考查的知识点是:条件表达式。 条什表达式类似于if语句,根据“?”前面子表达式的逻辑值来判断应该计算“:”前面的子表达式还是后面的作为整个条件表达式的结果。题目要求输出a、b、c三个变量中的最小值,所以当ab时,应该选a,否则选b,故前一空应填a:b。同样的道理,后一空应填c:t
45、1。第58题:参考答案:54321详细解答:本题考查的知识点是:%运算和/运算。%运算要求两个运算分量均为整数,该运算计算两个整数相除得到的余数,该操作也叫做求模。所以,在while循环中, d=n%10;语句每次求得的结果是n个位上的数值,例如1234510所得的余数就是个位上的5。接下来输出得到的个位数字d,然后执行n/=10;语句,该语句等价于n=n/10;。在C语言中,如果/运算的两个运算分量都是整数,那所得的结果也截尾取整,所以 12345/10=1234,即n=n/10;语句的作用是让n截去个位上的数字。由此可知,随着while循环的继续,n依次为12345、1234、123、12
46、、1,而每次输出n的个位数字将为5、 4、3、2、1。故本题应填54321。第59题:参考答案:k=n 或 n=k K+详细解答:本题考查的知识点是:while语句和for语句。 while语句和for语句的作用都是循环控制语句的执行,两者之间是可以互相转换的。将while(EXP)转换为for语句可以写成for(;EXP;);将for(EXP1;EXP2;EXP3)转换为while语句可以写成:EXP1;while(EXP2) EXP3;。故本题的两个空分别应填写for语句的第2和第3个表达式。即K=n或n=K和k+。当然也可写成与之等价的其他形式。第60题:参考答案:ACE详细解答:本题考查的知识点是:大小写字母转换。 题目中for循环的循环变量i从字符a变到字符e,但由于每次循环后都连续执行了两次i+,所以for循环将执行3次,循环变量i的值依次为a、c、e。循环体中