1、2011 年计算机等级考试二级 C 语言全真模拟试卷 (2)总分:100 分 及格:60 分 考试时间:90 分一、选择题(每题 1 分,共 10 分) 下列各题 A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)设 i 是 int 型变量,f 是 float 型变量,用下面的语句给这两个变量输入值:( )(2) ( )(3)将 7 个数据进行简单插入排序,在最坏情况下需要比较的次数是( )(4)若以下选项中的变量已正确定义,则正确的赋值语句是( )(5) 程序的执行结果是( )(6)下列叙述中错误的是( )(7)以下选项中不属
2、于 C 语言的类型的是 ( )(8)( )(9)( )(10)( )(每题 2 分,共 60 分)下列各题 A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)现有定义 int k=1;则执行语句 while(+k4);后,k 的值为( )(2) ( )(3) ( )(4) ( )(5)按“先进后出”原则组织数据的是 ( )(6)(7) ( )(8)( )(9)下列叙述中正确的是( )(10) ( )(11)判断 char 型变量 cl 是否为大写字母的正确表达式是( )(12)下列叙述中,不符合良好程序设计风格要求的是( )(1
3、3) ( )(14) ( )(15)数据处理的最小单位是 ( )(16)在最坏情况下,下列各排序方法的比较次数正确的是 ( )(17)下列关于关系运算的叙述中正确的是( )(18)在下列关系运算中,可能改变关系中属性个数的是( )(19) ( )(20)为了判断两个字符串 s1 和 s2 是(31) 假定 a 和 b 为 int 型变量,则执行以下语句后 b 的值为 ( )(21) ( )(22)下列叙述中,错误的是( )(23)对下列二叉树进行中序遍历的结果是 ( )(24)下列描述中不正确的是( )(25)阅读下面程序,则执行后的输出结果为( )(26)( )(27)一个关系中属性个数为
4、1 时,称此关系为( )(28) ( )(29) ( )(30) ( )二、填空题(每空 2 分,共 30 分)(1) (2)(3) (4)在使用putchar 和 getchar 函数处理字符时。必须在程序的开头出现包含头文件的命令行是_。(5) (6)对 n 个元素的序列进行冒泡排序时,最少的比较次数是_。(7)符合结构化原则的三种基本控制结构为:顺序结构,选择结构和【2】 。 (8) (9)设二叉树根结点的层次为 0,对含有 l00 个结点的二叉树,可能的最大树深和最小树深分别是_。(10)数据模型按不同的应用层次分成三种类型,它们是_ 、逻辑数据模型和物理数据模型。(11)(12)(1
5、3)(14)stract 函数的作用是_。(15)答案和解析一、选择题(每题 1 分,共 10 分) 下列各题 A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1) :B(2) :D(3) :D对长度为 n 的线性表进行简单插入排序,在最坏情况下需要 n(n-1)/2 次比较。现线性表的长度为 7,在最坏情况下需要比较的次数为 7(7-1)/2=21。 (4) :C选项 A 的赋值语句中,右侧的表达式是 %(求余)表达式,而%运算符只能对整数进行运算,因此选项 A 是错误的。选项 B 是赋值语句,按照运算顺序是等号右边的表达式赋值
6、给左边的变量,但 1+2=x2 赋值顺序正好反了,因此选项 B 也是错误的。选项 D 是连续赋值表达式,运算顺序从右至左,首先执行 1+2=3,将 3 赋值给 1+2 的表达式,这是完全错误的。因此选项 D 也是错误的。(5) :D函数 fun 的功能是当 xY 时返回 X,否则返回 Y,也就是求 x,Y 中的最小数。fun(fun(a,b) ,fun(b ,c)就是先进行 fun(a,b)和 fun(b,c)调用,结果是 b 和 C,再进行fun(b,c)调用,结果是 C,输出结果是字符 7。(6) :D软件的运行不仅对计算机硬件具有依赖性,如果是应用软件,还依赖于操作系统等系统软件。因此,
7、D 项是错误的。(7) :Dlong short 不是 C 语言的类型,因为无法确认到底是 long 类型还是 short 类型。(8) :D(9) :D(10) :B(每题 2 分,共 60 分)下列各题 A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1) :Awhile 循环是先判断循环条件之后再进入循环体。这个题目的循环体是空语句,每次做的仅仅是判断循环的条件,由于+运算优先于,所以每次都先 +,后比较。(2) :B(3) :A此题的考点是 C 语言参数的传递和结构体作为参数传递。由于 C 语言的参数传递是传值的,因此函数
8、 f1 中对 C 的赋值,并不影响实参 C 的值。但函数 f2 传递的是结构指针,f2(b) ;调用后,函数 f2 中对*C 的赋值,也就是对 b 的赋值,改变了 b 的值。输出结果应该是2041 2044。正确选项是 A。 (4) :B该题是一个 for 循环嵌套语句。第一层 for 循环循环 2 次,第二层循环 3 次,但当 j 等于 1时,将执行 continue 语句,不执行 x+运算,所以每次执行完内循环后,x 的增量为 2。最后一个 x+运算将每次累加起来就是 X 的值。(5) :B栈是按“先进后出”原则组织数据的,队列是按“先进先出” ,原则组织数据的。 (6) :C(7) :D
9、(8) :D(9) :A略(10) :C本题的考点是 C 语言中 switch 语句的执行控制问题。for 循环将循环 i_0、1、2 三种情况,当 i=0 时,进入 switch 语句的 case 0,打印出 0,由于没有 break 语句终止循环,将继续执行下面的两个 printf 语句,再输出两个 0。当 i=1 时,进入 switch 语句的 default,输出 1。当 i=2 时,进入 switch 语句的 case 2,输出 2,接着执行下面的输出语句再一次输出 2。各数字之间没有空格回车等分隔符,所以正确答案是选项 C。(11) :D(12) :A良好的程序设计风格的首要要求是
10、“清晰第一、效率第二” 。(13) :C(14) :B(15) :C数据处理的最小单位是数据项;由若干数据项组成数据元素;数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。 (16) :D在最坏情况下,冒泡排序和简单插入排序的比较次数均为 n(n-1)/2。(17) :C略(18) :C投影运算是在给定关系的某些域上进行的运算。通过投影运算可以从一个关系中选择出所需要的属性成分,并且按要求排列成一个新的关系,因此,经过投影运算后,会取消某些列,即投影运算可能改变关系中属性的个数。 (19) :D(20) :D判断两个字符串 s1 和 s2 是否相等,
11、不能使用关系运算符来判定,因此选项 A 是错误的。选项 B 是将 s2 赋值给 s1,没有判断两个字符串是否相等,对于用静态数组名存放的数组,这种赋值是不允许的,因此选项 B 也是错误的。选项 c 的 if(strcpy(s1,s2)是把字符串 s2复制到 s1 上,也没有判断两个字符串是否相等,因此选项 c 也是错误的。只有选项 D 的if(!strcmp(sl,s2)是判断两个字符串 sl 和 s2 是否相等,当相等时,函数 sfrcmp 返回值是0,if(!strcmp(s1,s2)条件为真。(21) :C在 switch 语句里有 i+,所以 for 循环的计数变量 i 在循环体内就被
12、改动,导致循环提前退出。当 for 循环从 0 开始循环,switch 语句有匹配的标号,自匹配的标号到 swich 语句结束,执行各个 case 语句,当 switch 语句结束时,i 的值已经为 4,再加上 for 循环的自增 1,i值已经为 5,所以不再满足循环条件,退出循环。(22) :B略(23) :C二叉树中序遍历的方法:在访问根结点、遍历左子树与遍历右子树这三者中,首先遍历左子树,然后访问根结点,最后遍历右子树;并且在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右予树。对本题中的二叉树进行中序遍历的结果应是TZBACYXP。 (24) :D在一个函数内的复合语句中
13、定义的变量只在相应的复合语句中有效,复合语句结束,则变量的生存期结束。因此不正确的是选项 D。(25) :D在 C 中,数据只能从实际参数单向传递给形参。(26) :B(27) :C在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有 N 个属性的关系称为 N 元关系。(28) :D(29) :A(30) :C由于 P 是 int 型指针,若要使 P 指向 data 中的 a 域,必须将 dataa 的地址给 P,也就是p=data a。其他赋值语句都是错误的。二、填空题(每空 2 分,共 30 分)(1) :(2) :15,16(3) :31(4) :(5) :(6) :n1【解析】当初始元素正序时,第一趟比较 n1 次,交换数为 0,完成排序。 (7) :循环结构 (8) :0,9,1,8,2,7,3,6,4,5,(9) :99 和 6(10) :概念数据模型(11) :k=p;【解析】程序中,存储临时最大元素下标的变量是 k,当发现当前元素 sp比临时最大元素 sk更大时,应该用 P 更新 k。所以在空格处应填入代码 k=p;。(12) :(13) :(14) :连接两个字符数组中的字符串(15) :8