资源描述
第六套模拟试题参考答案及解析
1. 一个算法的空间复杂度,一般是指执行这个算法所需的内存空间。
一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。
本题答案是D。
2. 栈是限定在一端进行插入与删除的线性表。
栈是按照"先进后出"的或后进先出的原则组织数据的,因此,栈也被称为"先进后出"表或"后进先出"表。
本题答案是D。
3. 所谓满二叉树是指这样的一种二叉树:除最后一层外,每层上的所有结点都有两个子结点。这就是说,在满二叉树中,每一层上的结点数都达到最大值,即在满二叉树的第K层上有2K-1个结点,且深度为m的满二叉树有2m个结点。
在满二叉树中,最后一层的结点个数就是叶子结点的个数,本题中深度为5,故叶子结点数为25-1=24=16。
本题答案是C。
4. 要形成良好的程序设计风格,主要应注重和考虑下述一些因素:符号名的命名应具有一定的实际含义,以便于对程序功能的理解;正确的注释能够帮助读者理解程序;程序编写应优先考虑清晰性,除非对效率有特殊要求,程序编写要做到清晰第一,效率第二。
本题答案为A。
5. 对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系。对象之间通过传递消息互相联系,以模拟现实世界中不同事物彼此之间的联系。
本题答案为A。
6. 软件工程包括3个要素,即方法、工具和过程。
本题答案为D。
7. 程序流程图(PFD)是一种传统的、应用广泛的软件过程设计表示工具,通常也称为程序框图,其箭头代表的是控制流。
本题答案为B。
8. 在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是数据库系统。
本题答案为A。
9. 层次模型是最早发展出来的数据库模型。它的基本结构是树形结构,这种结构方式在现实世界中很普遍,如家族结构、行政组织机构,它们自顶向下、层次分明。
本题答案为B。
10. 关系数据库管理系统能实现的专门关系运算,包括选择运算、投影运算、连接运算。
本题答案为B。
11. 本题的考查点是赋值语句。
选项A和B中,"7+b+c"和"7+b++"中是表达式,而赋值语句中赋值号的左边应为变量,所以不正确;
选项C中由于没有";",所以不是语句,因为语句必需以分号结束。
故本题答案为D。
12. 本题的考查点是函数的调用。
"a+=x"表达式和"a=a+x"是等效的,所以在程序中,fun3(k)的值为5,即为n的值,所以打印时结果应当等于5。
故本题答案为C。
13. 本题的考查点是if判断语句。
"%"是求模运算符,所以if判断语句中实际是指出只有当y可以被3整除时方可以执行循环体;--y是先进行y的自减运算,再使用y值。所以,最后的打印结果应当为"852"。
故本题答案为B。
14. 本题的考查点是枚举类型。
枚举的语法规定,当枚举元素没有赋值时,如果其前面没有其它枚举元素,其值为0,如果其前面有其它枚举元素,其值为其前一个元素的值加一,所以his的值为5,her的值为15。
故本题答案为C。
15. 本题的考查点是逻辑与及自增、自减运算。
a++是先使用a值再将a的值加1,b--是先使用b的值再将b的值减1,所以题中的逻辑运算表达式的值应当为真,即为1,而经过运算后,a和b的值已经分别变成0和3了。
故本题答案为C。
16. 本题的考查点是除法运算。
在C语言中,参与运算的两个数如果是整型数,则/运算为整除运算。故x/y的结果约为3。
故本题答案为C。
17. 本题的考查点是指针变量作为函数参数。
观察程序,可以发现,函数prtv()的作用是将地址等于x的内存单元中值加1,因为我们在主函数中是将变量a的地址作为实参传递给了prtv()函数,所以,函数prtv()将地址等于变量a的地址的那个内存单元中的值加1,打印结果自然就是25+1=26了。
故本题答案为D。
18. 本题的考查点是根据程序写出数学函数关系。
题中的两个判断语句实际上指出了y取值的条件,即是当x大于零时y取1;当x小于零时y取0;当x等于零时y值不变,为-1。
故本题答案为C。
19. 本题的考查点是运算符在表达式中的处理原则。
在x=y+z这个表达式中,应当先计算出y+z的值,然后再将这个值和x的值进行比较,根据比较结果打印输出,不能认为是将y值赋给x后再与z相加。由于3不等于0,if条件不成立,所以输出####。
故本题的答案为D。
20. 本题的考查点是do-while语句。
在第一次循环时,先计算表达式x-=2,所以输出1,--x为0,判断表达式的值为非零,返回重新执行该语句;
在第二次循环时,表达式x-=2,即-2,所以输出-2,--x为-3,判断表达式的值为零,循环结束。
故本题答案为B。
21. 本题的考查点是函数scanf()的格式输入。
根据函数scanf()的语法可知,在函数中的参数表列部分,应当是欲赋值变量的内存地址,像第六行这样,将数组元素直接放在参数表列中是无法达到给数组元素赋值的目的。
故本题答案为C。
22. 本题的考查点是while()循环语句。
这个函数的功能是求字符串的长度,需要注意的是,在返回长度时一定记住要减一,否则计算出的串长度将会多一。
故本题答案是A。
23. 本题的考查点是格式输出函数printf的格式字符。
由于字符"5"和"3"的ASCII码相差为2,所以ch1经过运算后的值应为65+2=67;同理,ch2经过运算后的值应为65+3=68,即是字符"D"。
故本题答案为A。
24. 本题的考查点是sqrt()函数的应用。
函数sqrt(x)是一个标准的数学函数,用于求x的二次方根,知道这一点以后就好做了,将各变量的值带入程序求解即可,另外,程序中的(double)是强制类型转换,将原来为float型的y强制转换成double型变量。
故本题答案为C。
25. 本题的考查点是运算符的应用。
第一个表达式中,运算的方向是从左至右,所以a的值为2;
第二个表达式中,等式右边是一个逻辑表达式,由于结果为真,所以表达式的值为1,即b为1。
故本题答案为B。
26. 本题的考查点是格式控制字符的应用。
printf()函数:当"格式控制"字符串中连续使用两个"%"符号时,表示要输出字符"%",所以,a,c两个变量的值并不带入输出字符串,最后的打印结果应当是 a=%d,b=%d。
故本题答案为D。
27. 本题的考查点是对'NULL'的理解。
NULL在C编译器中是一个值为0的常量,它的定义在头文件"stdio.h"中,本题的程序在一开始就包含了这个头文件,所以,在打印的时候,将打印出0。
故本题答案为B。
28. 本题的考查点是变量的自增、自减运算。
++i是先对i进行加1运算,再使用i的值;j--是先使用j值,再对j进行减1运算。所以,程序的打印结果应当为"11,10"。
故本题答案为A。
29. 本题的考查点是函数的调用。
将k和m的值带入函数func中,第一次调用完func()后,其中m和i的值要保留,并在第二次调用时使用,这是因为两者都是局部静态变量,最后的结果是8和17。
故本题答案为A。
30. 本题的考查点是指向指针的指针。
指针数组*alpha[6]实际上相当于一个二维数组,而p是一个指向指针的指针,p=alpha后,引用p[x]便是引用数组*alpha[6]中的第x个数组元素的首地址,所以打印的结果应当为ABCDEFGHIJKLMNOP。
故本题答案为C。
31. 本题的考查点是求数组中最大值的下标。
k是一个指针,它的值是一个地址,要通过它为主函数的变量改变数据,必须使用*p,这样就可以把一个下标数赋给p指针指向的那个内存单元,所以横线处应填入 *k=p。
故本题答案为D。
32. 本题的考查点是for语句循环条件的判断。
循环条件是表达式(y!=123)&&(x<4),因为y值始终为0,所以表达式左边一定恒为1,当x<4时,循环可以运行,当x=4时,循环终止,所以这个循环一共可以执行4次。
故本题答案为C。
33. 本题的考查点是对实参的理解。
实参可以是常量、变量或表达式,(exp1,exp2)是逗号表达式,它的值是exp2的值;(exp3,exp4,exp5)是逗号表达式,它的值是exp5的值。所以该函数调用语句含有的实参个数是2,即:(exp1,exp2)和(exp3,exp4,exp5)。
故本题答案为B。
34. 本题的考查点是运算符。
题目的四个选项中,(B)(C)(D)都不要求运算数必须为整数,参与模运算(%)的运算数必须是整型数据。
故本题答案为A。
35. 本题的考查点是指针变量的引用。
p的地址本身和i的地址一样,所以*p代表i中的数值,而&j是j的地址,*&j就是j中的数值,所以,*p=*&j和i=j是等价的。
故本题答案为B。
36. 本题的考查点是通过指针引用数组元素。
选项A,*p+6,其值等于1+6=7;
选项B,*(p+6),其值等于a[6]=7;
选项C,*p+=5,其值等于*p=*p+5=1+5=6;
选项D,p+5是个地址值。
故本题答案为C。
37. 本题的考查点是格式字符。
在C语言格式字符的输出中,"%d"是以带符号的十进制形式输出整数,即k=11;"%o"是以8进制无符号形式输出整数(不输出前导符0),即k=13;"%x"是以16进制无符号形式输出整数(不输出前导符0x),即k=b。
故本题答案为D。
38. 本题的考查点是函数的反复调用。
在子函数fun()中,第一次执行使得a数组的3个元素的值都翻倍后减一,即为1,3,5;此时h的值为1,a[h]即a[1]的值3,返回作为fun()第二次执行的实参,函数第二次的执行使得各个数组元素的值分别变为-1,3,7。
故本题答案为D。
39. 本题的考查点是字符串的应用。
观察子函数fun()可知,它是实现一个数组首末元素位置互相依次交换。联系主函数,可以看出,是对字符串中的元素依次进行首末位置的对调。
故本题答案为A。
40. 本题的考查点是二维数组的运算。
观察程序段可知,第一个for循环语句是给数组中的各元素赋值,第二个for循环语句是给数组中的元素进行重新赋值,得到数组中的最大元素值为6。
故本题答案为C。
41. 本题的考查点是共用体类型数据的特点。
根据共用体的定义可知:共用体r的成员k和成员i[2]是共用同一段内存空间,所以,当程序给r.i[0]赋值后,实际上,共用体成员k的值也确定了,为2。所以打印输出的结果应当为2。
故本题答案为A。
42. 本题的考查点是计算结构体的长度。
结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。double占8个字节,指针变量占2个字节,2+2+8=12,所以,输出结果是12。
故本题答案为D。
43. 本题的考查点是带参数的宏定义。
观察程序段可知,对带参数的宏的展开只是将语句中的宏名后面括号内的实参字符串代替#define命令行中的形参。本题中c=f(a)/f(b)用#define f(x) x*x代替得c=f(6)/f(2),即c=6*6/2*2,结果为36。
故本题答案为C。
44. 本题的考查点是switch语句的应用。
在每次执行switch后面括号内的表达式s[k]时,要先取当前s[k]的值与case后的字符常量进行比较,找到与之匹配的分支后,即转去执行该分支中的语句。switch语句中,某分支执行完毕,若未遇到break语句,则接着执行剩余的其它分支,直到遇到break语句。此题中,因为没有break语句,所以总会执行到i=3,即总是v[3]在递加。
故本题答案为B。
45. 本题的考查点是C语法表达式的合理性。
选项A和C明显错;
选项D中,表达式a=a+7=c+b,是先执行赋值表达式a+7=c+b,再把这个表达式的值赋给a,显然,表达式a+7=c+b非法,因为赋值表达式的左值不能为常量或表达式。
本题答案为B。
46. 本题考查点是while语句循环次数的问题。
符合n>6的n只有7,8,9;所以循环次数为3。选项C、D可以排除。又因n在输出之前要执行n--,所以输出结果只能是876。
本题答案为B。
47. 本题的考查点是求数组中的最小元素。
函数要求返回数组中最小值所在的下标值,而变量p的值就是函数的返回值,所以p为最小值所在的下标,循环比较数组中的值,将小值的下标赋给变量p,横线上应填入p=i。
本题答案为D。
48. 本题的考查点是对C语言中宏定义的理解。
分别将N,M的宏定义代入NUM的表达式中,可以得到NUM=2*2+1+1=6,所以当常数NUM作为for循环的终止条件时,应当循环6次。
故本题答案为B。
49. 本题的考查点是二维数组的应用。
题中的外循环只执行了2次:
第1次: a[1][0] = 3,a[1][1] = 4,所以s = 7;
第2次: a[2][0] = 5,a[2][1] = 6,a[2][2] = 0,所以s = 7 + 5 + 6 + 0 = 18。
本题答案为A。
50. 本题的考查点是结构体类型变量的定义。
在选项C中,aa是一个结构体变量,而不是结构体名,所以struct aa td1;是非法的。
本题答案为C。
51. 标准答案为:250
所谓完全二叉树是指除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。
具有n个结点的完全二叉树,其父结点数为int(n/2),而叶子结点数等于总结点数减去父结点数。本题n=500,故父结点数等于int(500/2)=250,叶子结点数等于500-250=250。
52. 标准答案为:n(n-1)/2 或 n*(n-1)/2 或 O(n(n-1)/2) 或 O(n*(n-1)/2)
冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。
假设线性表的长度为n,则在最坏的情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。
53. 标准答案为:实体
面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。
54. 标准答案为:需求获取
软件的需求分析阶段的工作,可以概括为四个方面:需求获取、需求分析、编写需求规格说明书和需求评审。
需求获取的目的是确定对目标系统的各方面需求。涉及到的主要任务是建立获取用户需求的方法框架,并支持和监控需求获取的过程。
需求分析是对获取的需求进行分析和综合,最终给出系统的解决方案和目标系统的逻辑模型。
编写需求规格说明书作为需求分析的阶段成果,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进度的依据。
需求评审是对需求分析阶段的工作进行的复审,验证需求文档的一致性、可行性、完整性和有效性。
55. 标准答案为:数据库设计
数据库设计是数据库应用的核心。在数据库应用系统中的一个核心问题就是设计一个能满足用户要求,性能良好的数据库,这就是数据库设计。
56. 本题的考查点是通过指针引用数组元素。
98是数组w的第5个元素(最开始的为第0个), 而通过*p=w已经将p指向了数组w, 要想不移动指针p而引用数据元素98,可以有以下两种方法:p[5]、*(p + 5)。
故本题答案为:p[5]或者*(p + 5)。
57. 本题的考查点是宏定义。
宏替换后,表达式t = MAX(a + b, c + d)*10即变为:t = (a+b)>(c+d) ? (a+b) : (c + d)*10;
由于(a+b)>(c+d)为真, 所以t = (a+b),即为7。
故本题答案为:7。
58. 本题的考查点是函数的调用。
在程序中首先定义了一个字符常量MAX,值为5,同时定义的整型全局数组a,即a[5];
函数fun1()中,通过for循环将数组中的5个数组元素分别赋值为0、2、4、6、8;
函数fun2()中,又定义了一个数组a[MAX](即a[5]),因为它是一个局部定义的数组,所以它的变化不影响全局数组a[5];
函数fun3()中,通过for循环将全局数组a[MAX]中各个数组元素的值打印出来。
根据以上对程序中3个子函数的分析,可以知道,主函数中两次调用函数fun3()的结果都是一样的,所以最后的打印结果应当为"0246802468"。
故本题答案为0246802468。
59. 本题的考查点是三目运算符。
这种条件表达式的一般形式为:表达式1?表达式2:表达式3,三目运算符的执行顺序:先求解表达式1,若非0则求解表达式2,此时表达式2的值就作为整个表达式的值,若表达式1的值为0,则求解表达式3,此时表达式3的值就作为整个表达式的值。C语言在做一系列表达式相与时,从左到右分别计算各表达式的值,一旦遇到一个表达式为假,则剩余的表达式都不再进行运算。该题中,a++<=2的值为假,则b--<=2和c++就都不再运算。
故本题答案为:a=26,b=14,c=19。
60. 本题的考查点是break语句和continue语句。
在for循环中,当x>=10时,循环便会终止;当x<10时,如果x整除2的余数为1,则x等于x+5,否则x等于x-3。将实际的值带入程序中进行运算即可得到正确答案,当循环结束的时候,x和i的值分别是10和6。
故本题答案为:10和6。
61. 本题的考查点是对文件的操作。
fopen()函数实现打开文件的功能,通常的调用方式为:
FILE *fp;
fp=fopen(文件名,使用文件方式);
因此,第一个横线处要求填写要打开文件的名字fname。
fprintf()函数的一般调用方式为:
fprintf(文件指针,格式字符串,输出表列);
所以第二个横线处应填写fp。
故本题答案为:fname和fp。
62. 本题的考查点是for循环。
在循环中必须将指针p不断向后移动,循环才有可以结束的可能,所以第一个横线处应填写"p++"或者"p=p+1";而在第二个横线处,应当填写"*p",因为此时*p指向字符串中的字符,结合p++,就可以从字符串的第一个字符开始,打印一个字符换一次行,最终实现将字符串"Turbo C"纵向显示在屏幕上。
故本题答案为:p++或p=p+1和*p。
63. 标准答案为:*str1 或 *str1!='0' 或 *str1!=0 或 *str1!=NULL 或 !(*str1=='0') 与 *str1++=*str2++ 本题的考查点是字符串连接函数strcat()。
函数strcat(str1,str2)实现将字符串str2连接到字符串str1后面,所以首先要找到字符串str1的串尾,根据C语言的语法规定,一个串的串尾一定是一个隐含字符"\0",而在程序中,对字符串中字符的访问是通过两个指针变量来完成的,因此要找到字符串str1的串尾,要判断*str1是否为"\0",要找到字符串str2的串尾,要判断*str2是否为"\0",程序中必须可以使字符串中字符逐一顺序体现,所以在题中我们应填写"*str1"和"*str1++=*str2++ "。
故本题答案为:*str1或*str1!='\0'或*str1!=0或*str1!=NULL和*str1++=*str2++。
64. 本题的考查点是求最大公约数问题。
函数中的变量i和j分别存放两个形参的最小数和最大数,在语句i=a和j=b执行之前,要将a和b分别变为最小数和最大数,当a>b时,程序使用中间变量将两者交换,所以题中第一个空中应当填写"b=m";为求两个整数的最大公约数,程序的where循环条件必须为j整除i成立,所以题中第二个空中应当填写"j%i";程序要通过i的值返回最大公约数,因此在循环中要将每次整除的公约数赋给i,以保证最后返回的是两个整数的最大公约数,所以第三个空中应当填写"n"。
故本题答案为:b=m和j%i和n。
8 / 8
展开阅读全文