国家二级(C语言)机试模拟试卷5(共380题)_第1页
国家二级(C语言)机试模拟试卷5(共380题)_第2页
国家二级(C语言)机试模拟试卷5(共380题)_第3页
国家二级(C语言)机试模拟试卷5(共380题)_第4页
国家二级(C语言)机试模拟试卷5(共380题)_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷5(共9套)(共380题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共37题,每题1.0分,共37分。)1、有以下程序:#include<stdio.h>main(){intx[3][3]={1,2,3,4,5,6,7,8,9},i;for(i=1;i<3;i++)printf("%d",x[i][3—i]);}程序运行后的输出结果是()。A、2,4B、6,8C、3,7D、2,6标准答案:B知识点解析:二维数组的起始行标和列标均为O,即x[0][0]=1。当i=1时,for循环判断条件成立,输出x[1][2]=6;此时i自增为2,开始第二次for循环,条件成立,输出x[2][1]=8。故B选项正确。2、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是()。A、并B、交D、除标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R(lS,交运算不改变关系表中的属性个数但能减少元组个数。3、阅读以下程序#includemain(){IntCase;floatprintF;printf("请输入2个数:");scanf("%d%f",&Case,&printF);printf("%d%f\n",Case,printF);}以下说法正确的是()。A、定义语句出错,Case是关键字,不能用作用户自定义标识符,printF不能用作用户自定义标识符.B、定义语句出错,Int无法被识别。C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输Case的值标准答案:B知识点解析:C语言是一种大小写敏感的语言,因此Int应为int,而CaseprintF则可以使用。4、开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。A、软件矛盾B、软件危机C、软件耦合D、软件产生标准答案:B知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了入门难以控制软件发展的局面,即所谓的“软件危机”。5、设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。下列所示的输入形式中正确的是(注:□代表空格字符)()。A、10□X020□Y<CR>B、10□X20□Y<CR>C、10DX<CR>20Y<CR>D、10X<CR>200Y<CR>标准答案:A知识点解析:在使用scanf函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符(Tab键)等间隔符隔开。6、设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。下列所示的输入形式中正确的是(注:□代表空格字符)()。A、10DX□20□YB、10□X20□YC、10□X20YD、10X20□Y标准答案:A知识点解析:在使用scanf函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符(Tab键)等间隔符隔开。7、设x=06l,y=016,则z=x|y的值是()。A、00001111B、11111111C、00111111D、11000000标准答案:C知识点解析:本题主要考查按位或运算,x=061(二进制为00110001),y=016(二进制为00001110),进行或运算后结果为00111111。8、将E—R图转换为关系模式时,实体和联系都可以表示为()。A、属性B、键C、关系D、域标准答案:C知识点解析:从E—R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E—R图中属性也可以转换成关系的属性。9、有以下程序#defineF(X,Y)(X)*(Y)main(){inta=3,b=4;printf(’’%dha’’,F(a++,b++));}程序运行后的输出结果是()。A、12B、15C、16D、20标准答案:A知识点解析:此题考查的是编译预处理命令以及自加运算符。“F(a++,b++)”先取a和b的值,参加运算,再把a和b的值分别加1,所以“F(a++,b++)=F(3,4)=3*4=12”。10、下面选项中不是关系数据库基本特征的是()。A、不同的列应有不同的数据类型B、不同的列应有不同的列名C、与行的次序无关D、与列的次序无关标准答案:A知识点解析:在关系数据库中,二维表由行数据组成,每行数据包含若干属性值,每个属性都有指定的类型和取值范围。数据行数是有限的,每行数据互不相同(元组唯一性),每行的次序可以任意交换(元组的次序无关性);表中属性名(列各)各不相同即字段名不重复,属性名(列名)次序可任意交换。故本题答案为A选项。11、有以下程序#include<stdio.h>#defineS(x)4*(x)*x+1main(){intk=5,j=2;printf("%d\n",S(k+j));}程序运行后的输出结果是A、33B、197C、143D、28标准答案:C知识点解析:本题考查带参数的宏定义,S为带参数的宏定义,运行S(k+j)为4*(k+j)*k+j+1=143,选项C正确。12、下面结构体的定义语句中,错误的是()。A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;标准答案:A知识点解析:分号代表该结构体定义语句的结束,选项A)的结构体没有定义完全就用该结构体另外定义变量,用法有误,所以答案选A)。13、在三级模式之间引入两层映像,其主要功能之一是()。A、使数据与程序具有较高的独立性B、使系统具有较高的通道能力C、保持数据与程序的一致性D、提高存储空间的利用率标准答案:A知识点解析:数据库管理系统在数据库的三级模式之问提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。14、若a、b、c、d都是int型变量且都已经正确赋初值,则以下不正确的赋值语句是()。A、a+d;B、a++;C、a=b=c=d=100;D、a=(b=3)+(d=5);标准答案:A知识点解析:C语言规定,赋值号的右边可以是一个赋值表达式,因此选项C、选项D正确;在选项B中,a++是一个自加1的表达式,a被重新赋值,因此它是一个合法的赋值表达式;选项A中,a+d是一个算术表达式,虽然最后有一个分号,但这个表达式中没有赋值操作,因此它不是一条赋值语句。15、下列关于C语言文件的叙述中正确的是()。A、文件由一系列数据依次排列组成,只能构成二进制文件B、文件由结构序列组成,可以构成二进制文件或文本文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:本题考查文件的概念,文件是由数据序列组成,可以构成二进制文件或文本文件,所以答案为C选项。16、若有以下定义:intx[10],*pt=x;则对x数组元素的正确引用是()。A、pt+3B、*&x[10]C、*(pt+10)D、*(x+3)标准答案:D知识点解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。因此D选项正确。17、有以下程序#include<stdio.h>voidfun1(char*p){char*q;q=p;while(*q!=’\0’){(*q)++;q++;}}main(){chara[]={"Program"},*p;p=&a[3];fun1(p);printf("%s\n",a);}程序执行后的输出结果是A、PrphsbnB、ProhsbnC、ProgsbnD、Program标准答案:B知识点解析:(*q)++是q所指的字符加1,q++就是指针移到下一个字符。因此B选项正确。18、下列关于栈的叙述正确的是()。A、栈按"先进先出"组织数据B、栈按"先进后出"组织数据C、只能在栈底插入数据D、不能删除数据标准答案:B知识点解析:栈是按照"先进后出"的原则组织数据的,只能在栈顶插入或删除数据,所以选择B)。19、有以下程序#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=2;i++)s=fun();printf("%d\n",s);}程序运行后的输出结果是A、0B、1C、4D、8标准答案:C知识点解析:fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用时仍可保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。主函数中调用两次fun函数:第一次调用:x=1,x=x*2=2,s=2;第二次调用:(直接用上次x的值)x=x*2=4,s=4。因此C选项正确。20、若变量已正确定义,则以下for循环():for(x=0,y=0;(y!=123)&&(x<4);x++);A、执行4次B、执行3次C、执行次数不确定D、执行123次标准答案:A知识点解析:循环判断语句为"(y!=123)&&(x<4)”,必须同时满足"y!=123"和"x<4"这两个表达式,循环才会继续。因此,当x=4时,循环终止,for循环共执行4次。21、有以下程序:#include<stdio.h>voidfun(char**p){++p:printf(’’%s\n’’,*p);}main(){char*a[]={’’Morning’’,’’Afternoon’’,’’Evening’’,’’Night’’};fun(a);}程序运行后的输出结果是()。A、AfternoonB、fternoonC、MorningD、oming标准答案:A知识点解析:本题主函数中定义了一个指针数组a,可以将它看成一个以字符指针为元素的一维数组。和一般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名a可以用做函数fun()的实参。在fun()函数中,++p操作使形参p往后移动一个字符指针的位置,即指针a[1]的位置。故最后通过printf()函数输出的字符串为“Afternoon”。因此A选项正确。22、有以下程序:#include#includemain(){charW[20],a[5][10]={"abcdef","ghijkl","mnopq",’rstuv","wxyz."};inti;for(i=0;i<5;i++)w[i]=a[i][strlen(a[i])-1];w[5]=’\0’;puts(w);}程序的运行结果是()。A、flqv.B、agmrwC、ekpuyD、flqvz标准答案:A知识点解析:puts()函数将数组中存放的字符串输出,用"\n"取代字符串结束符"\0"。strlen()函数求字符串的实际长度(不包含结束标志)。程序中for循环将第i个字符串最后一个字符放入w数组下标值为i的位置。最后将数组最后一个字符赋值为“\0”,输出字符串w为flqv.。23、有关线性链表的叙述中正确的是()。A、进行插入与删除时,不需要移动表中的元素B、各数据节点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、各数据节点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致D、以上说法均不正确标准答案:A知识点解析:链表的特点是通过指针链接下一个元素,所以它们的存储顺序和逻辑关系也不一致,但进行插入与删除时,不需要移动表中的元素,只需要改变下一个节点的指针就可以了。24、若有以下程序#include<stdio.h>voidsp(int*a){intb=2;*a=*a*2;printf("%d,",*a);a=&b;*a=*a*2;printf("%d,",*a);}main(){intk=3;sp(&k);printf("%d\n",k);}则程序的输出结果是A、6,12,12B、6,4,3C、6,4,6D、9,4,9标准答案:C知识点解析:首先在主函数中给整型变量k赋值为3,调用sp函数,将变量k的地址作为实参传递给形参指针变量a;在sp函数中,*a=*a*2;即结果为6,通过printf()函数输出。整型变量b的地址赋给指针变量a,再执行*a=*a*2;,即结果为4,通过printf()函数输出。返回主函数,输出k的值6。因此C选项正确。25、软件设计中模块划分应遵循的准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。26、有以下程序#include<stdio.h>main(){intk,j,s;for(k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++)s+=j;}printf("%d\n",s);}程序运行后的输出结果是A、6B、10C、24D、40标准答案:B知识点解析:本题重点考察for语句循环嵌套,首先k=2,进行一次循环后,k自增两次,变成4,这时s为1。即当k=4的时候,s=1,j=4,执行内层循环,s=1+4,j自增1后等于5,s=5+5,j再自增1后即为6,跳出内层循环。k自增两次后等于6,不成立,跳出外层循环。最后输出s的值,即为10。因此B选项正确。27、若有以下程序段structst{intn;structst*next;};structsta[3]={5,&a[1],7,&a[2],9,’\0’},*p;p=&a[0];则以下选项中值为6的表达式是A、p->nB、(*p).nC、p->n++D、++(p->n)标准答案:D知识点解析:本题考查结构体变量的引用,其中a为定义的结构体数组,D选项中p->n为5,++(p->n)为6,所以D选项正确。28、下列与队列结构有关联的是A、函数的递归调用B、数组元素的引用C、多重循环的执行D、先到先服务的作业调度标准答案:D知识点解析:队列的修改是依先进先出的原则进行的,D正确。29、关于数据结构的存储原理,以下数据类型不能采用顺序存储结构的是()。A、栈B、堆C、循环队列D、非完全二叉树标准答案:D知识点解析:栈、堆和队列都可以采用顺序存储结构存储,但对于二叉树来说,只有完全二叉树和满二叉树可以进行顺序存储,一般二叉树不适用。30、若有定义:charc;intd;,程序运行时输入:1,2<回车>,能把值1输入给变量c、值2输入给变量d的输入语句是A、scanf("%c,%d",&c,&d);B、scanf("%c%d",&c,&d);C、scanf("%d,%f",&c,&d);D、scanf("%d%d",&c,&d);标准答案:A知识点解析:scanf函数的调用格式为:scanf(格式控制串,地址列表);,格式控制串,由%开头,后跟格式字符,如c对应字符型变量,d对应整型变量。地址表列需要读入的是所有变量的地址或字符串的首地址。如果除了格式说明字符和附加格式字符外,如果还有其他字符,则在输入数据时要求按一一对应的位置原样输入这些字符,比如两个格式说明之间有一个逗号,则从键盘输入时输入量之间也应照原样输入逗号。A选项正确。31、下列选项中,不属于数据模型所描述的内容的是()。A、数据类型B、数据操作C、数据结构D、数据约束标准答案:A知识点解析:数据模型描述的内容包含数据结构、数据操作和数据约束。32、以下选项中叙述正确的是A、文件指针是指针类型的变量B、文件指针可同时指向不同文件C、文件指针的值是文件在计算机磁盘中的路径信息D、调用fscanf函数可以向文本文件中写入任意字符标准答案:A知识点解析:所谓文件指针,实际上是指向一个结构体类型的指针变量,这个结构体中包含有文件的一些信息,如缓冲区的地址,在缓冲区中当前存取的字符的位置,对文件是"读"还是"写",是否出错,是否已经遇到文件结束标志等信息。文件指针本身是指针类型的变量,A选项正确。一个指针在同一时间只能指向一个文件,B选项错误。文件指针是指针变量,存储的是文件缓存区首地址,而不是文件在计算机磁盘中的路径信息,C选项错误。fscanf函数从文本文件中按格式读入到程序中,而不是向文本文件中写入数据,D选项错误。33、以下程序运行后的输出结果是()。#include<stdio.h>main()voidreverse(inta[],intn){intb[10]={10,9,8,7,6,5,4,3,2,1};inti,s=0;{inti,t;reverse(b,10);for(i=0;i<n/2;i++)for(i=0;i<3;i++)s+=b[i];{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;}}printf("%d\n",s);}A、27B、6C、25D、30标准答案:B知识点解析:本题考查函数调用时的参数传递。函数reverse将数组b进行了逆置,此时b[10]={10,9,8,7,6,5,4,3,2,1},后面for语句的功能是将b中的后3个数累加,并将结果放在s中,最后将s输出,结果s=1+2+3=6。34、关于地址和指针,以下说法正确的是A、通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量B、可以取一个常数的地址赋值给同类型的指针变量C、可以取一个表达式的地址赋值给同类型的指针变量D、可以取一个指针变量的地址赋值给基类型相同的指针变量标准答案:A知识点解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这样做,编译会出错,B选项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C选项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D选项错误。故答案为A选项。35、设某二叉树的前序序列与中序序列均为ABCDEFGH,则该二叉树的后序序列为A、HGFEDCBAB、EFGHABCDC、DCBAHGFED、ABCDEFGH标准答案:A知识点解析:二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。二叉树的前序序列与中序序列相同,说明此树结点没有左子树,且第一个节点A为根节点,而后序遍历中根节点应在最后被访问,即节点A在最后出现,由此推断出后序遍历为HGFEDCBA,故A选项正确.36、若要建立下图所示的存储结构,以下正确的程序段是()。A、char**q,*p,c;p=&c;q=&p;B、char**q,*p,c;p=&c;q=*p;C、char*q,*p,c;p=&c;*q=p;D、char*q,*p,c;q=p;p=*c;标准答案:A知识点解析:由图示可知,c是个普通变量,p指向c,因此p是指针,且p=&c,q指向p,但是p也是指针,因此q是指向指针的指针,q=&p,因此定义是int**q,*p,c,q=&p,p=&c,因此答案为A选项。37、若x=4,y=5,则x&y的结果是()。A、0B、4C、3D、5标准答案:B知识点解析:本题主要考查按位与运算的知识点。按位与是对两个运算量相应的位进行逻辑与,“&”的规则和逻辑与“&&”相同。x=4的二进制为00000100,y=5的二进制为00000101,x&y=00000100,转化为十进制即为4。二、程序填空题(本题共1题,每题1.0分,共1分。)38、下列给定程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回剩余字符串的个数。SS所指字符串数组中共有N个字符串,且串长小于M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/*********found*********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/*********found*********/if(len<=【2】)/*********found*********/strcpy(ss[j++],【3】);}returnj;}voidmain(){charx[N][M]={"Beijing","Shanghai","Tianjin","Nanjing","Wuhan");inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);printf("Thestringwitchlengthislessthanorequalto7:\n");for(i=0;i<f;i++)puts(x[i]);printf("\n");}标准答案:(1)N(2)k(3)ss[i]知识点解析:本题考查:for循环语句;if语句条件表达式;字符串复制函数strcpy的使用。填空1:for循环语句的作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i<N。填空2:题目要求删除串长度大于k的字符串,所以if条件语句的条件表达式是len<=k。填空3:通过字符串复制函数将串长不大于k的字符串另存,并记录个数。字符串复制函数strcpy,其格式为:strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串复制到字符数组1中。字符串结束标识‘\0’也一同复制。字符数组名2,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。三、程序修改题(本题共1题,每题1.0分,共1分。)39、下列给定程序中函数fun的功能是:将字符串中的字符逆序输出,但不改变字符串中的内容。例如,若字符串为“abed”,则应输出:“deba”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>/**********found***********/voidfun(chara){if(*a){fun(a+1);/**********found***********/printf(“%c”*a);}}main(){chars[10]=“abcd”;printf(“处理前字符串=%s\n,处理后字符串=”,s);fun(s);printf(“\n”);}标准答案:(1)voidfun(char*a)(2)prinff(“%c”,*a);知识点解析:(1)定义函数时形参的类型要与凋用函数中实参的类型一致,主函数中fun传递的是字符串s的首地址,所以此处形参应为指针类型。(2)根据prinff函数格式,很容易找到错误之处。四、程序设计题(本题共1题,每题1.0分,共1分。)40、请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求11的值不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>doublefun(intn){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%1f\n",s);}fclose(rf);fclose(wf);}main(){intn;doubles;printf("\nInputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n",s);NONO();}标准答案:inti;doublesum=0.0;for(i=1;i<=n;i++)if(i%5==0||i%9==0)/*被5或9整除*/sum+=1.0/i;returnsum;知识点解析:(1)首先,通过循环,判断小于等于n的每一个整数是否符合题干中的要求。其中的判断条件能否被5或者被9整除为i%5==0‖i%9==0。(2)然后求得符合(1)要求的数的倒数的累加和。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共38题,每题1.0分,共38分。)1、下列关于C语言文件的叙述中正确的是()。A、文件由一系列数据依次排列组成,只能构成二进制文件B、文件由结构序列组成,可以构成二进制文件或文本文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:C语言将文件看作是一个字符(字节)的序列,即由一个一个字符(字节)数据顺序组成。根据数据的组成形式,可将文件分为两种:①ASCII文件,又称文本(text)文件,它的每一个字节可放一个ASCII码,代表一个字符;②二进制文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。所以C文件就是一个字节流或一个二进制流。2、程序流程图中带有箭头的线段表示的是()。A、图元关系B、数据流C、控制流D、调用关系标准答案:C知识点解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C。3、软件设计中模块划分应遵循的准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。4、下面关于数据库三级模式结构的叙述中,正确的是()。A、内模式可以有多个,外模式和模式只有一个B、外模式可以有多个,内模式和模式只有一个C、内模式只有一个,模式和外模式可以有多个D、模式只有一个,外模式和内模式可以有多个标准答案:B知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。5、对于一个正常运行的C程序,下列叙述中正确的是()。A、程序的执行总是从main函数开始,在main函数结束B、程序的执行总是从程序的第一个函数开始,在main函数结束C、程序的执行总是从main函数开始,在程序的最后一个函数中结束D、程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束标准答案:A知识点解析:一个C语言源程序无论包括了多少函数,总是从main函数开始执行,从main函数结束。6、以下叙述中正确的是()。A、C语言规定必须用main作为主函数名,程序将从此开始执行B、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C、C语言程序将从源程序中第一个函数开始执行D、mmn的各种大小写拼写形式都可以作为主函数名,如MAIN,Main等标准答案:A知识点解析:C语言中的主函数只能是main()函数,不能任意指定,所以B选项错误。C语言从主函数main()开始,到主函数main()结束,所以C选项错误。主函数必须写成小写的main,不能混淆大小写,所以D选项错误。7、有以下程序:main(){intn=O;do{n++;printf("%d\n",n);}while(n<=3);}程序的输出结果是()。A、12B、123C、1234D、1标准答案:C知识点解析:本题考查do…while循环。在do…while构成的循环体中,总是先执行一次循环体,然后再求表达式的值。当执行完第三次循环时.得到n=3.while循环表达式仍然成立,接着执行直到n=4,表达式不成立,跳出循环,结束程序。8、下面结构体的定义语句中,错误的是()。A、structord{intx;inty;intz;}structorda;B、structord{intx;inty;intz;};structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;标准答案:A知识点解析:A)选项structord{intx;inty;intz;}structorda;错误,不能在定义结构体的同时,又用结构体类型名定义变量。应该写成B)选项或者D)选项的格式。9、对下列二叉树进行前序遍历的结果为()。A、ABCDEFGHB、ABDGEHCFC、GDBEHACFD、GDHEBFCA标准答案:B知识点解析:遍历就是不重复地访问一叉树的所有结点。二叉树遍历的方法有3种:前序遍历、中序遍历和后序遍历。记住3种遍历的顺序:①前序,访问根→按前序遍历左子树→按前序遍历右子树:②中序,按中序遍历左子树→访问根→按中序遍历右子树;③后序,按后序遍历左子树→按后序遍历右子树→访问根。所以对该二叉树的中序遍历结果为ABDGEHCF。10、设变量已正确定义并赋值,以下正确的表达式是()。A、x=y+z+5,++yB)int(15.8%5)B、x=y*5=x+zC、x=25%5.0标准答案:A知识点解析:B与D选项中取模运算符%的左右两个操作数均应为整数,所以B、D错误。C选项中不能将x+y的值赋给表达式y*5,所以C错误。11、以下选项中,当x为大于1的奇数时,值为0的表达式为()。A、x%2==1B、x/2C、x%2!=0D、x%2==0标准答案:D知识点解析:当x为大于1的奇数时,x对2求余的结果为1,不为0,所以选项D中表达式的值为0。12、下面4个关于C语言的结论中错误的是()。A、可以用do…while语句实现的循环一定可以用while语句实现B、可以用for语句实现的循环一定可以用while语句实现C、可以用while语句实现的循环一定可以用for语句实现D、do…while语句与while语句的区别仅是关键字“while”出现的位置不同标准答案:D知识点解析:本题考查几个循环语句的关系。①do…while语句、while语句、for语句所实现的循环可以相互替代;②do…while语句和while语句的区别是do…while语句至少执行一次,再判断循环条件,while语句是先判断条件再执行。13、有以下程序:#includemain()charc[2][5]={"6934","8254"},*p[2]inti,j,s=0;for(i=0;i<2;i++)P[i]=c[i];for(i=0;i<2;i++)for(j=0;P[i][j]>0&&P[i][j]<=’9’;j+=2)s=10*s+P[i][j]-’0’;pfintf("%d\n",s);}程序的输出结果是()。A、693825B、69825C、63825D、6385标准答案:D知识点解析:本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的4个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。14、有以下程序:#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;m=s[0][k]:for(i=1;i<n;i++)if(s[i][k]>m)m=s[i][k]:returnm;}main(){inta[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34}};printf("%d\n",fun(a,4,0));}程序运行的结果是()。A、4B、34C、31D、32标准答案:C知识点解析:函数fun通过数组指针引用二维数组,其作用是遍历s[1][k]~s[n一1][k],找出数组中最大的元素。15、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序标准答案:D知识点解析:在最坏的情况下,堆排序需要比较的次数为O(nlog2n),所以选择D)。16、数据库管理系统是()。A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。17、有以下程序:#include<stdio.h>main(){inti=5;do{if(i%3==1)if(i%5==2){printf("*%d",i);break;}i++:}while(i!=0);printf("\n");}程序运行后的输出结果是()。A、*2*6B、*3*5C、*5D、*7标准答案:D知识点解析:do…while语句是先执行后判断,所以第一次先执行循环体,判断i%3==1的条件,由于i为5,所以余数为2,条件不成立,执行i++,i的值为6,判断while条件为真;第二次执行循环体,同第一次循环的执行过程一样,i的值变为7,判断while条件为真;第三次执行循环体,此时i%3==1,条件成立,再判断i%5==2也成立,打印*与i的值,即*7,然后执行break语句,跳出循环。所以选择D选项。18、若有以下定义:intx[10],*pt=x;则对x数组元素的正确引用是()。A、pt+3B、*&x[10]C、*(pt+10)D、*(x+3)标准答案:D知识点解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误,最大只能引用到x[9]。*(pt+i)表示引用指针pt所指元素后的第i个元素,所以c选项错误,最大只能为*(pt+9)。因此D选项正确。19、以下描述中,不是线性表顺序存储结构特征的是()。A、可随机访问B、需要连续的存储空间C、不便于插入和删除D、逻辑相邻的数据物理位置上不相邻标准答案:D知识点解析:线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。20、设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为()。A、23,13,51,57,66,26,81,69,76B、13,23,26,51,57,66,81,76,69C、23,13,51,57,26,66,81,69,76D、23,13,51,57,81,26,66,69,76标准答案:A知识点解析:快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。21、对于一个正常运行的C程序,下列叙述中正确的是()。A、程序的执行总是从main函数开始,在main函数结束B、程序的执行总是从程序的第一个函数开始,在main函数结束C、程序的执行总是从main函数开始,在程序的最后一个函数中结束D、程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束标准答案:A知识点解析:一个C语言源程序无论包括了多少函数,总是从main函数开始执行,从main函数结束。22、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是()。A、必须是逻辑值B、必须是整数值C、必须是正数D、可以是任意合法的数值标准答案:D知识点解析:if语句中的表达式可以是任意合法的数值,如常量,变量表达式。所以D选项正确。23、有以下程序:#include<stdio.h>main(){inta=2,b;b=a<<2;printf("%d\n",b);}程序运行后的输出结果是()。A、2B、4C、6D、8标准答案:D知识点解析:本题考查位运算符,题目中将a向左移两位,左移两位表示乘以4,所以答案为8,选项D正确。24、以下选项中,合法的C语言常量是()。A、21.84B、’CPPC、’\1.0D、2MB标准答案:A知识点解析:21.84是浮点型常量,A项正确;字符常量是单引号括起来的一个字符,字符串常量是双引号括起来的字符序列,BC两项错误;C语言常量不能直接用未加引号的字母、数字组合,D项错误。25、在下列叙述中,错误的是()。A、C语言中,二维数组或多维数组是按行存放的B、赋值表达式b[1][2]=a[2][3]是正确的C、chara[1];a[0]=’A’与inta[1];a[0]=’A’等价D、数组名后的方括号内可以为常量表达式,也可以为变量标准答案:D知识点解析:本题考查数组的4个知识点:①C语言中,二维数组或多维数组元素排列的顺序是按行存放;②不同数组的元素之间可以相互赋值;③字符型数组中存放的是字符,int型数组中存放的是字符对应的ASCII码值,虽然在计算机内部字符常量都是作为整型量来处理的,其对应的整数值就是ASCII码值,但两者并不完全等价;④数组名后的方括号内可以为常量,也可以为常量表达式,但不可以为变量。26、下列选项中,能正确定义数组的语句是()。A、intBum[0..2008];B、intnum[];C、intN=2008;intnun[N];D、#defineN2008intRum[N];标准答案:D知识点解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。因此D选项正确。27、黑盒测试用例的主要根据是()。A、算法合理性B、程序外部功能C、相关数据结构D、程序流程图标准答案:B知识点解析:黑盒测试主要是对软件的功能进行测试和验证,因此不用测试软件内部的相关内容,包括算法、数据结构和流程等。28、对建立良好的程序设计风格,下面描述正确的是()。A、程序应简单、清晰、可读性好B、符号名的命名只要符合语法C、充分考虑程序的执行效率D、程序的注释可有可无标准答案:A知识点解析:程序设计应该简单易懂,语句结构应该简单直接,不应该为提高效率而把语句复杂化。29、下列关于C语言数据文件的叙述中正确的是()。A、文件由ASCⅡ码字符序列组成,C语言只能读写文本文件B、文件由二进制数据序列组成,C语言只能读写二进制文件C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件标准答案:B知识点解析:本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地址,第一次for循环,p=a,p指向数组的第一个元素,*p是取指针p所指地址的内容,输出p;第二次for循环,p=p+2,则p指向数组的第三个元素,*p是取指针p所指地址的内容,输出o;第三次for循环,p=p+2,则p指向数组的第5个元素,*p是取指针p所指地址的内容,输出r;第四次for循环,p=p+2,则p指向数组的第7个元素,*p是取指针p所指地址的内容,输出m;结束循环。30、有以下C语言程序:#includevoidmain(){charch1,ch2;ch1=’R’+’5’一’2’;ch2=’R’+’5’一’1’3;printf(’’%c,%d\n’’,ch1,ch2);}已知字母R的ASCⅡ码为82,程序运行后的输出结果是()。A、U,84B、T,83C、U,TD、T,U标准答案:A知识点解析:本题中将字符进行整数运算,其实是使用字符的ASCⅡ码进行运算,运算后ch1和ch2的ASCⅡ码将为82+3和82+2,注意在程序输出时用的格式是%c%d,因此,chi1输出字符U(ASCⅡ码为85),字符ch2输出为整数,即84。31、有以下程序:#includeintfun(intn);main(){inta=3,s;s=fun(a);s=s+fun(a);printf(’’%d\n’’,s);}intfun(intn){staticinta=1:n+=a++;returnn;}程序运行后的输出结果是()。A、17B、8C、9D、26标准答案:C知识点解析:静态局部变量只在第一次调用函数时初始化一次,其他调用都会保留上一次调用结束时的值。第一次调用时将fun(a)的返回值赋给s,静态局部变量初始化为1,所以n=4并返回,a自增为2:第二次调用时静态局部变量a取上一次调用结束时的值2,所以n=5并返回,a自增为3。所以s=4+5=9。32、有以下程序:#lnclude#defineF(x)(x/x)*xmain(){intk=4,j=2;printf(’’%d,%d\n’’,F(k+j),F((j+k)));}程序运行后的输出结果是()。A、26,6B、28,6C、6,6D、26,26标准答案:A知识点解析:宏定义一定要先代入再计算,本题中F(k+j)、F(j+k)可以替换为:F(k+j)=(k+j/k+j)*k+j=(4+2/4+2)×4+2=26;F((j+k))=((j+k)/(j+k))*(j+k)=6。33、以下关于return语句的叙述中不正确的是()。A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、如果一个函数有多个return语句,那么不论运行到哪一个return语句,该函数将结束D、没有return语句的自定义函数在执行完最后一条语句时返回到调用处标准答案:A知识点解析:return语句主要用于返回函数的值。在一个自定义函数中,可以根据小同的情况设置多条return语句返回函数的值,也可以不包含return语句。34、有以下程序#include<stdio.h>#defineN4voidfun(inta[][N]){inti;for(i=0;i<N;i++)a[0][i]+=a[N-1][N-1-i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i;fun(x);for(i=0;i<N;i++)printf("%d,",x[i][i]);printf("\n");}程序运行后的输出结果是A、4,7,10,13,B、1,6,11,16,C、17,6,11,16,D、5,13,21,29,标准答案:C知识点解析:N=4,for(i=0,i<N,i++)printf(x[i][j]);此语句输出x[0][0],x[1][1],x[2][2],x[3][3],其中只有x[0][0]的值在fun函数中发生改变,在fun函数中,当i=0时,x[0][0]=x[0][0]+x[3][3]=17,程序运行后的输出结果是:6。因此答案为C选项。35、有以下程序#include<stdio.h>main(){inti;FILE*fp;for(i=0;i<3;i++){fp=fopen("res.txt","w");fputc(’K’+i,fp);fclose(fp);}}程序运行后,在当前目录下会生成一个res.txt文件,其内容是A、EOFB、MC、KLMD、L标准答案:B知识点解析:for循环中,每次都执行打开文件res.txt、写入文件、再关闭文件的操作,由于fopen函数使用’w’模式写文件,所以每次打开res.txt后,都删除文件中的原有数据,再重新写入新数据。所以文件最终的内容只与最后一次for循环有关,最后一次for循环是向文件res.txt写入’K’+2,即M,正确答案是B选项。36、以下不是合法C语言转义字符的是A、’\c’B、’\a’C、’\b’D、’\r’标准答案:A知识点解析:C语言中,’\a’表示响铃,’\b’表示退格,’\r’表示回车不换行,故答案为A选项。37、若某二叉树中的所有结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是A、前序序列B、中序序列C、后序序列D、以上说法均可以标准答案:B知识点解析:二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。由于结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,那么只要遍历时访问根结点在访问左子树和右子树之间,遍历序列有序,即中序序列有序。故选B选项38、设有定义:intx[10],*p=x,i;,若要为数组x读入数据,以下选项正确的是A、for(i=0;i<10;i++)scanf("%d",p+i);B、for(i=0;i<10;i++)scanf("%d",*p+i);C、for(i=0;i<10;i++)scanf("%d",*(p+i));D、for(i=0;i<10;i++)scanf("%d",x[i]);标准答案:A知识点解析:C语言声明scanf("<格式化字符串>",<地址表>);可知scanf()的第二个参数是地址,因此,从四个答案中可以判断,只有选项A是p[i]的地址,其他的均是变量本身。故答案为A选项。二、程序填空题(本题共1题,每题1.0分,共1分。)39、下列给定程序中,函数fun的功能是:计算N×N矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。要求先累加主对角线元素中的值,再累加反向对角线元素中的值。例如,若N=3,有下列矩阵:123456789首先累加1、5、9,然后累加3、5、7,函数返回值为30。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#defineN43fun(intt[][N],intn)4{5inti,sum;6/*********found*********/7【1】;8for(i=0;i<n;i++)9/*********found*********/10sum+=【2】;11for(i=0;i<n;i++)12/*********found*********/13sum+=t[i][n-i-【3】];14returnsum;15}16main()17{18inti,j,t[][N]={21,2,13,24,25,16,47,38,29,11,32,54,42,21,3,10};19printf("\nTheoriginaldata:\n’’);20for(i=0;i<N;i++)21{22for(j=0;j<N;j++)23printf(’’%4df’’,t[i][j]);24printf(’’\n’’);25}26printf(’’Theresultis:%d’’,fun(t,N));27}标准答案:(1)sum=0(2)t[i][i](3)1知识点解析:填空1:变量sum用来储存“和”结果,所以将其初始化为0。填空2:从题目中可以了解到,主对角线元素的行和列下标是相同的,所以应填入t[i][i]。填空3:对于反向对角线元素的行和列的下标,它们的关系是相加和为n-1,所以应填入1。三、程序修改题(本题共1题,每题1.0分,共1分。)40、下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<conio.h>3#include<stdlib.h>4typedefstructaa5{intdata;6structaa*next;7}NODE;8intfun(NODE*h)9{intsum=0;10NODE*p;11p=h->next;12/*********found*********/13while(p->next)14{if(p->data%2==0)15sum+=p=>data;16/*********found*********/17p=h->next;18}19returnsum;20}21NODE*creatlink(intn)22{23NODE*h,*p,*s;24inti;25h=p=(NODE*)malloc(sizeof(NODE));26for(i=:1;idata=rand()%16;30s->next=p->next;31p->next=s;32p=p->next;33}34p->next=NULL;35returnh;36}37outlink(NODE*h)38{NODE*p;39p=h->next;40printf(’’\n\nTheLIST:\n\nHEADH’’);41while(p)42{printf(’’->%d’’,p->data);43p=p->next;)44printff(’’\n’’);45}46voidmain()47{NODE*head;intsum;48system(’’CLS’’);49head=creatlink(10);50outlink(head);51sum=fun(head);52printf(’’\nSUM=%d’’,sum);53}标准答案:(1)while(p!=NULL)(2)p=p->next;知识点解析:(1)判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作。(2)判断结束后指针指向下一个结点。四、程序设计题(本题共1题,每题1.0分,共1分。)41、请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出”YES”,否则返回0,主函数中输出”NO”。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2#defineN803intfun(char*str)4{56}7main()8{9chars[N];10FILE*out;11char*test[]={’’1234321’’,’’123421’’,’’123321’’,’’abcdCBA’’};12inti;13printf(’’Enterastring:’’);14gets(s);15printf(’’\n\n’’);16puts(s);17if(fun(s))18printf(’’YES\n’’);19else20printf(’’NO\n’’);21/*****************/22out=fopen(’’out.dat’’,’’w’’);23for(i=0;i<4;i++)24if(fun(test[i]))25fprintf(out,’’YES\n’’);26else27fprintf(out,’’NO\n’’);28fclose(out);29/*****************/30}标准答案:1intfun(char*str)2{3inti,n=0,fg=1;4char*p=str;5while(*p)/*将指针p置位到字符串末尾,并统计字符数*/6{7n++;8p++;9}10for(i=0;i知识点解析:判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、数据管理技术发展的三个阶段中,()没有专门的软件对数据进行管理。I.人工管理阶段II.文件系统阶段III.数据库阶段A、仅IB、仅IIIC、I和IID、II和III标准答案:A知识点解析:数据管理技术发展的三个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统.即数据库管理系统。2、下面程序的运行结果是()。#include<stdio.h>main(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elseprintf("#");}}A、*#*#*B、#*#*#*C、*#*#D、#*#*标准答案:A知识点解析:分析程序可知,程序循环5次,然后利用if语句决定每次循环时输出的字符。当i为奇数时,i%2=1,if(i%2)为真,输出“*”:当j为偶数时,i%2=0,if(i%2)为假,执行else语句,输出“#”,所以当i取1、3、5值时输出“*”,当i取2、4值时输出“#”。3、请阅读以下程序:#include#includevoidfun(intb[]){staticinti=0;do{b[i]+=b[i+1];}while(++i<2);)main(){intk,a[5]={1,3,5,4,9};fun(a);for(k=0;k<5;k++)printf("%d",a[k]);}上面程序的输出是()。A、13579B、48579C、48549D、48999标准答案:C知识点解析:本题考查的是for循环以及while循环。fun函数中定义了静态变量i=0,fun(a)使得a[0]=a[0]+a[1]=4,a[1]=a[1]+a[2]=8,此时i的值变为1,++i<2不成立,所以do-while循环结束,输出数组a的各元素即得到48549。4、下列二叉树描述中,正确的是()。A、任何一棵二叉树必须有一个度为2的结点B、二叉树的度可以小于2C、非空二叉树有0个或1个根结点D、至少有2个根结点标准答案:B知识点解析:二叉树是由n≥0个结点的有限集,合构成,此集合或者为空集,或者由一个根结点及两棵互不相交的左右子树组成,并且左右子树都是二叉树。二叉树可以是空集合,根可以有空的左子树或空的右子树。二叉树不是树的特殊情况,它们是两个概念。二叉树具有如下两个特点:①非空二叉树只有一个根结点。②每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。5、有以下程序:#includemain(){intx,y,z;x=y=1;z=x++,y++,++y;printf(“%d,%d,%d\n”,x,y,z);}程序运行后的输出结果是()。A、2,3,3B、2,3,2C、2,3,1D、2,2,1标准答案:C知识点解析:z=x++,y++.++y;因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式表示成(z=x++),(y++),(++y)。然后从左向右先计算表达式z=x++,因为x++先使用后自增,所以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为2,最后计算第三个表达式++y,y的值为3。6、以下叙述中不正确的是()。A、在不同的函数中可以使用相同的名字的变量B、函数中的形式参数是局部变量C、在一个函数内定义的变量只在本函数范围内有效D、在一个函数内的复合语句中定义的变量在本函数范围内有效标准答案:D知识点解析:此题考查的是变量的作用范围。选项D)中,在一个函数的复合语句中定义的变量是局部变量,只在定义此变量的复合语句内有效,并不是在整个函数体内都有效。7、下列选项中,能正确定义数组的语句是()。A、intnum[0..2008];B、intnum[];C、intN=2008;D、#deftneN2008intBum[N];intBum[N];标准答案:D知识点解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。因此D选项正确。8、下面程序的运行结果是()。#include#includemain(){char*s1="abDuj";char*s2="ABdUG":intt;t=strcmp(s1,s2);printf("%d",t);}A、正数B、负数C、零D、不确定的值标准答案:A知识点解析:本题考查字符串比较函数和字符串的比较原则的两个知识点:①原则是依次比较两个字符串同一位置的一对字符,若它们的ASCII码值相同,则继续比较下一对字符,若它们的ASCII码值不同,则ASCII码值较大的字符所在的字符串较大;若所有字符相同,则两个字符串相等;若一个字符串全部i个字符与另一个字符串的前i个字符相同,则字符串较长的较大。②strcmp(s1,s2)的返回值,当str1str2,返回值>0。9、有以下程序:#include<stdio.h>#include<stdlib.h>main(){int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=1;*b=2,*c=3;a=b;printf("%d,%d,%d\n",*a,*b,*c);}程序运行后的输出结果是()。A、1,1,3B、2,2,3C、1,2,3D、3,3,3标准答案:D知识点解析:malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用(int*)强制类型转换为整型指针,再把它赋给a,b,c,即让指针变量a,b,c都指向刚申请的内存空间。所以只有最后一个赋值语句*c=3的值保留在了该空间内,因为a,b,c三个指针变量均指向该空间,所以打印该空间内的数值为3。10、以下程序中函数sort的功能是对a数组中的数据进行由大到小的排序voidsort(inta[],intn){inti,j,t;for(i=0;iA、1,2,3,4,5,6,7,8,9,10,B、10,9,8,7,6,5,4,3,2,1,C、1,2,3,8,7,6,5,4,9,10,D、1,2,10,9,8,7,6,5,4,3,标准答案:C知识点解析:程序中sort函数的功能是对数组中的数据进行从大到小的排序。主函数main中调用函数“sort(&aa[3],5);”,使得数组aa中从第4个元素开始的5个元素进行从大到小的排序,数组aa中的元素变为:1,2,3,8,7,6,5,4,9,10。并输出这些元素。11、在下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。A、外模式B、内模式C、概念模式D、逻辑模式标准答案:B知识点解析:数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述。内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,所以选择B。12、以下叙述中正确的是()。A、C程序的基本组成单位是语句B、C程序中的每一行只能写一条语句C、简单C语句必须以分号结束D、C语言必须在一行内写完标准答案:C知识点解析:C程序的基本组成单位是函数,A项错误;C程序以分号作为每个语句结尾,一行能写多条语句,也可以将一条语句分几行书写,BD两项错误;而简单C语言语句必须以分号结束,所以C项正确。13、以下程序的运行结果是()。#includemain(){inta=3,b=4,c=8,d=4,m=1,n=3;printf("%d\n",(m=a>b)&&(n=c>d));}A、0B、1C、2D、3标准答案:A知识点解析:逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为1时,整个表达式的值为1,否则为0。因为a=314、有以下程序:#include<stdio.h>main(){inta=6,b=7,m=1;switch(a%2){case0:m++;break;case1:m++:switch(b%2){defaut:m++;case0:m++;break;}}printf(’’%d\n’’,m);}程序运行后的输出结果是()。A、1B、2C、3D、4标准答案:B知识点解析:本题考查switch语句。因为“a=6”,所以“a%2=0”,因此第一个switc

温馨提示

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

评论

0/150

提交评论