成才教育内部资料 0791-6290062 版权所有 翻印必究
合题目的要求;选项A)计算得出的是指针类型数据所占的内存字节数。
(35)A
【解析】 循环开始前,指针t和s都指向字符串的起始位置,然后通过while循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t自减1,此时t指向的位置是字符串的结束标志'\\0'处,故t-s的值是字符串的长度,并不包括结束标志。
(36)C
【解析】 本题综合考查了输入函数的使用。scanf函数会将空格视为分隔符,getchar函数只能输入单个字符,getc函数是文件操作函数,显然都不符合题意。通过gets函数输入字符串时,输入的空格被认为是字符串的一个字符。
(37)D
【解析】 通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的相同方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量。选项B)和C)后面的'\\0'是多余的,在C语言中,系统会自动在字符串的结尾处加上一个字符'\\0'作为串的结束标记。
(38)D
【解析】 函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重新赋值,而只是保留上次函数调用结束时的值。
(39)C
【解析】 带参数的宏定义命令行形式如下: #define 宏名(形参表) 替换文本
在编译的时候编译预处理程序用\替换文本\来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间。
(40)A
【解析】 本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen函数将返回NULL。
二、选择题
(1)【1】 可行性研究
【解析】 软件生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等,还可以
36
将软件生命周期分为三个阶段:①软件定义阶段:可行性研究和需求分析;②软件开发阶段:设计、实现和测试;③软件运行维护阶段:交付使用和维护。
(2)【2】 完善性
【解析】 软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是指在软件交付使用后,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再次开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的进一步改进软件打下良好基础。
(3)【3】 非线性结构
【解析】 数据的逻辑结构有线性结构和非线性结构两大类。
(4)【4】 n+1
【解析】 在任意一棵二叉树中,度为O多结点(即叶子结点)总是比度为2多结点多一个。
(5)【5】 实体 【解析】 在E-R图中用矩形表示实体;椭圆形表示属性;菱形表示联系。
(6)【6】 3
【解析】 C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为x不大于y,所以执行printf(\语句。
(7)【7】 852
【解析】 循环前,变量y的值为9,其中,循环语句在y大于0情况下循环,每次循环后y的值都减1。循环体是当y能被3整除时输出表达式--y,输出的是减1后的y值。这样,第一次循环因y为9,能被3整除,输出8,y也变成8。又经两次循环,y的值变为6,又让y减1变成5,并输出5;又经两次循环,y的值变成3,让y减1变成2,输出2;再经两次循环后,y的值变成0,结束循环,所以程序输出852。
(8)【8】 k<=n 【9】 k++
【解析】 本题要求将一个for循环改成while循环。首先要保证循环条件相同,在for循环中,每次执行循环之后,循环控制变量k都会加1,而while循环则没有,故需在循环体中增加改变k数值的语句\?。
成才教育内部资料 0791-6290062 版权所有 翻印必究
(9)【10】 60
【解析】 本题中,代码定义3行2列的二维数组a,定义指向两个元素的一维数组指针p,并让p指向两维数组a的首行,则代码*(*(p+2)+1)中的p+2指向两维数组a的第三行a[2],*(p+2)指向a[2][0],?*(p+2)?+1指向a[2][1],*(*(p+2)+1)是引用a[2][1],其值是60
(10)【11】 ACE
【解析】 在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为'a',执行一次循环后变为'c',之后再变成'e',当其变为'g'时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式\?'A'?\即表示输出i对应的大写字母,结果为ACE。
(11)【12】 x[0] 【13】 x[0]
【解析】 函数f( )通过for循环逐个比较数组x中的元素,循环结束后,p0和p1分别表示最大值和最小值在数组中的下标位置,然后按照题意将最大值x[p0]和数组的最后一个元素x[n-1]交换位置,再将最小值x[p1]和第一个元素(x[0]) 进行交换,所以空白处应该填入x[0]。
(12)【14】 *(str+I)或str[I]
【解析】 str是指针变量,它指向字符型数据,在循环过程中,可以用 *(str+I)来访问字符串中的第I个元素,判断是否为结束标志,如果不是,I=I+1,继续取下一个元素进行判断,直到 *(str+I)的值为'\\0'为止,也可以用下标的方式引用字符,如*(str+I)相当于str[I]。
(13)【15】 30x
【解析】 本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。
55555555555555555555555555555555555555555555555555555555555555555555555 一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)算法的空间复杂度是指
A)算法程序的长度 B)算法程序中的指令条数
37
C)算法程序所占的存储空间 D)执行算法需要的内存空间
(2)在结构化程序设计中,模块划分的原则是 A)各模块应包括尽量多的功能 B)各模块的规模应尽量大
C)各模块之间的联系应尽量紧密
D)模块内具有高内聚度、模块间具有低耦合度
(3)下列叙述中,不属于测试的特征的是 A)测试的挑剔性
B)完全测试的不可能性 C)测试的可靠性 D)测试的经济性
(4)下面关于对象概念的描述中,错误的是 A)对象就是C语言中的结构体变量
B)对象代表着正在创建的系统中的一个实体 C)对象是一个状态和操作(或方法)的封装体 D)对象之间的信息传递是通过消息进行的
(5)下列关于队列的叙述中正确的是 A)在队列中只能插入数据 B)在队列中只能删除数据 C)队列是先进先出的线性表 D)队列是先进后出的线性表
(6)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 A)acbed B)decab
C)deabc D)cedba
(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为 A)n+1 B)n-1 C)2n D)n/2
(8)设有如下三个关系表 R S T A B C A B C m 1 3 m 1 3 n n 1 3
下列操作中正确的是 A) T=R∩S
成才教育内部资料 0791-6290062 版权所有 翻印必究
B) T=R∪S C) T=R×S D) T=R/S
(9)下列叙述中,正确的是
A)用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系
B)用E-R图只能表示实体集之间一对一的联系 C)用E-R图只能表示实体集之间一对多的联系 D)用E-R图表示的概念数据模型只能转换为关系数据模型
(10)下列有关数据库的描述,正确的是 A)数据处理是将信息转化为数据的过程
B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C)关系中的每一列称为元组,一个元组就是一个字段 D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字
(11)C语言规定,在一个源程序中,main函数的位置 A)必须在最开始
B)必须在系统调用的库函数的后面 C)可以任意 D)必须在最后
(12)以下叙述中错误的是
A)计算机不能直接执行用C语言编写的源程序 B)C程序经C编译程序编译后,生成后缀为.obj的文件是一个二进制文件
C)后缀为.obj的文件,经连接程序生成后缀为.exe的文件是一个二进制文件
D)后缀为.obj和.exe的二进制文件都可以直接运行
(13)下列选项可以正确表示字符型常量的是 A)′\\r′ B)\ C)\ D)296
(14)以下叙述中正确的是
A)构成C程序的基本单位是函数
B)可以在一个函数中定义另一个函数 C)main()函数必须放在其他函数之前 D)C函数定义的格式是K&R格式
(15)设变量均已正确定义,若要通过
38
scanf(\语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符) A) 10□X□20□Y<回车> B) 10□X20□Y<回车> C) 10□X<回车>
20□Y<回车> D) 10X<回车> 20Y<回车>
(16)若有说明:int *p,m=5,n;,以下正确的程序段是 A)p=&n;scanf(\ B)p=&n;scanf(\ C)scanf(\ D)p=&n;*p=m;
(17)在执行下述程序时,若从键盘输入6和8,则结果为 main()
{ int a,b,s;
scanf(\ s=a if(a
printf(\ A)36 B)64 C)48
D)以上都不对
(18)若执行下面的程序时,从键盘输入5和2,则输出结果是 main() { int a,b,k;
scanf(\ k=a;
if(a
(19)在C语言中,函数返回值的类型最终取决于 A)函数定义时在函数首部所说明的函数类型 B)return语句中表达式值的类型
C)调用函数时主调函数所传递的实参类型 D)函数定义时形参的类型
成才教育内部资料 0791-6290062 版权所有 翻印必究
(20)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是
A)c=(c-′A′)&+′a′ B)c=c+32
C)c=c-′A′+′a′
D)c=(′A′+c)&-′a′
(21)以下选项中,当x为大于l的奇数时,值为0的表达{ switch(c-′2′) { case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break; case 3:putchar(c+3);
case 4:putchar(c+3);break; } } printf(\
从第一列开始输入以下数据
程序的输出结果是 式是
A)x%2==1 B)x/2 C)x%2!=0 D)x%2==0
(22)有以下程序 main()
{int k=5,n=0; do
{switch(k)
{case 1: case 3:n+=1;k--;break; default:n=0;k--;
case 2: case 4:n+=2;k--;break; }
printf(\ }while(k>0 && n<5); }
程序运行后的输出结果是 A)235 B)0235 C)02356 D)2356
(23)有如下程序 main() { int n=9;
while(n>6){n--; printf(\ 该程序的输出结果是 A)987 B)876 C)8765 D)9876
(24)有以下程序 #include
while((c=getchar())!=′\\n)
A)66877 B)668966 C)6677877 D)6688766
(25)有以下程序 main()
{ int x=0,y=0,i; for (i=1;;++i)
{ if (i%2==0) {x++;continue;} if (i%5==0) {y++;break;} } printf (\ 程序的输出结果是 A)2,1 B)2,2 C)2,5 D)5,2
(26)有以下程序 main()
{int a[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,j,k,t; for(i=0;i<4;i++) for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/
for(i=0;i<4;i++)printf(\ }
程序运行后的输出结果是 A)1,6,5,7, B)8,7,3,1, C)4,7,5,2, D)1,6,2,1,
(27)有以下程序 int f(int n)
{ if(n==1)return 1;
else return f(n-1)+1;}
39
成才教育内部资料 0791-6290062 版权所有 翻印必究
main() { int i,j=0;
for(i=1;i<3;i++)j+=f(i); printf(\
程序运行后的输出结果是 A)4 B)3 C)2 D)1
(28)当运行以下程序时,从键盘输入AhaMA(空格)Aha
{ char s[80],c=′a′; int i=0;
scanf(\ while(s[i]!=′ { if(s[i]==c)s[i]-32;
else if(s[i]==c-32)s[i]=s[i]+32; i++; } puts(s); }
A)ahaMa B)AbAMa
C)AhAMa[空格]ahA D)ahAMa[空格]ahA
(29)下面程序输出的结果是 main() { int i;
int a[3][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++)
printf(\ A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1
(30)现有如下程序段 #include \ main() { int a[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1}; int i=0,j=5;
printf(\ 则程序的输出结果为 A)21 B)78
40
C)23 D)28
(31)请选出正确的程序段 A)int *p;
scanf(\ … B)int *s, k; *s=100; …
C)int *s, k; char *p, c; s=&k; p=&c; *p=′a′; … D)int *s, k; char *p, e; s=&k; p=&c; s=p; *s=1; …
(32)下面程序段的运行结果是 char a[]=\ p=a;
while(*p!=′u′){printf(\ A)LANGUAGE B)language C)LAN D)langUAGE
(33)以下程序的输出结果是 #include
int a[3][3]={1,2,3,4,5,6,7,8,9,},*p; main()
{ p=(int*)malloc(sizeof(int)); f(p,a);
printf(\ free(p); }
f(int *s, int p[][3]) { *s=p[1][1];} A)1 B)4 C)7 D)5
(34)有以下程序