2004年9月全国计算机等级考试二级C语言笔试试卷含答案_第1页
2004年9月全国计算机等级考试二级C语言笔试试卷含答案_第2页
2004年9月全国计算机等级考试二级C语言笔试试卷含答案_第3页
2004年9月全国计算机等级考试二级C语言笔试试卷含答案_第4页
2004年9月全国计算机等级考试二级C语言笔试试卷含答案_第5页
已阅读5页,还剩42页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

2004年9月全国计算机等级考试二级C语言笔试试卷含答案2004年9月全国计算机等级考试二级C语言笔试试卷(考试时间120分钟,满分100分)一、选择题((1)~(10)每小题1分,(11)~(40)每小题2分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。1.算法的空间复杂度是指A)算法程序的长度B)算法程序中的指令长度C)算法程序所占的存储空间D)算法执行过程中所需要的存储空间【答案】D【解析】算法的空间复杂度是对算法运行过程中临时占用存储空间大小的度量,包含算法程序本身占用的空间、输入输出数据占用的空间、算法执行过程中临时申请的额外空间三部分,A、B、C选项仅描述了部分存储占用,表述片面,因此正确答案为D。2.下列关于栈的描述正确的是A)在栈中只能插入元素不能删除B)在栈中只能删除元素不能插入C)栈是先进先出的线性表D)栈是先进后出的线性表【答案】D【解析】栈是限定仅在表尾进行插入和删除操作的线性表,插入操作称为入栈,删除操作称为出栈,其核心特性是先进后出(后进先出),A、B、C选项表述均不符合栈的定义,因此正确答案为D。3.对长度为n的线性表排序,最坏情况下比较次数不是n(n-1)/2的排序方法是A)快速排序B)冒泡排序C)直接插入排序D)堆排序【答案】D【解析】冒泡排序、直接插入排序、快速排序在最坏情况下的比较次数均为n(n-1)/2,而堆排序的最坏时间复杂度为O(nlog₂n),对应的比较次数远小于n(n-1)/2,因此正确答案为D。4.下列对于线性链表的描述中正确的是A)存储空间不一定连续,且各元素的存储顺序是任意的B)存储空间不一定连续,且前件元素一定存储在后件元素的前面C)存储空间必须连续,且前件元素一定存储在后件元素的前面D)存储空间必须连续,且各元素的存储顺序是任意的【答案】A【解析】线性链表采用链式存储结构,通过指针关联前后元素,存储空间无需连续,元素的物理存储顺序可以与逻辑顺序不一致,仅通过指针维护逻辑关系,B、C、D选项表述均不符合链式存储的特性,因此正确答案为A。5.下列对于软件测试的描述中正确的是A)软件测试的目的是证明程序是否正确B)软件测试的目的是使程序运行结果正确C)软件测试的目的是尽可能多地发现程序中的错误D)软件测试的目的是使程序符合结构化原则【答案】C【解析】软件测试的核心目标是发现程序中存在的错误,而非证明程序无错,也不直接修改程序逻辑或保证程序符合结构化要求,A、B、D选项表述均偏离软件测试的定义,因此正确答案为C。6.为了使模块尽可能独立,要求A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强【答案】B【解析】模块独立性的衡量标准为高内聚、低耦合:内聚是模块内部功能的紧密程度,内聚越高模块功能越单一;耦合是不同模块之间的依赖程度,耦合越低模块之间的影响越小,A、C、D选项表述均不符合模块独立性要求,因此正确答案为B。7.下列描述中正确的是A)程序就是软件B)软件开发不受计算机系统的限制C)软件既是逻辑实体,又是物理实体D)软件是程序、数据与相关文档的集合【答案】D【解析】计算机软件由程序、运行所需的数据和相关的文档共同构成,程序只是软件的组成部分之一;软件依赖于计算机系统运行,属于逻辑实体而非物理实体,A、B、C选项表述错误,因此正确答案为D。8.数据独立性是数据库技术的重要特点之一,所谓数据独立性是指A)数据与程序独立存放B)不同的数据被存放在不同的文件中C)不同的数据只能被对应的应用程序所使用D)以上三种说法都不对【答案】D【解析】数据独立性指数据和应用程序之间互不依赖,分为逻辑独立性和物理独立性,即数据逻辑结构修改、物理存储修改时均无需修改应用程序,A、B、C选项的表述均未准确描述数据独立性的定义,因此正确答案为D。9.用树形结构表示实体之间联系的模型是A)关系模型B)网状模型C)层次模型D)以上三个都是【答案】C【解析】层次模型采用树形结构表示实体和实体间的联系,网状模型采用网状结构,关系模型采用二维表结构,因此正确答案为C。10.数据库管理系统DBMS中用来定义模式、内模式和外模式的语言为A)CB)BasicC)DDLD)DML【答案】C【解析】DDL(数据定义语言)用于定义数据库的三级模式结构、完整性约束等;DML(数据操纵语言)用于数据的增删改查操作,C、Basic属于通用编程语言,因此正确答案为C。11.以下叙述中正确的是A)C语言比其他语言高级B)C语言可以不用编译就能被计算机识别执行C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D)C语言出现的最晚,具有其他语言的一切优点【答案】C【解析】C语言属于高级编程语言,语法接近自然语言和数学语言,易于理解;C语言需要经过编译、链接生成可执行文件后才能运行,并非出现最晚的编程语言,也不具备其他语言的全部优势,A、B、D选项表述错误,因此正确答案为C。12.C语言中用于结构化程序设计的3种基本结构是A)顺序结构、选择结构、循环结构B)if、switch、breakC)for、while、do-whileD)if、for、continue【答案】A【解析】结构化程序设计的三种基本控制结构为顺序结构、选择结构、循环结构,B、C、D选项仅列出了实现对应结构的部分关键字,因此正确答案为A。13.在一个C程序中A)main函数必须出现在所有函数之前B)main函数可以在任何地方出现C)main函数必须出现在所有函数之后D)main函数必须出现在固定位置【答案】B【解析】C程序的执行入口是main函数,main函数可以放在程序的任意位置,与其他函数的先后顺序无关,仅需保证调用函数前完成声明即可,因此正确答案为B。14.下列叙述中正确的是A)C语言中既有逻辑类型也有集合类型B)C语言中没有逻辑类型但有集合类型C)C语言中有逻辑类型但没有集合类型D)C语言中既没有逻辑类型也没有集合类型【答案】D【解析】C标准中没有内置的布尔逻辑类型(C99新增_Bool类型,但2004年考试采用C89标准),也没有内置的集合类型,逻辑判断通过“0为假、非0为真”的规则实现,因此正确答案为D。15.若有以下程序段:intc1=1,c2=2,c3;c3=1.0/c2*c1;则执行后c3的值是A)0B)0.5C)1D)2【答案】A【解析】表达式1.0/c2的运算结果为0.5(双精度浮点数),乘以c1后结果为0.5,赋值给int类型的c3时会截断小数部分,最终c3的值为0,因此正确答案为A。16.有以下程序:main(){inta;charc=10;floatf=100.0;doublex;a=f/=c*=(x=6.5);printf("%d%d%3.1f%3.1f\n",a,c,f,x);}程序运行后的输出结果是A)16516.5B)1651.56.5C)1651.06.5D)2651.56.5【答案】B【解析】赋值运算从右向左执行:首先x=6.5;然后c*=x即c=c*x,c为char类型,10*6.5=65,c的值为65;接着f/=c即f=f/c,100.0/65≈1.538,float类型保留一位小数为1.5;最后a为int类型,将1.538截断小数部分后赋值为1,因此输出结果为1651.56.5,正确答案为B。17.以下选项中非法的表达式是A)0<=x<100B)i=j==0C)(char)(65+3)D)x+1=x+1【答案】D【解析】赋值运算符左侧必须是可修改的左值,不能是表达式,因此x+1=x+1为非法表达式;A选项为合法的关系运算链式表达,B选项先判断j==0再将结果赋值给i,C选项为强制类型转换,均为合法表达式,因此正确答案为D。18.有以下程序:main(){inta=0,b=0;a=10;b=20;printf("a+b=%d\n",a+b);}程序运行后的输出结果是A)a+b=10B)a+b=30C)30D)出错【答案】B【解析】程序中a赋值为10,b赋值为20,a+b的结果为30,printf函数的格式化字符串中包含“a+b=”的固定输出,因此最终输出为a+b=30,正确答案为B。19.若有定义:inta,b,c;以下选项中的赋值语句正确的是A)a=5,b=6B)a=b=10;C)int(12.3);D)c=int(a+b);【答案】B【解析】赋值语句需要以分号结尾,A选项缺少分号不属于语句;C选项为无效表达式;D选项强制类型转换的语法错误,正确写法为c=(int)(a+b);B选项为连续赋值语句,语法合法,因此正确答案为B。20.有以下程序:main(){inti=1,j=2,k=3;}程序运行后的输出结果是A)123B)234C)223D)233【答案】Dmain(){inta=5,b=4,c=6,d;printf("%d\n",d=a>b?(a>c?a:c):(b));}A)5B)4C)6D)不确定【答案】C【解析】三目运算符从右向左结合,首先判断a>c即5>6不成立,因此内层三目运算返回c的值6;外层判断a>b即5>4成立,因此返回内层运算的结果6,d的值为6,因此正确答案为C。22.以下程序中,while循环的循环次数是main(){inti=0;while(i<10){if(i<1)continue;if(i==5)break;i++;}}A)1B)10C)6D)死循环,不能确定次数【答案】D【解析】初始i=0,进入循环后i<1成立,执行continue跳过后续语句,i的值始终为0,循环条件i<10永远成立,因此为死循环,次数无法确定,正确答案为D。23.若有定义语句:intx=10;则表达式x-=x+x的值为A)-20B)-10C)0D)10【答案】B【解析】复合赋值运算优先级低于算术运算,先计算x+x=20,再计算x-=20即x=x-20=10-20=-10,因此正确答案为B。24.以下程序的输出结果是main(){inti;for(i=0;i<3;i++)switch(i){case1:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}}A)011122B)012C)012020D)120【答案】A【解析】switch语句中没有break时会向下穿透执行:i=0时匹配default,输出0;i=1时匹配case1,输出1,穿透到case2输出1,再穿透到default输出1;i=2时匹配case2输出2,穿透到default输出2;最终输出结果为011122,正确答案为A。25.以下选项中可作为C语言合法常量的是A)-80B)-080C)-8e1.0D)-80.0e【答案】A【解析】B选项以0开头为八进制常量,八进制数的有效数字为0~7,包含8属于非法;C、D选项为实型指数表示法,e后面必须为整数,因此非法;A选项为合法的十进制整型常量,因此正确答案为A。26.以下选项中,不能作为合法常量的是A)1.234e04B)1.234e0.4C)1.234e+4D)1.234e0【答案】B【解析】实型指数表示法中,e(或E)后面必须是整型常量,B选项e后面为0.4属于小数,为非法常量,其余选项均符合实型常量的定义,因此正确答案为B。27.以下叙述中正确的是A)调用printf函数时,必须要有输出项B)使用putchar函数时,必须在之前包含头文件stdio.hC)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出D)调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码【答案】B【解析】putchar是标准输入输出库函数,使用前必须包含stdio.h头文件;A选项printf可以仅输出固定字符串,无输出项;C选项C语言没有十二进制的输出格式;D选项getchar直接读取输入的字符本身,不会将输入的数字转换为对应的ASCII码字符,因此正确答案为B。28.有以下程序:main(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();d=getchar();}若从键盘输入:65<回车>66<回车>,则a、b、c、d的值是A)a='6',b='5',c='\n',d='6'B)a='6',b='5',c='6',c='6'C)a='6',b='5',c='\n',d='\n'D)a='6',b='6',c='\n',d='6'【答案】A【解析】scanf("%c%c")连续读取两个字符,第一个字符'6'赋值给a,第二个字符'5'赋值给b;第一个getchar读取输入行末尾的回车符'\n'赋值给c;第二个getchar读取下一行的第一个字符'6'赋值给d,因此正确答案为A。29.设有定义intp[8];则以下表达式中不属于地址的是A)p++B)p+1C)*(p+1)D)&p[0]【答案】C【解析】数组名p为数组首地址,p++、p+1、&p[0]均为地址值;*(p+1)是对地址p+1解引用,获取的是数组第二个元素的值,不属于地址,因此正确答案为C。30.以下能正确定义一维数组的是A)inta[0..100];B)inta[];C)inta[5];D)intn=10,a[n];【答案】C【解析】A选项数组长度的表示方法不符合C语法;B选项定义数组时未指定长度且未初始化,属于非法定义;D选项为变长数组,C89标准不支持(2004年考试采用C89标准);C选项定义了长度为5的int型数组,语法合法,因此正确答案为C。31.有以下程序:intf1(intx,inty){returnx>y?x:y;}intf2(intx,inty){returnx>y?y:x;}main(){inta=4,b=3,c=5,d,e,f;d=f1(a,b);d=f1(d,c);e=f2(a,b);e=f2(e,c);f=a+b+c-d-e;printf("%d%d%d\n",d,f,e);}程序运行后的输出结果是A)3,4,5B)5,3,4C)5,4,3D)3,5,4【答案】C【解析】f1返回两个参数的较大值,因此d为a、b、c中的最大值5;f2返回两个参数的较小值,因此e为a、b、c中的最小值3;f=4+3+5-5-3=4,因此输出543,正确答案为C。32.以下程序的输出结果是voidf(intx,inty){intt;if(x<y){t=x;x=y;y=t;}}main(){inta=4,b=3,c=5;f(a,b);f(a,c);f(b,c);printf("%d,%d,%d\n",a,b,c);}A)3,4,5B)5,3,4C)5,4,3D)4,3,5【答案】D【解析】函数f采用值传递,形参的修改不会影响实参的值,因此a、b、c的值始终为初始的4、3、5,输出结果为4,3,5,正确答案为D。33.有以下程序:main(){chars[]="159",*p;p=s;printf("%c",*p++);printf("%c",*p++);}程序运行后的输出结果是A)15B)16C)12D)59【答案】A【解析】p指向数组s的首地址,*p++先取p指向的元素值'1'输出,然后p自增指向第二个元素;第二个*p++取元素值'5'输出,p自增指向第三个元素,因此输出结果为15,正确答案为A。34.有定义语句:intb;charc[10];则正确的输入语句是A)scanf("%d%s",&b,&c);B)scanf("%d%s",&b,c);C)scanf("%d%s",b,c);D)scanf("%d%s",b,&c);【答案】B【解析】int类型变量b需要传入地址&b,数组名c本身就是数组首地址,无需取地址符,因此正确的输入语句为scanf("%d%s",&b,c),正确答案为B。35.以下关于数组的描述正确的是A)数组的大小是固定的,但可以有不同类型的数组元素B)数组的大小是可变的,但所有数组元素的类型必须相同C)数组的大小是固定的,所有数组元素的类型必须相同D)数组的大小是可变的,可以有不同类型的数组元素【答案】C【解析】C语言中数组是相同类型元素的有序集合,定义时大小固定,元素类型必须一致,因此正确答案为C。36.函数fseek的正确调用形式是A)fseek(文件指针,位移量,起始点)B)fseek(位移量,起始点,文件指针)C)fseek(位移量,文件指针,起始点)D)fseek(文件指针,起始点,位移量)【答案】A【解析】fseek函数用于移动文件位置指针,参数顺序为:文件指针、偏移量(位移量)、起始位置,因此正确答案为A。37.有以下程序:inta=2;intf(int*a){return(*a)++;}main(){ints=0;{inta=5;s+=f(&a);}s+=f(&a);printf("%d\n",s);}程序运行后的输出结果是A)10B)9C)7D)8【答案】C【解析】第一个代码块内的局部变量a=5,调用f(&a)时返回*a的原值5,然后*a自增为6,s=5;第二次调用f(&a)传入全局变量a的地址,返回*a的原值2,然后*a自增为3,s=5+2=7,因此输出结果为7,正确答案为C。38.有以下程序:main(){inti;i=f(4+4)/f(2+2);printf("%d\n",i);}程序运行后的输出结果是A)28B)22C)16D)4【答案】A【解析】宏定义为直接文本替换,不会自动添加括号,因此f(4+4)替换为4+4*4+4=24,f(2+2)替换为2+2*2+2=8,整个表达式为4+4*4+4/2+2*2+2=4+16+2+4+2=28,因此正确答案为A。39.设有以下语句:typedefstructS{intg;charh;}T;则下面叙述中正确的是A)可用S定义结构体变量B)可以用T定义结构体变量C)S是struct类型的变量D)T是structS类型的变量【答案】B【解析】typedef为类型定义关键字,将structS类型重命名为T,因此T是结构体类型名,可以直接用T定义结构体变量;S是结构体标签,定义变量时需要写structS,因此正确答案为B。40.有以下程序:main(){union{unsignedintn;unsignedcharc;}u;u.c='A';printf("%c\n",u.n);}程序运行后的输出结果是A)AB)20C)56D)65【答案】A【解析】共用体的所有成员共享同一段内存空间,u.c='A'时内存低字节存储'A'的ASCII码65,读取u.n时低字节的65被保留,以%c格式输出时转换为字符'A',因此正确答案为A。二、填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡【1】~【15】序号的横线上,答在试卷上不得分。1.某二叉树中度为2的结点有18个,则该二叉树中有【1】个叶子结点。【答案】19【解析】二叉树的性质3:叶子结点数=度为2的结点数+1,因此叶子结点数为18+1=19。2.在面向对象方法中,类的实例称为【2】。【答案】对象【解析】类是具有相同属性和方法的对象的抽象,类的具体实例称为对象。3.诊断和改正程序中错误的工作通常称为【3】。【答案】程序调试(或调试)【解析】程序调试的工作是定位、诊断和修改程序中的错误,与软件测试的“发现错误”目标不同。4.在关系数据库中,把数据表示成二维表,每一个二维表称为【4】。【答案】关系【解析】关系模型采用二维表存储数据,每一个二维表对应一个关系。5.问题处理方案的正确而完整的描述称为【5】。【答案】算法【解析】算法是对解决问题的步骤的明确、完整描述,具备有穷性、确定性、可行性等特性。6.以下程序运行时若从键盘输入:102030<回车>,输出结果是【6】。main(){inti=0,j=0,k=0;scanf("%d%*d%d",&i,&j,&k);printf("%d%d%d\n",i,j,k);}【答案】10300【解析】%*d为输入抑制符,读取一个整数但不赋值给任何变量,因此输入的10赋值给i,20被跳过,30赋值给j,k未被赋值保持初始值0,因此输出10300。7.以下程序运行后的输出结果是【7】。main(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d%d\n",x,y);}【答案】200【解析】x=10不等于y=20,if语句内的t=x不执行;后续x=y将x赋值为20,y=t将y赋值为0,因此输出200。8.以下程序运行后的输出结果是【8】。main(){intn=0,m=1,x=2;if(!n)x-=1;if(m)x-=2;if(x)x-=3;printf("%d\n",x);}【答案】-4【解析】!n为真,x=2-1=1;m为真,x=1-2=-1;x=-1非0,x=-1-3=-4,因此输出-4。9.有以下程序:main(){chara[]="ABCDEFG",*p;p=a+3;printf("%c\n",p[2]);}运行后的输出结果是【9】。【答案】F【解析】a为数组首地址,a+3指向数组第四个元素'D',p[2]等价于*(p+2),指向'D'向后偏移2个位置的元素'F',因此输出F。10.以下程序运行后的输出结果是【10】。voidswap(inta,intb){intt;t=a;a=b;b=t;printf("%d%d",a,b);}main(){inta=3,b=4;swap(a,b);printf("%d%d\n",a,b);}【答案】4334【解析】swap函数内交换形参a、b的值,输出43;由于是值传递,实参a、b的值不变,后续输出34,因此整体输出为4334。11.有以下程序:intf(inta[],intn){if(n>=1)returnf(a,n-1)+a[n-1];elsereturn0;}main(){intaa[5]={1,2,3,4,5},s;s=f(aa,5);printf("%d\n",s);}运行后的输出结果是【11】。【答案】15【解析】函数f为递归求和,计算数组前n个元素的和,1+2+3+4+5=15,因此输出15。12.以下程序运行后的输出结果是【12】。main(){inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0;for(i=0;i<3;i++)s+=a[i][i]+a[i][3-i-1];printf("%d\n",s);}【答案】30【解析】循环累加矩阵主对角线和副对角线的元素:i=0时加a[

温馨提示

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

评论

0/150

提交评论