二级C语言笔试-303_第1页
二级C语言笔试-303_第2页
二级C语言笔试-303_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、二级 C 语言笔试 -303(总分:100.00,做题时间: 90分钟)一、选择题 (总题数: 40,分数: 70.00)1. 以下数组定义中错误的是 ( ) 。(分数: 2.00 )A. int x3=0B. int x23=1C. inf x3=1D. int x23=15, 2, 3, 4, 5, 6; V , 2, 3 , 4 , 5, 6);, 2, 3, 4, 5, 6;解析: 解析 本题考核的知识点是二维数组的定义及初始化。在定义一个二维数组同时初始化时,其第一 维的长度可以省略。二维数组的初始化列表可以只使用一重花括号,其中的每个值依次代表从第 1 行的第 1个元素起,直到第1

2、行满,接着代表第2行、第3行的每一个元素,若第 1维长度没有省略,则这 些值总个数不得超过两个维度的乘积。故选项A)和D)是正确的。二维数组的初始化列表还可以使用二重花括号括起来,其中每一个内花括号代表一行的值,在内花括号中值的个数不得超过数组第二维的长度,若 不足第2维长度,则该行多出部分值被初始化为0,若第一维省略,花括号的个数代表行数。B)选项第一维为2,故只有两行,但有三个花括号超出了行的要求,所以B)错误。2. 数据流程图(DFD图)是()。(分数: 2.00 )A. 软件概要设计的工具B. 软件详细设计的工具C. 结构化方法的需求分析工具VD. 面向对象方法的需求分析工具解析: 解

3、析 常见的需求分析方法有:结构化分析方法和面向对象的分析方法。结构化分析就是使用数据 流图(DFD)、数据字典(DD)、结构化英语、判定表和判定树等工具,来建立一种新的、称为结构化规格说明 的目标文档。3. 以下能正确定义一维数组的选项是 ( ) 。(分数: 2.00 )A. int a5=0, 1, 2, 3, 4, 5 ;B. int a=0, 1, 2, 3, 4, 5; VC. char a=('A', 'B' , 'C') ;D. int a5="0123";解析: 解析 本题考查的是一维数组的定义及初始化。定义并初

4、始化一维数组的一般形式如下:类型名 数组名常量表达式 = 初始化列表 ; 当使用初始化列表初始化数组时, 需要注意以下几点: 初始化列表项的个数必须小于等于常量表达式的值, 因此选项A)是错误的;常量表达式可以省略,但不能省略其外面的中括号,因此选项C)是错误的;当类型名为 char 时, (初始化列表 可以用一个字符串常量来代替,由于字符串常量必须以 '/0' 结尾, 所以此时的 初始化列表项的个数是字符串常量的长度加1,选项D)的类型是int,不能使用字符串常量初始化,所以D)错误。4. 以下选项中不能作为C语言合法常量的是()。(分数: 2.00 )A. 'cd&

5、#39;VB. 0.1e+6C. "/a"D. '/011'解析:解析本题考查的是C语言的常量。0.1e+6是实型常量的指数形式,代表0.1 X10的6次方,所以选项B)是合法的;"/a"是合法的字符串常量,/a是一个非打印的转义字符表示响铃,所以选项C)是合法的;7011'是一个字符常量,/011是一个用3位八进制表示的转义字符,所以选项D)也是合法的。在C语言中,字符常量是用单引号括起来的一个字符,选项A)中的'cd'包含了 2个字符,所以是不正确的。5. 有以下程序:#includeint f(int x)i

6、nt y ;lf (x=0|x=1)return(3);y=x*x-f(x-2) ;return y ;main()int Z ;z=f(3) ; printf("%d/n" , z) ;程序的运行结果是 ( ) 。(分数: 2.00 )A. 0B. 9C. 6 VD. 8解析: 解析 本题主要考查的是递归函数。题目中的 f() 函数直接调用了自身,是一个递归函数。主函数 中调用 f() 函数时传人的参数是 3,所以会跳过 if 语句,执行 y=x*x-fx-2) ;,也就是 y=3*3-f(1);,再次调用川函数, 传入参数 1,此时满足 if 语句的条件, 返回 3。所

7、以前面的 y=3*3-f(1) ;就等价于 y=3*3-3 ;, 结果是 6,所以返回给主函数的结果是 6。故本题应该选择 C)。6. 对于现实世界中事物的特征,在窦体一联系模型中使用 ( ) 。(分数: 2.00 )A. 属性描述 VB. 关键字描述C. 二维表格描述D. 实体描述解析: 解析 本题考查对实体一联系模型的理解和掌握。在实体一联系模型中,用属性来描述现实世界中对象的属性所表示的对象的性质、特征和行为,因此正确答案为选项A)。7. 下列描述中正确的是 ( ) 。分数: 2.00 )A. 软件工程只是解决软件项目的管理问题B. 软件工程主要解决软件产品的生产率问题C. 软件工程的主

8、要思想是强调在软件开发过程中需要应用工程化原则VD. 软件工程只是解决软件开发中的技术问题解析: 解析 软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科,所谓软件工程是指, 采用工程的概念、原理、技术和方法指导软件的开发与维护。软件工程学的主要研究对象包括软件开发与 维护的技术、方法、工具和管理等方面。由此可见,选项A)、选项B)和选项D)的说法均不正确,选项C)正确。8. 设有以下定义和语句:int a32=1 , 2, 3, 4, 5, 6, *p3 ;p0=a1 ;则 *(p0+1) 所代表的数组元素是 ( ) 。(分数: 2.00 )A. a01B. a10C. a11VD

9、. a12解析: 解析 本题考核的知识点是二维数组的定义和指针数组的基本概念。本题中首先定义了一个3行 2列的数组a,一个长度为3的指针数组p,接着把地址a1赋给p0此时p0为a10的地址,p0+1 为a11的地址,故+(p0+1)代表的元素为a11。所以,4个选项中选项C)符合题意。9. 有以下程序:#includeint fun(int(*s)4, int n , int k)int m , i ;m=s0k ;for (i=l ; i <n; i+)if (sik> m)m=sik;return m ;main()int a44=1, 2, 3, 4, 11, 12, 13,

10、 14, 21, 22, 23, 24, 31, 32, 33, 34;printf("%d/n" , fun(a , 4, 0) ;程序的运行结果是 ( ) 。(分数: 2.00 )A. 4B. 34C. 31VD. 32解析: 解析 本题考查的是二维数组的定义、赋初值和对二维数组元素的引用。在fun() 函数中,首先将s0k的值赋给m然后通过for循环,遍历s1k-sn-1k之中的数,将遇到的比 m大的数保存到m中。很显然,这是搜索最大值的算法, 搜索的是s0ksn-1k之间的最大值。所以,主函数中fun (a, 4, 0)的功能就是搜索 a00-a30 之间的最大值,

11、这 4个值分别是 1、 11、 21、 31,所以最终输 出结果是 31 ,应该选择 C)。10. 在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为 ( ) 。(分数: 2.00 )A. 63B. 64 VC. 6D. 7解析: 解析 对有序线性表进行顺序查找,首先用被查找的数据和线性表的第一个数据元素进行比较,若 相等,则查找成功;否则,继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查 找成功;否则,继续进行比较。 依次类推, 直到在线性表中查找到该数据或查找到线性表的最后一个元素, 算法才结束。因此,在长度为 64 的有序线性表中进行顺序查找,最坏的

12、情况下需要比较 64 次。11. 下列叙述中正确的是 ( ) 。(分数: 1.00 )A. break 语句只能用于 switch 语句B. 在 switch 语句中必须使用 defaultC. break 语句必须与 switch 语句中的 case 配对使用D. 在 switch 语句中,不一定使用 break 语句 V解析: 解析 本题主要考查 switch 语句的概念。 break 语句除了能用于 switch 语句外,还可以用于循环 语句中,因此选项 A) 不正确。在 switch 语句中,可以使用 default 来执行所有 case 均失配时的分支,也 可以不使用default

13、,此时若所有case均失配则跳出switch,因此选项B)不正确。在switch语句中,每 个 case 的作用就是标出一个执行的起点, 当符合某个 case 时,程序就从该 case 所标出的起点处开始执行, 若没有 break 语句中断执行的话, 程序会一直执行到 switch 的最后一条语句, 而不是碰到下一个 break 才 停止执行,所以C)不正确。12. 以下叙述中错误的是 ( ) 。(分数: 1.00 )A. gets 函数用于从终端读入字符串B. getchar 函数用于从磁盘文件读入字符 VC. fputs 函数用于把字符串输出到文件D. fwrite 函数用于以二进制形式输

14、出数据到文件解析: 解析 本题主要考查的是输入输出函数。从终端输入的函数有: scanf 、getchar 、gets 。输出到屏 幕的函数有: printf 、putchar 、puts 。从磁盘文件输入的函数有: fscanf 、fgetc 、fgets 、fread 、getc 。 输出到磁盘文件的函数有:fprintf 、fputc、fputs、fwrite 、putc。由此可见,选项 B)的说法是错误的。13. 有以下程序:#includemain()int i=5;doif(i%3=1)if(i%S=2)printf("*%d" , i) ;break ;i+

15、;while(i!=0) ;printf("/n") ; 程序的运行结果是 ( )(分数: 1.00 )A. *7 VB. *3*5C. *5D. *2*6解析:解析本题考查的是break语句。dowhile 循环是"先执行,后判断”,所以无论条件如何,它 都至少会执行一遍。程序首先初始化变量i为5,然后进入dowhile循环体,首先判断(i%3=1),因为5%3=2,所以 if 条件不满足,跳过下面的 if 语句,执行 i+ , i 变为 6。第 1 遍循环结束,判断 (i!=0) 为 真,继续循环。现在 1%3=6%3=,0所以 if 语句还是不被执行,继续

16、i+, i 变为 7,仍然满足 (i!=0) ,继续 循环。第3遍循环1%3=7%3=,1满足条件(i%3=1),继续判断条件i%5=2成立,即输出*7,然后执行break 语句跳出循环。14. 以下不能定义为用户标识符是 ( ) 。(分数: 1.00 )A. MainB. 0C. intD. sizeofV解析:解析本题考查的是C语言中的标识符与关键字。合法的标识符由字母、数字和下划线组成,并且 第一个字符必须为字母或下划线。另外,C语言规定了一批关键字,它们在程序中都代表着固定的含义,不能另作他用,所以合法的标识符也不能是C语言的任一关键字。本题中,选项 A)、B)、C)都符合上述条件,只

17、有选项D)sizeof是C语言中的关键字,所以,4个选项中选项D)符合题意。15. 以下关于 long、 int 和 short 类型数据占用内存大小的叙述中正确的是 ( ) 。(分数: 1.00 )A. 均占 4 个字节B. 根据数据的大小来决定所占内存的字节数C. 由用户自己定义D. 由 C 语言编译系统决定 V解析:解析在C语言的标准中,short占2个字节、long占4个字节,但int的大小和编译系统相关。 例如在Turbo C 2.0 中,int占2个字节,但在 Visual C+ 6.0(VC6 可以用做C语言编译器)中占4个字 节。故本题应该选择 D)。16. 有以下程序:#in

18、clude#includetypedef struct char name9 ;char sex ;float score2; STU;void f(STU分数: 1.00 )A.STU b="2hao" , 'm' , 85.0 , 90.0 ;int i strcpy( , ); a.sex=b.sex ;for(i=0 ;1 < 2 ; i+)a.scorei=b.scoreimain()STU c="Qian",'f'95,92;f(C) ;printf("%s ,%c,%d

19、,%d",,c.sex ,c.score0, c.score1);A) Qian ,f,95,92VB. Qian ,m,85, 90C. Zhao ,f ,95,92D. Zhao,m,85,90解析: 解析 本题考查的是结构体变量用作函数参数。结构体变量用作函数参数时是传值调用,即在函数 内部无论怎样修改形参结构体变量的内容, 都不会影响到调用函数时传递给函数的实参结构体变量。 因此, 本题的川函数没有任何实际作用,它改变不了什么内容。故本题的结果是定义结构体 c 时给出的初始值, 应该选择 A) 。17. 有以下程序:int fun(int x , int n)st

20、atic int sum=0 , i ;for(i=0 ; i < n ; i+)sum+=xi;return sum ;main()inf a=1,2,3,4,5,b=6 ,7,8,9,s=0;s=fun(a ,5)+fun(b ,4) ; printf("%d/n",s) ;程序执行后的输出结果是 ( ) 。(分数: 1.00 )A. 45B. 50C. 60 VD. 55解析: 解析 本题主要考查的知识点是静态局部变量的运用。如果在定义一个局部变量时使用了static关键字,则这个局部变量就被定义成了一个静态局部变量。一般的局部变量随着函数被调用而诞生,在函 数

21、返回时被销毁。而静态局部变量在函数调用结束后不会被销毁,在下一次该函数被调用时,还会保留上 一次函数调用结束时的值。本题中 fun() 函数通过一个 for 循环来累计形参数组 x 的前 n 个元素之和。在 主函数中,第 1 次调用 fun (a , 5) 时,返回的值应该是数组 a 的前 5 个元素的和,而第 2 次调用 fun(b , 4) 时,返回的值除了本次累计的数组 b 前 4 个元素和之外还有上次累计的数组 a 的前 5 个元素的和,所以 累加结果为 60。18. 若有以下宏定义:#define N 2#define Yn)(N+1)*n)则执行语句 Z=2+(N+Y(5) ;后结

22、果是 ( ) 。分数: 1.00 )A. 语句有误B. Z=34 VC. Z=70D. Z 无定值 解析: 解析 本题考查的是带参数的宏。 在此处需要直接替换整个式子, 2*(N+Y(5) 即为 2+(2+(2+1)+5) 可得结果为 34。19. 以下叙述中错误的是 ( ) 。(分数: 1.00 )A. 对于 double 类型数组,不可以直接用数组名对数组进行整体输入或输出B. 数组名代表的是数组所占存储区的首地址,其值不可改变C. 当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息VD. 可以通过赋初值的方式确定数组元素的个数解析:解析本题考查的是数组的

23、基本概念。在C语言中,除字符数组外,一个数组不能通过数组名对数组进行整体引用,因此选项 A)是对的。数组名中存放的是一个地址常量,它代表整个数组的首地址,因此 选项B)是对的。C语言程序在运行过程中,系统不自动检验数组元素的下标是否越界,因此选项C)是错误的。C语言规定可以通过赋初值来定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大 小,因此选项D)也是正确的。所以,4个选项中选项C)符合题意。20. 下列叙述中正确的是 ( ) 。(分数: 1.00 )A. 软件测试应该由程序开发者来完成B. 程序经调试后一般不需要再测试C. 软件维护只包括对程序代码的维护D. 以上三种说法都不

24、对 V解析: 解析 因为-测试的目的在于发现错误,从心理学角度讲,由程序的编写者自己进行测试是不合适 的,为了达到最好的测试效果,应该由独立的第三方进行测试工作,所以选项A)错误;程序调试,修改一个错误的同时可能引入了新的错误,解决的办法是在修改了错误之后,必须进行回归测试,所以选项B)错误;所谓软件维护,就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程,可 见选项C)也是错误的。21. 设变量已正确定义,则以下能正确计算 f=n! 的程序段是 ( ) 。(分数: 2.00 )A. f=0 ;for(i=1 ;i < =n; i+)f*=i;B. f=1 ;for(

25、i=1 ; i < n; i+)f*=i ;C. f=1 ;for(i=n ; i > 1 ; i+)f*=i ;D. f=1 ;fori=n ; i > =2; i-)f*=i; V解析:解析本题考查的是for循环的应用。n!表示1*2+3*-*n。因此,for循环应该遍历1(或者2) n 的范围,而f的初始值应该为1,然后让f累乘每次循环的循环变量即可。选项A)让f初始化为0不正确,因为0乘以任何数都为0,最后结果肯定是0;选项B)的循环变量是从1n-1,也不对;选项C)的for循 环是一个死循环;选项 D)的循环从n递减到2故满足要求,所以选 D)。22. 有以下程序:

26、#includemain()struct STUchar name9 ; char sex ; double score2 ;struct STU a="Zhao" , 'm' , 85.0 , 90.0 , b="Qian" , 'f' , 95.0 , 92.0 ,b=a;prinf("%s ,%c,%2.Of,%2.Of/n" , , b.sex ,b.score0 ,b.score1) 程序的运行结果是 ( ) 。分数: 2.00 )A.Qian , f, 95, 92B.Qian

27、,m,85,90C.Zhao,f,95,92D.Zhao,m,85,90 V解析:解析本题考查的是结构体变量赋值。在C语言中,相同类型的结构体变量可以通过等号直接赋值,它会将对应成员一一对应赋值。所以,本题声明并初始化了两个STU结构体变量a和b,然后将a赋给b,最后逐个输出b的各个成员,其实就是初始化a的内容,故本题应该选择D)。23. 有以下程序:#includevoid WriteStr(char*fn , char*str)FILE*fp ; fp=fopen(fn , "w") ; fputs(str.fp) ; fclose(fp) ;main()WriteSt

28、r("t1.dat", "start") ;WriteStr("t1.dat", "end") ;程序运行后,文件 t1.dat 中的内容是 ( ) 。(分数: 2.00 )A. startB. endVC. startendD. endrt解析:解析本题考查的是文件操作。题中“ fopen(fn,"w")"的作用是打开 fn所指向的文件,使用文 件方式为“写入”; “fputs(str , fp) ”的作用是将字符 str 的值输出到 fp 所指向的文件中去。 在程序中, 两次使用“

29、写入”的方式打开同一个文件,在第二次打开时,文件指针指向文件头,所以此次写入的数据 覆盖了文件原有的数据,故本题中t1.dat的内容为end。故本题答案为B)。24. 若x=2, y=3,_则x&y的结果是()。(分数: 2.00 )A. 0B. 2 VC. 3D. 5解析: 解析 本题考查的是位与运算 &,运算符的作用是:当两个运算分量的对应二进制位如果都是1,则结果对应二进制位为 1 ,否则为 0。计算 2&3的结果为 2。25. 以下程序的输出结果是 ( ) 。#includevoid swap(int*a , int*B) int*t ; t=a ; a=b;

30、b=t ;main()int i=3 , j=5 , *p=&i , *q=&j ;swap(p, q) ; printf("%d%d/n" ,*p ,*q) ;(分数: 2.00 )A. 23B. 34C. 35 VD. 45解析:解析本题主要考查的是函数参数的传递。在C语言中,函数参数的传递是“传值"的,即复制一份实参给形参,形参和实参是完全没有关系的两个变量。所以在函数内部改变形参变量,并不会影响到函 数外部的实参。要实现“传址”调用,必须通过指针。因为将实参指针内容复制给了形参指针后,两个指 针变量虽然没有任何关系,但它们指向的却是同一个内

31、存地址,当改变形参指针所指向的那个内存地址的 内容时,实参指针所指向的内容也就同时被改变了,从而实现了“传址”调用。但是,并不是说只要函数 参数是指针,那肯定就是“传址”调用。故选择 C) 。26. 有以下程序:#includemain()FILE*pf ;char*s1="China" , *s2 ;"Beijing" ;pf=fopen("abc.dat" , "wb+") ;fwrite(s2 , 7, 1 , pf) ;rewind(pf) ; /* 文件位置指针回到文件开头 */fwrite(s1 , 5

32、, 1, pf) ;fclose(pf) :以上程序执行后 abc.dat 文件的内容是 ( ) 。(分数: 2.00 )A. ChinaB. ChinangVC. ChinaBeijingD. BeijingChina解析:解析本题考查的是文件操作。程序首先定义了一个文件指针pf,并使用fopen(函数以"wb+方式新建一个可读写的二进制文件“ abc.dat "。然后使用fwrite()函数写入字符串s2的前7+1个字符。现在文件中的内容应该为: “Beijing ”。 接下来程序使用 rewind() 函数, 将文件的读写指针调回起始位置。 并又调用 fwrite()

33、 函数写入字符串 s1 的前 5*1 个字符。所以文件原内容“ Beijing ”的前 5个字符被覆盖, 结果为“ Chinang”,故本题应该选择B)。27. 有以下程序:main()int i ;for(i=1 ; 1< =40; i+) if(i+%5=0) if(+i%8=0)printf("%d",i) ;printf("/n") ;执行后的输出结果是 ( ) 。(分数: 2.00 )A. 5B. 24C. 32 VD. 40解析: 解析 本题考查了自增运算符。自增运算符“ +”分为前缀和后缀两种形式。两种形式的作用效果是一样的, 都是使

34、运算分量的值加 1 ,但是它们的表达式的值不一样,前缀形式表达式的值为运算分量加 1 之后的值,而后缀形式表达式的值为运算分量加 1 之前的值。题目中使用了一个 for 循环,循环变量 i 从 1递增到40o在循环体中有两条嵌套的if语句,首先判断i+%5=0,即判断i+的值(i加1之前的值)是否能被5整除(判断后i被加1),然后再判断+i的值(i加1之后的值)是否能被8整除(判断后i被加1), 若两个条件都满足了,就输出i的值,只有i=30时,满足i+%5=0,此时i=31,+i%8=0成立,此时 仁32。28. 用C语言编写的代码程序()。(分数: 2.00 )A. 可立即执行B. 是一个

35、源程序 VC. 经过编译即可执行D. 经过编译解释即可执行解析:解析本题考核的知识点是 C程序的基本概念。C语言是一种高级语言,C语言源程序经过C语言 编译程序编译之后,生成一个后缀为 .obj 的二进制文件 ( 称为目标文件 ),最后还要由称为“连接程 序” (Link)的软件,把此 obj文件与C语言提供的各种库函数连接在一起,生成一个后缀exe的可执行文件。显然C语言不能立即执行,故选项 A)错误;根据以上定义,选项 C)和选项D)错误,所以,4个选项中 选项B)符合题意。29. 有以下程序;main()inf a=2, 4, 6, 8, 10 , y=0, x, *p;p=&a

36、1 ;for(x=1 ; x< 3; x+)y+=px ;printf("%d/n" , y) ;程序运行后的输出结果是 ( ) 。分数: 2.00 )A. 10B. 11C. 14 VD. 15解析:解析本题考查的是指针的运用。题目首先申请了一个整型数组a,并让一个指针变量 p指向数组的元素a1。然后使用一个for循环,循环变量x从1递增到2,即循环两次。在循环体中每次让 y累加 px的值,而px写成指针形式就是+(p+x)。所以两次y加的值分别是a2和a3的值,故最终输出6+8=14 应该选择 C)。30. 下列叙述中错误的是 ( ) 。(分数: 2.00 )A.

37、 在数据库系统中,数据的物理结构必须与逻辑结构一致VB. 数据库技术的根本目标是要解决数据的共享问题C. 数据库设计是指在已有数据库管理系统的基础上建立数据库D. 数据库系统需要操作系统的支持解析: 解析 本题考查数据库系统的基本概念和知识。数据的逻辑结构,是数据间关系的描述,它只抽象 地反映数据元素之间的逻辑关系,而不管其在计算机中的存储方式。数据的存储结构,又叫物理结构,是 逻辑结构在计算机存储器里的实现。这两者之间没有必然的联系。因此,选项A)的说法是错误的。数据库可以看成是长期存储在计算机内的、大量的、有结构的和可共享的数据集合。因此,数据库具有为 各种用户所共享的特点。不同的用户可以

38、使用同一个数据库,可以取出它们所需要的子集,而且容许子集 任意重叠。数据库的根本目标是要解决数据的共享问题。因此,选项B)的说法正确。31. 下列叙述中正确的是 ( ) 。(分数: 2.00 )A. 一个算法的空间复杂度大,则其时间复杂度也必定大B. 一个算法的空间复杂度大,则其时间复杂度必定小C. 一个算法的时间复杂度大,则其空间复杂度必定小D. 上述三种说法都不对 V解析: 解析 时间复杂度是指一个算法执行时间的相对度量;空间复杂度是指算法在运行过程中临时占用 所需存储空间大小的度量。人们都希望选择一个既省存储空间、又省执行时间的算法。然而,有时为了加 快算法的运行速度,不得不增加空间开销

39、;有时为了能有效地存储算法和数据,又不得不牺牲运行时间。 时间和空间的效率往往是一对矛盾,很难做到两全。但是,这不适用于所有的情况,也就是说时间复杂度 和空间复杂度之间虽然经常矛盾,但是二者不存在必然的联系。因此,选项A)、B)、C)的说法都是错误的故本题的正确答案是 D)。32. 数据独立性是数据库技术的重要特点之一。所谓数据独立性是指 ( ) 。(分数: 2.00 )A. 数据与程序独立存放B. 不同的数据被存放在不同的文件中C. 不同的数据只能被对应的应用程序所使用D. 以上三种说法都不对 V解析: 解析 数据具有两方面的独立性:一是物理独立性,即由于数据的存储结构与逻辑结构之间由系统

40、提供映象,使得当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修 改;二是逻辑独立性, 即由于数据的局部逻辑结构 (它是总体逻辑结构的一个子集,由具体的应用程序所确 定,并且根据具体的需要可以作一定的修改 )与总体逻辑结构之间也由系统提供映象, 使得当总体逻辑结构 改变时,其局部逻辑结构可以不变,从而根据局部逻辑结构编写的应用程序也可以不必修改。综上所述, 本题的正确答案是 D)。33. 在以下给出的表达式中,与 while(E)中的(E)不等价的表达式是()。(分数:2.00 )A. (!E=O)B. (E > 0|E V 0)C. (E=O) VD. (E

41、!=O)解析:解析本题考查的是逻辑表达式。 在C语言中,整型值可以转换为逻辑值, 规则是当整型值为 0时, 它表示逻辑假;当整型值不为 0时,它表示逻辑真。所以题目中的 while(E)循环是当E等于0时,循环结 束,E不等于0时,继续循环。选项 C)中,当E等于0时,表达式“ E=0为真继续循环,而 E不等于0 时,表达式为假则循环结束,这与题目中的条件不等价,故应该选择C)。34. 下面不属于软件工程的3个要素的是()。(分数:2.00)A. 工具B. 过程C. 方法D. 环境 V解析:解析软件工程包括3个要素,即方法、工具和过程35. 有以下程序:char fun(char x,char

42、 y)if(x v y)return x;return y ;main()int a='9',b; 8 ,c='7'printf"%c/n" ,fun(fun(a ,B) ,fun(b,C);程序的执行结果是()。(分数:2.00 )A. 函数调用岀错B. 8C. 9D.7 V解析:解析本题考核的知识点是函数的返回值以及返回值作为函数的参数。经过分析得岀函数fun()的功能是比较形参x和形参y的大小,返回较小的一个。函数fun()有两个参数。本题中,首先定义了三个整型变量a、b和c,分别赋初值为 9、8和7。然后执行函数fun(fun(a ,

43、b),fun (b ,C)。在该函数中 分别将fun (a ,b)和fun(b,c)函数的返回值作为该函数的两个实参。在函数 fun (a ,b)中,由于a> b, 故返回较小值b即8,在函数fun(b,C)中,由于b> c,故返回较小值c即为7,因此调用函数fun(fun (a, b),fun (b ,C),即fun (8 ,7),故返回较小值为 7。36. 设有如下三个关系表:下列操作中正确的是()(分数:2.00 )A. T=RQSB. T=RUS VC. T=RXSD. T=R/S解析: 解析 两个相同结构关系的“并”是由属于这两个关系的元组组成的集合。37. 若变量均已正

44、确定义并赋值,以下合法的C语言赋值语句是()。(分数: 2.00 )A. x=y=5 ; VB. x=n%2.5 ;C. x+n=i ;D. x=5=4+1 ;解析: 解析 本题考查的知识点是:赋值语句、“ %”运算符。赋值语句由两个运算分量和一个赋值运算 符组成。赋值运算符包括“ =”、“+=”、“+=”等。其中,赋值运算符左侧的运算分量称为左值,右侧的 叫右值。任何合法表达式都可用做右值,但临时值、常量不能用做左值。“%”运算符的作用是求模,意思是做除法求余,这就要求两个运算分量均为整数。选项B)中,2.5不是整数,故非法;选项 C)中,表达式X+n计算后得到的是一临时值,临时值不能做左值

45、,故非法;选项D)中,由于“=”运算符的结合性是“从右到左”,故先计算 5=4+1, 5 是常量不能对其赋值,故非法。38. 有以下程序:main()char s="ABCD" , *p ;for(p=s+1 ; pv s+4 ; p+)printf("%s/n" , p);程序运行后的输出结果是 ( ) 。(分数: 2.00 )A. ABCDBCDCDDB. ABCDC. BCDD. BCDCDD V解析:解析本题考核的知识点是指针的应用。本题中首先定义一个字符数组s,并将字符串“ ABCD存到数组s中,定义了一个字符指针变量p,在接下来for循环中,

46、循环体共执行了三次,第一次p指向s1,所以此时输出的p所指的字符串的值为 BCD第二次循环p指向s2,所以此时输出的p所指的字符串的 值为CD;第三次循环p指向s3,因此此时输出的p所指的字符串的值为 D。所以,4个选项中选项D)符 合题意。39. 有以下定义:#includechar a10, *b=a ;不能给数组 a 输入字符串的语句是 ( )(分数: 2.00 )A.geB. gets(aO); VC. gets(&a0);D. ge解析: 解析 本题考核的知识点是函数 gets() 的应用。 函数 gets() 的调用形式为 gets(str_adr) ; str_adr 是

47、存放字符串的起始地址。可以是字符数组名、字符指针或字符数组元素的地址。gets 函数用来从终端键盘读入字符串 ( 包括空格符 ) ,直到读入一个换行符为止。换行符读入后,不作为字符串的内容。本题中定 义一个长度为10的字符数组和一个指针变量b,并且通过赋值让它指向数组a。选项A)、选项B)、选项C)和选项D)中只有选项B)中gets函数的参数a0不能表示数组a的首地址,故选项 B)不正确。所以,4 个选项中选项B)符合题意。40. 有以下程序:void swap(char*x , char*y)char t ;t=*x ; *x=*y ; *y=t ;main()char*s1="a

48、bc" , *s2="123" ;swap(s1 , s2) ; printf("%s , %s/n" , s1 , s2) ;程序执行后的输出结果是 ( ) 。(分数: 2.00 )A. 123, abcB. abc , 123C. 1bc, a23 VD. 321 , cba解析:解析本题考查的是指针的运用。首先看 swap()函数,函数中定义了一个临时字符变量C,然后将形参指针 x 所指内容存入 t ,再将形参指针 y 所指内容存入到 x 所指内容中,最后将临时变量 t 的内容存 入到 y 所指内容中。所以该函数实现的是:交换两个字符指针

49、所指向的内容。在主函数中,首先定义了两 个字符指针si和s2 ,同时用字符串“ abc”和“ 123”来初始化它们,此时它们指向的是两个字符串的第1个字符。 所以,在调用完 swap() 函数后,彼此交换了两个字符串的第 1 个字符, 最后输出结果为 1bc, a23。 故应该选择 C)。二、填空题 (总题数: 15,分数: 30.00)41. 设某循环队列的容量为 50,如果头指针 front=45( 指向队头元素的前一位置 ),尾指针 rear=10( 指向队 尾元素 ) ,则该循环队列中共有 1 个元素。(分数: 2.00 )填空项 1: (正确答案: 1 5或十五)解析: 解析 在循环

50、队列中,用队尾指针 rear 指向队列中的队尾元素,用排头指针 front 指向排头元素 的前一个位置, 因此, 从排头指针 front 指向的后一个位置直至队尾指针 rear 指向的位置之间所有的元素 均为队列中的元素。本题中队列的容量为 50,头指针为 45,那么从头指针到 50之间有 46、 47、 48、 49、 50,共 5 个元素,尾指针为 10,那么从 1 到 10 之间有 10 个元素,所以共有 15个元素。也可用公式来计算,当循环队列的队尾指针,队头指针时,元素个数=队尾指针-队头指针;挡循环队列的队尾指针V队头指针时,队列中元素个数的为:(尾指针 -头指针 +容量)%容量。

51、即 (10-45+50)%50=15 。42. 线性表的存储结构主要分为顺序存储结构和链式存储结构。 队列是一种特殊的线性表, 循环队列是队列 的 1 存储结构。(分数: 2.00 )填空项 1: (正确答案:顺序)解析: 解析 本题考查数据结构的队列。队列是一种特殊的线性表,即限定在表的一端进行删除,在表的 另一端进行插入操作的线性表。允许删除的一端叫做队头,允许插入的一端叫做队尾。线性表的存储结构 主要分为顺序存储结构和链式存储结构。当队列用链式存储结构实现时,就称为链队列;当队列用顺序存 储结构实现时,就称为循环表。因此,本题划线处应填入“顺序”。43. 在深度为 7 的满二叉树中,度为

52、 2 的结点个数为 1。(分数: 2.00 )填空项 1: (正确答案: 63 或 26-1 )解析: 解析 本题考查数据结构中满二叉树的性质。在满二叉树中,每层结点都是满的,即每层结点都具有最大结点数。深度为 k的满二叉树,一共有 2的k次方-1个结点,其中包括度为 2的结点和叶子结点。 本题中只要去掉第 7层的叶子结点后就是度为 2的所有结点,我们只要算出深度为 6的满二叉树的所有结 点就可以了,结果为 26-1=63。44. 软件生命周期可分为多个阶段。 一般分为定义阶段、 开发阶段和维护阶段。 编码和测试属于 阶段 (分数: 2.00 )填空项 1: (正确答案:开发或软件开发)解析:

53、 解析 本题考查软件工程的软件生命周期及其各阶段的基本任务。一股说来,软件生命周期由软件 定义、软件开发和软件维护三个时期组成。软件定义时期的任务是确定软件开发工程必须完成的总目标;导出实现工程目标应该采用的策略及系统必 须完成的功能;确定工程的可行性;估计完成该项工程需要的资源和成本,并且制定工程进度表。 软件开发时期的任务是设计程序结构,给出程序的详细规格说明;编写程序代码,并且仔细测试编写出的 每一个程序模块;最后进行综合测试,也就是通过各种类型的测试使软件达到预定的要求。软件维护时期的任务是使软件持久的满足用户的需要。具体地说,就是诊断和改正在使用过程中发现的软 件错误;修改软件从而适

54、应环境的变化;根据用户的要求改进或扩充软件使其更完善;修改软件为将来的 维护活动预先做准备。45. 在 E-R 图中,图形包括矩形框、菱形框、椭圆框。其中表示实体联系的是 框。(分数: 2.00 )填空项 1: (正确答案:菱形)解析:解析E-R模型可以用一种非常直观的图的形式表示,这种图称为E-R图。在E-R图中我们分别用下面不同的几何图形表示 E-R模型中的三个概念与两个联接关系。 实体集表示法。在 E-R图中用矩形表示实体集,在矩形内写上该实体集的名字。 属性表示法。在E-R图中用椭圆形表示属性,在椭圆形内写上该属性的名称。 联系表示法。在 E-R图中用菱形(内写上联系名)表示联系。46

55、. 已有定义:char c=" ; int a : 1, b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为1。分数: 2.00 )填空项 1: (正确答案: 0)解析:解析本题主要考查的是逻辑运算。 在C语言中,没有专门的.“逻辑值”,而是用非0表示“真”, 用 0 表示“假”。因此,对于任意一个表达式,如果值为0,就代表一个“假”值;如果值是非零,无论是正数还是负数,都代表一个“真”值。本题中,c的值是空格字符,而空格字符的 ASCII码为32,所以c 代表“真”,而! c 就是“假”。 &&左边运算分量如果是“假”,那么无论右边运算分

56、量是什么,结果肯 定都是“假”。将一个逻辑“假”值赋给 int型变量b,那b中的内容就是0。47. 有以下程序:#include main()int x=1 , y=2, z=3;if(x > y)if(y v z)printf("%d%" ,+z); else printf( " %d%,+y);printf("%d%/n" , x+) ; 程序运行后的输出结果是 (分数: 2.00 )填空项 1: (正确答案:1)解析: 解析 本题主要考查的知识点是 if 的嵌套语句。解此类题目只需记住 else 子句总是与前面最近的 不带 else 的 if 相结合,切不可轻信试卷上的缩进格式。另外,花括号括起来部分相当于一条语句,外部 else不可与内部的if结合,应把整个花括号部分看成一条普通语句。所以题目中x>y不成立,不会执行下面的ifelse语句,直接输出x+的值,即输出1之后,x的值变为2。48. 有以下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论