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

下载本文档

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

文档简介

1、二级 C 语言笔试 95( 总分: 94.00 ,做题时间: 90 分钟 )一、 B 选择题 /B( 总题数: 50,分数: 60.00)1. 若有以下程序 : main() int k=2,i=2,m; m=(k+=i*=k); print f("%d,%d/n",m,i); 执行后的输出结果是 ( ) 。(分数: 1.00 )A. 8,6B. 8,3C. 6,4 VD. 7,4解析:在复合赋值语句中,应该由右向左依次赋值,在表达式中,右端由 i*=kk 得 i=2*2 为 4, k=k+i ,即 k值为6, m=k故m=6所以4个选项中C正确。2. 数据库设计的 4 个

2、阶段是:需求分析、概念设计、逻辑设计和 ( ) 。(分数: 1.00 )A. 编码设计B. 测试阶段C. 运行阶段D. 物理设计 V 解析:数据库的生命周期可以分为两个阶段:一是数据库设计阶段;二是数据库实现阶段。数据库的设计 阶段又分为如下 4 个子阶段:即需求分析、概念设计、逻辑设计和物理设计。3. 有以下程序段: typedef struct NODE int num; struct NODE * next; OLD; 以下叙述中正确的是( ) 。(分数: 1.00 )A. 以上的说明形式非法B. NODE是一个结构体类型C. OLD是一个结构体类犁VD. OLD是一个结构体变量解析:将

3、题目中的定义语句去掉前面的typedef和后面的OLD(分号保留),就是一条完整的结构体定义语句,其中struct是说明符,NODE1结构体名,大括号里面的是结构体成员的定义。此时要声明该结构体 变量时需要使用 struct 加结构体名起来声明, struct NODE 一起构成一个结构体类型,就好像字符类型 char。若只去掉前面的typedcf,就是一条结构体定义同时声明一个结构体变量OLD的语句,因为OLD的前面部分是struct NODE的完整写法,可以看作是struct NODE。C语言允许用typedef说明一种新类型名,其语法格式为: typedef 类型名标识符; 以后就可以用

4、该标识符来代替被说明的类型名了。因此,当前 面存在typedef时,该语句就变成了给 struct NODE勺完辖写法定义一个新的名称OLD所以,此时的OLD是一个结构体类型,它相当于struct NODE,即可以和char 一样单独用来声明该结构体变量,而NODE是一个结构体名,不能单独用来声明变量。所以,4个选项中C符合题意。4. 有以下程序: void f(int b) int i; for(i=2;i < 6;i+) bi*=2; main() inta10=1,2,3,4,5,6,7,8,9,10,i; f(A); for(i=0;i < 10;i+) printf(&q

5、uot;%d,",ai); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 1,2,3,4,5,6,7,8,9,10,B. 1,2,6,8,10,12,7,8,9,10, VC. 1,2,3,4,10,12,14,16,9,10,D. 1,2,6,8,10,12,14,16,9,10,解析:本题中, f() 函数通过一个 for 循环语句, 将传入数组的元素从下标 2到下标 5每个自乘以 2。因此, 调用结束时,数组 a 中的内容为 1,2,6,8,10,12,7,8,9,10 ,故本题应该选择 B。5. 有以下程序: void fun1(char*p) char *q

6、 ; q=p; while(*q!='/0') (*q)+; q+; main() char a="Program"),*p ; p=&a3; fun1(p) printf("%s/n",A) ; 程序执行后的输出结果是 ( ) 。 (分数: 1.00 )A. ProhsbnVB. PrphsbnC. ProgsbnD. Program解析:在函数 fun1() 中,首先将形参 p 的内容存入临时指针 q 中,然后使用个 while 循环,当 q 所指内 容不是字符串结束标志 "/0' 时,让 q 所指内容增 1

7、,然后将指针 q 增 1 指向下一个位置。所以函数 fun1() 实现的功能是:将传入字符串的所有字符自增1。主函数,指针 p 在被传入 fun1() 函数之前,初始化指向的是宁符数组 a 的第 4 个元素 'g' ,所以最终输出的结果应该是 Prohsbn 。故应该选择 A。6. 以下程序的输出结果是 ()。#includevstdio.h > #include <string.h > mam() charb18="abcdefg",b28,*pb=b1+3; while(-pb > =b1) strcpy(b2,pB) ; pri

8、ntf("%d/n",strlen(b2);(分数: 1.00 )A. 8B. 3C. 1D.7 V解析:首先定义了两个字符数组b1和b2,并用一个字符串给b1赋初值,然后定义了一个字符型指针变量pb,通过赋初值使它指向b13。接着执行while循环,该循环执行了 3次:第一次判断条件“ -pb >=b1”, 使pb的值为"b1+2',执行"st repy(b2 , pB); ”后,b2中的内容为"cdefg ” :第二次判断条件"-pb >=b1”,使pb的值为“ b1+1”,执行“ strcpy(b2 , pB

9、); ”后b2的内容为“ bedefg”第三次判断条件“-pb >=b1”使pb的值为“ b1”,执行“ strcpy(b2 , pB):”后b2的内容为“ abcdefg”。最后输出 b2 数组巾存放的字符串长度,显然是7。 (这里还有一个关键点:就是每当执行次 while 循环判断条件,就执行一次“ -pb”,他使得指针pb自减1,即前移一位)所以,4个选项中D为所选。7. 有以下程序:main() int a3=1,2,3,4,5,0,(*pa)3,i; pa=a; for(i=0;i<3;i+) if(i<2) pa1i=pa1i-1; else pa1i=1; pr

10、intf("%d/n",a01+a11+a12); 执行后输出结果是 ( ) 。(分数: 1.00 )A. 7 VB. 6C. 8D. 无确定值解析:本题定义了一个指向由3个元素组成的一维数组的指针变量pa,通过赋值让它指向具有2行3列的数组a,此时用指针变量pa,表示数组元素aij的形式是paimj) 。for循环执行了 3次;第一次i值为0,执行 pa10=pa10-1 ,执行后 a10 的值变为 3;第二次 i 值为 1,执行 pa=11=pa11-1, 执行后 a11 的值为 4;第三次 i 值为 2,执行 pa12=1 ,执行后 a12 的值变为 1。故 prin

11、ff 语句 输入的值为2+4+1=7。所以,A选项为所选。8. 用C言编写的代码程序()。(分数: 1.00 )A. 可立即执行B. 是个源程序 VC. 经过编译即可执行D. 经过编译解释即可执行解析:C语言一种高级语言,C语言源程序经过C语言编译程序编译之后,生成一个后缀为.obj的二进制文件(称为目标文件),最后还要由称为“连接程序” (Link)的软件,把此.obj文件与C语言提供的各种库 函数连接在一起,生成一个后缀.exe的可执行文件。显然 C语言不能立即执行,故选项 A错误;根据以上 定义,选项C和选项D错误,所以,4个选项中选项B符合题意。9. 有以下程序:main() int

12、a33,*p.i; p=&a00; for(i=0;i < 9;i+)pi=i; for(i=0;i <3;i+)printf("%d",a1i); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 0 1 2B. 1 2 3C. 2 3 4D. 3 4 5V解析:本题中定义的二维数组a33 中 9 个元素在内存中的排列顺序是: a00 ,a01 , a02 ,a10 ,a11 ,a12 ,a20 ,a21 ,a22 。在主函数中,首先定义了二维数组 a33 , 然后定义了个指针 p 指向数组 a 的第 1 个元素 a00 在第一个 for

13、循环中,依数组 a 在内存中的排列 顺序为其元素赋从08九个值,然后用第二个for循环依次输出a10 , a11 , a12三个元素的 值。所以,4个选项中选项D符合题意。10. 有以下函数定义:void fun(int n , doub x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun 的正确调用语句是 ( ) 。(分数: 1.00 )A. fun(int y,double ;B. k=fun(10,12.5);C. fun(x, ; VD. void fum(n,;解析:选项A中应将y和m前面的函数的类型说明符去掉,故选项A不正确;选项B中函数传了 2个参数,其中一个为整型个为

14、浮点型,而 fun() 函数在定义时声明的 2个参数,一个为整型一个为双精度型,其 参数类型不一致,故选项B不正确;选项D在调用函数时,不应该再声明其返回类型,故选项D不正确。所以,4个选项中选项C符合题意.11. 以下能正确定义一维数组的选项是 ( ) 。(分数: 1.00 )A. int num;B. #define N 100 int num;VC. int num0.100;D. int N=100 ; int num;解析:选项A定义数组时省略了长度,而C语言中规定,只有在定义并同时进行初始化时,数组的长度才可以省略,数组的长度为初始化时候的成员个数,故选项A错误;在C语言中规定,数

15、组的长度必须是一个整数或整型常量表达式,故选项C不正确:定义时数组的长度不能使用变量表示,故选项D不正确,所以,4个选项中选项B符合题意。12. 在软件生存周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是( ) 。(分数: 1.00 )A. 概要设计B. 详细设计C. 可行性分析D. 需求分析 V 解析:在需求分析阶段中,根据可行性研究阶段所提交的文档,特别是从数据流图出发,对目标系统提出 清晰、准确和具体的要求,即要明确系统必须做什么的问题。解析:分析题目中给出的表达式可知,如果 a >b和b> c同时成立,k=1,否则k=0。所以,4个选项中选 项 A 符合题意

16、。14. 指出下面不了确的赋值语句 ( ) 。(分数: 1.00 )A. a+;B. a=b;VC. a+=b;D. a=1,b=1 ;解析:选项A中a+相当于a+1,是赋值语句;选项 C和选项D也是赋值语句。只有选项B不是,因为选项B中“= ”符号是等于的意思,并不是赋值运算符,所以,4个选项中B符合题意。15. 有以下程序:#include < studio.h > #defme F(X,Y) (X)*(Y) main() int a=3, b=4;printf("%d/n",F(a+,b+); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A.

17、12 VB. 15C. 16D. 20解析:在程序中先用表达式将宏替换掉,则输出语句中的表达式为(a+)*(b+),而a+的值为3, b+的值为4。因此最后的值为 3*4=12。所以,4个选项中选项 A符合题意。16. 从工程管理角度,软件设计一般分为两步完成,它们是 ( ) 。 (分数: 1.00 )A. 概要设计与详细设计 VB. 数据设计与接口设计C. 软件结构设计与数据设计D. 过程设计与数据设计 解析:从工程管理的角度,软件设计可分为概要设计和详细设计两大步骤。17. 将 E-R 图转换到关系模式时,实体与联系都可以表示成 ( ) 。 (分数: 1.00 )A. 属性B. 关系 VC

18、. 键D. 域解析:把概念模型转换成关系数据模型就是把 E-R 图转换成一组关系模式,每一个实体型转换为一个关系 模式,每个联系分别转换为关系模式。18. 有以下程序:main() unsigned char a,b,c ; a=0x3;b=a | 0x8;c=b << 1 ; printf("%d%d/n",b,C) ; 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. -11 12B. -6 -13C. 12 24D. 11 22 V解析:将 a 的值转换为二进制位: 0000 0011,再与 0x8 的二进制“ 0000 1000”位与, 得到

19、结果“ 0000 1011” 赋值给b,b的值为11,再将b左移一位得到;0001 0110,赋值给c,c的值为22,所以最后输出的b,c 的值位11,22。所以4个选项中D正确。19. 设树T的度为4,其中度为1, 2,3,4的结点个数分别为4,2,1,1,则T中的叶子结点数为()。 (分数: 1.00 )A. 5B. 6C. 7D. 8 V解析:根据给定的条件,在树中,各结点的分支总数为:4X1+2X2+1X3+4X 1=15,树中的总结点数为:15(各 结点的分支总数 )+1( 根结点 )=16 :非叶子结点总数为: 4+2+1+1=8。因此,叶子结点数为 16( 总结点数 )-8( 非

20、 叶子结点总数 )=8 。20. 对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为 ( ) 。(分数: 1.00 )A. log 2nB. n/2C. n VD. n+1解析:在长度为 n 的线性表中进行顺序查找,最坏情况下需要比较 n 次。21. 有以下程序: #defme P 3 void P(int x)return(p*x*x); main() pritnf("%d/n",F(3+5);程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 192B. 29C. 25D. 编译出错 V解析:本题是一道陷阱题,考生如果没注意到F()函数被定义为

21、void类型的话,很容易错选为选项A,其实应该选择选项D,编译出错。22. 若变量已正确定义,有以下程序段: i=0; do printf("%d,",i); while(i+); print f("%d/n",i); 其 输出结果是 ( ) 。(分数: 1.00 )A. 0,0B. 0,1VC. 1,1D. 程序进入无限循环解析:本题中,首先令 i 为 0,然后进入 do-while 循环,执行 1遍循环体输出 i 的值 0。然后,因为表达 式 i+ 的值为 0(执行后 i 的值被增 1) ,所以 do-while 循环结束,接下来再输出 i 的值 1

22、0 故本题应该选择B。23. 设有以下说明语句: typedef struet int n; char ch8; PER ; 则下面叙述中正确的是 ( ) 。(分数: 1.00 )A. PER是结构体变量名B. PER是结构体类型名VC. typedef struct是结构体类型D. struct 是结构体类型名解析:本题通过typedef在定义一个结构体类型的同时,把它白定义成类型名PER故PEF是结构体类型名。所以,4个选项中B为所选。24. 已定义以下函数; int fun(int *p) return*p; fun 函数返回值是 ( ) 。(分数: 1.00 )A. 不确定的值B. 一

23、个整数 VC. 形参 p 中存放的值D. 形参 p 的地址值解析:题目中fun()函数的返回表达式是*p,所以选项C D不为所选,而应该是形参 p所指内容的值,因 为 p 为 int 型指针,所以该值是一个整数。故应该选择 B。25. 若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 ( ) 。 (分数: 1.00 )A. 函数调用可以作为独立的语句存在B. 函数调用可以作为一个函数的实参C. 函数调用可以出现在表达式中D. 函数调用可以作为一个函数的形参 V解析:在C语言中规定:有返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为一条语句,故选项A和选项C正确;而有返回

24、值的函数调用只能作为一个函数的实参(即将其返回值传给相应的形参 ),而不能作为形参(因为行参是在函数定义时说明的),故选项B正确选项D不正确。所以,4个选项中选项D 符合愿意。26. 有以下程序: int fa(int x) return x*x; int fb(int x) return x*x*x; int f(int(*f1)(),int(*f2)(),int x) return f2(x)-f1(x); main() int i;i=f(fa,fb,2);printf("%d/n",i); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 1 2 6 8

25、B. 8 6 2 1C. 8 1 6 2 VD. 8 6 1 2解析:函数f()有3个形式参数fl、f2和x,其中fl、f2是指向函数的指针变量。在main()函数中执行了函数调用“ f(fa,fb,2)”,从而使f()的形式参数fl指向了 fa,形式参数f2指向了 fb,把实参2传给了行参变量x。函数f()中的return语句中的相当于“ fb(2) -fa(2) ” (fb(2)的返回值为 2*2*2=8,fa(2) 返回值为 2*2=4) 即(8-4) ,值为 4。函数 f() 执行后把返回值 4 赋给了 i ,输出 i 的值是 4。所以 4 个选项 中C正确。27. 以下语句或语句组中

26、,能正确进行字符串赋值的是 ( ) 。(分数: 1.00 )A. char *sp; *sp="right!"B. char s10; s="right!";C. char s10; *s="right!"D. char *sp="right!"V解析:在选项A中,首先定义了一个字符指针sp,然后将个字符串赋给甲所指的地址,这是错误的。因为sp 是一个未经初始化的野指针,不知其指向哪儿,往一个不确定的地址中写数据很容易让程序出错。选项B首先定义了一个字符数组,然后将一个字符串赋给数组名,这是错误的。因为数组名是一个

27、指针常量, 不可以被改变。选项 C首先定义了一个字符数组,然后将一个字符串赋给数组的第一个元素,这也是错误 的。因为字符串在表达式中相当于一个常字符指针,将一个指针值赋给一个字符型变量是行不通的。选项D是定义一个字符指针sp,同时使其指向一个字符串常量,即将个常字符型指针赋给sp。这是可行的。所以,4个选项中选项D符合题意。28. 若有定义 "int*p3;", 则以下叙述中正确的是 ( ) 。(分数: 1.00 )A. 定义了一个基类型为int的指针变量p,该变量具有3个指针B. 定义了一个指针数组 p,该数组含有3个元素,每个元素都是基类型为int的指针 VC. 定义了

28、一个名为*p的整型数组,该数组含有3个int类型元素D. 定义了一个可指向一维数组的指针变量p,所指一维数组应具有3个int类型元素解析:指针数组也是一种数组,所有有关的概念都适用于它。但它与普通的数组又有区别,它的数组元素 是指针类型,只能用来存放地址。其格式为:存储类型数据类型*指针数组名 长度 1,其含义为:定义了一个长度1的数组,其中数组元素为相应存储类型的指针,对比定义可知,选项A C和D都不正确,所以,4个选项中选项B符合题意。29. 设函数fun的定义形式为void fun(char ch ,float x) 则以下对函数fun的调用语句中,正确的是( ) 。(分数: 1.00

29、)A. fun("abc",3.0);B. t=fun('D',16.5);C. fun('65',2.8);D. fun(32,32) ; V解析:题目中定义的函数fun()有两个参数,一个是字符型变量ch,另一个是浮点型变景 x,函数类型是void即无返回值。选项 A调用fun的第1个参数是字符串常量与字符变量不匹配,所以不正确。选项B是有返回值函数的调用形式,不正确。选项 C的第1个参数是错误的字符常量,字符常量是用单引号括起来 的一个字符(是转义字符可能有多个字符),故也不正确。选项 D使用两个整型常量调用fun这在C语言中 是允许的

30、。因为整型到字符型可以自动转换,整型到浮点型也可以自动转换。故应该选择D。30. 下列叙述中正确的是 ( ) 。(分数: 1.00 )A. 数据库系统是一个独立的系统,不需要操作系统的支持B. 数据库技术的根本目标是要解决数据的共享问题VC. 数据库管理系统就是数据库系统D. 以上 3 种说法都不对 解析:数据库系统除了数据库管理软件之外,还必须有其他相关软件的支持。这些软件包括操作系统、编译系统、应用软件开发工具等,选项A的说法是错误的数据库具有为各种用户所共享的特点,选项B的说法是正确的。通常将引入数据库技术的计算机系统称为数据库系统。一个数据库系统通常由5 个部分组成,包括相关计算机的硬

31、件、数据库集合、数据库管理系统、相关软件和人员。因此,选项C的说法是错误的。31. 下列叙述中错误的是 ( ) 。(分数: 1.00 )A. 一种数据的逻辑结构可以有多种存储结构B. 数据的存储结构与数据处理的效率无关 VC. 数据的存储结构与数据处理的效率密切相关D. 数据的存储结构在计算机中所占的空间不一定是连续的解析:一种数据的逻辑结构根据需要可以表示成多种存储结构,常用的存储结构有顺序、链接、索引等, 选项A和选项D正确。采用不同的存储结构,其数据处理的效率不同,因此,在进行数据处理时,选择合 适的存储结构是很重要的,选项C正确,选项B错误,应为本题正确答案。32. 若有定义; int

32、 w35 ;,则以下不能正确表示该数组元素的表达式是 ( ) 。(分数: 1.00 )A. *(*w+3)B. *(w+1)4VC. *(*(w+1)D. *(&w00+1)解析:通过一维数组名或指向?维数组元素的指针来引用数组元素有两种写法:ai和*(a+i),它们是等价的。这是一种运算符之间的等价转换,就好像 a-(b-C) 等价于 a-b+c 一样。知道了这种转换,我们可以将 之扩展到二维数组甚至任意维数组上来。因为 运算符的结合性是从左至右的,所以 wij 等价于 (wij,此时可以先将任意一个运算符转换为指针形式为:(*(w+i)j 或*(wi+j),或者同时转换: *(*(

33、w+i)+j)。上述几种形式都完全等价于 wij。选项A中,*(*w+3)可以看成*(*(w+0)+3),即w03, 是正确的。选项B小,因为运算符的优先级高于*运算符,所以*(w+1)4等价于*(w+1)4等价于 *(*(w+1)+4),即*(*(w+5)+0),它等价于w50,很明显它超过数组的范围了,故不正确。选项C等价于w10,是下确的。选项 D中,&w00是数组w第1个元素的地址,它等价于 &*(*(w+0)+0),外 面的&和*可以抵消,就好像先乘以个数,然后再除以这个数一样。所以,&w00等价于*(w+0)+0。即*w。所以原式就变为 *(*w+1

34、) 等价于 w01 ,这个也是合法的。综上所述,本题应该选择 B。33. 有以下程序: #include < stdio.h > main() int y=9; for( ; y > 0; y-)if(y%3=0) printf("%d",-y); 程序的运行结果是 ( ) 。分数: 1.00A.741B.963C.852 VD.875421解析:本题首先令y为9,然后通过一个for循环,当y还大于0则循环,每次循环让 y递减1。循环体中 是一条if语句,通过运算符计算每当y能被3整除的时候,输出-y的值,即先将y减1,然后输出y的 值。故当 y 等于 9

35、、 6、 3 时会输出,输出值分别为 8、 5、 20所以应该选择 C。34. 有以下程序段: int j; float y; char name50; scanf("%2d%f%s", &j, &y, name);当执行上述程序段,从键盘上输入 55566 7777abc后,y的值为()。(分数: 1.00 )A. 55566.0B. 566.0VC. 7777.0D. 566777.0解析:本题 scanf() 函数的格式化控制串中, "%2d" 表示输入一个 2 位的整数: "%f" 表示输入一个浮点数; &qu

36、ot;%s"表示输入一个字符串。因此,从键盘上输入"55566 7777abe"后,前两位"55"被当作2位整数输入给j ; "566"被当作浮点数输入给 y;跳过空格后,剩下的字符串"7777abc"全部输入给names故本题应该选择B。35. 下列关于单目运算符 +、- 的叙述中正确的是 ( ) 。(分数: 1.00 )A. 它们的运算对象可以是任何变量和常量B. 它们的运算对象可以是 char 型变量和 int 型变量,但不能是 float 型变量C. 它们的运算对象可以是 int 型变量,但不能是

37、 double 型变量和 float 型变量D. 它们的运算对象可以是 char 型变量、 int 型变量和 float 型变量 V解析: C 语言中的 +和- 运算符是单目运算符,其运算对象可以是整型、字符型、 float 型和 double 型等 基本数据类型。所以,D 选项为所选。36. 以下选项中,合法的一组C语言数值常量是()。(分数: 1.00 )A. 028 .5e-3 -0xfB. 12 0X023 4.5e0 VC. .177 4e1.5 0abeD. 0x8A 10,000 3.e5解析:选项A中,028是八进制形式,但后面跟的8不在07之内,所以非法;选项 C中,4e1.

38、5是指数形式,但e后面所跟的不是整数,所以非法;选项 D中,10,000中不能有“,”,所以非法。故本题应该 选择 B。37. 以下程序的输出结果是()。main() int a=5,b=4,c=6,d; printf("%d/n",d=a > b?(a > c?a:C) :(B) ); (分数: 1.00 )A. 5B. 4C. 6 VD. 不确定解析:本题中的 printf() 函数中的输出表达式,首先计算括号内的条件表达式,它的值为 6 (a >c?a:c 中 a> e即5>6为假故该表达式的值为c的值即为6),然后再计算外面表达式(等价

39、于a>b?6:B)的值,同理可得该表达式的值为6,将值6赋值给d,因此最后输出该表达式的值为6,所以,4个选项中C为所选。38. 下列叙述中正确的是 ( ) 。(分数: 1.00 )A. C 语言中既有逻辑类型也有集合类型B. C 语言中没有逻辑类型但有集合类型C. C语言中有逻辑类型但没有集合类型D. C语言巾既没有逻辑类型也没有集合类型V解析:在C语言中没有逻辑类型,逻辑类型用整型来表示,故选项 A和选项C不正确,C语言中没有集合 类型,故选项B不正确。所以,D选项为所选。39. 有以下程序:mam() int i=10,j=1; printf("%d,%d/n"

40、,i-,+j); 执行后输出的结果是 ( ) 。(分数: 1.00 )A. 9,2B. 10,2VC. 9,1D. 10,1解析:+、-运算符在变量之前是先使变量的值加1或减1,然后再使用变量的值:如果在变量之后则先使用变量之前的值,再把变量的值加1或减1。显然,程序中表达式“1 - ”的值为10,“+j”的值为2, 所以最后输出的值为10和2,所以,B选项为所选。40. 有以下程序:main() int x=3,y=2,z=1 ; printf("%d/n",x/y& z) ; 程序运行后的输出结果是()。 (分数:1.00 )A. 3B. 2C. 1D. 0 V

41、解析:在prinft() 函数的表达式中,“ &前面表达式的值为 1(3/2=1)表示为二进制为00000001,而按位 取反运算符“”的优先级高于按位与运算符“ &”,先计算“ &”后面的取反运算符“”。z的二进制表示为00000001,取反后为11111110,员后进行“ &,即“00000001 &11111110可知结果为 00000000, 故最后的值为0,所以,4个选项中选项D符合题意。41. 有以下程序:mam() char s="ABCD",*p; for( p=s+1;p< s+4;p+)printf(&quo

42、t;%s/n",p); 程序运行后的输出结果是()。(分数:2.00 )A. ABCD BCD DB. A B C DC. B C DD. BCD CD D V解析:本题中首先定义一个字符数组s,井将字符串“ ABCD存到数组s中,定义了一个字符指针变量p,在接下来for循环中,循环体共执行了三次,第一次 p指向s1,所以此时输出的p所指的字符串的值为 BCD第二次循坏p指向s2,所以此时输出的p所指的字符串的值为 CD,第三次循环p指向s3,因此 此时输岀的p所指的字符串的值为 D。所以,4个选项中选项D符合题意。42. 有以下程序:fun(int x) int p; if(x=0

43、 II x= 1)return(3); p=x-fun(x-2); return p; main() printf("%d/n",fun(7);执行后的输出结果是()。(分数:2.00 )A. 7B. 3C. 2 VD. 0解析:本题的fun()函数在x等于0或1时返回3,而在其余情况下返回 x-fun(x-2),所以本题的递归算法可以这样来表示:在主函数中输出的结果是fun(7),而fun(7)=7-fun(5)=7-(5-fun(3)=7-(5-(3-fun(1)=7-(5-(3-3)= 7-(5-0)=7-5=2。故本题应该选择 C43. 以下不合法的数值常量是()。

44、(分数:2.00 )A. 011B. lelC. VD. 0xabcd解析:指数形式规定字母 e(或E)之前必须有数字(可以是一个十进制的整数或小数),之后必须是一个整数。选项C的字母E之后是一个小数,故应该选择Co44. 有以下函数:fun(char *a, char *b) while(*a!='/0')&&(*b!='/0)&&(*a=*b) a+; b+;return(*a-*b); 该函数的功能是()。(分数:2.00 )A. 计算a和b所指字符串的长度之差B. 将b所指字符串复制到a所指字符串中C. 将b所指字符串连接到a所指

45、字符串后面D. 比较a和b所指字符串的大小V解析:本题要求阅读的代码是一个函数,阅读之前先要看清函数的定义,该函数有两个参数,都是字符指 针,这说明它接收的是两个字符串。该函数没有定义返回类型,C语言规定函数的返回类型为int时可以省略,所以切不可将其看成是无返回类型的 void 型函数,它是 int 型函数。函数体中除了返回语句外,只 有一条while循环语句,该循环的循环条件为(*a!='/0')&&(*b!='/0')&&(*a=*B),即当a和b所指处都不是字符结束符70'并且a和b所指处的内容相等时执行循环。而循

46、环体中只是简单地将指针a和b同时往后移动 1 位。循环结束后返回 a 所指内容减去 b 所指内容的差。换个角度去考虑,也就是说当字符串 a 或b中有一个结束了或者是它们的相同位置小有一个字符不同时,则返回该位置两个字符之差。若两者长 度相同而且所有对应字符都相同的话,最后返回的是 '/0-'/0'=0 ,否则的话就返回两个字符串第一对不相 同的字符之差。这时应该可以看出来,这个函数实现的是对两个字符串的比较。所以,4个选项中D正确。45. 有以下程序:void fun(int *a,int i,int j) int t; if(i< j) t=ai;ai=aj;a

47、j=t; i+;j-; fun(a,ij); main() int x=2,6,1,8,i; fun(x,0,3); for(i=0;i< 4;i+)printf("%2d",xi); printf("/"n); 程序运行后的输出结果是 ( ) 。(分数: 2.00 )A. 1 2 6 8B. 8 6 2 1C. 8 1 6 2 VD. 8 6 1 2解析:函数 fun() 中用了个 if 语句, 当数组下标 i 小于数组下标 j 时,交换数组元素 ai 和 aj 的值, 并使 i 值加 1, j 值减 1。其功能就是把数组 a 中从下标 i 到

48、j 的元素首尾互换。主函数中定义一个数组, 在定义该数组的时候缺省了定义长度,定义的同时将其初始化赋值,所以该数组的长度为初始化该数组时 的元素的个数即4,接着调用fun(a,0,3),其中将a数组的第一个元素的下标0和最后一个元素的下标 3传给了函数fun(),故执行完该函数后,数组a中的元素首尾互换,因此最后依次输出的数组a中值为8,1,6和2,所以,4个选项中选项C符合题意。46. 以下与函数 fseek(fp,0L,SEEK_SE 乃有相同作用的是 ( ) 。(分数: 2.00 )A. feof(fB. ftell(fC. fgetc(fD. rewind(fV解析:题目中 fseek

49、(fp,0L,SEEK_SET) 的作用将文件指针定位到文件开始。 feof(fp) 的作用是判断文件指 针是否已到文件结尾,因此选项A不对。ftell(fp)的作用是获取当前文件指针的位置,因此选项B不对。fgetc(fp)的作用是从文件中读取一个字节,因此选项C不对。rewind(fp)的作用是将文件指针重定位到文件开头,所以应该选择 D。47. 在长度为 64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为 ( ) 。(分数: 2.00 )A. 63B. 64 VC. 6D. 7解析:在长度为 64的有序线性表中, 其中的 64个数据元素是按照从大到小或从小到大的顺序有序排列的。

50、在这样的线性表中进行顺序查找,最坏的情况就是查找的数据元素不在线性表巾或位于线性表的最后。按 照线性表的顺序查找算法,首先用被查找的数据和线性表的第一个数据元素进行比较,若相等,则查找成 功,否则,继续进行比较,即和线性表的第二个数据元素进行比较。同样,若相等,则查找成功,否则, 继续进行比较。依次类推,直到在线性表中查找到该数据或查找到线性表的最后一个元素,算法才结束。 因此,在长度为 64 的有序线性表中进行顺序查找,最坏的情况下需要比较 64次。因此,本题的正确答案 为 B。48. 下面不属于软件设计原则的是 ( ) 。(分数: 2.00 )A. 抽象B. 模块化C. 自底向上 VD.

51、信息隐蔽 解析:软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软 件设计有关的概念。它们是:抽象、模块化、信息隐蔽,模块独立性。没有白底向上。49. 有以下程序: int fun1(double A) return a*=a; int fun2(double x,double y) double a=0,b=0 ; a=fun1(x);b=funl(y); return(int)(a+B); main() double w ; w=fun2(1.1,2.0);程序执行后变量w中的值是()。(分数: 2.00 )A. 5.21B. 5C. 5.0VD. 0.

52、0解析:在 fun1() 函数中只有一条 return 语句,返回的是表达式 a*=a 的值,该值等于 a*a 。但是,由于 fun1() 函数的返回值类型被定义为 int ,所以返回值被取整,即 fun1() 函数实现的是求一个双精度数平方的整数 部分。在 fun2() 函数中,分别对两个参数调用 fun1() 函数,然后将两个返回值相加、取整后返回。所以, 程序执行后,w中的值是1.12+2.02=1+4=5(中括号代表截尾取整)。又因为w被定义为double型,所以变量w中的值应该为一个双精度值5.0。故应该选择Co50. 设有如下定义: struct ss char name10 in

53、t age; char sex ; std3,*p=std ; 下面各输入语句中错误的是 ( ) o(分数: 2.00 )A. scanf("%d",&(*.ag;B. scanf("%st",&stnam;VC. scanf("%c",&std0.se;D. scanf("%c",&(p-> se);解析:选项A中“&(*p).age "代表的是 std0.age 的地址,是正确的,选项C也是正确的,选项 D先用指针变量引用结构型的成员sex,然后取它的地址

54、,也是正确的,选项B中的“”是错误的引用,因为std是数组名,代表的是数组的首地址,地址没有成员“name。所以 B选项为所选。二、 B 填空题 /B( 总题数: 17,分数: 34.00)51. 在深度为 7的满二叉树中,度为 2 的结点个数为 U 【1】 /U o(分数: 2.00 )填空项 1: (正确答案: 63 或 26-1 )解析:在满二叉树中,每层结点都是满的,即每层结点都具有最大结点数。深度为k的满二叉树,一共有2k-1个结点,其中包括度为2的结点和叶子结点。因此,深度为7的满二叉树,一共有27-1个结点,即127个结点。根据二叉树的另一条性质,对任意一棵二叉树

55、,若终端结点(即叶子结点)数为n0,而其度数为2的结点数为n2,则n0=n2+1o设深度为7的满二叉树中,度为2的结点个数为x,则改树中叶子结点的个数为x+1。则应满足x+(x+1)=127,解该方程得到,x的值为63o结果上述分析可知,在深度为7的满二叉树中,度为2 的结点个数为 63o52. 算法的复杂度主要包括U【2】/U复杂度和空间复杂度。(分数: 2.00 )填空项 1: (正确答案:时间)解析:算法的复杂度主要指时间复杂度和空间复杂度。53. 在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为U【3】 /U o(分数: 2.00 )填空项 1: (正确答案:数据字典

56、)解析:在结构化分析方法中,用于描述系统中所用到的全部数据和文件的文档称为数据字典。54. 线性表的存储结构主要分为顺序存储结构和链式存储结构。 队列是一种特殊的线性表, 循环队列是队列的U【4】/U存储结构。(分数: 2.00 )填空项 1: (正确答案:顺序)解析:线性表的存储结构主要分为顺序存储结构和链式存储结构。当队列用链式存储结构实现时,就称为 链队列;当队列用顺序存储结构实现时,就称为循环表。因此,本题划线处应填入“顺序”。55. 数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为 U【5】 /U。(分数:

57、2.00 )填空项 1: (正确答案:物理独立性)解析:数据独立性分为逻辑独立性与物理独立性。 当数据的存储结构改变时, 其逻辑结构可以不变, 因此, 基于逻辑结构的应用程序不必修改,称为物理独立性。56. 以下程序运行时若从键盘输入:10 20 30v回车。输出结果是U【6】/U 。#include < stdio.h> main() int i=O,j=O,k=O; scanf("%d%*d%d",&i,&j,&k); printf("%d %d %d/n",i,j,k); (分数: 2.00 )填空项 1: (正确答案: 1O 3O O )解析:本题的 scanf() 函数要求用户输入三个十进制整数,但只接受第一和第三个到函数的第二和第三个 参数所指的内存地址中。所以本题的输出为: 1O 3O O 。57. 以下程序运行后的输出结果是 U【7】 /U 。 #define S(x)4*x*x+1 mah() int i

温馨提示

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

评论

0/150

提交评论