ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:42.42KB ,
资源ID:7830839      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7830839.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(真题和详细解析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

真题和详细解析.docx

1、真题和详细解析绝密启用前2010年3月全国计算机等级考试二级笔试试卷C语言程序设计及参考答案(考试时间90分钟,满分100分)一、选择题(1)(10)、(21)(40)每题2分,(11)(20)每题1分。共70分) 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡上,答在试卷上不得分。 (1) 下列叙述中正确的是A)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D) 对长度为n的有序链表进行对

2、分查找,最坏情况下需要的比较次数为(nlog2n)答案:选A 【解析】对于链表,只能通过指针域确定下一结点,对分法查找不适用于链表。对长度为n的有序链表进行查找,最坏情况是查找到最后结点,比较次数为n.(2) 算法的时间复杂度是指 A)算法的执行时间 B)算法所处理的数据量 C)算法程序中的语句或指令条数 D)算法在执行过程中所需要的基本运算次数答案:选D 【解析】时间复杂度是执行算法所需要的计算工作量,可以用算法在执行过程中所需要的基本运算次数来度量。(3) 软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是 A)编辑软件 B)操作系统 C)教务管理系统 D

3、)浏览器答案:选B 【解析】操作系统是最基本的系统软件,其他选项属于应用软件。(4) 软件(程序)调试的任务是 A)诊断和改正程序中的错误 B)尽可能多地发现程序中的错误 C)发现并改正程序中的所有错误 D)确定程序中错误的性质答案:选A 【解析】软件测试的目的:尽可能多的发现软件中的错误,以查找错误为中心。软件调试的任务:在软件测试的基础上,诊断和改正程序中的错误。(5) 数据流程图(DFD图)是 A)软件概要设计的工具 B)软件详细设计的工具 C)结构化方法的需求分析工具 D)面向对象方法的需求分析工具答案:选C 【解析】结构化方法的需求分析是以数据流图(DFD)和数据图等为主要工具,建立

4、系统的逻辑模型。(6) 软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于 A)定义阶段 B)开发阶段 C)维护阶段 D)上述三个阶段答案:选B 【解析】定义阶段:可行性研究与计划制定、需求分析;开发阶段:概要设计、详细设计、实现、测试;维护阶段:使用、维护、退役。(7) 数据库管理系统中负责数据模式定义的语言是 A)数据定义语言 B)数据管理语言 C)数据操纵语言 D)数据控制语言答案:选A 【解析】数据定义语言(DDL):负责数据的模式定义与数据的物理存取构建;数据操纵语言(DML):负责数据的操纵,包括查询、插入、删除和修改;数据控制语言(DCL):负责数据完整性、安全性的定义

5、与检查以及并发控制、故障恢复。(8) 在学生管理的关系数据库中,存取一个学生信息的数据单位是 A)文件 B)数据库 C)字段 D)记录答案:选D 【解析】一个学生信息对应二维表格中的一行,即关系中的一条记录。(9) 数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的 A)需求分析阶段 B)逻辑设计阶段 C)概念设计阶段 D)物理设计阶段答案:选C 【解析】数据库的概念设计阶段是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型,采用E-R模型与视图集成法进行设计。(10) 有两个关系R和T如下:R TABCa12b22c32d32ABCc32d32则由

6、关系R得到关系T的操作是选择 B)投影 C)交 D)并答案:选A 【解析】考点为关系模型中的常见运算。选择:从一个关系中选择若干行,是一元运算(本题从R中的4行中选择2行得到T);投影:从一个关系中选择若干行,是一元运算;交、并:对具有相同关系模式的两个关系取其交集和并集,是二元运算。(11) 以下叙述正确的是A)C语言程序是由过程和函数组成的B)C语言函数可以嵌套调用,例如:fun(fun(x)C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可以作为单独文件形式存在答案:选B 【解析】选项A错误:C语言中没有过程的概念;选项B正确:C语言中函数可以嵌套调用;选项C错误:C

7、语言何总可以对包含一个或多个函数的源程序单独编译;选项错误:C语言程序可以有多个源程序组成,其中一个源程序文件包含main函数,其他函数可以写在另外的源程序文件中,作为单独文件形式存在。(12) 以下关于C语言的叙述中正确的是A)C语言中的注释不可以夹在变量名或关键字的中间B)C语言中的变量可以再使用之前的任何位置进行定义C)在C语言算术的书写中,运算符两侧的运算数类型必须一致D)C语言的数值常量中夹带空格不影响常量值的正确表示答案:选A 【解析】选项A:正确:注释夹在变量名和关键字中间,不再是正确的变量和关键字,同时产生语法错误;选项B错误:变量定义可以在函数开始,函数外面或者复合语句的开始

8、。不可以放在使用它之前的任何位置,比如放在循环体内会造成重复定义;选项C错误:例如赋值语句,只要赋值兼容即可,不一定类型必须一致。比如实型数据和字符数据都可以赋给整型变量;选项D错误:数值常量中夹带空格不再是正确的常量值,同时语法错误。(13) 以下C语言用户标示符中,不合法的是A)_1 B)AaBc C)a_b D)a-b答案:选D 【解析】标识符由字母、数字、下划线组成,第一个字符必须为字母或下划线。选项D出现了非法字符“-”,其他选项均符合要求。(14) 若有定义:double a=22;int i=0,k=18;则不符合C语言规定的赋值语句是 A)a=a+,i+ B)i=(a+k)=(

9、i+k) C)i=a%11 D)i=!a答案:选C 【解析】运算符%要求两边的操作数必须为整数,所以选项C错误。选项B和选项D正确:可以将逻辑赋给变量i,最后i的值都为0.选项A中的自增复制运算也是正确的,不过整体上是逗号表达式语句。(15)include main()char a,b,c,d;scanf(%c%c,&a,&b);c=getchar(); d=getchar();printf(%c%c%c%cn,a,b,c,d);当执行程序时,按下列方式输入数据(从第一列开始,代表回车,注意:回车是一个字符)1234则输出结果是:A、1234 B、12 C、12 D、12 3 34答案:选C

10、【解析】程序用两种方式分别输入4个字符赋给a、b、c、d。scanf:读取1赋给a,2赋给b。getchar:回车也是一个字符,读取回车赋给c,3赋给d。多余的字符4及回车没有被读取。最后的输出结果是选项C。(注:程序运行时,输入的数据存于键盘缓冲区中,等待程序读取。)16、以下关于C语言数据类型使用的叙述中错误的是:A、若要准确无误的表示自然数,应使用整数类型。B、若要保存带有多位小数的数据,应使用双精度类型。C、若要处理如人员信息等含有不同类型的相关数据,应自定义结构体类型。D、若只处理真和假两种逻辑值,应使用逻辑类型。答案:选D 【解析】C语言中没有逻辑型数据,所以选项D错误,其他选项均

11、正确。17、若a是数值类型,则逻辑表达式(a=1)|(a!=1)的值是:A、1 B、0 C、2 D、不知道a的值,不能确定答案:选A 解析】逻辑或运算c|d的两边只要有一个成立,结果就为真(1)。而a= =1和a!=1相互对立,肯定有一个成立,所以表达式的值为1。18、以下选项中与if(a=1) a=b;else a+;语句功能不同的switch语句是:A、switch(a) B、switch(a=1) case 1:a=b;break; case 0 : a=b;break; default : a+; case 1 : a+; C、switch(a) D、switch(a=1) defau

12、lt : a+;break; case 1:a=b;break; case 1:a=b; case 0: a+; 答案:选B 【解析】根据switch语句的功能,可以判断选项A和选项C正确。选项B和选项D中,主要看表达式a= =1的值。当a为1时,a= =1成立,此表达式值为1,应该执行case 1;当a不为1时,a= =1不成立,值为0,应执行case 0.只有选项B与题目功能不同。19、有如下嵌套的if语句 if(ab) if(ac) k=a; else k=c; else if(bc) k=b; else k=c;以下选项中与上述if语句等价的语句是k=(ab)?a:b;k=(bc)?b

13、:c;k=(ab)?(bc)?a:b):(bc)?b:c);k=(ab)?(ac)?a:c):(bc)?b:c);k=(ab)?a:b;k=(ac)?a;c答案:选C 【解析】条件语句k=(ab)?a:b的功能:if(ab) k=a; else k=b;排除A和D的基础上选项C的功能和题目完全等价。(20)有以下程序#include main() int i,j,m=1;for(i=1;i0;j-) if(i*j3) break;m*=i*j;printf(m=%dn,m)程序运行后的输出结果是(A) m=6 (B)m=2 (C)m=4 (D)m=5答案:选A 【解析】外层循环执行2次(i=1

14、2),内层循环正常执行3次(j=31)。m*=(i*j)m=m*(i*j) 外层循环:第一次循环(i=1) i*j3 始终不成立 i=1 j=3 m=1*(1*3)=3;i=1 j=2 m=3*(1*2)=6;i=1 j=1 m=6*(1*1)=6外层循环:第二次循环(i=2) i=2 j=3 此时i*j3条件成立,执行break退出内层循环,此时外层循环也是最后一次循环,同时退出,最后输出m的值为6.(21)有以下程序#includes main() int a=1,b=2; for(;a8;a+) b+=a; a+=2;printf (%d,%dn,a,b);程序运行后的输出结果是(A)9

15、,18 (B)8,11 (C)7,11 (D)10,14答案:选D 【解析】当a8时执行循环体,执行完循环体语句后,接着执行a+,再判断循环条件a8是否成立,如果成立继续循环,否则退出循环。初始值:a=1 b=2 a8成立执行第一次循环:b=b+a=3 a=a+2=3 a+后,a=4 a8成立,执行第二次循环:b=a+b=7 a=a+2=6 a+后, a=7 a8成立,执行第三次循环:b=a+b=14 a=a+2=9 a+后,a=10 此时a8不成立,退出循环,输出a=10 b=14.(22)有以下程序,其中k的初值为八进制数#include main()int k=011;printf(%d

16、n,k+);程序运行后的输出结果是(A)12 (B)11 (C)10 (D)9答案:选D 【解析】C语言中,整型常量以0开头,表示是一个八进制数。K=011是八进制数,转换为十进制数为9.(11)8=1*81+1*80=(9)10 %d表示以十进制格式输出整数,k+表示先输出k的值再加1,所以输出9.(23)下列语句中,正确的是A) char *s ; s=Olympic; B) char s7 ; s=Olympic;C) char *s ; s=Olympic; D) char s7 ; s=Olympic;答案:选A 【解析】字符型指针变量可以用选项A的赋值方法: char *s; s=

17、“Olympic”;选项C的写法: char *s; s=“0lympic”;是错误的。字符数组可以在定义的时候初始化:char s=“Olympic”;或者char s=“Olympic”;都是正确的。但是不可以在定义字符数组后,对数组赋值。所以选项B和选项D错误。(数组名代表首地址,是常量,不允许出现在赋值号左端)另外,选项B、D中字符数组S的大小至少为8,才能放下字符串。(字符串的末尾都有结束标志“0”)(24)以下关于return语句的叙述中正确的是A)一个自定义函数中必须有一条return语句B) 一个自定义函数中可以根据不同情况设置多条return语句C)定义成viod类型的函数中

18、可以有带返回值的return语句D)没有return语句的自定义函数在执行结束时不能返回到调用处答案:选B 【解析】自定义函数中可以没有return语句,如一些不需要返回值的函数。自定义函数中可以有多余return语句。例如:在分支结构中,可以从不同的分支中返回到调用程序。定义成void类型的函数,不允许从该函数取得返回值,函数内部也不允许有return语句。没有return语句的函数,在执行到函数的最后一条语句会自动返回到调用位置处。(25)下列选项中,能够正确定义数组的语句是A)int num0.2008; B) int num;C) int N=2008; D) #define N 20

19、08 int numN; int numN答案:选D 【解析】C语言不允许定义动态数组,定义数组的大小必须为常量表达式。选项D正确:选项中的N为符号常量,可以用来定义数组大小。选项A错误:C语言中数组没有选项A的定义方法。选项B错误;定义数组时应指明数组大小。如果不指明数组大小,需要给定初值的个数。如:int x=1,2,3。选项C错误:选项中的N为变量,不能用来定义数组大小。(26)有以下程序#includevoid fun (char*c,int d)*c=*c+1;d=d+1;printf(%c,%c,*c,d);main()char b=a,a=A; fun(&b,a); printf

20、(%c,%cn,b,a);程序运行后的输出结果是 A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B答案:选A 【解析】调用函数时,把实参的值传给形参,是单向的值传递,形参的改变不会影响到实参的值。主程序中调用函数: fun(&b,a) 参数传递:形参字符指针c获得实参变量b的地址,即指针c指向实参变量b.形参变量d获得实参a的值,即字符A。执行fun函数:*c=*c+1 把指针c做指向的内存单元的内容增1,即实参变量b的值增1,变为字符b。 d=d+1 形参变量的值变为字符B。函数内部的输出为:b,B,返回到主程序:实参变量b的值在函数内被改变为字符b,而形参变量

21、d的值仍为字符A.主程序中的输出为:b,A。(27)若有定义int(*pt)3;,则下列说法正确的是A)定义了基类型为int的三个指针变量B)定义了基类型为int的具有三个元素的指针数组pt。C)定义了一个名为*pt、具有三个元素的整型数组D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组答案:选D 【解析】int (*pt)3:定义名为pt的指针变量,用来指向包含有3个整型元素的一维数组。也就是说指针变量pt的基类型为行指针,可以指向每行有三个元素的二维数组。例:对于二维数组a43,a是数组名,存放二维数组的首地址(第0行地址)。二维数组名a的基类型为指向3个元素的一维

22、数组的行指针。所以可以进行复制:pt=a; (二者基类型一致)即:指针变量pt可以指向这个每行有三个元素的二维数组。(28)设有定义double a10,*s=a;,一下能够代表数组元素a3的是A)(*s)3 B)*(s+3) C)*s3 D)*s+3答案:选B 【解析】数组名a代表数组首地址(即元素a0地址),指针变量s=a即s=&a0。选项B正确:C语言中,*(s+3)无条件等价与s3,也即数组元素a3。选项A错误:根据指针s的定义,(*s)即a0,其后不能带下标。选项C错误:*s3相当于*(s3),而s3是数组元素,不是指针,前面不能加*号。选项D错误:*s+3表示把数组元素a0的值假3

23、,不能代表a3.(29)有以下程序#includemain() int a5=1,2,3,4,5, b5=0,2,1,3,0,is=0 for(i=0;i5;i+) s=s+abi;printf(%dn,s);程序运行后的输出结果是A) 6 B) 10 C) 11 D)15答案:选C 【解析】在5次循环中,分别把b数组中的5个元素值作为a数组的下标,将对应a数组元素的值累加到s中。s=a0|+a1+a2+a3+a0=1+3+2+4+1=11(30)有以下程序 #include main() int b3 3=0,1,2,0,1,2,0,1,2,i,j,t=1; for(i=0; i3; i+)

24、For(j=i;j=i;j+) t+=bibji;Printf(%dn,t);程序运行后的输出结果是A)1 B)3 C)4 D)9答案:选C 【解析】外循环执行3次,内循环执行1次(仅j=i时)i=0 t=t+b0b00=t+b00=1+0=1i=1 t=t+b1b11=t+b11=1+1=2i=2 t=t+b2b22=t+b22=2+2=4(31)若有以下定义和语句char sl10= abcd!, *s2=n123; printf(%d %dn, strlen(s1),strlen(s2);则输出结果是A) 5 5 B)10 5 C)10 7 D)5 8答案:选A 【解析】strlen函数

25、:返回字符串的长度,求子符串的长度,遇到结束标志0为止,但长度不包括结束标志。字符数组s1的后5个元素没有赋值,都为0,即“abcd!”后为0所以strlen(s1)的值为5.字符指针s2所指向的字符串中,n为转义字符换行符,表示1个字符;也为转义字符,代表,也是1个字符,其后为字符串结束标志0;所以strlen(s2)的值也为5.(32)有以下程序 #include #define N 8 void fun(int *x,int i) *x=*(x+i);main() int aN=1,2,3,4,5,6,7,8,i;fun(a,2);for(i=0; iN/2); i+) printf(%

26、d,ai);printf(n);程序运行后的输出结果是A)1 3 1 3 B) 2 2 3 4 C) 3 2 3 4 D)1 2 3 4 答案:选C 【解析】数组名代表数组首地址即a0的地址。函数调用:fun(a,2)参数传递后,形参指针x获得数组首地址,即指向a0;形参变量i=2。 *x即a0, *(x+2)即a2.*x=*(x+2)a0=a2 执行后,a0变为3,a2不变。返回到主程序:循环4次,输出数组a前4个元素:3 2 3 4(33)有以下程序#includeint f(int t ,int n);main()int a4=1,2,3,4,s;s=fa,4; printf(%dn,s

27、);int f(int t, int n) if (n0) return tn-1+f(t,n-1);else return 0;程序运行后的输出结果是A)4 B)10 C)14 D)6答案:选B 【解析】函数调用后,实参数组a和形参数组t占用相同的内存单元,可以认为是同一数组。s=f(a,4)=t3+f(a,3)=4+f(a,3)=4+t2+f(a,2)=7+t1+f(a,1)=7+2+f(a,1)=9+t0+f(a,0)=9+1+f(a,0)=10+0=10(34)有以下程序#includeint fun()static int x=1;x*=2; return x;main()int I

28、,s=1;for (i=1;i=2;i+) s=fun();printf(%dn,s);程序运行后的输出结果是A)0 B)1 C) 4 D)8答案:选C。【解析】fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用时仍可保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。主程序调用两次fun函数:第一次调用:x=1 x=x*2=2 s=2 第二次调用:(直接上次x值)x=x*2=4 s=4(35)以下程序#include #define SUB(a) (a)-(a)main()int a=2,b=

29、3,c=5,d;d=SUB(a+b)*c;printf(%dn,d);程序运行后的结果是A)0 B)-12 C)-20 D)10答案:选C 【解析】考点为带参数的宏定义。宏定义中的参数没有类型,仅为字符序列,不能当作表达式运算。宏展开时,把实参字符串原样写在替换文本中。d=SUB(a+b)*c=(a+b)-(a+b)*c=5-25=-20(36)没有定义struct complex int real, unreal ; datal=1,8,data2;则以下赋值语句中的错误的是A)data2=data1; B)data2=(2,6);C)data2.real1=data1.real; D)data2.real=data1.unreal;答案:选B 【解析】考点为结构体变量的定义和初始

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1