《全国计算机等级考试二级c语言_笔试上机题库》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
2012年3月份全国计算机等级考试二级C语言等郎上初题库(全)一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置匕答在试卷上不得分。(1)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为A)PAD图B)N-S图C)结构图D)数据流图(2)结构化程序设计主要强调的是A)程序的规模B)程序的效率C)程序设计语言的先进性D)程序易读性(3)为了使模块尽可能独立,要求A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强(4)需求分析阶段的任务是确定A)软件开发方法B)软件开发工具C)软件开发费用D)软件系统功能(5)算法的有穷性是指A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-l)/2的排序方法是A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)如果进栈序列为el,e2,e3,e4,则可能的出栈序列是A)e3,el,e4,e2B)e2,e4,e3,elC)e3,e4,el,e2D)任意顺序(8)将E-R图转换到关系模式时,实体与联系都可以表示成A)属性B)关系C)键D)域(9)有三个关系R、S和T如下:R.BCDa0klb1nlBCDf3h2a0kln2xlTBCDa0kl由关系R和S通过运算得到关系T,则所使用的运算为A)并B)自然连接C)笛卡尔积D)交(10)下列有关数据库的描述,正确的是A)数据处理是将信息转化为数据的过程B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变C)关系中的每一列称为元组,一个元组就是一个字段D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字(11)以下叙述中正确的是A)用C程序实现的算法必须要有输入和输出操作B)用C程序实现的算法可以没有输出但必须要有输入C)用C程序实现的算法可以没有输入但必须要有输出D)用C程序实现的算法可以既没有输入也没有输出(12)下列可用于C语言用户标识符的一组是A)void,define,WORDB)a3_3,_123,CarC)For,-abc,IFCaseD)2a,DO,sizeof
1(13)以下选项中可作为C语言合法常量的是A)-80B)-080C)-8el.OD)-80.0e(14)若有语句:char以下叙述中正确的是A)定义line是一个数组,每个数组元素是一个基类型为char为指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组C)定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函数的指针(15)以下定义语句中正确的是A)inta=b=0;B)charA=65+l,b=b;C)floata=l,*b=&a,*c=&b;D)doublea=00;b=l.l;(16)有以下程序段charch;intk;ch='a';k=12;printf(n%c,%d,M,ch,ch,k);printf(,,k=%d
2H,k);已知字符a的ASCII码值为97,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12D)a,97,k=12(17)有以下程序main(){inti,s=l;for(i=l;i<50;i-H-)ifi(!(i%5)&&!(i%3))s+=i;printf(H%d
3,,,s);}程序的输出结果是A)409B)277C)1D)91(18)当变量c的值不为2、4、6时,值也为“真”的表达式是A)(c=2)||(c==4)||(c==6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=l)(19)若变量已正确定义,有以下程序段inta=3,b=5,c=7;ifi(a>b)a=b;c=a;if(c!=a)c=b;printf(,,%d,%d,%d
4n,a,b,c);其输出结果是A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7(20)有以下程序#include
5n,a,b);程序的运行结果是A)a=l,b=OB)a=2,b=2C)a=l,b=lD)a=2,b=l(21)下列程序的输出结果是#include"stdio.hHmain(){inti,a=O,b=O;
6fbr(i=l;i<10;i++){iflJi%2=0){a++;continue;}b++;}printf(,,a=%d,b=%d,,,a,b);}A)a=4,b=4B)a=4,b=5C)a=5,b=4D)a=5,b=5(22)已知#intt=0;while(t=l){•••)则以下叙述正确的是A)循环控制表达式的值为0B)循环控制表达式的值为1C)循环控制表达式不合法D)以上说法都不对(23)下面程序的输出结果是main(){inta[10]={l,2,3,4,5,6,7,8,9,10},*p=a;printf(M%d
7,\*(p+2));}A)3B)4C)1D)2(24)以下错误的定义语句是A)intx[][3]={{0},{1},{1,2,3}};B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={l,2,3,4);(25)有以下程序voidss(char*s,chart){while(*s){if(*s=t)*s=t-,ar+,Ar;s++;}}main(){charstrl[lOO]-,abcddfefdbd,,,c=,d,;ss(strl,c);printf(,,%s
8H,strl);}程序运行后的输出结果是A)ABCDDEFEDBDB)abcDDfefDbDC)abcAAfefAbAD)AbcddfefUbd(26)有如下程序main(){charch[2][5]={,,6937,,,H8254M},*p[2];intij,s=O;fbr(i=0;i<2;i-H-)p[i]=ch[i];fbr(i=0;i<2;i++)
9fbr(j=O;p[i皿>30'3+=2)s=10*s+p[i][j]-r0,;printf(H%d
10",s);}该程序的输出结果是A)69825B)63825C)6385D)693825(27)有定义语句:char若要从终端给s输入5个字符,错误的输入语句是A)gets(&s[O]);B)scanf(H%s,,,s+1);C)gets(s);D)scanf(w%sM,s[l]);(28)以下叙述中错误的是A)在程序中凡是以"#"开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束C)#defineMAX是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的(29)设有以下说明语句typedefstruct{intn;charch[8];}PER;则下面叙述中正确的是A)PER是结构体变量名B)PER是结构体类型名C)typedefstruct是结构体类型D)struct是结构体类型名(30)以下叙述中错误的是A)gets函数用于从终端读入字符串B)getchar函数用于从磁盘文件读入字符C)fputs函数用于把字符串输出到文件D)fwrite函数用于以二进制形式输出数据到文件(31)以下能正确定义一维数组的选项是A)inta[5]={0,l,2,3,4,5};B)chara[]={'0',T,'2','3','4','5',/\0'};C)chara={'A',B','C'};D)inta[5]="0123";(32)有以下程序#include
11",strlen(p),strlen(q));}以下叙述中正确的是A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3B)由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3C)由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3D)由于p和q数组中都没有字符串结束符,故长度都不能确定(33)有以下程序#include
12”,ss⑼,ss[4]);程序的运行结果是(34)有以下程序#include
13M,z);)程序的运行结果是A)0B)9C)6D)8(35)下面程序段的运行结果是
14charstr[]="ABC",*p=str;printf("%d
15",*(p+3));A)67B)0C)字符。的地址D)字符C(36)若有以下定义:structlink{intdata;structlink*next;}a,b,c,*p,*q;且变量a和b之间已有如下图所示的链表结构:指针p指向变量a,q指向变量Co则能够把c插入到a和b之间并形成新的链表的语句组是:A)a.next=c;c.next=b;B)p.next=q;q.next=p.next;C)p->next=&c;q->next=p->next;D)(*p).next=q;(*q).next=&b;(37)对于下述程序,在方式串分别采用"wt"和"wb"运行时,两次生成的文件TEST的长度分别是#include
16",b[O]);}A)6B)7C)8D)9二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)测试的目的是暴露错误,评价程序的可靠性;而【1】的目的是发现错误的位置并改正错误。(2)某二叉树中度为2的结点有18个,则该二叉树中有【2】个叶子结点。(3)当循环队列非空旦队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。这种情况称为[31.(4)在关系模型中,把数据看成一个二维表,每一个二维表称为一个[41(5)在计算机软件系统的体系结构中,数据库管理系统位于用户和【5】之间。(6)以下程序的输出结果是[6】。main(){charc='z';printRH%cM,c-25);}(7)阅读下面语句,则程序的执行结果是[71
17#includc"stdio.h**main(){inta=-l,b=l,k;if((++a<0)&&!(b--<=0))printf(M%d,%d\H,a,b);elseprintf(n%d,%d
18',,b,a);}(8)下列程序的输出结果是[81main(){inti;fbr(i=l;i+l;i-H-){iRi>4){printf(H%d
19n,i);break;}printf(M%d
20",i++);}}(9)以下程序的定义语句中,x[l]的初值是[9】,程序运行后输出的内容是【10】。#include
21H,p);}(12)以下程序的输出结果是【13】。floatfun(intx,inty){retum(x+y);}main(){inta=2,b=5,c=8;printf(M%3.0f
22n,fun((int)fun(a+c,b),a-c));}(13)有如下图所示的双链表结构,请根据图示完成结构体的定义:Iheaddatarchildstructaa{intdata;[14]}node;(14)fseek函数的正确调用形式是【15】。一、选择题(1)B【解析】N-S图是由Nassi和Shneiderman提出的--种符合程序化结构设计原则的图形描述工具。它的提出是为了避免流程图在描述程序逻辑时的随意性上灵活性。(2)D【解析】结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用got。语句,总的来说可使程序结构良好、易读、易理解、易维护。(3)B【解析】模块的独立程度可以由两个定性标准度量:耦合性和内聚性。耦合性是衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚性是衡量•个模块内部各个元素彼此结合的紧密程度。一般来说,要求模块之间的耦合尽可能地低,而内聚性尽可能地高。(4)D【解析】需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现
23实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。选项A)软件开发方法是在总体设计阶段需完成的任务;选项B)软件开发工具是在实现阶段需完成的任务;选项C)软件开发费用是在可行性研究阶段需完成的任务。(5)A【解析】算法具有5个特性:①有穷性:一个算法必须(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生歧义;③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现;④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合;⑤输出:一个算法有一个或多个输出。(6)D【解析】在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都为n(n-l)/2,堆排序需要的比较次数为nlog2no(7)B【解析】山栈"后进先出"的特点可知:A)中el不可能比e2先出,C)中el不可能比e2先出,D)中栈是先进后出的,所以不可能是任意顺序。B)中出栈过程如下图所示:(8)B【解析】关系数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。首先,从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性,实体集也可以转换成关系。(9)D【解析】在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则RIR2为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1,又属于R2.(10)D【解析】数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。11)C【解析】算法具有的5个特性是:有穷性;确定性;可行性;有0个或多个输入;有一个或多个输出。所以说,用C程序实现的算法可以没有输入但必须要有输出。(12)B【解析】C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线,排除选项C)和D);C语言中还规定标识符不能为C语言的关键字,而选项A)中void为关键字,故排除选项A)。(13)A【解析】选项B)项中,以0开头表示是一个八进制数,而八进制数的取值范围是0~7,所以-080是不合法的;选项C)和D)中,e后面的指数必须是整数,所以也不合法。(14)A【解析】C语言中□比*优先级高,因此line先与⑸结合,形成line[5]形式,这是数组形式,它有5个元素,然后再与line前面的"*"结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char的指针变量。(15)B【解析】本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间耍用逗号隔开,因此选项A)和D)错误。在选项C)中,变量c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量b,故选项C)错误。(16)D【解析】输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的卜进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12o(17)D【解析】本题是计算50之内的自然数相加之和,题中if语句括号中的条件表达式!(i%5)&&!(i%3)表明只有能同时被5和3整除的数才符合相加的条件,1〜49之间满足这个条件的只有,15、30和45,因为s的初始值为1,所以s=1+15+30+45=91。(18)B【解析】满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,选项B中的表达式都为"真"。(19)B【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为B)。(20)D【解析】本题考查switch语句,首先,x=l符合条件case1,执行switch(y)语句,y=0符合case0语句,执行a++并跳出switch(y)语句,此时a=l。因为case1语句后面没有break语句,所以向后执行case2语句,执行a++,b++,然后跳出switch(x),得a=2,b=L(21)B【解析】continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。当能被2整除时,a就会增1,之后执行continue语句,直接执行到for
24循环体的结尾,进行讦+,判断循环条件。(22)B【解析】t=l是将t赋值为1,所以循环控制表达式的值为lo判断t是否等于1时,应用t=l,注意"="与的用法。(23)A【解析】在C语言中,数组元素是从0开始的。指针变量p指向数组的首地址,(p+2)就会指向数组中的第3个元素。题目中要求输出的是元素的值。(24)C【解析】本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度。故选项C)错误。(25)B【解析】在内存中,字符数据以ASCII码存储,它的存储形式与整数的存储形式类似。C语言中,字符型数据和整型数据之间可以通用,也可以对字符型数据进行算术运算,此时相当于对它们的ASCH码进行算术运算,在本题中,s++相当于s=s+l,即让s指向数组中的下一个元系。(26)C【解析】该题稍微难一点。主要要搞清楚以下几点:①定义了一个指针数组char*p[2]后,程序中第一个循环fbr(i=0;i<2;i++)p[i]=ch[i];的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[l]元素指向二维数组ch的第二行字符串,这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i]U]o②对二维数组ch的初始化,使其第一行ch⑼中存入了字符串"6937",第二行ch[l]中的内容为字符串"8254"。③程序中第二个循环中的循环体s=s*10+p[i]U]-'(r;的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i][j]>'\0'是指中的字符只要不是字符串结束标志、0'就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串"6937"中一个隔一个地取出字符,分别是6和3,然后从p[1]所指向的字符串"8254"中一个隔一个地取出字符,分别是8和5,同时经过转换和相加运算后,结果s中的值应该是6385。(27)D【解析】在格式输入中,要求给出的是变量的地址,而D)答案中给出的s[l]是一个值的表达式。(28)D【解析】C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D)的描述错误。(29)B【解析】本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。(30)B【解析】getchar函数的作用是从终端读入一个字符。(31)B【解析】选项A)中,定义的初值个数大于数组的长度;选项C)中,数组名后少了中括号;选项D)中,整型数组不能赋予字符串。(32)A【解析】在给p和q数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组p和q都有3个字符,所以长度均为3。(33)A【解析】函数fun(char*s[],intn)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行fiin(ss,5)语句后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"),ss[0],ss[4]的输出结果为xy,aaaacc。(34)C【解析】函数intf(intx)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其他情况下y=x2-f(x-2),所以在主函数中执行语句z=f(3)时,尸3*3-耳3-2)=9-耳1)=9-3=6。(35)B【解析】考查指向字符串的指针变量。在该题中,指针变量p指向的应该是该字符串中的首地址,p+3指向的是字符串结束标志、(T的地址,因而*(p+3)的值为Oo(36)D【解析】本题考查链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。(37)B【解析】以"wt"方式写入的是字符文件,转义字符s被看作两个字符来处理。而"wb"方式写入的是二进制文件,转义字符是一个字符。(38)A【解析】本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会产生任何变化。(39)C【解析1本题主要考查的是用二维数组首地址和下标来引用二维数组元素的方法。通过分析可知,程序中的双重循环定义了一个如下的二维数组:012234456
25由于数组的卜一标是从0开始的,所以二维数组元素表示的是二维数组a的第i+1行、第j+1列对应位置的元素。(40)A【解析】函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针型。它的作用是将一个变量的地址传递到另一个函数中。当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值也将随之发生变化。二、选择题(1)【1】调试【解析】软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定;调试也称排错,它是一个与测试既有联系又有区别的概念。具体来说,测试的目的是暴露错误,评价程序的uj•靠性,而调试的目的是发现错误的位置,并改正错误。(2)[2]19【解析】在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。(3)[3]上溢【解析】入队运算是指在循环队列的队尾加入一个新元素。这个运算有两个基本操作:首先将队尾指针进一(即rear=rearH),并当reaLtn+1时,置rear=l;然后将新元素插入队尾指针指向的位置。当循环队列非空(s=l)且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为"上溢"。(4)[4]关系【解析】在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。(5)[5]操作系统或OS【解析】数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务。位于用户和操作系统之间。(6)[6]a【解析】N的ASCII码值为122,经过c-25运算后,得97,以字符形式输出是a。(7)[7]1,0【解析】与运算两边的语句必须同时为真时,结果才为真。当执行完if((++a<0)&&!(b--<=0))时,a,b的值已经发生了变化。(8)[8]135【解析】本题考查了fbr循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=l时,因为if语句条件不满足,所以直接执行printfC%d
26",i++);输出1,同时i自加1;执行第二次fbr循环时,i=3;同样的if语句条件不满足,所以直接执行printf("%d
27",i++);输出3,同时i自加1:执行第三次ft)r循环时,i=5,if语句条件满足,所以就行printf("%d
28",i),输出5,然后break语句跳出了for循环。(9)[9]2(10)2468【解析】在主函数中根据整型数组x口的定义可知,x[l]的初值等于2。在for循环语句中,当i=0时,p[0]=&x[l],p[0][0]=2;当i=l时,p[l]=&x[3],p[l]⑼=4;当i=2时,p[2]=&x[5],p⑵⑼=6;当i=3时,p[3]=&x[7],p[3][0]=8,所以程序输出的结果为2、4、6、8。(10)[11]35【解析】函数5\¥2伙血*分血*»的功能是实现*2和?中两个数据的交换,在主函数中调用sw叩(p,q)后,形参指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35。(11)[121BCDCDD【解析】本题考查指向字符串的指针的运算方法。指针变量P首先指向字符串中的第一个字符A,执行p=s+l后,p指向字符串中的第二个字符B,然后输出值"BCD"并换行,依次执行循环语句。(12)[1319【解析】本题考查函数的综合知识。首先,我们可以利用强制转换类型转换运算符,将一个表达式转换成所需类型。如:(double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。本题可按部就班地逐步运算:fun((int)fiin(a+c,b),a-c)fun((int)fun(10,5),2-8)ftin((int)15.000000,-6)fun(15,-6)9(13)[14]structaa*lhead,*rchild;【解析】结构体对链表的定义。(14)[15]fseek(文件指针,位移量,起始点)【解析】本题考查函数fseek的用法。fseek函数的调用形式为:fseek(文件指针,位移量,起始点)"起始点"用0,1或2代替,其中,0代表"文件开始";1为"当前位置";2为"文件末尾"。"位移量"
29指以"起始点"为基点,向前移动的字节数。ANSIC和大多数C版本要求位移量是long型数据,这样当文件的长度大于64k时不致出现问题。ANSIC标准规定在数字的末尾加一个字母L,就表示long型。一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)程序流程图中带有箭头的线段表示的是A)图元关系B)数据流C)控制流D)调用关系(2)下面不属于软件设计原则的是A)抽象B)模块化C)自底向上D)信息隐蔽(3)下列选项中,不属于模块间耦合的是A)数据耦合B)标记耦合C)异构耦合D)公共耦合(4)F列叙述中,不属于软件需求规格说明书的作用的是A)便于用户、开发人员进行理解和交流B)反映出用户问题的结构,可以作为软件开发工作的基础和依据C)作为确认测试和验收的依据D)便于开发人员进行需求分析(5)算法的时间复杂度是指A)执行算法程序所需要的时间B)算法程序的长度C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数
30(6)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是A)堆排序B)直接插入排序C)快速排序D)B)和C)(7)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是D)CDABEC)内模式设计和物理设计A)ABCEDB)DCBEAC)DBCEA(8)数据库设计包括两个方面的设计内容,它们是A)概念设计和逻辑设计B)模式设计和内模式设计D)结构特性设计和行为特性设计(9)关系表中的每一横行称为一个A)元组B)字段。属性D)码(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩(11)以下不正确的叙述是A)在C程序中,逗号运算符的优先级最低B)在C程序中,APH和aph是两个不同的变量C)若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值(12)请选出可用作C语言用户标识符的是C)FOR,-abc,CaseD)1.234e0C)%和、D)x=5=4+1;A)void,define,WORDB)a3_b3,_123,IFD)2a,Do,Sizeof(13)以下选项中,不能作为合法常量的是A)1.234e04B)1.234e0.4C)1.234e+4(14)在C语言中,运算对象必须是整型数的运算符是A)%B)\D)**(15)若变量均已正确定义并赋值,以下合法的C语言赋值语句是A)x=y==5;B)x=n%2.5;C)x+n=i;(16)有以下程序段charch;intk;ch='a';k=12;printf(,,%c,%d,M,ch,ch,k);printff'k=%d
31”,k);已知字符a的ASCII码值为97,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12D)a,97,k=l2(17)已知字母A的ASCII代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是A)kk>='A'&&kkv='Z'B)!(kk>='A'||kkv='Z')C)(kk+32)>='a'&&(kk+32)v='Z,D)isalpha(kk)&&(kk<91)(18)当变量c的值不为2、4、6时,值也为“真”的表达式是A)(c=2)||(c=4)||(c=6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=l)(19)若有条件表达式(exp)?a++:b・・,则以下表达式中能完全等价于表达式(exp)的是A)(exp==0)B)(exp!=0)C)(exp==l)D)(exp!=l)(20)以下不正确的定义语句是A)doublex[5]={2.0,4.0,6.0,8.0,10.0};B)inty[5]={0,l,3,5,7,9};C)charcl[]={T,'2?3T475'};D)char02[]={^10;Z8'};(21)下列程序执行后的输出结果是main(){inta[3][3],*p,i;
32p=&a[O][O];fbr(i=l;i<9;i++)p[i]=i+l;printf(M%d
33M,a[l][2];)A)3B)6C)9D)随机数(22)设有以下程序段intx=O,s=O;while(!x!=O)s-»-=-H-x;printf(n%d",s);则A)运行程序段后输出0B)运行程序段后输出1C)程序段中的控制表达式是非法的D)程序段执行无限次(23)(23)下面程序段的运行结果是char*s=MabcdeM;s+=2;printf(H%dn,s);A)cdeB)字符dC)字符*的地址D)无确定的输出结果(24)阅读下列程序,则执行后的结果为#include"stdio.hMmain(){intc[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};printf(,,%x,%x
34,,,c[2][2],*(*(c+l)+l));}A)3e,6B)62,5C)56,5D)3E,6(25)下面判断正确的是A)char*a="china”;等价于char*a;*a=nchinaM;B)charstr[5]={”china”};等价于charstr[]={wchinaw};C)char*s="china";等价于char*s;s=Mchina";D)charc[4]="abc",d[4]="abc";等价于charc[4]=d[4]=MabcM;(26)若有定义:inta[2][3];,以下选项中对a数组元素正确引用的是A)a[2][!l]B)a[2][3]C)a[0][3]D)a[l>2][!l](27)看主义语句:char若要从终端给s输入5个字符,错误的输入语句是A)gets(&s[O]);B)scanf(,,%s,,,s4-1);C)gets(s);D)scanfi("%s,,,s[l]);(28)有以下程序#include
35M,il,i2);)程序的运行结果是A)1212B)ll7C)ll11D)127(29)若有以下说明和定义uniondt{inta;charb;doublec;}data;以下叙述中错误的是A)data的每个成员起始地址都相同B)变量data所占内存字节数与成员c所占字节数相等D)data可以作为函数的C)程序段:data.a=5;printf("%f
36",data.c);输出结果为5.000000实参
37(30)有以下程序#include
38H,a[O],a[1],a[2]);fprintf(fp,H%d%d%d
39n,a[3],a[4],a[5]);fclose(fp);fp=fbpen(Md2.datM,,,iJ,);fscanf(fp,H%d%dM,&k,&n);printf(,,%d%d
40H,k,n);fclose(fp);}程序运行后的输出结果是A)12B)14C)1234D)123456(31)若已定义inta[]={0,l,2,3,4,5,6,7,8,9},*p=a,i;其中则对a数组元素不正确的引用是A)a[p-a]B)*(&a[i])C)p[i]D)a[10](32)有以下程序#include 41");}程序的运行结果是A)0987654321B)432109876505678901234D)0987651234(33)阅读下列程序,当运行函数时,输入asdafaaz67,则输出为#include 42,,,x))执行程序时,给变量x输入10,程序的输出结果是A)55B)54C)65D)45(35)下面程序段中,输出*的个数是 43char*s="\ta\018bc";fbr(;*s!='\0';s++)printf("*");A)9B)5C)6D)7(36)C语言结构体类型变量在程序运行期间A)TC环境在内存中仅仅开辟一个存放结构体变量地址的单元B)所有的成员一直驻留在内存中C)只有最开始的成员驻留在内存中D)部分成员驻留在内存中(37)已知函数的调用形式为f?ead(buf,size,count,fp),参数buf的含义是A)一个整型变量,代表要读入的数据项总数B)一个文件指针,指向要读的文件C)一个指针,指向要读入数据的存放地址D)一个存储区,存放要读的数据项(38)设有以下语句charx=3,y=6,z;z=xAy«2;则z的二进制值是A)00010100B)00011011C)00011100D)00011000(39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是A)auto和registerB)extem和registerC)auto和staticD)static和register(40)设有定义语句int(*f)(int);,则以下叙述正确的是A)f是基类型为int的指针变量B)f是指向函数的指针变量,该函数具有一个int类型的形参C)f是指向int类型•维数组的指针变量D)f是函数名,该函数的返回值是基类型为int类型的地址二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)测试用例包括输入值集和【1】值集。(2)在树形结构中,树根结点没有【2】。(3)数据结构分为逻辑结构与存储结构,线性链表属于【3】。(4)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体"项目主管"与实体"项目"的联系属于[4]的联系。(5)数据库设计分为以下6个设计阶段:需求分析阶段、【5】、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。(6)阅读下面程序段,则执行后输出的结果是[6]„#include"stdio.h"main(){charfun(char.int);chara='A';intb=13;a=fun(a,b);putchar(a);)charftin(chara,intb){chark;k=a+b;returnk;}(7)函数fim的返回值是【7】fun(char*a,char*b){intnum=O,n=O;while(*(a+num)!=*\O')mm";while(b[n]){*(a+num)=b[n];num++;n++;}returnnum;(8)以下程序的功能是:删去•维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是: 442223445666677899101010删除后,数组中的内容应该是:2345678910,请填空。#include 45M);for(i=0;i 46Thcdataafterdeleted: 47M);fbr(i=O;i 48 49w);}(9)以下程序的运行结果是【10】。#includc 50H,a,b);(10)以下程序的输出结果是【11】。fun(intx,inty,intz){z=x*x+y*y;}main(){inta=31;fun(6,3,a)printf(“%d”,a)(11)函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返叵Is和t的第一个不同字符的ASCII码差值,即s>t时返回正值,svt时返回负值。请填空。My_cmp(char*s,char*t){while(*s==*t){if(*s=r\O)retumO;4-+s;-H-t;}return[12];)(12)以下程序的输出结果是【13】。voidreverse(inta[],intn){inti,t;fbr(i=0;i 51fbr(i=6;i<10;i++)s+=b[i];printR"%d 52",s);}(13)以下说明语句中,【14】是结构体类型名。typedefstruct{intn;charch[8];}PER;(14)以下程序的作用是:从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上.请填空。#include 53');fclose(fp);)一、选择题(1)C【解析】程序流程图是人们对解决问题的方法、思路或算法的•种图形方式的描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容;流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流;带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。(2)C【解析】软件设计遵循软件工程的基本目标和原则,建立了适用于在软件设计中应该遵循的基本原理和与软件设计有关的概念,它们具有抽象、模块化、信息隐蔽和数据独立性。自底向上是集成测试中增量测试的一种。(3)C【解析】模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从强到弱分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合和非直接耦合,没有异构耦合这种方式。(4)D【解析】软件需求规格说明书(SRS,SoftwareRequirementSpecification)是需求分析阶段的最后成果,是软件开发中的重要文档之一。它具有以下几个方面的作用:①便于用户、开发人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发工作的基础和依据;③作为确认测试和验收的依据。(5)C【解析】算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的时间爱杂度是指执行算法所需要的计算工作量,即算法执行过程中所需耍的基本运算的次数;算法的空间复杂度•般是指执行这个算法所需要的内存空间。(6)B【解析】堆排序的比较次数为nlog2n;直接插入排序的比较次数为n(n-l)/2;快速排序的比较次数为nlog2n«当数据表A中每个元素(7)B【解析】栈操作原则上"后进先出",栈底至栈顶依次存放元素A、B、C、D,则表明这4个元素中D是最后进栈,B、C处于中间,A最早进栈,所以出栈时一定是先出D,再出C,最后出Ao(8)A【解析】数据库设计包括数据库概念设计和数据库逻辑设计两个方面的内容。(9)A【解析】关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为一个属性,对应表中的一个字段;在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。(10)C【解析】"选课SC"表是"学生S"表和"课程C"表的映射表,主键是两个表主键的组合。(11)D【解析】在C语言所有的运算符中,逗号运算符的优先级最低。C语言中区分大小写,所以APH和aph是两个不同的变量。赋值表达式a=b表示将b的值付给a,而b本身的值保持不变;通过键盘可以向计算机输入允许的任何类型的数据。选项D)中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数值和整型数值等。(12)B【解析】C语言规定用户标识符由字母、数字和下划线组成,且第一个字符必须是字母或下划线,可见选项O,D)是错误的;此外,C语言不允许用户将关键字作为标识符,而选项A)中的void正是C语言的关键字。(13)B【解析】C语言的语法规定,字母e(E)之前必须有数字,且e(E)后面的指数必须是 54整数,而选项B)中,e(E)后面的指数是小数,所以不合法。(14)A【解析】在C语言中,运算符两侧的运算数必须是整型。(15)A【解析】赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C)和D)错误。"%"运算符两侧都应当是整型数据,选项B)错误。(16)D【解析】输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12o(17)B【解析】C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在'A利Z之间就可以了,选项A)和C)符合要求。函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。(18)B【解析】满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,表达式B)都为"真"。(19)B【解析】条件运算符要求有3个操作对象,称三目(元)运算符,它是C语言中惟•的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3其求解顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,注意++、-的用法。(20)B【解析】在一维数组中要注意的是作为下标表达式的常量表达式的值必须是大于等于0,选项B)中定义有5个元素,但赋值时有6个元素,所以是错误的。(21)B【解析】本题中,是二维数组中的第6个元素,对应for循环中i的值为5,p[5]=5+lo(22)B【解析】本题中表示逻辑非运算符表示不等于运算符,逻辑非运算符比不等于运算符的优先级高。(23)C【解析】时于字符串指针,其保留的是整个串的首地址,即第一个字符的起始地址;当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。(24)A【解析】数组叩[4]表示一个4行4列数组,c[2][2]表示第3行第3列上的元素62,*(*(c+l)+l))表示第2行第2列上的元素6,通过十六进制输出为3e,6o(25)C【解析】选项A)char*a;*a="china"应改为a=china;,选项B)应该是charstr[6];D)项表述方法有错误。(26)D【解析】C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示数组元素a[0][0]«(27)D【解析】在格式输入中,要求给出的是变易的地址,而D)答案中给出的s[l]是一个值的表达式。(28)B【解析】根据宏替换的替换规则,我们可知,耳2)=2*N+l=2*5+l=ll,f(l+l)=l+l*N+l=l+l*5+l=7。(29)D【解析】选项A),共用体的每个成员的起始地址都相同;选项B),共用体变量所占的内存长度等于最长的成员的长度;选项C)因为每个成员的起始地址相同,所以整型数5以浮点型输出时为5.000000;选项D)C语言规定,不能把共用体变量作为函数的参数。(30)D【解析】将有6个元素的整型数组分两行输出到一个文件中,因为输出的都是数字并且每行都没有分隔符,所以当再对其进行读取操作时,每一行都会被认为是一个完整的数,而换行符则作为它们的分隔符。⑶)D【解析】通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。本题中a[9]=9,a[10]显然超出数组范围,注意,数组的下标是从0开始的。(32)C【解析】函数仙1(血*,血!11,血112)的功能是对数组5中的元素进行首尾互相调换。所以在主函数中,当ftin(a,0,3)执行完后,数组2[12]={4,3,2,1,5,6,7,8,9,0};再执行fUn(a,4,9),数组a[l2]={4,3,2,1,0,9,8,7,6,5};再执行fun(a,0,9)后,数组a[l2]={5,6,7,8,9,0,1,2,3,4}.(33)A【解析】本题题意要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用"留下"字符的算法,以前的题目亦是如此。用str[i]从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格(注意在if()的单引号之间有一个空格),则将其保存str[j]中。注意j的下标变化、初值及最后加串结束符,0'。 55(34)A【解析】本程序考察的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+74-8+9+1055。(35)C【解析】本题中,格式符0表示的是八进制无符号形式输出整型数(不带前导0),字符常量在内存中占一个字节,存放的是ACS1I码代码值。C语言规定,所有字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ACSII字符集中该字符的序号,即&*s中有几个字符就输出儿个*O(36)B【解析】结构体类型的变量在程序运行期间要作为一个整体占用连续的内存单元。(37)C【解析】这是一道考行fread函数的题。buf是一一个指针,f?ead是读入数据的存放地址;hvrite是输出数据的地址(以上指的是起始地址)。(38)B【解析】本题考查两个位运算符。按位异或运算符"人"是双目运算符,其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异或时,结果为1。左移运算符"""是双目运算符,其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0,并且"<<"运算符的优先级于(39)A【解析】在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。(40)B【解析】本题考查的是指向函数的指针。语句int(*f)(int);是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。二、选择题(1)[11输出【解析】软件测试用例是为了有效发现软件缺陷面编写的包含测试口的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。(2)[2]前件【解析】在树形结构中,每一个结点只有一个前件,称为父结点;没有前件的结点只有一个,称为树的根结点;每一个结点可以有多个后件,它们都称为该结点的子结点;没有后件的结点称为叶子结点。(3)[31存储结构【解析】数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间前后件关系的信息。(4)[4]一对多(或1:N)【解析】两个实体集间的联系实际上是实体集间的函数系,这种函数关系可以有3种,即一对一(1:1)的联系、一对多(1:N)或多对一(N:1)的联系和多对多(N:N)的联系。(5)[5]概念设计阶段【解析】数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。(6)[6]N[解析】函数说明语句中的类型名必须与函数返回值的类型一致。本题实现的是在字符A的ASCII码值上加上一个常数,使之变成另一个ASCII码值,从而输出字符。(7)[7]字符串a和b的长度之和【解析】本题首先通过第一个while循环计算字符串a的长度,再通过第二个循环,将字符串a和b相连,最后返回连接后的总长度。(8)[8]!=[9]returnj【解析】本题程序的流程是:让ij都从1开始,其中j用于控制删除后剩下的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元素的下一个元素的下标,所以if()中的条件是a|j-l]!=a[i],其中就是新数组中的最后一个元素,若条件成立则表示出现了不同的值,所以a[i]要留到新数组中。注本题中i、j的初值都要从1开始,该算法只能用于数组已排序的题目中。(9)[10]a=2,b=l【解析】本题考查了switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的case2:分支,最后a和b的值分别为2和1。(10)[11]31【解析】在函数调用时,形参值的改变,不会改变实参值。(11)[121*s-*t【解析】两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回0值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s>t时,返回正值,当s 56时,返回负值。(1)[13]22【解析】在main函数中,调用reverse函数将b数组中的前8个成员进行互置,执行完毕后,b数组中的成员为{8,7,6,5,4,3,2,1,9,10},然后再执行for循环结构,将b[6],b[7]...b[9]的值相加,结果为22o(2)[14]PER【解析】本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。(3)[15]“filea.dat”,“r”【解析】fbpen函数的调用方式通常为fbpen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容,所以空白处应当填入"filea.dat",T。一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)软件是指A)程序B)程序和文档C)算法加数据结构D)程序、数据与相关文档的完整集合(2)检查软件产品是否符合需求定义的过程称为A)确认测试B)集成测试C)验证测试D)验收测试(3)以下不属于对象的基本特点的是A)分类性B)多态性C)继承性D)封装性(4)在设计程序时,应采纳的原则之一是A)不限制goto语句的使用B)减少或取消注解行C)程序越短越好D)程序结构应有助于读者理解(5)下列叙述中正确的是A)程序执行的效率与数据的存储结构密切相关B)程序执行的效率只取决于程序的控制结构C)程序执行的效率只取决于所处理的数据量D)以上三种说法都不对(6)数据结构中,与所使用的计算机无关的是数据的A)存储结构B)物理结构C)逻辑结构D)物理和存储结构(7)线性表的顺序存储结构和线性表的链式存储结构分别是A)顺序存取的存储结构、顺序存取的存储结构B)随机存取的存储结构、顺序存取的存储结构C)随机存取的存储结构、随机存取的存储结构D)任意存取的存储结构、任意存取的存储结构(8)树是结点的集合,它的根结点数目是A)有且只有1B)1或多于100或1D)至少2(9)卜•列有关数据库的描述,正确的是A)数据库是一个DBF文件B)数据库是一个关系C)数据库是一个结构化的数据集合D)数据库是一组文件(10)数据库、数据库系统和数据库管理系统之间的关系是A)数据库包括数据库系统和数据库管理系统B)数据库系统包括数据库和数据库管理系统C)数据库管理系统包括数据库和数据库系统D)三者没有明显的包含关系(11)以下4个选项中,不能看作一条语句的是A);B)a=5,b=2.5,c=3.6;C)if(a<5);D)if(b!=5)x=2;y=6;(12)下面四个选项中,均是不合法的用户标识符的选项是A)AP_0doB)floatlaOAC)b-agotointD)_123tempint(13)以下选项中不属于字符常量的是 57A)CB)"C"C)ZCC'D)'072'(14)设变量已正确定义并赋值,以下正确的表达式是A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=25%5.0(15)若变量已正确定义并赋值,以下符合C语言语法的表达式是A)a:=b+1B)a=b=c+2C)int18.5%3D)a=a+7=c+b(16)以下程序的运行结果是intk=0;voidfiin(intm){m+=k;k+=m;printffm=%dk=%d”,m,k++);}main(){inti=4;fiin(i-H-);printf(Mi=%dk=%d 58M,i,k);}A)m=4k=5i=5k=5B)m=4k=4i=5k=5C)m=4k=4i=4k=5D)m=4k=5i=4k=5(17)已有定义:charc;,程序前面已在命令行中包含ctype.h文件,不能用于判断c中的字符是否为大写字母的表达式是A)isupper(c)B)'A'v=cv='Z'C)'A'v=c&&cv='Z'D)cv=('z'-32)&&('a'-32)v=c(18)设有:inta=l,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后,n的值是A)1B)2C)3D)4(19)若变量已正确定义,有以下程序段inta=3,b=5,c=7;ifi(a>b)a=b;c=a;iRc!=a)c=b;printfC%d,%d,%d 59”,a,b,c);其输出结果是A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7(20)若有定义floatx=1.5;inta=l,b=3,c=2;,则正确的switch语句是A)switch(x){case1.0:printfC* 60“);case2.0:printf("** 61");}B)switch((int)x);{casel:printff* 62”);case2:printfC** 63”);}C)switch(a+b){casel:printfP* 64");case2+l:printff** 65");}D)switch(a+b){easel:printf(** 66);}casec:printf(** 67);}(21)有以下程序#include 68main(){inta[]={l,2,3,4},y,*p=&a[3];-p;y=*p;printf("y=%d 69",y);)程序的运行结果是A)y=0B)y=lC)y=2D)y=3(24)以下数组定义中错误的是A)intx[][3]={0};B)intx[2][3]={{1,2},{3,4},{5,6}};C)intx[][3]={{1,2,3},{4,5,6}};D)intx[2][3]={l,2,3,4,5,6};(25)下面说明不正确的是A)chara[10]=HchinaH;B)chara[10],*p=a;p=,,chinanC)char*a;a=,,chinanD)chara[10],*p;p=a-'china11(26)若有定义:inta[2][3];,以下选项中对a数组元素正确引用的是A)a[2][!l]B)a[2][3]C)a[0][3]D)a[l>2][!l](27)若要求从键盘读入含有空格字符的字符串,应使用函数A)getc()B)gets()C)getchar()D)scanfi()(28)阅读下列程序段,则程序的输出结果为#include"stdio.hM#defineM(X,Y)(X)*(Y)#defineN(X,Y)(X)/(Y)main(){inta=5,b=6,c=8,k;k=N(M(a,b),c);printf(H%d 70H,k);A)3B)5C)6D)8(29)在16位IBM-PC机上使用C语言,若有如下定义structdata{inti;charch;doublef;}b;则结构变量b占用内存的字节数是A)1B)2C)7D)ll(30)有以下程序#include 71M);}程序的运行结果是A)1234B)2344C)4332D)1123(32)有以下程序#include 72fbr(j=i+lj 73M);}程序的运行结果是A)l,2,3,4,5,6,7,8,9,0,B)0,9,8,7,6,5,1,2,3,4,C)0,9,8,7,6,5,4,3,2,1,D)1,2,3,4,9,8,7,6,5,0,(33)下面程序的输出结果是#includc 74M,str);)A)xyzabcABCB)zabcABCC)xyabcABCD)yzabcABC(34)以下函数返回a所指数组中最小的值所在的下标值fun(int*a,intn){inti,j=O,p;P=j;fbr(i=j;i 75",c.name,c.sex,c.score[0],c.score[1]);)程序的运行结果是C)Zhao,f,95,92A)Qian,f,95,92B)Qian,m,85,90 76D)Zhao,m,85,90(37)有以下程序#include 77H);fclose(fp);fp=fbpen(ndl.datM,V);fscanf(fp,M%dM,&n);fclose(fp);printf(H%d 78H,n);)程序的运行结果是A)12300B)123C)1D)321(38)已知inta=l,b=3则a^b的值为A)3B)1C)2D)4(39)阅读下列程序,则运行结果为#include"stdio.h"fiin(){staticintx=5;X-H-;returnx;}main(){inti,x;fbr(i=0;i<3;i-H-)x=fun();printf(M%d 79,,,x);}A)5B)6C)7D)8(40)有以下程序#include 80w,ss,aa);}程序的运行结果是A)accxyy,bbxxyyB)acc,bbxxyyC)accxxyy,bbxxyyD)accbbxxyy,bbxxyy二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)需求分析的最终结果是产生[11(2)为了便于对照检查,测试用例应由输入数据和预期的【2】两部分组成。(3)数据结构分为逻辑结构与存储结构,线性链表属于【3】。(4)某二叉树中度为2的结点有18个,则该二叉树中有【4】个叶子结点。(5)[5]是数据库设计的核心。(6)已有定义:charc=f,;inta=l,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为[6]。(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为171。(8)下面程序的功能是:计算110之间的奇数之和与偶数之和,请填空。#include 81a=c=0;fbr(I=0;I<=10;H-=2){a+=I;[8];c+=b;}printf("偶数之和=%d 82”,a);prints奇数之和=%小心011);}(9)以下函数rotate的功能是:将a所指N行N列的二维数组中的最后一行放到b所指二维数组的第0列中,把a所指二维数组中的第0行放到b所指二维数组的最后一列中,b所指二维数组中其他数据不变。#defineN4voidrotade(inta[][N],intb[][N]){intIj;for(I=0;I 83M,*p,*q);}(11)下面程序的运行结果是【12】。#include 84M);}sub(char*a,inttl,intt2){charch;while(tl 85frcad(a,sizeof(int),10,fp);fclose(fp);fbr(i=0;i<10;i-H-)printfi(,,%d,,,a[i]);一、选择题(1)D【解析】软件是程序、数据与相关文档的集合,相对于计算机硬件而言,软件是逻辑产品而不是物理产品,是计算机的无形部分。(2)A【解析】确认测试的任务是验证软件的功能和性能,以及其他特性是否满足需求规格说明中确定的各种需求;集成测试的主要目的是发现与接口有关的错误。(3)C【解析】对象的基本特点:标识惟一性、分类性、多态性、封装性和模块独立性。(4)D【解析】滥用goto语句将使程序流程无规律,可读性差,因此A)不选;注解行有利于对程序的理解,不应减少或取消,B)也不选;程序的长短要依照实际情况而论,而不是越短越好,C)也不选。(5)A【解析】程序执行的效率与很多因素有关,如数据的存储结构、程序所处理的数据量、程序所采用的算法等。顺序存储结构在数据插入和删除操作上的效率比链式存储结构的效率低。(6)C【解析】数据结构概念一般包括数据的逻辑结构、存储结构及数据上的运算集合等。数据的逻辑结构只抽象地反映数据元素之间的逻辑关系,而不管它在计算机中的存储形式。(7)B【解析】顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai尸LOC(al)+(i-l)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。(8)C【解析】树是N(N>0)个结点的有限集合,当N=0,时称为空树,对于空树没有根结点,即根结点的个数为0,对于非空树有且只有一个根结点,所以树的根结点数目为0或1。(9)C【解析】数据库(DataBase,简称DB)是数据的集合,它具有统一的结构形式并存放于统•的存储介质内,是多种应用数据的集成,可被各个应用程序所共享。数据库中的数据具有"集成"、"共享"的特点。(10)B【解析】数据库系统(DatabaseSystem,简称DBS}包括数据库(Database,简称DB)和数据库管理系统(DatabaseManagementSystem,简称DBMS)。(11)D【解析】选项D)为两条语句。(12)C【解析】C语言规定的标识符只能由字母、数字和下划线3种字符组成,第一个字符必须为字母或下划线,并且不能使用C语言中的关键字作为标识符。选项C)中goto和int是关键字,b-a中u不是组成标识符的3种字符之一;选项D)中int是关键字,所以,均是不合法用户标识符的选项是C)。(13)B【解析】在C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项A)、C)和D)为正确的字符常量,而选项B)是用双引号括起来的字符,表示一个字符串常量。(14)C【解析】求余运算符"%"两边的运算对象必须是整型,而选项B)和D)中"%"两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)中赋值表达式的两边出现相同的变量x,也是错误的。选项C)是•个逗号表达式,所以正确答案为C)。(15)B【解析】选项A)中包含一个不合法的运算符选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b»(16)B【解析】由于在main()函数中,变量i=4,所以就调用fun(4),则输出"m=4k=4"。然后变量k增1等于5,变量i增1等于5,所以main()函数的"printf("i=%dk=%d 86",i,k);"语句输出"i=5k=5"(17)B【解析】在本题中,选项B)实际是先计算关系表达式"Ay=c"的值是0还是1,再比较该值与字符Z之间的大小关系,显然不能实现题目所要求的功能,而选项A)、C)、D)都可以。(18)B【解析】本题考查逻辑与运算的运算规则。其规则是:当运算符前后两个条件表达式都满足时,其最终结果才为真。当发现第一个表达式的值为假,计算机将不再执行后面表达式的运算。本题中,由于前一个表达式的值为"假",所以,后面的表达式不再进行运算,因而n的值保持不变,仍为2。(19)B【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c 87的值等于3,变量b的值没有变化,程序输出的结果为3,5,3。(20)C【解析】C语言中,switch语句专用于实现多分支结构程序,其特点是各分支清晰而直观。switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较。常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。(21)C【解析】本题考察变量的自力□"++"和自减"二'问题。当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式-y的值,y的自减要先于输出语句执行,故输出结果为852。(22)C【解析】dowhile语句的一般形式为:do循环体语句while(表达式);,其中循环体语句可以是复合型语句,但必须用花括号括起来。while后必须要有分号作为语句的结束,在do-while循环中,不可以省略while。(23)D【解析】在程序中指针变量p初始指向a[3],执行p减1后,p指向a[2],语句y=*p的作用是把a[2]的值赋给变量y,所以输出为y=3o(24)B【解析】二维数组的初始化有以下几种形式:①分行进行初始化;②不分行进行初始化;③部分数组元素进行初始化;④省略第一维的定义,不省略第二维的定义。选项B)等号右边分了3行,大于等号左边数组的行数2。(25)D【解析】C语言中操作一个字符串常量的方法有:①将字符串常量存放在一个字符数组之中;②用字符指针指向字符串,然后通过字符指针来访问字符串存储区域。当字符串常量在表达式中出现时,根据数组的类型转换规则,将其转换成字符指针。本题D)项中错误的关键是对数组初始化时,可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。(26)D【解析】C语言中数组卜标是从0开始的,所以二维数组a[2][3]的第一维卜标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示数组元素a[0][0].(27)B【解析】scanf()语句用"空格"区别不同的字符串;getc()与getchar()语句不能用于字符串的读入。(28)A【解析】带参数的宏定义命令行形式如下:#define宏名(形参表)替换文本。首先进行M的宏替换,之后再进行N的宏替换,替换后的表达式为(a)*(b)/(c)o(29)D【解析】结构体变量所占用内存的字节数是其所有成员所占用内存字节数之和。本题中整型变量i所占用的内存是2字节,字符型变量ch所占用的内存是1字节,双精度型变量f所占用的内存是8字节,三者相加即可。(30)A【解析】首先利用fwrite函数将数组a中的数据写到文件中,接着fseek函数的功能是读文件的位置,指针从文件头向后移动3个int型数据,这时文件位置指针指向的是文件中的第4个int数据"4",然后fread函数将文件3中的后3个数据4,5,6读到数组a中,这样就覆盖了数组中原来的前3项数据。最后数组中的数据就成了{4,5,645,6}。⑶)C【解析】在fbr(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2.(32)D【解析】在本题中,主函数在调用fim()函数进行排序时,传递的参数是c+4和6,fim()函数实现的功能是将数组c的第5个元素开始的6个元素依次进行从大到小的顺序排列。排序之后,数组c的内容变为{123,4,9,8,7,6,5,0}。(33)C【解析】本题考查的重点是拷贝字符串一使用strcpy()函数,该函数的调用方式是:strcpy(字符数组,字符串),其中"字符串"可以是字符串常量,也可以是字符数组。函数的功能是:将"字符串"完整地复制到"字符数组"中,字符数组中原有的内容被覆盖。使用该函数时注意:①字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志NO,一起复制;②不能用赋值运算符"="将一个字符串直接赋值给一个字符数组,只能用strcpy()函数处理。另外,本题还考查连接字符串的strcat()函数,其调用方式是:strcat(字符数组,字符串)。功能是把"字符串"连接到"字符数组"中的字符串尾端,并存储于"字符数组"中。"字符数组"中原来的结束标志,被"字符串"的第一个字符覆盖,而"字符串"在操作中未被修改。使用该函数时注意:①由于没有边界检查,编程者要注意保证"字符数组"定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题;②连接前两个字符串都有结束标志'\0',连接后"字符数组"中存储的字符串的结束标志、0'被舍弃,只在目标串的最后保留一个 88(34)D【解析】该程序先判断a[i]【解析】若结构体变量abc有成员a,并有指针p_abc指向结构变量abc,则引用变量abc 89成员a的标记形式有abc.a和p_abc->a。(14)[15]1,2,3,0,0,1,2,3,0,0,【解析:本题考,查文件读写函数fread和fwrite的用法。fwrite函数将数组a的前5个元素输出到文件fp中两次,共10个字节,再调用fread函数从文件fp中读取这10个字节的数据到数组a中,此时数组a的内容就变为{1,2,3,0,0,1,2,3,0,0},最后的输出结果为“1,2,3,0,0,1,2,3,0,0,"o—*、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)软件生命周期中花费费用最多的阶段是A)详细设计B)软件编码C)软件测试D)软件维护(2)为了提高测试的效率,应该A)随机选取测试数据B)取一切可能的输入数据作为测试数据C)在完成编码以后制定软件的测试计划D)集中对付那些错误群集的程序(3)以下不是面向对象思想中的主要特征的是A)多态B)继承C)封装D)垃圾回收(4)下列叙述中,不符合良好程序设计风格要求的是A)程序的效率第一,清晰第二B)程序的可读性好C)程序中要有必要的注释D)输入数据前要有提示信息(5)软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指A)模块间的关系B)系统结构部件转换成软件的过程描述C)软件层次结构D)软件开发过程(6)数据处理的最小单位是A)数据B)数据元素C)数据项D)数据结构(7)假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为A)log2nB)n2C)O(nl..5)D)n(n-l)/2(8)在深度为5的满二叉树中,叶子结点的个数为A)32B)31C)16D)15(9)数据库系统的核心是A)数据库B)数据库管理系统C)模拟模型D)软件工程(10)一个关系中属性个数为1时,称此关系为A)对应关系B)单一关系C)一■兀关系D)二兀关系(11)下面各选项中,均是C语言合法标识符的选项组是A)33weautoB)_23me_3ewC)_433e_elseD)ER-DF32(12)可在C程序中用作用户捺识符的一组标识符是一A)andB)DateC)HiD)case2007y-m-dDr.TomBigl(13)以下对C语言函数的有关描述中,正确的是A)在C语言中调用函数时,只能把实参的值传给形参,形参的值不能传送给实参B)C函数既可以嵌套定义又可以递归调用C)函数必须有返回值,否则不能使用函数D)函数必须有返回值,返回值类型不定(14)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A)函数的实参和其对应的形参共占同一存储单元B)形参只是形式上的存在,不占用具体存储单元C)同名的实参和形参占同•存储单元D)函数的形参和实参分别占用不同的存储单元(15)现有定义inta;doubleb;floatc;chark;,则表达式a/b+c-k值的类型为:A)intB)doubleC)floatD)char(16)以下关于long、int和short类型薮据占用内存夫小的叙述中正确的是A)均占4个字节B)根据数据的大小来决定所占内存的字节数C)由用户自己定义D)由C语言编译系统决定(17)有以下程序段 90intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为A)55566.0B)566.0C)7777.0D)566777.0(18)若变量已正确定义,有以下程序段i=0;doprintf(M%d,",i);while(i++);printf(M%d 91,',i);其输出结果是A)0,0B)0,lC)l,lD)程序进入无限循环(19)下列程序的运行结果是#include"stdio.h"main(){intx=-9,y=5,z=8;if(x〈y)ifi(y<0)z=0;elsez+=l;printf(H%d 92,1,z);}A)6B)7C)8D)9(20)若程序执行时的输入数据是“2473”,则下述程序的输出结果是#include 93M,a);)A)31B)13C)10D)20(22)现有如下程序段#include"stdio.h**main(){intk[30]={l2,324,45,6,768,98,21,34,453,456};intcount=0,i=0;while(k[i]){if(k[i]%2=0||k[i]%5==0)count++;i++;}printf(,,%d,%d 94n,count,i);}则程序段的输出结果为A)7,8B)8,8C)7,10D)8,10(23)若有以下程序#include 95main(){inti;int*p=a;fbr(i=0;i<4;i++)a[i]=*p;printf(M%d 96",a[2]);}上面程序的输出结果是A)6B)8C)4D)2(24)有以下程序#includc 97",m);}程序的运行结果是A)0B)1C)2D)3(25)已知字符A的ASCII码值是65,字符变量cl的值是,A1c2的值是执行语句printf(n%d,%dM,cl,c2・2);后,输出结果是A)A,BB)A,68C)65,66D)65,68(26)下列程序是用来判断数组中特定元素的位置所在的。include 98",k,a[k]);}如果输入如下整数:876675896101301401980431451777则输出结果为A)7,431B)6C)980D)6,980(27)下面程序的文件名为t.exe,在DOS下输入的命令行参数为:ttomeetme<回车〉则程序输出的结果是#include"stdio.h"main(argc,argv)intargc;char*argv[];{inti;printf(M%d 99'\argc);}A)3B)4C)2D)以上答案都不正确(28)有如下程序inta[10]={1,2,3,4,5,6,73,9,10};int*p=&a[3],b;b=p[5];则b的值是A)5B)6C)9D)8(29)以下叙述中错误的是A)改变函数形参的值,不会改变对应实参的值B)函数可以返回地址值C)可以给指针变量赋一个整数作为地址值D)当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL(30)下面程序的输出结果是#include 100”,*p+9);}A)0B)1C)10D)9 101(31)有下面程序段#include"stdio.h"#include,,string.hMmain(){chara[3][20]={{MchinaH},{HisaM},{"bigcountry!H}};chark[100]={0},*p=k;inti;fbr(i=0;i<3;i++){p=strcat(p,a[i]);}i=strlen(p);printf(M%d 102",i);}则程序段的输出结果是A)18B)19C)20D)21(32)若有定义:char*st=Hhowareyou,下列程序段中正确的是A)chara[l1],*p;strcpy(p=a+1,&st[4]);B)chara[ll];strcpy(++a,st);C)chara[l1];strcpy(a,st);D)chara[],*p;strcpy(p=&a[1],st+2);(33)有以下程序#include 103",fun(s));}程序的运行结果是A)9B)61490C)61D)5(34)设有定义:charp[]={T2,3},*q=p;,似下不能计算出一个char型数据所占字节数的表达式是A)sizeofi(p)B)sizeofifchar)C)sizeofi[*q)D)sizeofi[p[0])(35)有以下函数intaaa(char*s){char*t=s;while(*t++);t・・;retum(t-s);)以下关于aaa函数的功能的叙述正确的是A)求字符串s的长度B)比较两个串的大小C)将串s复制到串tD)求字符串s所占字节数(36)当用户要求输入的字符串中含有空格时,应使用的输入函数是A)scanfi[)B)getchar()C)gets()D)getc()(37)下列选项中错误的说明语句是A)chara[]={rt7o7y7or/ur,z\0r};B)chara[]={Htoyou\0M};C)charaj]="toyou\0";D)chara[]=,toyou\Or;(38)以下程序的输出结果是int{staticinti=0;ints=l;s+=i;i++;returns;}main(){inti,a=O;fbr(i=0;i<5;i++)a+=f();printf(M%d 104M,a);)A)20B)24C)25D)15(39)下列程序的输出结果是include"stdio.h"#defineM(x,y)x%ymain(){inta,m=12,n=100;a=M(n,m);printf(n%d 105",a-);}A)2B)3C)4D)5(40)假定当前盘符下有两个如下文本文件:文件名al.txta2.txt内容123#321#则下面程序段执行后的结果为 106#include"stdio.h"voidfc(FILE*p){charc;while((c=fgetc(p))!=,#")putchar(c);}main(){FILE*fp;m=fbpen("al.txt〈T');fc(fp);fclose(fp);fp=fbpen(Ha2.txt,,,Y,);fc(fp);fclose(fp);putcharC 107');}A)123321B)123C)321D)以上答案都不正确二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)软件定义时期主要包括【1】和需求分析两个阶段。(2)软件维护活动包括以下几类:改正性维护、适应性维护、【2】维护和预防性维护。(3)数据的逻辑结构有线性结构和【3】两大类。(4)某二叉树中度为2的结点有n个,则该二叉树中有【4】个叶子结点。(5)在ER图中,矩形表示【5】。(6)阅读下面程序,则执行后的输出结果是【6】。#include"stdio.h"main(){intx,y,z;x=1;y=2;z=3;ifi[x>y)if(x>z)printfl(,,%d,,,x);elseprintfC%d”,y);printf(M%d 108",z);}(7)以下程序的输出结果是【71main(){inty=9;fbr(;y>0;y-)if(y%3=0){printf(M%dM,-y);continue;}}(8)有以下程序段,且变量已正确定义和赋值for(s=1.0,k=l;k<=n;k-H-)s=s+1.0/(k*(k+1));printfCs=%f 109 110”,s);请填空,使下面程序段的功能与之完全相同s=1.0;k=l;while([8]){s=s+1.0/(k*(k+l));[9];}printf(Ms=%f 111 112H,s);(9)设有以下定义和语句,则*(*(p+2)+l)的值为【10】。inta[3][2]=<10,20,30,40,50,60},(*p)[2];p=a;(10)以下程序的输出结果是[11]O#includc 113M);}(11)以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)中找出最大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填空。#include 114}t=x[p0];x[p0]=x[n-1];x[n-1]=t;t=x[pl];x[pl]=[12];[13]=t;}main(){inta[10],u;for(u=0;u<10;u++)scanf(M%dH,&a[u]);Ra,10);fbr(u=0;u<10;u++)printfi["%dH,a[u]);printf(M 115M);}(12)mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。intmystrlen(char*str){intI;fbr(I=O;[14]!=。';1++);retum(I);)(13)阅读下列程序,则程序的输出结果为【15】。#includc"stdio.h"structty{intdata;charc;};main(){structtya={30/xr};fun(a);printf(,,%d%cH,a.data,a.c);}fiin(structtyb){b.data=20;b.c=y;}一、选择题1)D【解析】软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。(2)D【解析】测试的目的是发现软件中的错误。经验表明,程序中存在错误的概率与该程序中已发现的错误成正比。这一现象说明,为了提高测试效率,测试人员应该集中对待那些错误群集的程序。(3)D【解析】面向对象思想中的三个主要特征是:封装性、继承性和多态性。(4)A【解析】当今主导的程序设计风格是"清晰第一,效率第二"的观点。结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,而在实际应用中,人们更注重程序的可理解性。(5)B【解析】软件设计包括软件结构设计、数据设计、接口设计和过程设计。其中,结构设计是定义软件系统各主要部件之间的关系;数据设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间如何通信;过程设计则是把系统结构部件转换成软件的过程性描述。(6)C【解析】数据处理的最小单位是数据项;由若干数据项组成数据元素;数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。(7)D【解析】假设线性表的长度为n,则在最坏情况下,冒泡排序要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-l)/2o(8)C【解析】满二叉树是指除最后一层外,每一层上的所有结点都有两个叶子结点。在满二叉树中,层上的结点数都达到最大值,即在满二叉树的第k层上有2k-l个结点,且深度为m的满二叉树有2m-l个结点。(9)B【解析】数据库管理系统(DatabaseManagementSystem,简称DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,数据库管理系统是数据库系统的核心。(10)C【解析】在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有N个属性的关系称为N元关系。(11)B【解析】合法的标识符是由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,用户定义的标识符不能与关键字相同。选项A),数字不能为第一个字母,aut。为关键字;选项C)中,也是数字不能为第一个字母,else为关键字;选项D)中负号不合法。(12)A【解析】在C语言中,合法标识符的命名规则是:标识符可以山字母、数字和下划线3 116种字符组成,且第一个字符必须为字母或下划线。C语言的标识符可以分为关键字、预定义标识符和用户标识符。选项B)和C)中的横线以及点都不合法,选项D)中的case为C语言关键字。(13)A【解析】C语言中的函数可以进行递归调用,但是不能在函数中定义函数,函数不用有返回值,若有返回值,则返回值类型必确定。(14)D【解析】在内存中,实参单元与形参单元是不同的单元。在C语言中,仅在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。(15)B【解析】双目运算中两边运算量类型转换规律:运算数1运算数2转换结果类型短整型长整型短整型->长整型整型长整型整型,长整型字符型整型字符型->整型有符号整型无符号整型有符号整型->无符号整型整型浮点型整型->浮点型在a/b的时候,a、b的类型不一致,根据类型转换规则,把整型转换成double类型,之后的加、减类似。转化规则为char,short->int->unsigned->long->double<—floate.(16)D【解析】在ANSI标准中,long、int和short分别占用4、2和2个字节。但实际上对于某些C编译系统,int和short都占用4个字节,所以说各种类型数据占用内存大小是山选择何种C编译系统决定的。(17)B【解析】本题考查通过scanf函数输入数据时的格式控制问题。变量j的格式控制为"%2d",即只接收输入数据的前两位,从第三位开始直到空格之间的输入都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项B)。(18)B【解析】对于do...while循环,程序先执行一次循环体,再判断循环是否继续。木题先输出一次i的值"0,",再接着判断表达式计+的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,程序再次输出i的值"1"。(19)D【解析】if…else语句的执行过程如下,首先计算if后面一对圆括号内表达式的值,若表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;若表达式的值为0,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句。C语言的语法规定,else子句总是与前面最近的不带else的if匹配,与书写格式无关,本题目的后一个ifelse相当于嵌套在第一个if子句里,相当于x 117fbr循环语句中,指针变量p始终指向数组的苜地址,因而执行循环赋值语句后数组各元素的值均变为2。(24)B【解析】本题考查循环语句的嵌套以及条件的判断问题。在程序中,内层循环判断条件为"j<=i",而j的初值为3,故当i的值为1和2时,内层循环体都不会被执行。只有当i和j都等于3时才会执行一次。m的值为55对3取模,计算结果为1.(25)C【解析】在C语言中,字符型数据在内存中的存储形式是ASCII码值。当需要以整型格式输出字符时,输出的也是ASCII码值。字符'A,和的ASCII码值分别为65和68。(26)D【解析】本题中直接使用指针变量k,但在使用时要注意对k的指针运算。此外,一开始应知道*k的值为数组中的某一下标值,即*k=0,本函数的功能是找出数组中的最大元素的位置及最大元素的值。(27)B【解析】argc中存入的是命令行中字符串的个数。argv是一个指向字符型的指针数组的指针。(28)C【解析】p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=9,所以b=9o29)C【解析】函数形参和实参分别占用不同的内存单元,改变形参的值不会影响对应实参的值,选项A)正确。指针类型的函数可以返回地址值,选项B)正确。在文件stdio.h中,NULL被定义为void型的指针,选项D)也正确。指针变量的值只能是存储单元地址,而不能是一个整数,选项C)错误。(30)C【解析】此题考查了指针引用一维数组元素的方法。*p+9因为运算符"*"的优先级高于所以输出结果为p指向的元素1,然后加9,值为10。(31)B【解析】字符串连接函数strcat的调用形式如下:strcat(sl,s2)。此函数将s2所指字符串的内容连接到S1所指的字符串后面,并自动覆盖S1串末尾的尾标,函数返回S1的地址值。(32)A【解析】本题综合考查字符数组的赋值和strcpy函数的用法。C语言不允许用赋值表达式对字符数组赋值,如下面的语句就是非法的:strl="China",如果想把"China"这5个字符放到数组strl中,除了逐个输入外,还能使用strcpy函数,该函数的功能是将一个字符串复制到一字符数组中。例如:strcpy(strl,"China")或strcpy(strl,str2);注意,不能企图用以下语句来实行赋值(将str2的值传给strl):strl=str2;不能用赋值语句将•个字符串常量或字符数组直接给一个字符数组。strcpy函数的结构是:strcpy(字符数组1,字符串2)其中,需要注意的是,字符数组1的长度不应小于字符串2的长度,"字符数组1"必须写成数组名形式,如(strl),"字符串2"可以是字符数组名,也可以是字符串常量,不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。(33)C【解析】在fun函数中,while循环的功能是:逐个取字符数组s的字符判断其是否是数字。若是则将其作为个位数字保存到变量n中,n的原数据的各个数位将相应左移一个10进制位。当指针s指向数组的第3位时,循环条件不成立,循环结束,返回n的值,输出n的值为61。(34)A【解析】在本题中,p和q同为指向字符类型数据的指针。*q和p[0]同为字符型数据。选项B)、C)和D)都符合题目的要求;选项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)后面的,(T是多余的,在C语言中,系统会自动在字符串的结尾处加上一个字符、。作为串的结束标记。(38)D【解析】函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已有初值,以后每次调用函数时不再重:新赋值,而只是保留上次函数调用结束时的值。(39)C【解析】带参数的宏定义命令行形式如下:#define宏名(形参表)替换文本在编译的时候编译预处理程序用"替换文本"来替换宏,即M(n,m)被替换为n%m,之后计算,将计算的结果赋给a。注意,宏替换是在编译时由预处理程序完成的,宏替换不占用运行的时间,而函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间. 118(40)A【解析】本题的功能是顺序的读两个文本文件,依次输出。当打开文件时出现错误,fopen函数将返回NULLo二、填空题(1)[1]可行性研究【解析】软件生命周期一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等,还可以将软件生命周期分为三个阶段:①软件定义阶段:可行性研究和需求分析;②软件开发阶段:设计、实现和测试;③软件运行维护阶段:交付使用和维护。(2)[2]完善性【解析】软件维护活动包括以下几类:改正性维护、适应性维护、完善性维护和预防性维护。改正性维护是指在软件交付使用后,为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程;适应性维护是指为了使软件适应变化,而去修改软件的过程;完善性维护是指为了满足用户对软件提出的新功能与性能要求,需要修改或再次开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性;预防性维护是为了提高软件的可维护性、可靠性等,为以后的进一步改进软件打下良好基础。(3)[3]非线性结构【解析】数据的逻辑结构有线性结构和非线性结构两大类。(4)[4]n+1【解析】在任意一棵二叉树中,度为O多结点(即叶子结点)总是比度为2多结点多一个。(5)[5]实体【解析】在E-R图中用矩形表示实体;椭圆形表示属性;菱形表示联系。(6)[6]3【解析】C语言的语法规定:else子句总是与前面最近的不带else的if相结合。因为X不大于y,所以执行printf("%d 119",z);语句。(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,结束循环,所以程序输出852o(8)[8]k<=n[9]k++【解析】本题要求将一个for循环改成while循环。首先要保证循环条件相同,在for循环中,每次执行循环之后,循环控制变量k都会加1,而while循环则没有,故需在循环体中增加改变k数值的语句"k++;"。(9)[10]60【解析】本题中,代码定义3行2列的二维数组a,定义指向两个元素的一维数组指针p,并让p指向两维数组a的首行,则代码*(*(p+2)+l)中的p+2指向两维数组a的第三行a[2],*(p+2)指向a[2][0],*(p+2)+1指向a[2][l],*(*(p+2)+l)是引用a⑵[1]淇值是60(10)[11]ACE【解析】在本题中,for循环体每执行完一次,变量i的值自加两次。i的初值为R,执行一次循环后变为匕之后再变成曾当其变为富时,循环条件若不满足,循环终止,故本题共输出3个字符。表达式"i」a,+'A,"即表示输出i对应的大写字母,结果为ACE。(11)[12]x[0][13]x[0]【解析】函数R)通过fbr循环逐个比较数组x中的元素,循环结束后,p0和pl分别表示最大值和最小值在数组中的下标位置,然后按照题意将最大值x[p0]和数组的最后一个元素x[n-l]交换位置,再将最小值x[pl]和第一个元素(x[0])进行交换,所以空白处应该填入x[0]。(12)[14]*(str+I)或str[I]【解析】str是指针变量,它指向字符型数据,在循环过程中,可以用*(str+I)来访问字符串中的第I个元素,判断是否为结束标志,如果不是,1=1+1,继续取下一个元素进行判断,直到*(strH)的值为,0为止,也可以用下标的方式引用字符,如*(str+I)相当于str[I]o(13)[15130x【解析】本题的参数传递属于值传递,所以被调用函数内不能改变调用函数中的数据。一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置匕答在试卷上不得分。(1)算法的空间复杂度是指A)算法程序的长度B)算法程序中的指令条数C)算法程序所占的存储空间D)执行算法需要的内存空间(2)在结构化程序设计中,模块划分的原则是A)各模块应包括尽量多的功能B)各模块的规模应尽量大C)各模块之间的联系应尽量紧密D)模块内具有高内聚度、模块间具有低耦合度(3)下列叙述中,不属于测试的特征的是A)测试的挑剔性B)完全测试的不可能性C)测试的可靠性D)测试的经济性 120(4)下面关于对象概念的描述中,错误的是A)对象就是C语言中的结构体变量B)对象代表着正在创建的系统中的一个实体C)对象是一个状态和操作(或方法)的封装体D)对象之间的信息传递是通过消息进行的(5)下列关于队列的叙述中正确的是A)在队列中只能插入数据B)在队列中只能删除数据C)队列是先进先出的线性表D)队列是先进后出的线性表(6)一知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是A)acbedB)decabC)deabcD)cedba(7)某二叉树中有n个度为2的结点,则该二叉树中的叶子结点数为A)n+1B)n-1C)2nD)n/2(8)设有如下三个关系表RSTABCABCm13m13nn13下列操作中正确的是A)T=ROSB)T=RUSC)T=RxSD)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)VB)"a"C)"\897"D)296(14)以下叙述中正确的是A)构成C程序的基本单位是函数B)可以在一个函数中定义另一个函数C)main()函数必须放在其他函数之前D)C函数定义的格式是K&R格式(15)设变量均已正确定义,若要通过scanf("%d%c%d%c",&al,&cl,&a2,&c2);语句为变量al和a2赋数值10和20,为变量cl和c2赋字符X和Y。以下所示的输入形式中正确的是(注:口代表空格字符)A)10口*口20口丫〈回车>B)l(taX20nY<回车>C)10nX<回车>20口丫<回车>D)10X<回车〉20Y<回车,(16)若有说明:int*p,m=5,n;,以下正确的程序段是A)p=&n;scanf("%d",&p);B)p=&n;scanf("%d",*p)C)scanf("%d",&n);*p=n;D)p=&n;*p=m;(17)在执行下述程序时,若从键盘输入6和8,则结果为main(){inta,b,s; 121scanf("%d%d",&a,&b);s=aif(a<b)s=b;s*=s;printfi["%d",s);}A)36B)64C)48D)以上都不对(18)若执行下面的程序时,从键盘输入5和2,则输出结果是main(){inta,b,k;scanff'%d,%d",&a,&b);k=a;ifl;a<b)k=a%b;elsek=b%a;printff%d 122”,k);}A)5B)3C)2D)0(19)在C语言中,函数返回值的类型最终取决于A)函数定义时在函数首部所说明的函数类型B)retum语句中表达式值的类型C)调用函数时主调函数所传递的实参类型D)函数定义时形参的类型(20)已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是A)c=(c・'A')%26+'a'B)c=c+32C)c=c,A'+'a'D)c=('A'+c)%26・H(21)以下选项中,当x为大于1的奇数时,值为0的表达式是A)x%2=lB)x/2C)x%2!=0D)x%2=0(22)有以下程序main(){intk=5,n=0;do{switch(k){case1:case3:n+=l;k—;break;default:n=O;k—;case2:case4:n+=2;k—;break;}printff%d”,n);}while(k>0&&n<5);}程序运行后的输出结果是A)235B)0235C)02356D)2356(23)有如下程序main(){intn=9;while(n>6){n-;printff%d”m);}}该程序的输出结果是A)987B)876C)8765D)9876(24)有以下程序#include 123){switch(c,2'){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);case4:putchar(c+3);break;}}printf("\rr)}从第一列开始输入以下数据 124(25)有以下程序main(){intx=0,y=0,i;for(i=l;;4-+i){if(i%2==0){x-H-;continue;}if(i%5==0){y-H-;break;}}printf(M%d,%d”,x,y);}程序的输出结果是A)2,lB)2,2C)2,5D)5,2(26)有以下程序main(){ima[4][4]={{l,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6/}},ij,k,t;fbr(i=0;i<4;i++)fbr(j=0j<3;j-H-)fbr(k=j+1;k<4;k-H-)皿i];a皿按列排序*/for(i=0;i<4;i++)printf(M%d,M,a[i][i]);}程序运行后的输出结果是A)1,6,5,7,B)8,7,3,l,C)4,7,5,2,D)1,6,2,1,(27)有以下程序intfi(intn){ifl[n==l)retum1;elsereturnf(n-l)+l;}main(){intij=O;fbr(i=l;i<3;i-H-)j+=f(i);printftM%d 125Mj);}程序运行后的输出结果是A)4B)3C)2D)1(28)当运行以下程序时,从键盘输入AhaMA(空格)Aha〈CR>,则下面程序的运行结果是#include 126",*(&a[0][0]+2*i+i.2));}则程序的输出结果为A)21B)78C)23D)28(31)请选出正确的程序段A)int*p;scanfC%d”,p); 127B)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=l;(32)下面程序段的运行结果是chara[]="lanuage",*p;P=a;while(*p!=,ur){printf(M%c,,,*p-32);p++;}A)LANGUAGEB)languageC)LAND)langUAGE(33)以下程序的输出结果是#include 128",*p);free(p);)f(int*s,intp[][3]){*S=p[l][l];}A)1B)4C)7D)5(34)有以下程序voidf(int*q){inti=0;for(;i<5;i-H-)(*q)++;}main(){inta[5]={l,2,3,4,5),i;f(a);fbr(i=O;i<5;i++)printfiT%d,",a[i]);)程序运行后的输出结果是A)2,2,3,4,5,B)6,2,3,4,5,C)1,2,3,4,5,D)2,3,4,5,6,(35)以下合法的字符型常量是Ay\xl3'C)'65'D)" 129"(36)有以下语句,则对a数组元素的引用不正确的是inta[l0]={0,1,2,3,4,5,6,7,8,9},*p=a;A)a[p-a]B)*(&a[i])C)p[i]D)*(*(a+i))(37)有以下程序#include 130",strlen(p));程序运行后的输出结果是A)9B)6C)llD)7(38)在C语言中,变量的隐含存储类别是A)autoB)staticC)extemD)无存储类别(39)以下程序的输出结果是main(){intc=35;printfC%d 131”,c&c);}A)0B)70C)35D)1(40)有以下程序#include 132{FILE*fp;inti=20j=30,k,n;fp=fbpen(Hdl.datM;,wM);fprintfi(fp,H%d 133M,i);fprintf(fp;,%d 134,,j);fclose(fp);fp=fbpen(Mdl.datM,V);fscanf(fp,M%d%dM,&k,&n);printf("%d%d 135M,k,n);fclose(fp);)程序运行后的输出结果是A)2030B)2050C)3050D)3020二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)设一棵完全二叉树共有700个结点,则在该二叉树中有【1】个叶子结点。(2)常用的黑箱测试有等价类划分法、【2】和错误推测法3种。(3)数据库管理系统常见的数据模型有层次模型、网状模型和【3】3种。(4)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为【4】。(5)数据库保护分为:安全性控制、【5】、并发性控制和数据的恢复。(6)执行以下程序后的输出结果是[6Lmain(){inta=10;a=(3*5,a+4);printf(,,a=%d 136,',a);)(7)以下程序的输出结果是171。#includc 137,,,strlen(HIBM 138O12\l\\M));}(8)已定义charch=$;inti=lJ;,执行j!=ch&&i++以后,i的值为【8】。(9)以下程序的运行结果是[91#include 139n,k);}(10)下面程序的功能是输出数组s中最大元素的下标,请填空。main(){intk,p,s[]={l,-9,7,2,-10,3);fbr(p=0,k=p;p<6;p++)ifi[s[p]>s[k])[10]primff%d 140”,k);}(11)以下程序的功能是:求出数组x中各相邻两个元素的和依次存放到a数组中,然后输出。请填空。main(){intx[10],a[9],I;fbr(I=O;K10;I++)scanf(H%dn,&x[I]);fbr([11];I<10;I++)a[I-l]=x[I]+[12]for(I=O;I<9;I++)printf(M%dn,a[I]);printf(HH);)(12)设有以下程序,为使之正确运行,请在横线中填入应包含的命令行。(注:t!y_me()函数在a:\myflle.txt中有定义。)[13] 141main(){printffW”);try_me();printf(M 142n);}(13)以下程序的功能是建立一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为时,表示输入结束(链表头结点的data域不放数据,表空的条件是ph・>next=NULL),请填空。#include 143H);scanff%d”,&a);while(a!=-l){p=(structlist*)malloc(sizeofl(structlist));[13]=a;q->next=p;[15]=p;scanf(,,%d,,,&a);}p->next=^;retum(ph);}main(){structlist*head;head=creatlist();}(1)D【解析】算法的复杂度主要包括算法的时间爱杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度是指执行这个算法所需要的内存空间。(2)D【解析】在结构化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有利于提高软件模块的独立性,也是模块划分的原则。(3)C【解析】软件测试的目标是在精心控制的环境下执行程序,以发现程序中的错误,给出程序可靠性的鉴定。它有3个方面的重要特征,即测试的挑剔性、完全测试的不可能性及测试的经济性。其中,没有测试的可靠性这一说法。(4)A【解析】对象是由数据和容许的操作组成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联系,从模拟现实世界中不同事物彼此之间的联系,B)、C)、D)是正确的,对象的思想广泛应用于C++、Java等语言中,因此A)错误。(5)C【解析】队列是一种操作受限的线性表。它只允许在线性表的一端进行插入操作,另端进行删除操作。其中,允许插入的一端称为队尾(rear),允许删除的一端称为队首(fiwt)。队列具有先进先出的特点,它是按"先进先出"的原则组织数据的。(6)D【解析】依据后序遍历序列可确定根结点为c;再依据中序遍历序列可知其左子树由deba构成,右子树为空;又由左子树的后序遍历序列可知其根结点为e,由中序遍历序列可知其左子树为d,右子树由ba构成,如下图所示,求得该二叉树的前序遍历序列为选项D)。(7)A【解析】时于任何一棵二叉树T,如果其终端结点(叶子)数为nl,度为2的结点数为n2测nl=n2+l,所以该二叉树的叶子结点数等于n+1。(8)C【解析】对于两个关系的合并操作可以用笛卡尔积表示。设有n元关系R和m元关系S,它们分别有p和q个元组,则R与S的笛卡儿积记为RxS它是一个m+n元关系,元组个数是pxq由题意可得,关系T是由关系R与关系S进行笛卡尔积运算得到的。(9)A【解析】两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。(10)D【解析】数据处理是指将数据转换成信息的过程,故选项A)叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B)叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C)叙述错误。⑴)C【解析】不论main函数在整个过程中的位置如何,一个C程序总是从main函数开始执行的。(12)D【解析】一个C语言的源程序(后缀名为.c)在经过编译器编译后,先生成一个汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目标程序(后缀名为.obj),目标程序不可以直接运行,它要和库函数或其他目标程序连接成可执行文件(后缀名为.exe)后方可运行。(13)A【解析】C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单 144引号括起来作为字符常量,字符常量的的范围是0727。由于字符常量用单引号括起来,所以选项B),C)错误,选项D)超过了字符常量的表示范围。(14)A【解析】本题考查C语言的综合基础知识。构成C程序的基本单位是函数,不论main函数在整个程序中的位置如何,一个C程序总是从main函数开始执行,C语言的函数定义都是互相平行、独立的,在定义函数时,一个函数内不能定义另一个函数。C函数定义的一般格式有两种:传统格式和现代格式。传统格式也称K&R格式,是早期编译系统使用的格式;现代格式又称ANSI格式,是现代编译系统使用的格式。(15)D【解析】本题中,scanf函数的格式控制没有空格,所以,对于选项A)、B)、C),输入的第一个空格会作为字符赋值给变量cl,而不会被解释成分隔符。(16)D【解析】"&"是求址运算符是指变量说明符。选项A)、B)应改为scanfi("%d",p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,建议不使用。(17)B【解析】本题中a的值为6,b的值为8,最后s的值为8,s*=s等价于s=s*s。(18)C【解析】本题考查简单的if...else语句。先执行条件ifl[a6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环时,输出为6,由此可以排除选项C).(24)A【解析】本题主要考查了字符输入输出।函数getchar和putchar的使用。getchar函数用来从标准输入设备上读入一个字符,putchar(c)函数是将字符变量c中的字符输出到标准输出设备上,并且字符可以看作整数参与运算。(25)A【解析】本题考查了continue和break语句在循环语句中的作用。break语句的作用是结束本层循环,而continue语句的作用是结束本次循环直接进入到下次循环。(26)A【解析】本题利用多重for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对■列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列,最后输出对角线上的元素值。(27)B【解析】在main函数中,对瑁)和出2)的值进行了累加。f(l)=lf(2)=f(l)+l=2最后J的值为1+2=3(28)A【解析】本题主要考查的知识点是大写字母比它对应的小写字母ASCII码值小32,并且字符可以看作整数进行算术运算等操作。(29)B【解析】本题用循环的方法考查对数组概念的掌握。首先,当i=0时,数组中的位置是a[2][0]=7,当然,如果用排除法,就不用考虑后面的循环,因为在4个选项中,第1个数为7的选项只有B)»本题执行第2次循环时,i的值为1,则printf函数中的数组指向为a[l][l]=5,依次循环,可求出答案。 145(30)A【解析】通过地址来引用二维数组,若有以下定义:inta[3][4],ij;且当0 146"是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。(36)D【解析】本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。(37)B【解析】strcpy()函数的功能是将字符串q复制到从p[3]位置开始的存储单元,同时复制字符串结束标志'。'到p[6]中。函数strlen()返回的是字符串中不包括、(T在内的实际长度,故本题答案为B)(38)A【解析】auto变量:无static声明的局部变量。用auto作存储类别的声明时,可以不写auto,存储类别隐含确定为auto(自动存储类别卜是动态存储方式。大多数变量是自动变量。用static声明的局部变量是静态局部变量。函数调用结束后•静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值。用extern声明外部变量,外部变量即全局变量,可以用extern声明来改变全局变量的作用域,实际上,关键字"aut。"可以省略,aut。不写则隐含确定为"自动存储类别",属于动态存储方式。(39)C【解析】本题考查按位与因为1&1=1,0&0=0,所以任何数与自身按位与,结果仍为此数,不发生变化。(40)A【解析】本题中,最主要的是掌握几个有关文件函数的应用。函数名:fopen功能:打开一个文件调用方式FILE*fp;m=fbpen(文件名,使用文件方式);函数名其rintf功能:传送格式化输出到一个文件中调用方式:Srintf(文件指针,格式字符串,输出表列);函数名:fclose功能:关闭一个文件调用方式:fclose(文件指针);函数名:fscanf功能:从磁盘文件执行格式化输入 147调用方式:fscanf(文件指针,格式字符串,输入列表)。二、填空题(1)[1]350【解析】完全二叉树中,设高度为n,则除h层外其它层结点数都到达最大,可以算出h=10,l至9层结点个数为2-9-1=511,最后一层结点个数为700-511=189个,189/2=95,除最后一层外共有结点2,(9-1)-95=161个,所以所有的结点个数为:189+161=350个。(2)[2]边界值分析法【解析】黑箱测试法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价类划分法、边界值分析法和错误推测法3种。(3)[3]关系模型【解析】数据库管理系统是位于用户与操作系统之间的一层系统管理软件,属于系统软件是用户与数据库之间的一个标准接口,其总是基于某种数据模型,可以分为层次模型、网状模型和关系模型。(4)[4]软件生命周期【解析】软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动。(5)[5]完整性控制【解析】安全性控制:防止未经授权的用户有意或无意存取数据库中的数据,以免数据被泄露、更改或破坏;完整性控制:保证数据库中数据及语义的正确性和有效性,防止任何对数据造成错误的操作;并发控制:正确处理好多用户、多任务环境下的并发操作,防止错误发生;恢复:当数据库被破坏或数据不正确时,使数据库将其恢复到正确的状态。(6)[6]a=14【解析】本题考查的是表达式的优先级问题。先计算表达式3*5=15,再计算a+4=14,将数据14赋值给a,根据printf。函数内的输出格式控制串,最后的输出结果应为"a=14"»⑺【7】9【解析】本题的字符串中共有9个字符,它们分别是T、旧'、'0\T、2、N,其中," 148"表示换行,"\\"表示反斜杠字符所以本题的最后输出结果为9。(8)[8]1【解析】在执行逻辑表达式"j=!ch&&i++"时,首先判断j=!ch的值,因为"ch=$",不为0,所以方!ch=0",编译系统便不再计算表达式"i++"的值,i的值不变,仍为1.(9)[9]k=5【解析】本题主要考查了函数的递归调用方法。g=0或g=l或g=2是递归的终止条件,然后用回代的方法从一个已知值推出下一个值,直到计算出最终结果。(10)[10]k=p;【解析】为寻找数组中最大元素的下标,需先预设1个临时最大元素的下标,并顺序逐•考查数组的元素,当发现当前元素比临时最大元素更大时,就用当前元素的下标更新临时最大元素下标。直至考查了数组的全部元素后,这临时最大元素下标就是数组的最大元素下标。通常预设的最大元素下标是数组的首元素下标,考查通常从首元素开始顺序向后继元素考查。程序中,存储临时最大元素下标的变量是k,变量P控制顺序考查的循环控制变量。当发现当前元素s[p]比临时最大元素s[k]更大时,应该用p更新k,所以在空框处应填入代码"k=p;"。(11)[1111=1(12]x[I-l]【解析】对于10个数,相临的两个数相加取和,总共要进行9次加法运算,所以空14处应填入1=1。相临的两个数相加取和,放在数组a中,x[0]与x[l]的和存放在a⑼中,所以空15处应填入x[I-l]»(12)[13]#include 149(3)软件设计中模块划分应遵循的准则是A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(4)在软件开发中,需求分析阶段产生的主要文档是A)可行性分析报告B)软件需求规格说明书C)概要设计说明书D)集成测试计划(5)算法的有穷性是指A)算法程序的运行时间是有限的B)算法程序所处理的数据量是有限的C)算法程序的长度是有限的D)算法只能被有限的用户使用(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-l)/2的排序方法是A)快速排序B)冒泡排序C)直接插入排序D)堆排序(7)下列关于栈的叙述正确的是A)栈按"先进先出"组织数据B)栈按"先进后出"组织数据C)只能在栈底插入数据D)不能删除数据(8)在数据库设计中,将E-R图转换成关系数据模型的过程属于A)需求分析阶段B)概念设计阶段C)逻辑设计阶段D)物理设计阶段(9)有三个关系R、S和T如下:RBCDa0klb1nlSBCDf3h2a0kln2xlTBCDa0kl由关系R和S通过运算得到关系T,则所使用的运算为A)并B)自然连接C)笛卡尔积D)交(10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为A)课号,成绩B)学号,成绩C)学号,课号D)学号,姓名,成绩(11)以下叙述中正确的是A)C程序中的注释只能出现在程序的开始位置和语句的后面B)C程序书写格式严格,要求一行内只能写一个语句C)C程序书写格式自由,一个语句可以写在多行上D)用C语言编写的程序只能放在一个程序文件中(12)以下选项中不合法的标识符是A)printB)FORC)&aD)_00(?3)以下选项中不属于字符常量的是A),C'B)"C"C)ZCC'D)K072'(14)设变量已正确定义并赋值,以下正确的表达式是A)x=y*5=x+zB)int(l5.8%5)C)x=y+z+5,++yD)x=25%5.0(15)以下定义语句中正确的是A)inta=b=0;B)charA=65+l,b=V;C)floata=l,*b=&a,*c=&b;D)doublea=0.0;b=l.l; 150(16)有以下程序段charch;intk;ch='a';k=12;printf(w%c,%d,M,ch,ch,k);printf(wk=%d 151,',k);已知字符a的ASCII码值为97,则执行上述程序段后输出结果是A)因变量类型与格式描述符的类型不匹配输出无定值B)输出项与格式描述符个数不符,输出为零值或不定值C)a,97,12k=12D)a,97,k=12(17)已知字母A的ASCII码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是A)kk>='A'&&kkv='Z'B)!(kk>='A'||kkv='Z')C)(kk+32)>='a'&&(kk+32)v='Z'D)isalpha(kk)&&(kk<91)(18)当变量c的值不为2、4、6时,值也为“真”的表达式是A)(c=2)||(c=4)||(c=6)B)(c>=2&&c<=6)||(c!=3)||(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(O=2&&c<=6)&&(c%2!=1)(19)若变量已正确定义,有以下程序段inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;printf(,,%d,%d,%d 152",a,b,c);其输出结果是A)程序段有语法错B)3,5,3C)3,5,5D)3,5,7(20)有以下程序//include 153H,a,b);)程序的运行结果是A)a=l,b=OB)a=2,b=2C)a=l,b=lD)a=2,b=l(21)有以下程序#include 154,,,y);)程序的运行结果是A)y=0B)y=lC)y=2D)y=3(24)以下错误的定义语句是A)intx[][3]={{0},{1},{1,2,3}};B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={l,2,3,4};(25)设有如下程序段 155chars[20]="Beijing",*p;P=s;则执行p=s;语句后,以下叙述正确的是A)可以用*p表示s[0]B)s数组中元素的个数和p所指字符串长度相等C)s和p都是指针变量D)数组s中的内容和指针变量p中的内容相同(26)若有定义:inta[2][3];,以下选项中对"a数组元素正确引用的是A)a[2][!l]B)a[2][3]C)a[0][3]D)a[l>2][!l](27)有定义语句:char若要从终端给s输入5个字符,错误的输入语句是A)gets(&s[0]);B)scanf("%s",s+1);C)gets(s);D)scanf("%s",s[l]);(28)以下叙述中错误的是A)在程序中凡是以"#"开始的语句行都是预处理命令行B)预处理命令行的最后不能以分号表示结束C)#defineMAX是合法的宏定义命令行D)C程序对预处理命令行的处理是在程序执行的过程中进行的(29)以下结构体类型说明和变量定义中正确的是A)tupedefstrct{intn;charc;}REC;RECtl,t2;B)tupedefstrct{intn;charc;};RECtl,t2;C)tupedefstrctREC;{intn=0;charc-A';}tl,t2;D)strct{intn;charc;}REC;RECtl,t2;(30)以下叙述中错误的是A)gets函数用于从终端读入字符串B)getchar函数用于从磁盘文件读入字符C)fputs函数用于把字符串输出到文件D)iwrite函数用于以二进制形式输出数据到文件(31)有以下程序#include 156H);)程序的运行结果是A)1234B)2344C)4332D)1123(32)有以下程序#include 157M);}程序的运行结果是A)0987654321B)4321098765C)5678901234D)0987651234(33)有以下程序#includc 158心r(i=0;i〈n・l;i++)fbr(j=i+ly 159M,ss[0],ss[4]);)程序的运行结果是A)xy,aaaaccB)aaaacc,xyC)bcc,aabccD)aabcc,bcc(34)有以下程序#include 160M,z);程序的运行结果是A)0B)9C)6D)8(35)有以下程序#include 161",c.name,c.sex,c.score[0],c.score[1]);}程序的运行结果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90(37)有以下程序#includc 162");fclose(fp); 163fp=fopcn(,,dl.datM,"r,');fscanflfp,M%dM,&n);fclose(fp);printf(M%d 164",n);程序的运行结果是A)12300B)123C)1D)321(38)变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高4位取反,低4位不变,所要执行的运算是A)aAbB)a|bC)a&bD)a«4(39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是A)auto和registerB)extem和registerC)auto和staticD)static和register(40)设有定义语句int(*f)(int);,则以下叙述正确的是A)f是基类型为int的指针变量B)f是指向函数的指针变量,该函数具有一个int类型的形参C)f是指向int类型一维数组的指针变量D)f是函数名,该函数的返回值是基类型为int类型的地址二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)测试用例包括输入值集和【1】值集。(2)深度为5的满二叉树有【2】个叶子结点。(3)设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rea『29(指向队尾元素),则该循环队列中共有【3】个元素。(4)在关系数据库中,用来表示实体之间联系的是[4L(5)在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,【5】负责数据的模式定义与数据的物理存取构建。(6)已有定义:charc-,;inta=l,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为[6]。(7)设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为[7]o(8)若有定义:intk;,以下程序段的输出结果是[8】。for(k=2;k<6;k-H-,k++)printf("##%d",k);(9)以下程序的定义语句中,x[l]的初值是【9】,程序运行后输出的内容是【10】。#include 165");*(10)以下程序的输出结果是【11】。#include 166M,*p,*q);}.(ID以下程序的输出结果是【12】。#include 167(12)以下程序的输出结果是【13】。#include 168M);}(13)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。请填空。#includc 169,,,n);)(14)以下程序的功能是从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。#include 170");fclose(fp);}~\选择题(1)C【解析】程序流程图是人们对解决问题的方法、思路或算法的一种描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容,流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流。带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。构成程序流程图的基本图符及含义:一或表示控制流;□表示加工步骤;表示逻辑条件。(2)A【解析】结构化程序设计的原则包括:"自顶而下,逐步求精"的设计思想,"独立功能,单出、入口"的模块化设计等。多态性是面向对象程序语言的特征。(3)B【解析】模块划分应遵循的准则包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即高内聚、低耦合的原则。(4)B【解析】需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等四方面。产生的主要文档为软件需求规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。(5)A【解析】算法具有6个特性:①有穷性:一个算法必须总是(对任何合法的输入值)在执行有穷步之后结束,且每一步都可在有限时间内完成,即运行时间是有限的;②确定性:算法中每一条指令必须有确切的含义,读者理解时不会产生二义性。③可行性:一个算法是可行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。④输入:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。⑤输出:一个算法有一个或多个输出。(6)D【解析】在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都n(n-l)/2,堆排序需要比较的次数为nlog2n。(7)B【解析】在栈中,允许插入与删除的•端称为栈顶,而不允许插入与删除的一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照"先进后出"或"后进先出"的原则组织 171数据的。(8)C【解析】数据库的逻辑设计分为:①将概念模型转换成一般的数据模型;②将一•般的数据模型转换为特定的数据库管理系统所支持的数据模型。把概念模型转换成关系数据模型就是把E-R图转换成•组关系模式。(9)D【解析】在关系运算中,交的定义如下:设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则为交运算,结果仍为度等于n的关系,其中,交i云曾的姑臭屋千RIVpgT-R?(10)C-【解析】"选课SC"曾是"学生S"表和"课程C"表的映射表,主键是两个表主键的组合。(11)C【解析】在C语言中,注释可以加在程序中的任何位置,选项A)错误;C程序可以分模块写在不同的文件中,编译时在将其组合在一起,选项D)错误。C程序的书写风格很自由,不但一行可以写多个语句,还可以将一个语句写在多行中。所以正确答案选C).(12)C【解析】C语言合法标识符的命名规则是:标识符只能由字母、数字和下划线组成,并且第一个字符必须为字母或下划线。因为选项C)中的标识符的第一个字符为所以C)为本题的正确答案。(13)B【解析】在C语言程序中,用单引号把一个字符或反斜线后跟一个特定的字符括起来表示一个字符常量。选项A)、C)和D)为正确的字符常量。而选项B)是用双引号括起来的字符,表示一个字符串常量。所以正确答案为B)。(14)C【解析】求余运算符"%"两边的运算对象必须是整型,而选项B)和D)中"%"两边的运算对象有浮点整数据,所以选项B)和D)是错误的表达式。在选项A)中赋值表达式的两边出现相同的变量x,也是错误的。选项C)是一个逗号表达式,所以正确答案为C)o(15)B【解析】本题考查变量的定义方法。如果要一次进行多个变量的定义,则在它们之间要用逗号隔开。因此选项A)和C)错误。在选项C)中,变量c是一个浮点型指针,它只能指向一个浮点型数据,不能指向指针变量bo所以正确答案为B)。(16)D【解析】输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12。所以选项D)为正确答案。(17)B【解析】C语言的字符以其ASCH码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在A和Z之间就可以了,选项A)和C)符合要求。函数isalpha用来确定一个字符是否字母,大写字母的ASCII码值的范围为65到90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。本题答案选B)。(18)B【解析】满足表达式(6=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和C!=5中至少有一个为真,即不论C为何值,表达式B)都为"真"。正确答案为B)o(19)B【解析】两个if语句的判断条件都不满足,程序只执行了c=a这条语句,所以变量c的值等于3,变量b的值没能变化,程序输出的结果为3,5,3。所以正确答案为B)。(20)D【解析】本题考查了switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的case2:分支。最后a和b的值分别为2和1。(21)D【解析】本题中,程序每执行一次循环x的值减2,循环共执行4次。当x的值为8,4,2时,printf语句先输出x的值,再将x的值减1»而当x为6时,if语句条件成立,程序先将x的值减1,再将其输出。所以输出结果为选项D)。(22)A【解析】选项A)中变量n的值,先自加1,再进行循环条件判断,此时循环条件n<=0不成立,跳出循环。所以正确答案为A。(23)D【解析】在程序中指针变量p初始指向a[3],执行p减1后,p指向a[2],语句产*p的作用是把a[2]的值赋给变量y,所以输出为广3。正确答案为D)。(24)C【解析】本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组的第一维的长度,但是不能省略第二维的长度。故选项C)错误。(25)A【解析】语句p=s的作用是把字符数组s的首地址作为初值赋给了指针变量p,并且使p指向了字符数组s的第一个字符s[0]o(26)D【解析】C语言中数组下标是从0开始的,所以二维数组a⑵[3]的第一维下标取 172值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示是数组元素所以正确答案为D)。(27)D【解析】在格式输入中,要求给出的是变易的地址,而D)答案中给出的s[l]是一个值的表达式。(28)D【解析】C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D)的描述错误。故答案选D)。(29)A【解析】本题考查的是typedef的用法和结构体变量的定义方法。typedef可用于声明结构体类型,其格式为:typedefstruct{结构元素定义}结构类型;本题正确答案为A)。(30)B【解析】getchar函数的作用是从终端读入一个字符。(31)C【解析】在fbr(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2.所以输出结果为选项C)。(32)C【解析】函数fun(int*s,intnl,intn2)的功能是对数组s中的元素进行首尾互相调换。所以在主函数中,当fim(a,0,3)执行完后,数组2[12]={4,3,2』,5,6,7,8,9,0};再执行出11伯,4,9),数组2[12]={4,3,2,1,0,9,8,7,6,5};再执行fiin(a,0,9)后,数组a[12]={5,6,7,8,9,0,l,2,3,4}。所以正确答案另C)o(33)A【解析】函数fiin(char*s[],intn)的功能是对字符串数组的元素按照字符串的长度从小到大排序。在主函数中执行fim(ss,5)语句后,*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"},ss[0],ss[4]的输出结果为xy,aaaacc。所以选项A)为正确答案。(34)C【解析】函数intf(intx)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其它情况下y=x2-f(x-2)o所以在主函数中执行语句z=f(3)时,尸3*3-43-2)=9-出1)=9-3=6。所以正确答案为C)。(35)C【解析】在函数fiin(char*a,char*b)中,while(*a==*)a++的功能是:如果*a的内容为则a指针向后移动,直到遇到非中字符为止,退出循环进入下一个while循环,在while(*b=*a){b++;a++;}中,把字符数组a逐个字符的赋给字符数组b。所以在主函数中,执行ftm(s,t)语句后,字符数组t中的内容为"a*b****",所以选项C)为正确答案。(36)A【解析】本题考查的是函数调用时的参数传递问题。程序在调用函数f时,传给函数f的参数只是结构变量c在栈中的一个拷贝,函数f所做所有操作只是针对这个数据拷贝进行的修改,这些都不会影响变量c的值。(37)B【解析】在函数中首先把整型数组a[10]中的每个元素写入文件dl.dat中,然后再次打开这个文件,把文件dl.dat中的内容读入到整型变量n中,最后输出变量n的值。所以正确答案为B)。(38)A【解析】本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会产生任何变化,故本题答案选A)。(39)A【解析】在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。所以正确答案为A)。(40)B【解析】本题考查的是指向函数的指针。语句int(*f)(int);是对一个函数的声明,其中f是指向该函数的指针,该函数有一个整型的参数,函数返回值类型为整型。故答案选B).二、填空题(1)【1】预期输出【解析】输入数据是指被测试函数所读取的外部数据及这些数据的初始值。预期输出是指:返回值及被测试函数所写入的外部数据的结果值。⑵[2]16【解析】在满二叉树中,叶子结点数目的计算公式为2n-l,其中n为树的深度。(3)[3]24【解析】实现循环队列时,头指针指向第一个元素的前一个空间,尾指针指向最后一个元素。因此,此时队列中6,7,8,...,29这二十四个空间存有元素,即队列中有29-5=24个元素。(4)[4]关系【解析】在关系数据库中,用关系(二维表结构)表示实体及其之间联系的模型称为关系数据模型。(5)[5]数据定义语言【解析】数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,如查询与增、删、改等;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故隙恢复等。(6)[6]1【解析】字符空格的ASCH码不为0,所以本题中表达式!c的值为O,b=O&&l的结果显然为0o 173(7)[7]3【解析】本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔的各表达式的值,整个逗号表达式的值等于其中的最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。(8)[8]##2##4【解析】在fbr循环语句中,自变量k的自增表达式为k++,k++,这是一个逗号表达式,所以输出结果为##2##4。(9)[9]2[10]2468【解析】在主函数中根据整型数组x□的定义可知,x[l]的初值等于2。在fbr循环语句中,当i=0时,p[0]=&x[l],p[0北0]=2;当i=l时,p[l]=&x[3],p"北0>4;当i=2时,p[2]=&x[5],p[2][0]=6;当i=3时,p[3]=&x[7],p[3][0]=8.所以程序输出的结果为2468。(10)[11]35【解・斤】函数swap(int*a,int*b)而有能是实现*a和*b中两个数据的交换,在主函数中调用sw叩(p,q)后,参形指针变量a和b分别指向i和j,在swap(int*a,int*b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为35«(11)[12]4【解析】在主函数中赭句p=a;p++使用指针p指向数组a[l],所以输出结果为4。(12)[13]13【解析】在主函数中调用fun(3)时,实参3传递给形参X。在fun(x)内,执行第一条语句,输出1,然后执行第二条语句,输出3,所以结果为13。(13)[14]person[I].sex【解析】在函数fim(SSperson口)对person]]的性别进行判断,所以其正确的调用格式为person[l].sexo(14)[15]"filea.dat","r"【解析】fbpen函数的调用方式通常为fbpen(文件名,使用文件方式)。本题中要求程序可以打开filea.dat文件,并且是要读取文件中的内容。所以空白处应当填入"filea.dat","r".2012年3月全国计算机等级考试二级C语言上机题库第一套1.程序填空程序通过定义学生结构体数组,存储了若干个学生的学号、姓名和三门课的成绩。函数firn的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大排序)。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。第一■处structstudentt;第二处fbr(i=O;i 174q=p+i;/♦*fbund**/while(q>p)3程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。intfun(STREC*a,STREC*b,intl,inth){intij=O;fbr(i=O;i 1753.程序设计学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写了函数fun,它的功能是:函数返回指定学号的学生数据,指定的学生号在主函数中输入,若没有找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。STRECfun(STREC*a,char*b)(STRECc;Inti;c.num[O]=,\O,;c.s=-l;fbr(i=O;i 1761.程序设计请编写一个函数fim,它的功能是:根据以下公式求JI的值(要求满足精度0.0005,即某项小于0.0005时停止送代):程序运行后,如果输入精度为0.0005,则程序输出为3.14…。doublefun(doubleeps){doubles=l,t=l./3;intn=l;while(t>=eps){s-H=t;n++;t=t*n/(2.0*n+1);)retum(s*2.0);)第六套1.程序填空给定程序中,函数fim的功能是:将形参s所指定字符串中所有的字母字符顺序前移,其他字母顺序后移,处理后字符串的苜地址作为函数值返回。第一处t[j]=s[i];j-H-;第二处fbr(i=0;i 177函数fun的功能是:将a、b中的两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位依次放在变量c的百位和个位上,b中的卜位和个位数依次放在变量c的十位和千位上。#include 178中的值在主函数中赋予。intfun(inta[M][N]){inttot=0,i,j;for(i=O;i
此文档下载收益归作者所有