2012年3月全国计算机等级考试二级C语言真题及详细答案_第1页
2012年3月全国计算机等级考试二级C语言真题及详细答案_第2页
2012年3月全国计算机等级考试二级C语言真题及详细答案_第3页
2012年3月全国计算机等级考试二级C语言真题及详细答案_第4页
2012年3月全国计算机等级考试二级C语言真题及详细答案_第5页
已阅读5页,还剩41页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2012年3月全国计算机等级考试二级C语言真题及详细答案一、选择题(共40题,每题1分,共40分,1-10为公共基础题,11-40为C语言题)1.下列叙述中正确的是A.循环队列是队列的一种链式存储结构B.循环队列是队列的一种顺序存储结构C.循环队列是非线性结构D.循环队列的插入运算不会导致队列空间溢出答案:B解析:循环队列是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,属于顺序存储结构,是线性结构;当队列满时执行插入运算依然会出现空间溢出,因此ACD错误,B正确。2.下列叙述中正确的是A.栈是“先进先出”的线性表B.队列是“先进后出”的线性表C.循环队列是非线性结构D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构答案:D解析:栈是先进后出的线性表,队列是先进先出的线性表,循环队列属于线性结构的队列,ABC错误;有序线性表可采用顺序存储(如有序顺序表)或链式存储(如有序链表),D正确。3.支持子程序调用的数据结构是A.栈B.树C.队列D.二叉树答案:A解析:子程序调用的规则是先调用的后返回,符合栈“后进先出”的特性:每次调用子程序时,将返回地址、局部变量等压入栈,子程序执行完毕后出栈恢复现场,因此栈是支持子程序调用的核心数据结构。4.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是A.10B.8C.6D.4答案:C解析:根据二叉树的基本性质:叶子结点数=度为2的结点数+1,代入数据得叶子结点数=5+1=6。5.数据流图中带有箭头的线段表示的是A.控制流B.事件驱动C.模块调用D.数据流答案:D解析:数据流图(DFD)是结构化分析的核心工具,其中箭头表示数据流,即数据的流动方向;程序流程图中的箭头表示控制流,二者需注意区分。6.软件开发中需求分析阶段产生的主要文档是A.可行性分析报告B.软件需求规格说明书C.概要设计说明书D.集成测试计划答案:B解析:可行性分析报告是可行性研究阶段的产出,概要设计说明书是概要设计阶段的产出,集成测试计划是测试阶段的相关文档;需求分析阶段的核心产出是软件需求规格说明书,明确软件的功能、性能、约束等需求。7.下面属于黑盒测试方法的是A.逻辑覆盖B.基本路径测试C.等价类划分D.条件覆盖答案:C解析:黑盒测试不关注程序内部逻辑,仅根据输入输出规则设计测试用例,常用方法包括等价类划分、边界值分析、错误推测、因果图等;逻辑覆盖、基本路径测试、条件覆盖都属于白盒测试方法,基于程序内部逻辑设计用例。8.数据库管理系统是A.操作系统的一部分B.在操作系统支持下的系统软件C.一种编译系统D.一种操作系统答案:B解析:数据库管理系统是位于用户和操作系统之间的一层数据管理软件,属于系统软件,依托操作系统的资源调度能力运行,不属于操作系统本身,也不是编译系统。9.在E-R图中,用来表示实体联系的图形是A.椭圆形B.矩形C.菱形D.三角形答案:C解析:E-R图的三要素对应三类图形:矩形表示实体,椭圆形表示属性,菱形表示实体之间的联系。10.有三个关系R、S和T如下:RSTABCABCABCa12a12b21b21d21c31c31A.并B.差C.交D.自然连接答案:B解析:差运算的结果是由属于R但不属于S的元组组成的集合,R减去S中与R相同的元组(a,1,2),剩余元组恰好是T的内容,因此该运算为差运算。11.以下叙述中错误的是A.C语言的可执行程序是由一系列机器指令构成的B.用C语言编写的源程序不能直接在计算机上运行C.通过编译得到的二进制目标程序需要连接才可以运行D.在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件答案:D解析:.exe文件是编译连接后生成的可执行文件,由二进制机器指令构成,不需要C语言开发环境即可在对应操作系统下直接运行,D错误;ABC描述均符合C语言程序的编译运行规则。12.以下选项中关于C语言常量的叙述错误的是A.所谓常量,是指在程序运行过程中,其值不能被改变的量B.常量分为整型常量、实型常量、字符常量和字符串常量C.常量可分为字面常量和符号常量D.经常被使用的变量可以定义成常量答案:D解析:常量的核心特性是程序运行时值不可修改,与使用频率无关;变量是运行时值可修改的存储单元,与常量的核心属性完全不同,D逻辑错误,ABC均符合C语言常量的定义规则。13.若有定义语句:inta=10;doubleb=3.14;则表达式'A'+a+b值的类型是A.charB.intC.doubleD.float答案:C解析:C语言中不同类型数据运算时会进行自动类型提升:char类型与int类型运算时先转换为int类型,运算结果再与double类型运算时转换为double类型,因此最终结果的类型是double。14.若有定义语句:intx=12,y=8,z;在其后执行语句z=0.9+x/y;则z的值为A.1B.1.9C.2D.2.4答案:A解析:x和y均为int类型,x/y执行整数除法,12/8的结果为1;1+0.9=1.9,但z为int类型,赋值时会截断小数部分,因此z的最终值为1。15.以下选项中不能作为C语言合法常量的是A.'cd'B.0.1e+6C."a"D.'\011'答案:A解析:单引号括起来的是字符常量,只能包含1个字符,'cd'包含2个字符,不符合字符常量的语法规则;0.1e+6是科学计数法表示的实型常量,"a"是字符串常量,'\011'是八进制转义字符(对应ASCII码为9的制表符),均为合法常量。16.以下选项中正确的定义语句是A.doublea;b;B.doublea=b=7;C.inta=7,*b=&a;D.float*a,b=&a;答案:C解析:A选项中分号分隔后b没有指定类型,语法错误;B选项定义变量时b未提前声明就被赋值,错误;C选项定义int型变量a赋值为7,同时定义int型指针b指向a的存储单元,语法正确;D选项b是float类型变量,不能赋值为指针变量a的地址,类型不匹配,错误。17.若有定义语句intk1=10,k2=20;执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为A.0和1B.0和20C.10和20D.10和30答案:B解析:&&运算符为短路与,当左侧表达式为假时右侧表达式不执行。首先计算左侧k1=k1>k2:10>20为假,值为0,因此k1被赋值为0;左侧为假,右侧k2=k2>k1不执行,k2保持原值20。18.有以下程序```cmain(){inta=1,b=0;if(!a)b++;elseif(a==0)if(a)b+=2;elseb+=3;printf("%d\n",b);}```程序运行后的输出结果是A.0B.1C.2D.3答案:A解析:C语言中else匹配最近的未匹配的if。a=1,!a为假,进入else分支;else分支的判断条件为a==0,1==0为假,后续的if-else语句均不执行,因此b保持原值0。19.下列条件语句中,输出结果与其他语句不同的是A.if(a)printf("%d\n",x);elseprintf("%d\n",y);B.if(a==0)printf("%d\n",y);elseprintf("%d\n",x);C.if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);D.if(a==0)printf("%d\n",x);elseprintf("%d\n",y);答案:D解析:A、B、C三个选项的逻辑均为:a非0时输出x,a为0时输出y;D选项的逻辑为a为0时输出x,a非0时输出y,与其他三个语句的输出结果相反。20.有以下程序```cmain(){inta=7;while(a--);printf("%d\n",a);}```程序运行后的输出结果是A.-1B.0C.1D.7答案:A解析:while循环的判断条件为a--(后置自减),先取a的当前值判断,再执行自减操作。当a=0时,判断条件为0,循环结束,随后a执行自减操作变为-1,因此输出-1。21.若有定义语句chars1[10],s2[20];,以下选项中能够正确判断s1和s2内容相等的是A.if(s1==s2)B.if(s1=s2)C.if(strcpy(s1,s2)==0)D.if(strcmp(s1,s2)==0)答案:D解析:s1、s2是字符串数组名,代表数组首地址,s1==s2比较的是两个字符串的首地址是否相同,不是内容是否相等,A错误;s1=s2是赋值操作,不是比较操作,B错误;strcpy是字符串复制函数,返回目标字符串的首地址,不用于相等判断,C错误;strcmp函数用于比较两个字符串的内容,相等时返回0,因此D是正确写法。22.有以下程序```cmain(){inti,j,m=1;for(i=1;i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf("m=%d\n",m);}```程序运行后的输出结果是A.m=6B.m=2C.m=4D.m=5答案:A解析:外层循环i=1时,内层j=3:1*3=3不大于3,m=1*3=3;j=2:1*2=2,m=3*2=6;j=1:1*1=1,m=6*1=6。外层循环i=2时,内层j=3:2*3=6>3,执行break跳出内层循环,循环结束,m的最终值为6。23.有以下程序```cmain(){inta[]={1,2,3,4},y,*p=&a[1];y=(*--p)++;printf("%d,%d\n",y,a[0]);}```程序运行后的输出结果是A.1,2B.2,3C.3,2D.4,1答案:A解析:p初始指向a[1](值为2),--p后p指向a[0],*p即a[0]的值1,赋值给y为1;随后执行后置++,a[0]的值变为2,因此输出1和2。24.以下关于数组的描述中错误的是A.同一数组的所有元素的类型都相同B.数组的下标从0开始C.可以用赋值语句直接给数组名赋值D.数组名代表数组的首地址答案:C解析:数组名是地址常量,不能被赋值,例如chars[10];s="hello";是语法错误,字符串赋值需要使用strcpy函数,ABD描述均符合数组的特性。25.有以下程序```cvoidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}```程序运行后的输出结果是A.-3,-1,1,3,B.-12,-3,0,0,C.0,1,2,3,D.-3,-3,-3,-3答案:A解析:函数fun的功能是计算每一行主对角线元素减副对角线元素的值:i=0时1-4=-3;i=1时6-7=-1;i=2时11-10=1;i=3时16-13=3,因此y数组为{-3,-1,1,3},输出结果对应A选项。26.有以下程序```cintfun(inta,intb){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x--,y++),z--);printf("%d\n",r);}```程序运行后的输出结果是A.21B.15C.20D.31答案:A解析:首先计算内层fun(x--,y++),x--取原值6,y++取原值7,内层函数返回6+7=13,此时x=5,y=8;z--取原值8,外层函数返回13+8=21,因此r的值为21。27.以下关于指针的叙述中正确的是A.基类型相同的两个指针变量,可以进行任意的算术运算B.即使基类型相同,两个指针变量也不能相互赋值C.两个同类型的指针变量可以指向同一个变量D.指针变量的值不可以为0答案:C解析:指针只能进行加减整数、同类型指针相减的运算,不能进行乘除等算术运算,A错误;基类型相同的指针变量可以相互赋值,B错误;多个同类型指针可以指向同一个变量,C正确;指针可以赋值为NULL(即0),表示空指针,不指向任何有效存储单元,D错误。28.有以下程序```cmain(){chara[10]="abcd";printf("%d,%d\n",strlen(a),sizeof(a));}```程序运行后的输出结果是A.7,4B.4,10C.8,8D.10,10答案:B解析:strlen计算字符串的有效长度,到'\0'结束且不包含'\0',因此"abcd"的长度为4;sizeof计算数组占用的总字节数,a数组定义为10个char类型元素,因此sizeof(a)=10*1=10。29.有以下程序```cvoidfun(char*s){while(*s){if(*s%2==0)printf("%c",*s);s++;}}main(){chara[]={"good"};fun(a);printf("\n");}```程序运行后的输出结果是A.goodB.goC.odD.d答案:D解析:程序遍历字符串,输出ASCII码为偶数的字符:'g'的ASCII码为103(奇数)、'o'的ASCII码为111(奇数)、'd'的ASCII码为100(偶数),因此仅输出d。30.有以下程序```cstructstu{charname[10];intnum;intscore;};main(){structstus[5]={"Yang",20141,703,"Li",20142,580,"Zhang",20143,670,"Wang",20144,650,"Zhao",20145,550},*p[5],*t;inti,j;for(i=0;i<5;i++)p[i]=&s[i];for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(p[i]->score>p[j]->score){t=p[i];p[i]=p[j];p[j]=t;}printf("%d,%d\n",s[1].score,p[1]->score);}```程序运行后的输出结果是A.580,550B.670,650C.580,580D.580,670答案:C解析:该程序仅对指针数组p的元素(指向结构体的地址)按score升序排序,原结构体数组s的存储顺序没有改变,因此s[1].score仍为初始值580;排序后p指针数组的元素按score从小到大排列为:Zhao(550)、Li(580)、Wang(650)、Zhang(670)、Yang(703),因此p[1]->score为580。31.以下关于宏定义的叙述中正确的是A.宏名必须用大写字母表示B.宏替换是在编译预处理阶段完成的C.宏替换必须占用运行时间D.带参数的宏定义中,参数的类型必须指定答案:B解析:宏名习惯用大写字母表示,但不属于语法强制要求,A错误;宏替换是编译预处理阶段完成的字符串替换,不占用运行时间,B正确C错误;宏的参数没有类型,仅做纯字符串替换,不需要指定类型,D错误。32.有以下程序```cmain(){inta=2,b=2,c=2;printf("%d\n",a/b&c);}```程序运行后的输出结果是A.0B.1C.2D.3答案:A解析:运算符优先级/高于&,a/b=2/2=1,1&2的二进制运算为01&10=00,因此结果为0。33.以下叙述中错误的是A.gets函数用于从终端读取字符串B.gets函数读取的字符串长度不受限制C.puts函数用于向终端输出字符串D.puts函数输出字符串时会自动添加换行符答案:B解析:gets函数不会检查输入字符串的长度,容易导致缓冲区溢出,是不安全的函数,C11标准已将其移除,“长度不受限制”是其安全缺陷而非合法特性,ACD描述均符合函数特性。34.有以下程序```cintf(intn);main(){inta=3,s;s=f(a);s=s+f(a);printf("%d\n",s);}intf(intn){staticinta=1;n+=a++;returnn;}```程序运行后的输出结果是A.7B.8C.9D.10答案:C解析:静态局部变量a的值会在函数调用之间保留:第一次调用f(3)时,n=3+1=4,a自增为2,返回4,s=4;第二次调用f(3)时,n=3+2=5,a自增为3,返回5,s=4+5=9。35.有以下程序```cvoidfun1(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.ProhsbnB.PrphsbnC.ProgsbnD.Program答案:A解析:p指向a[3]即字符'g',fun1函数将从p开始的每个字符的ASCII码加1:'g'+1='h','r'+1='s','a'+1='b','m'+1='n',因此原数组变为Prohsbn。36.以下关于typedef的叙述中错误的是A.typedef可以为各种类型定义新的名称B.typedef只是给已有类型起别名,不会创造新类型C.用typedef可以定义各种类型名,但不能定义变量D.用typedef定义的类型名的作用域是全局的答案:D解析:typedef定义的类型名的作用域取决于定义位置,如果在函数内部定义,作用域仅为函数内部,不是全局有效,ABC描述均符合typedef的特性。37.有以下程序```cstructS{inta,b;}data[2]={10,100,20,200};main(){structSp=data[1];printf("%d\n",++p.a);}```程序运行后的输出结果是A.10B.11C.20D.21答案:D解析:data数组的初始化规则为:data[0].a=10,data[0].b=100,data[1].a=20,data[1].b=200;p为data[1]的副本,p.a=20,++p.a后值为21,因此输出21。38.有以下程序```cmain(){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.3,3,3B.2,2,3C.1,2,3D.1,1,3答案:A解析:a、b、c三个指针都指向同一块动态分配的内存空间,后续赋值操作会覆盖之前的值,*c=3后该内存空间的值为3,因此三个指针解引用的结果均为3。39.以下关于文件的叙述中正确的是A.C语言中的文件是流式文件B.文件打开后不需要关闭C.文件只能按顺序读写D.对文件操作前不需要打开答案:A解析:C语言将文件看作字节序列,属于流式文件,A正确;文件打开后必须关闭,否则会导致资源泄露和数据丢失,B错误;文件支持随机读写,C错误;文件操作前必须先打开,D错误。40.有以下程序```cmain(){FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w+");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);rewind(fp);for(i=0;i<6;i++)fscanf(fp,"%d",&a[5-i]);fclose(fp);for(i=0;i<6;i++)printf("%d,",a[i]);}```程序运行后的输出结果是A.6,5,4,3,2,1,B.1,2,3,4,5,6,C.4,5,6,1,2,3,D.3,2,1,6,5,4,答案:A解析:首先将a数组的1-6依次写入文件,rewind函数将文件指针移到文件开头,随后读取6个数字依次赋值给a[5]到a[0],即a[5]=1、a[4]=2、a[3]=3、a[2]=4、a[1]=5、a[0]=6,最终a数组为{6,5,4,3,2,1},输出结果对应A选项。二、填空题(共15空,每空2分,共30分)1.有序线性表能进行二分查找的前提是该线性表必须是___存储的。答案:顺序解析:二分查找要求线性表同时满足有序、顺序存储两个条件,链式存储无法实现随机访问,不能使用二分查找。2.一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为___。答案:DEBFCA解析:前序遍历根结点在最前,因此根结点为A;中序遍历中A左侧为左子树(DBE),右侧为右子树(FC),递归推导可得后序遍历为DEBFCA。3.软件测试的目的是尽可能多的发现软件中的错误,通常把测试方法分为白盒测试和___测试两种。答案:黑盒解析:软件测试方法分为白盒测试(结构测试,基于内部逻辑设计用例)和黑盒测试(功能测试,基于输入输出规则设计用例)两类。4.在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,___负责数据的模式定义与数据的物理存取构建。答案:数据定义语言(或DDL)解析:数据定义语言(DDL)负责定义数据库结构,数据操纵语言(DML)负责数据增删改查,数据控制语言(DCL)负责权限控制。5.在关系数据库中,用来表示实体之间联系的是___。答案:二维表(或关系)解析:关系数据库用二维表(即关系)统一表示实体和实体之间的联系。6.以下程序运行后的输出结果是___。```cmain(){inta=200,b=010;printf("%d%d\n",a,b);}```答案:2008解析:0开头的整数为八进制常量,010转换为十进制为8,因此输出2008。7.以下程序运行时输入:1234567,输出结果是___。```cmain(){intx,y;scanf("%2d%ld",&x,&y);printf("%d\n",x+y);}```答案:34579解析:%2d表示读取两位整数,x=12,剩余的34567赋值给y,x+y=12+34567=34579。8.以下程序运行后的输出结果是___。```cmain(){inta=1,b=2,c=3,d=0;if(a==1)if(b!=2)if(c==3)d=1;elsed=2;elseif(c!=3)d=3;elsed=4;elsed=5;printf("%d\n",d);}```答案:4解析:a==1成立,进入第一个if;b!=2不成立,进入第一个else分支;c!=3不成立,进入else分支,d被赋值为4。9.以下程序运行后的输出结果是___。```cmain(){intm=011,n=11;printf("%d%d\n",++m,n++);}```答案:1011解析:011是八进制常量,转换为十进制为9,++m为前置自增,先加1变为10;n++为后置自增,先输出原值11再自增。10.以下程序的功能是将输入的正整数按逆序输出,例如输入135输出531,请填空。```cmain(){intn,s;scanf("%d",&n);do{s=n%10;printf("%d",s);___;}while(n!=0);p

温馨提示

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

评论

0/150

提交评论