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

下载本文档

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

文档简介

1、二级 C 语言笔试 93( 总分: 98.00 ,做题时间: 90 分钟 )一、 B 选择题 /B( 总题数: 50,分数: 60.00)1. 设有如下说明: typedef struct ST long a;int b;char c2; NEW; 则下面叙述中正确的是 ( ) 。 (分数: 2.00 )A. 以上的说明形式非法B. ST 是一个结构体类型C. NEW是一个结构体类型VD. NEW是一个结构体变量解析:解析将题目中的定义语句去掉前面的typedef和后面的NEW分号保留),就是一条完整的结构体定义语句,其中struct是说明符,ST是结构体名,大括号里面的是结构体成员的定义。此

2、时要声明该结 构体变量时需要使用 struct 加结构体名一起来声明, struct ST 一起构成一个结构体类型,就好像字符类 型char。若只去掉前面的typedef,就是一条结构体定义同时声明一个结构体变量NEW勺语句,因为NEW的前面部分是struct ST的完整写法,可以看作是struct ST 。C语言允许用typedef说明一种新类型名,其语法格式为: typedef 类型 名标识符; 以后就可以用该标识符来代替被说明的类型名了。因此,当前 面存在typedef时,该语句就变成了给struct ST的完整写法定义一个新的名称NEW/所以,此时的 NEW是一个结构体类型,它相当于s

3、truct ST ,即可以和char 一样单独用来声明该结构体变量,而ST只是一个结构体名,不能单独用来声明变量。所以, 4个选项中C符合题意。2. 有以下程序: main() int x=1,3,5,7,2,4,6,0,i,j,k; for(i=0;i< 3;i+) for(j=2;j > =i;j-)if(xj+1>xj) k=xj;xj=xj+1;xj+1=k; for(i=0;i < 3;i+) for(j=4;j < 7-i;j+) if(xj> xj+1) k=xj;xj=xj+1;xj+1=k; for(i=0;i < 8;i+) pri

4、ntf("%d",xi);printf("/n"); 程序运行后的输出结果是 ( ) 。(分数: 2.00 )A. 75310246VB. 01234567C. 76310462D. 13570246解析:解析主函数中定义了一个整型数组x,并初始化。接着执行了一个二重 for循环,在该二重循环的作用是将数组的前 4 个元素按从大到小排序,接着用了一个二重循环 (也是冒泡算法 )将数组的后 4个元 素按从小到大的顺序排序,故最后依次输出数组的个元素的值为75310246,所以,4个选项中选项A符合题意。3. 在面向对象的程序设计中,下列叙述中错误的是( )

5、 。(分数: 2.00 )A. 对象是面向对象软件的基本模块B. 对象不是独立存在的实体,各个对象之间有关联,彼此依赖VC. 下一层次的对象可以继承上层次对象的某些属性D. 同样的消息被不同对象接受时,可导致完全不同的行动解析: 解析 在面向对象的程序设计中,一个对象是一个可以独立存在的实体。各个对象之间相对独立, 相互依赖性小。所以,选项B错误,应为本题的正确答案。4. 有以下程序:void change(int k)k0=k5; main() int x10=(1,2,3,4,5,6,7,8,9,10,n=0;while(n < =4) change(&xn);n+; for

6、(n=0;n< 5;n+) printf("%d",xn); printf("/n"); 程序运行后输出的结果是 ( ) 。(分数: 2.00 )A. 6 7 8 9 10VB. 1 3 5 7 9C. 1 2 3 4 5D. 6 2 3 4 5解析: 解析 本题的 change() 函数实现的是:将传入的地址值的高 5 个单位的地址中的内容复制到传入 的地址当中,即等价于 *k=*(k+5) 。在主函数中,首先通过 while 循环,循环 5 次调用 change() 函数,依 次将x0x4的地址传入,所以while循环结束后,x0x4中的内容等

7、于x5x9中的内容。所 以输出结果为 6 7 8 9 10 ,故应该选择 A。5. 有以下程序:#include stdio.h main() char c1,c2,c3,c4,c5,c6;scanf(%c%c%c%c,&c1,&c2,&c3,&c4); c5=getchar(); c6=getchar(); putchar(c1); putchar(c2);printf(%c%c/n,c5,c6); 程序运行后,若从键盘输入 (从第 1 列开始) 123 回车 45678回车 则输 出结果是 ( ) 。(分数: 2.00 )A. 1267B. 1256C. 1

8、278D. 1245 V解析: 解析 在题目中,程序执行到 scanf() 函数时,会暂停等待用户输入 4个字符,按题意输入 123 回车后,字符1 3被分别输入到c1 c3中,而c4会得到一个换行符7n'。然后执行第1个getchar() 函数,由于前面的 scanf() 函数读完了缓冲区中的所有字符,所以此时程序会又暂停等待用户输入,按题 意输入45678 回车后,缓冲区第1个字符'4'被读入并赋给c5,第2个getchar()函数会读入缓冲区第2 个字符 '5' 。所以最后依次输出 c1、c2、c5、c6 的值后,屏幕上的结果是 1245。故应该选

9、择 D。6. 设有以下定义:union data int d1; float d2; demo;则下面叙述中错误的是 ( ) 。(分数: 2.00 )A. 变量demo与成员d2所占的内存字节数相同B. 变量demo中各成员的地址相同C. 变量demo和各成员的地址相同D. 若给demd1赋99后,demd2中的值是 99.0 V解析:解析本题中float所占内存字节数为4,而int类型在VC 6.0中占4字节,所以demo就与成员 d2所占字节数是相同的,选项A的说法正确。联合体的所有成员的首地址都是相同的,和联合体变量的地址一致。故选项B和C都是正确的。由于int类型数据和float类型数

10、据在内存中的存放格式是不一样的, 所以给d1赋99后,d2中不会得到99.0这个值。故选项D不正确,答案应该选择D。7. 冒泡排序在最坏情况下的比较次数是( ) 。(分数: 2.00 )A. n(n+1)/2B. nlog 2nC. n(n-1)/2VD. n/2解析: 解析 冒泡排序的基本思想是:将相邻的两个元素进行比较,如果反序,则交换;对于一个待排序 的序列,经一趟排序后,最大值的元素移动到最后的位置,其它值较大的元素也向最终位置移动,此过程 称为一趟冒泡。对于有 n 个数据的序列,共需 n-1 趟排序,第 i 趟对从 1 到 n-i 个数据进行比较、交换。 冒泡排序的最坏情况是待排序序

11、列逆序,第 1 趟比较 n-1 次,第 2趟比较 n-2 次,依此类推,最后一趟比 较1次,一共进行n-1趟排序。因此,冒泡排序在最坏情况下的比较次数是(n-1)+(n- 2)+1,结果为n(n-1)/2 。8. 以下选项中,值为 1 的表达式是 ( ) 。(分数: 2.00 )A. 1-'0'B. 1-'/0'VC. '1'-0D. '/0'-'0'解析:解析在ASCII码中,字符串结束符70'的ASCII码为0,字符'0'的ASCII码的值为48,字符'1' 的ASCII

12、码的值为49。由此可见,选项 A的值为-47 ;选项B的值为1;选项C的值为49;选项D的值为 -48 。故应该选择 B。9. 有以下程序: int a=4; int f(int n) int t=0; static int a=5; if(n%2) int a=6; t+=a+; elseint a=7; t+=a+; return t+a+; main() int s=a,i=O; for(;i< 2; i+) s+=f(i);printf("%d/n",s); 程序运行后的输出结果是 ( ) 。(分数: 2.OO )A. 24B. 28VC. 32D. 36解析

13、:解析题目中第1行声明了一个全局变量a,在函数f()中,也声明了一个静态变量a,这时全局变量被屏蔽,即在f()函数中用到的a是其内部定义的这个静态变量a,而不是全局变量。但f()函数的if子句和else子句又分别了局部变量a,这时静态变量a又被屏蔽,即在if子句中使用的是if子句自己定义的 a, else 子句也是这样。在主函数中,通过 for 语句连续执行了 2 次 f() 函数,并将返回值累加到 s 中,且 s 被全局变量 a 初始化, 即初始值是 4。第 1 次调用 f() ,参数值为 O, O 能被 2 整除,执行 if 子句, t被自增6,a增1不会影响外面的变量 a。函数返回t和静

14、态变量a的和,即11,此时,静态变量a被增 1,这次对 a 的改变会带入到下一次 f() 函数的调用小去。第 2 次调用 f() ,参数值为 1, 1 不能被 2 整除, 执行else子句,t被自增7,a增1不会影响外面的变量 a。函数返回t和静态变量a的和,此时a的值为 上次调用 f() 时增 1 后的值 6,即返回 7+6=13。所以, 主函数中 s 现在的值为 4+11+13=28。故应该选择 B。10. 程序设计方法要求在程序设计过程中, ( ) 。(分数: 2.OO )A. 先编制出程序,经调试使程序运行结果正确后再画出程序的流程图B. 先编制出程序,经调试使程序运行结果正确后再在程

15、序中的适当位置处加注释C. 先画出流程图,再根据流程图编制出程序,最后经调试使程序运行结果正确后再在程序中的适当位置处加注释D. 以上 3 种说法都不对 V解析:解析程序设计的过程应是先画出流程图,然后根据流程图编制出程序,所以选项A错误。程序中的注释是为了提高程序的可读性,注释必须在编制程序的同时加入,所以,选项B和选项C错误。综上所述,本题的正确答案为选项 D。11. 以下叙述中错误的是 ( ) 。(分数: 1.OO )A. C 语言中对二进制文件的访问速度比文本文件快B. C 语言中,随机文件以二进制代码形式存储数据C. 语句FILE fp;定义了一个名为fp的文件指针VD. C 语言中

16、的文本文件以 ASCII 码形式存储数据解析:解析定义文件类型指针变量的一般形式为:FILE *指针变量名;因此选项C是错误的,应该选择 C。12. 若有如下程序段,其中s、a、b、c 均已定义为整型变量,且a、c 均已赋值 (c 大于 O) s=a; for(b=1;b<=c;b+)s=s+1; 则与上述程序段功能等价的赋值语句是 ( ) 。(分数: 1.OO )A. s=a+b;B. s=a+c;VC. s=s+c;D. s=b+c;解析:解析本程序中for循环的次数为c-1+1共循环了 c次,而每循环一次s的值加1,所以s的值为 s+c。而最开始s的值为a,故4个选项中选项B符合题

17、意。13. 以下程序中函数 sort 的功能是对 a 所指数组中的数据进行由大到小的排序; void sort(int a,int n) int i,j,t; for(i=O;i < n-1;i+) for(j=i+1,j < n;j+) if(ai <aj)t=ai;ai=aj;aj=t;main() int aa1O=1,2,3,4,5,6,7,8,9,1O,i; sort(&aa3,5); for(i=O;i<1O;i+)print("%d,",aai); printf('/n"); 程序运行后的输出结果是 ( ) 。

18、(分数: 1.OO )A. 1,2,3,4,5,6,7,8,9,10B. 10,9,8,7,6,5,4,3,2,1,C. 1,2,3,8,7,6,5,4,9,10VD. 1,2,10,9,8,7,6,5,4,3,解析: 解析 本题中首先定义一个长度为 1 0的一个整型数组,并初始化为“ 1, 2,3,4,5,6, 7 ,8, 9,10”,然后调用排序函数sort() ,通过分析不难看出, sort() 函数是对具有 n 个元素的 a 数组进行从大到小排序。 由于函数的第一个参数是数组名, 其对应的实参可以是函数名或地址。 本题在调用该函数时, 实参是&aa3的地址,即把aa3的地址传给

19、了行参数组名a,函数也就是对aa3开始的5个元素进行从大到小的摔序, aa0 、aa1 、aa2 、aa8 、aa9 并没有变化。 Sort() 执行完毕后,接着执行后面的 for语句输出数组aa中各个元素的值,由于函数sort()只是对aa3开始的5个元素进行从大到小的排序, aa0 、aa1 、aa2 、aa8 、aa9 并没有变化,所以输出为“ 1,2, 3, 8, 7, 6, 5, 4, 9, 10”。所以4个选项中C正确。14. C 语言源程序名的后缀是 ( ) 。(分数: 1.00 )A. .exeB. .cVC. .objD. .cp解析:解析C语言源程序的后缀为.c ;经过编译

20、得到的目标程序文件的后缀为.obj ;再将目标程序文件链接后得到可执行文件的后缀为 .exe 。故本题应该选择 B。15. 有以下程序: main() char p='a','b','c,q="abc"printf("%d %d/n",sizeof(p),sizeof(q); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 4 4B. 3 3C. 3 4VD. 4 3解析: 解析 字符数组即可以用 初始化列表 来初始化,也可以用一个字符串常量来初始化。但字符串常 量系统会自动为其添加结束标记 '

21、;/0' ,故比实际长度要多一位,所以本题输出为 3 4,应该选择 C。16. 有以下程序; void ss(char *s,char t) while(*s) if(*s=t) *s=t-'a'+'A' s+; main() char str1100="abcddfefdbd",c='d' ss(str1,c);printf("%s/n",str1); 程序运行后的输出结果是( ) 。(分数: 1.00 )A. ABCDDEFEDBDB. abeDDfefDbD VC. abcAAfefAbAD.

22、 Abcddfefdbd解析:解析本题中的函数ss()有两个参数,一个是字符型指针变量s,另一个是字符型变量t。在函数中通过一个 while 循环,在循环中一次取出 s 指向的字符串并判断它是否和 t 中存放的字符相同, 若相等, 则执行“ *s=t -'a'+'A:” (若是小写字母,则把它转换成大写字母)语句。在主函数中执行函数调用ss(str1,c),很显然是把str1数组中所有字符“ d”变成大写字母,其他字符不变。所以4个选项中B正确。17. 有以下程序,其中 u表示按无符号整数输出:main() unsigned int x=0xFFFF;/*x的初值为十六

23、进制数*/ printf("%u/n",x); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. -1B. 65535VC. 32767D. 0xFFFF解析: 解析 整型常量有十进制、八进制和十六进制 3种表示:十进制整数以正号 (+) 或负号 (-) 开头,由 首位非 0 的一串十进制数字组成,正负号也可省略,表示正整数;八进制整数以数字 0 开头,后面接着干 个八进制数字(07):十六进制整数以数字。和字母x(大、小写均可)开头,后面接若干个十六进制数字 (数 字09和字母AF,大、小写均可)。故本题是以无符号整数形式输出一个十六进制整数FFFF,将其转换

24、为十进制就是 65535,故本题应该选择 B。18. 有以下程序:#include string.h main() char p='a','b','c',q10='a','b','c'printf("%d %d/n",strlen(p),strlen(q); 以下叙述中正确的是 ( ) 。(分数: 1.00 )A. 在给 p 和 q 数组置初值时,系统会自动添加字符串结束符,故输出的长度都为 3B. 由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为 3 VC.

25、由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为 3D. 由于p和q数组中都没有字符串结束符,故长度都不能确定解析: 解析 使用初始化列表对字符数组赋初值,系统不会自动为其添加字符串结束符,使用字符串初始化时才会自动添加,所以选项A是错的。数组长度在未指定的情况下由初始化列表项中数据的个数决定,若已指定且初始化项数不足时,多出部分会自动初始化为 0,0等价于宁符串结束符70'。所以选项B是正确的,C和D都是错误的。本题应该选Bo19. 有以下程序: main() char a,b,c,d; scanf("%c,%c,%d,%d",&a,&a

26、mp;b,&c,&d);printf("%c,%c,%c,%c/n",a,b,c,d); 若运行时从键盘上输入:6,5,65,66 回车。则输出结果是 ()。(分数: 1.00 )A. 6,5,A,BVB. 6,5,65,66C. 6,5,6,5D. 6,5,6,6解析: 解析 主函数中首先定义了 4 个字符变量 a、 b、 c d ,然后通过 scanf() 函数输入 a、 b、 c、 d 输 入中a和b是按字符格式c输入的,c和d是按整型符号d输入的。在看下面的printf()函数中,要求a、b、c、d都按字符输出,故a和b原样输出为6、5,c和d将把与

27、其ASCII码对应的字符输出,65和66的 ASCII码对应字符A和B,故最后的输出为6,5,A,B。所以,4个选项中选项A符合愿意。20. 有以下程序: #include stdio.h main() char c1='1',c2='2' c1=getchar(); c2=getchar();putchar(c1); putchar(c2); 当运行时输入:a回车后,以下叙述正确的是 ()。(分数: 1.00 )A. 变量 c1 被赋予字符 a, c2 被赋予回车符 VB. 程序将等待用户输入第 2 个字符C. 变量 c1 被赋予字符 a, c2 中仍是原有字

28、符 2D. 变量 c1 被赋予字符 a, c2 中将无确定值解析:解析getchar()函数执行时将从键盘缓冲区中读取用户的输入,而不管输入的是否可打印字符。所以当输入a回车后,键盘缓冲区被输入的实际上是两个字符:'a'和'/n'。故选项A的说法是正确的。21. 有以下程序: main() char s="/n123/" printf("%d,%d/n",strlen(s),sizeof(s); 执行后输出结果是 ( ) o(分数: 1.00 )A. 赋初值的字符串有错B. 6,7C. 5,6VD. 6,6解析: 解析 本

29、题在定义字符数组时没有定义数组长度,但是给数组赋了初值,这时初值的个数即为数组 的长度,故数组长度为6(包括70')。字符串的长度为有效字符的个数5。因此printf语句中输出的结果为5,6。所以,C选项为所选。22. 阅读以下函数: fun(char *s1,char *s2) int i=0; while(s1i=s2i&&s2i!='/0')i+;return(s1i='/0'&&s2i='/0'); 此函数的功能是 ( ) 。(分数: 1.00 )A. 将s2所指字符串赋给siB. 比较 s1 和

30、s2 所指字符串的大小,若 s1 比 s2 的大,函数值为 1,否则函数值为 0C. 比较si和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 VD. 比较si和s2所指字符串的长度,若si比s2的长,函数值为1,否则函数值为0解析:解析在函数fun()中有两个字符型指针变量 si和s2,在函数中程序执行 while循环,该循环退 出条件有两个:一个是 sii!=s2i( 两个字符串不相等 ):第二个是 sii 和 s2i 相等均为“ /0”(两个 字符串相等)。循环退出后,执行return语句,即两个字符串相等则返回 1,不相等则返回0。所以,C 选项为所选。23. 有以下定义语

31、句: double a,b; int w; long c;若各变量已正确赋值,则下列选项中正确的表达式是( ) 。(分数: i.00 )A. a=a+b=b+B. w%(ina+C. (c+%(inaVD. w=a=b解析:解析选项A中不是合法的赋值语句,将最右边的第一个赋值表达式加括号即为a=b+(b=b+)才正确,故选项A不正确;选项B中运算符“ %的对象必须是整型,而在选项 B中(int)a+b 为double型,故 选项B不正确;选项a,b都为double “=”应该改为“=”,故选项 D不正确。所以,4个选项中选项C符 合题意。24. 以下选项中合法的实型常数是 ( ) 。(分数:

32、i.00 )A. 5E2.0B. E-3C. .2E0 VD. i.3E解析:解析在C语言中,实数有两种表示形式:十进制数形式与指数形式。选项A中,5E2.0中E后面的2.0不是整数;选项 B中,E前面没有数字:选项 D中,E后面没有数字。最终可以判断选项C正确。解析:解析题目中的while(E)循环是当E等于0时,循环结束,E不等于0时,继续循环。选项 C中, 当E等于0时,表达式“ E=0为真继续循环,而E不等于。时,表达式为假循环结束,这与题目中的条件不等价,故应该选择C。26. 若有定义语句: int a23,*p3; ,则以下语句中正确的是 ( ) 。(分数: i.00 )A. p=

33、a;B. p0=a;C. p0=&ai2;VD. pi=&a;解析:解析选项A中,p为数组名,其值是不能被改变的,故非法;选项 B中,p0的类型是int*,而 a是二维数组名(类型为int3),两者无法赋值,故非法:选项 C中,p0为int型指针,&a12是 int型变量的地址,可以合法赋值;选项 D中,p1是int型指针,而&a是二维数组的地址(类型为 int(*)23) ,两者无法赋值,故非法。所以本题应该选择C。27. 若变量已正确定义,要求程序段完成求 5!的计算,不能完成此操作的程序段是 ( ) 。(分数: i.00 )A. for(i=1,p=1;i

34、< =5;i+) p*=i;B. for(i=1;i< =5;i+) p=1; p*=i;VC. i=i;p=i; while(i<=5)p*=i; i+;D. i=i;p=i;dop*=i; i+; while(i<=5)解析:解析选项B中for循环了 5次,而每次循环的时候,都将 p的值重新赋值为1后,再乘以当前数 字i,最后的结果为5,显然不是5!的值,同样的分析可知选项 A、选项C和选项D计算的都是5!。所以, 4个选项中选项B符合题意。28. 有以下程序: #include < stdio.h > stxuct tt int x;struct tt

35、 *y;*p; struct tta4=20,a+1,15,a+2,30,a+3,17,a;main() int i; p=a; for(i=1;i < =2;i+) printf("%d,",p- >x );p=p- >y; 程序的运行结果是 ( ) 。(分数: 1.00 )A. 20,30,B. 30,17C. 15,30,D. 20,15,V解析:解析题目中定义了一个全局结构体数组a,结构体中包含两个成员;一个 int型变量x和一个自身类型指针y。所以,结构体数组a的初始化列表中每两个初始化一个结构体元素。主函数通过一个for循环,连续调用了两次输出

36、函数printf(),每次输出p所指元素的x成员值。p初始化时指向数组a的首地址,即a0的位置,所以第1次输出的值为20。然后又将a0的成员y的值赋给p ,y在初始化时是a+1, 所以p在第2次输出时指向的元素是a1,故第2次输出的值为15。所以本题最终输出结果是“ 20,15, ”,应该选择 D。29. 有以下程序: main() int a=1,b=2,m=0,n=0,k; k=(n=b > a)|(m=a <b); printf("%d,%d/n",k,m); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 0,0B. 0,1C. 1,0VD

37、. 1,1解析: 解析 在“| ”运算中当其左边的表达式为真,右边的表达式将不再执行。主函数中,“ | ”左边 的表达式k=(n=b >a),“2>1 ”为真,所以n被赋值为1,接着k被赋值1,即“ ”运算符左边表达式为真,此时不再计算“”右边的表达式,因此m的值没有被改变仍为 0,最后的输出结果1,0。所以,4个选项中选项C符合题意。30. 有以下程序: #include <string.h > void f(char p10,intn)/* 字符串从小到大排序 */ chart10; int i,j; for(i=0;i<n-1;i+) for(j=i+1;j

38、 <n;j+) if(strcmp(pi,pj)>0) strcpy(t,pi); strcpy(pi,pj); strcpy(pj,t); main() charp510="abc","aabdog","abbd","dcdbe","cd" f(p,5); printf("%d/n",strlen(p0); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 2B. 4C. 6VD. 3解析: 解析 题目中已告知函数 f() 的作用是将字符串从小到大排

39、序,因此主函数中调用完 f(p,5); 后, 二维数组 p 中的内容为 ("aabdfg","abbd","abc","cd","dcdbc"。输出的结果是 strlen(p0) ,即 p 中第1 个字符串的长度,所以结果是6。故本题应该选择 C。31. 已有定义:char c;,程序前面已在命令行中包含ctype.h文件。不能用于判断 c中的字符是否为大写字母的表达式是 ( ) 。(分数: 1.00 )A. isupper(B. 'A' <=c<='Z

40、9; VC. 'A' < =c&&c< ='Z'D. c<=('z'-32)&&('a'-32)<=c解析:解析大写字母从'A''Z'的ASCII码是连续的,所以如果当一个字符大于等于'A且小于等于'z'时, 那这个字符就一定是一个大写字母, 故选项 C 正确。 C 语言中的库函数 isupper() 的作用也正是判断一 个字符是否为大写字母的,故选项 A正确。在ASCII码中,小写字母的编码也是连续的,对应的小写字符

41、比大写字符的ASCII码值大32,所以选项D经过小写字符-32后,换算成了对应的大写字母'Z'和'A',所得到结果和选项C是一致的,故也是正确的。选项 B中,C语言的逻辑表达式不能直接连写,而应该写成 选项C那样,故是错误的,应该选择Bo32. 下列描述中正确的是 ( ) 。(分数: 1.00 )A. 软件工程只是解决软件项目的管理问题B. 软件工程主要解决软件产品的生产率问题C. 软件工程的主要思想是强调在软件开发过程中需要应用工程化原则VD. 软件工程只是解决软件开发中的技术问题解析:解析软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科,选项A说

42、法错误。软件工程是指采用工程的概念、原理、技术和方法指导软件的开发与维护,软件工程学的主要研究对象包括 软件开发与维护的技术、方法、工具和管理等方面,选项B和选项D的说法均过于片面,选项 C正确。33. 下列关于 E-R 图的描述中正确的是 ( ) o(分数: 1.00 )A. E-R 图只能表示实体之间的联系B. E-R 图只能表示实体和实体之间的联系C. E-R 图只能表示实体和属性D. E-R 图能表示实体、属性和实体之间的联系V解析:解析E-R图中,用图框表示实体、属性和实体之间的联系。用E-R图不仅可以简单明了地描述实体及其相互之间的联系,还可以方便地描述多个实体集之间的联系和一个实

43、体集内部实体之间的联系。选 项A、选项B和选项C的说法都错误,正确答案是选项D34. 下列叙述中正确的是 ( ) o(分数: 1.00 )A. 数据的逻辑结构与存储结构必定一一对应B. 由于计算机存储空间是向量式的存储结构,因此,数据的存储结构一定是线性结构C. 程序设计语言小的数组般是顺序存储结构,因此,利用数组只能处理线性结构D. 以上3种说法都不对 V解析: 解析 一种数据的逻辑结构根据需要可以表示成多种存储结构,数据的逻辑结构与存储结构不一定 一一对应,选项 A 错误。计算机的存储空间是向量式的存储结构,但一种数据的逻辑结构根据需要可以表 示成多种存储结构,如线性链表是线性表的链式存储

44、结构,数据的存储结构不一定是线性结构,因此选项 B错误。数组一般是顺序存储结构,但利用利用数组也能处理非线性结构。选项C错误。由此可知,只有选项D的说法正确。35. 有以下程序:#include < stdio.h > main() printf("%d/n",NULL);程序运行后的输出结果是 ()。(分数: 1.00 )A. 0 VB. 1C. -1D. NULL没定义,出错解析:解析在C语言中NULL的ASCII码值为0,而输出函数要求以整形格式输出,故最后的输出数为0o所以,4个选项中选项 A符合愿意。36. 对于长度为n的线性表,在最坏情况下,下列各排

45、序法所对应的比较次数中正确的是()。(分数: 1.00 )A. 冒泡排序为 n/2B. 冒泡排序为 nC. 快速排序为 nD. 快速排序为 n(n-1)/2 V解析:解析假设线性表的长度为n,在最坏情况下,冒泡排序和快速排序需要的比较次数为n(n-1)/237. 在面向对象方法中,实现信息隐蔽是依靠 ( ) o(分数: 1.00 )A. 对象的继承B. 对象的多态C. 对象的封装 VD. 对象的分类解析: 解析 通常认为,面向对象方法具有封装性、继承性,多态性几大特点。所谓封装就是将相关的信 息、操作与处理融合在一个内含的部件中 ( 对象中 ) 。简单地说,封装就是隐藏信息。38. 以下叙述中

46、正确的是 ( ) 。(分数: 1.00 )A. 全局变量的作用域一定比局部变量的作用域范围大B. 静态 (stati类别变量的生存期贯穿于整个程序的运行期间 VC. 函数的形参都属于全局变量D. 未在定义语句中赋初值的 auto 变量和 static 变量的初值都是随机值解析: 解析 若在函数中定义与全局变量名字相同局部变量,则全局变量在该函数中将不起作用,因此全 局变量的作用域并不一定比局部变量的作用域大,故选项A不正确;静态变量一旦定义,将在整个程序的运行期间都存在,故选项 B 正确;函数的形参只在函数调用的时候分配存储空间,在退出函数时收回存储 空间,因此是局部的,故选项C不正确;没有赋

47、值的 auto型变量的初值是随机的,没有赋值的static 型变量的初值是0,故选项D不正确。所以,B选项为所选。39. 若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入 3个整数分别赋给变量 a、b、c的语句是()。 (分数: 1.00 )A. scanf("%d%d%d",&a,&b,;VB. scanf("%d%d%d",&a,&b,&C. scanf("%d%d%d",a,b,;D. scanf("%d%d%d",a,b,*;解析:解析选项B

48、中d已经为地址,不应在加上求地址符号“ &,故选项 B不正确;选项 C中,a和b 都为变量不是地址,应该在a和b之前加上求地址符号“ &,故选项C不正确:选项D中指针d所指向的 存储空间的位置为变量 c的值,不为地址,故选项 D不正确,所以,4个选项中A为所选。解析:解析本题中定义了一个结点 struct NODE在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给 p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向小让q指向r,r指向NULL。显然q- >next- > num的值为

49、指针r所 指向结点的num域的值为3 ,p- >num的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+仁4。 所以,4个选项中选项B符合题意。A.#include< stdih>B.#include< stdih>C.#include< stdih>D.#include< stdih>分数: 1.00 )41. 以下 4 个程序中,完全正确的是 ( ) 。main(); /* programming */ printf("programming!/n"); main() /*/ programming /

50、*/ printf("programming!/n"); main() /*/* programming */*/ printf("programming!/n"); main() /* programming */ printf("programming!/n");解析:解析选项A在定义main()函数时,函数头后面多了一个分号,故选项A不正确;C语言中的注释是不能嵌套的,故选项 C不正确:选项D在使用预编译指令#include时漏掉了 #号,所以也是错误的。故应该选择 B42. 下列数据结构中,能用二分法进行查找的是 ( )(分数

51、: 1.00 )A. 顺序存储的有序线性表 VB. 线性链表C. 二叉链表D. 有序线性链表解析: 解析 二分查找只适用于顺序存储的有序表。43. 以下程序输出的结果是 ()。#include < stdio.h > main() int i=010,j=10; printf("%d,%d/n:,+i,j-); (分数: 1.00 )A. 11,10B. 9,10VC. 010,9D. 10,9解析:解析 程序中 i 的值用八进制表示 (十进制为 8) ,+i 是在变量使用前自身先加1,而 j- 是在变量使用后自身减 1 。所以, 4 个选项中 B 符合题意。44. 有以

52、下程序: fun(int x,int y) static int m=0, i=2; i+=m+1; m=i+x+y; return m; main() int j=1,m=1,k; k=fun(j,m); printf("%d,"k); k=fun(j,m); printf("%d/n",k); 执行后的输出结果是 ( )。 (分数: 1.00 )A. 5,5B. 5,11VC. 11,11D. 11,5解析:解析本题的fun()函数中定义的变量 m和i是静态局部变量,第1次调用fun()函数时m=0 i=2 , 执行i+=m+1后,i的值变为3,再执

53、行m=i+x+y后,m的值变为5,所以第1次输出的整数是5。第2次调 用fun()函数时m=5 i=3,执行i+=m+1,i变为9,再执行m=i+x+y,m变为11,所以第2次输出的整数是 11 。故本题应该选择 B。45. 下列实体的联系中,属于多对多联系的是 ( ) 。(分数: 1.00 )A. 学生与课程 VB. 学校与校长C. 住院的病人与病床D. 职工与工资解析:解析只有选项A符合多对多联系的条件,因为一个学生可以选修多门课程,而一门课程又可以由 多个学生来选修,所以学生与课程之间的联系是多对多联系。46. 设有定义:int n仁0,n2,*p=&n2,*q=&n1;

54、,以下赋值语句中与 n2=n1;语句等价的是()。(分数: 1.00 )A. *p=*q;VB. p=q;C. *p=&n1;D. p=*q;解析:解析题目中定义了两个变量 n1和n2,又定义了两个指针 p和q分别指向变量n2和n1。要通过 指针实现n2=n1,就是要将q所指内容赋给p所指内容,即*p=*q。所以应该选择 A。47. 设有以下语句: typedef struct TT char c; int a4;CIN;则下面叙述中正确的是 ( ) 。(分数: 1.00 )A. 可以用TT定义结构体变量B. TT 是 struct 类型的变量C. 可以用CIN定义结构体变量VD. C

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

56、语 法格式为: typedef 类型名 标识符; 以后就可以用该标识符来代替被说明的类型名了。因此,当前面存 在typedef时,该语句就变成了给 struct TT 的定义一个新的名称 CIN。所以,此时的CIN是一个结构体 类型,它相当于struct TT ,即可以和char 一样单独用来声明该结构体变量,而TT只是一个结构体名,不能单独用来声明变量。所以, 4个选项中C符合题意。48. 有以下程序:#include < stdlib.h > main() char *p,*q; p=(char*)malloc(sizeof(char)*20);q=p;scanf("

57、%s%s",p,q); printf("%s%s/n",p,q); 若从键盘输入:abc def <回车>,则输出结果是 ()。(分数: 1.00 )A. def defVB. abc defC. abe dD. d d解析:解析本题首先定义两个字符型指针变量p和q,通过malloc()函数申请20个字符的存储空间,并把它的首地址赋给 p,在把p的值赋给q , p和q指向同一个存储区。在 scanf()语句中读取字符串到 p 和q指向的字符串,先把"abc”读取到p指向的存储区中,第一个空格是结束标记,第二个空格是分隔符, 再把"d

58、ef"存放到q指向的存储区,把原先的内容覆盖。所以p和q指向的存储区中内容是"def",所以最后输出的def,def所以4个选项中A正确。49. 有以下程序: main() int a; char c=10; float f=100.0; double x; a=f/=c*=(x=6.5);printf("%d %d %3.1f %3.1f/n",a,c,f,x); 程序运行后的输出结果是 ( ) 。(分数: 1.00 )A. 1 65 1 6.5B. 1 65 1.5 6.5VC. 1 65 1.0 6.5D. 2 65 1.5 6.5解析:解析主函数中先定义了个整型变量a,一个字符变量c并赋初值10, 一个浮点型变量f并赋初值100.00和一个double犁x,接着执行“ a=f/=c*=(x=6.5) ”,该语句从右向左计算,先把6.5赋值给x(该括号表达式的值也为6.5),此时x的值的变为6.5,然

温馨提示

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

评论

0/150

提交评论