全国计算机等级考试C语言2级笔试题(第30次)-2009年09月_第1页
全国计算机等级考试C语言2级笔试题(第30次)-2009年09月_第2页
全国计算机等级考试C语言2级笔试题(第30次)-2009年09月_第3页
全国计算机等级考试C语言2级笔试题(第30次)-2009年09月_第4页
全国计算机等级考试C语言2级笔试题(第30次)-2009年09月_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、全国计算机等级考试C语言2级笔试题-2009年09月第30次考试题目一、 选择题软件技术基础单选题(1-10)下列各题A)、B),C)、D)四个选项中,只有一个选项是正确的。1. 下列数据结构中,属于非线性结构的是( )A) 循环队列 B) 带链队列 C) 二叉树 D) 带链栈 C解析 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元素之间为一对多或者多对一的关系。根据各种结构的定义知二叉树是一种非线性结构。 2. 下列数据结构中,能够按照“先进后出”原则取数据的是( )A) 循环队列

2、 B) 栈 C) 队列 D) 二叉树 B解析 栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插人的元素,也是最后才能被删除的元素。栈是按照“先进后出”或“后进先出”的原则组织数据的。 3. 对于循环队列,下列叙述中正确的是( )A) 队头指针是固定不变的 B) 队头指针一定大干队尾指针 C) 队头指针一定小于队尾指针 D) 队头指针可以大干队尾指针,也可以小于队尾指针 D解析 循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时可能会

3、出现队头指针大于队尾指针的情况,也可能是队尾指针大于队头指针,故答案为D)。 4. 算法的空间复杂度是指( )A) 算法在执行过程中所需要的计算机存储空间 B) 算法所处理的数据量 C) 算法程序中的语句或指令条数 D) 算法在执行过程中所需要的临时工作单元数 A解析 算法的空间复杂度是指:算法执行过程中所需的存储空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。 5. 软件设计中划分模块的一个准则是( )A) 低内聚低耦合 B) 高内聚低耦合 C) 低内聚高耦合 D) 高内聚高耦合 B解析 模块划分应考虑的因素包括模块之间的

4、耦合和内聚。一般来说,要求模块之间的耦合尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即遵循高内聚、低耦合的原则。 6. 下列迭项中不属于结构化程序设计原则的是( )A) 可封装 B) 自顶向下 C) 模块化 D) 逐步求精A解析 模块化、自顶向下、逐步求精都是结构化程序设计的原则;可封装是面向对象程序设计原则。 7. 软件详细设计产生的图如下: 该图是( )A) N-S图 B) PAD图 C) 程序流程图 D) E-R图 C解析 N-S图是由若干基本框图构成的流程图,其特点是没有流程线;PAD图即问题分析图(Problem Analysis Diagram),它是一种由左往右展

5、开的二维树型结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;E-R图即实体 -联系图(Entity Relationship Diagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。本题答案为C)。 8. 数据库管理系统是( )A) 操作系统的一部分 B) 在操作系统支持下的系统软件 C) 一种编译系统 D) 一种操作系统 B解析 数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库管理系统是为数据库建立、使用和维护而配置的软件。 9. 在E-R图中,用来表示实休联系的图形是(

6、)A) 椭圆形 B) 矩形 C) 菱形 D) 三角形 C解析 E-R图中用矩形表示实体(等同于表),用椭圆形表示实体的属性(等同于表中字段),用菱形表示实体关系(等同于外键)。 10. 有三个关系R,S和T如下: 其中关系T由关系R和S通过某种操作得到,该操作为( )A) 选择 B) 投影 C) 交 D) 并D解析 两个相同结构关系的并是由属于这两个关系的元组组成的集合。 基础单选题(11-15)11. 以下叙述中正确的是( )A) 程序设计的任务就是编写程序代码并上机调试 B) 程序设计的任务就是确定所用数据结构 C) 程序设计的任务就是确定所用算法 D) 以上三种说法都不完整 D解析 程序

7、设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。所以选项A)、B)、C)说法都不完整。 12. 以下选项中,能用作用户标识符的是( )A) void B) 8_8 C) _0_ D) unsigned C解析 C语言的标识符命名规则为:只能由字母、数值和下划线3种字符组成;第一个字符必须是字母或下划线;不能与C语言中的关键字或保留字相同。 13. 阅读以下程序 #include main() int case;float printF; printf(请输入2个数:); scanf(%d %f,&case,&printF); printf(%d %fn,case,printF);该

8、程序在编译时产生错误,其出错原因是( )A) 定义语句出错,case是关键字,不能用作用户自定义标识符 B) 定义语句出错,printF不能用作用户自定义标识符 C) 定义语句无错,scanf不能作为输入函数使用 D) 定义语句无错,printf不能输出case的值 A解析 标识符不能与C编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字case,所以将出现错误。 14. 表达式:(int)(double)9/2)-(9)%2的值是( )A) O B) 3 C) 4 D) 5 B解析 (itn)(double)9/2

9、)的值为4,(9)%2的值为1,因此(int)(double)9/2)-(9)%2的值为3。 15. 若有定义语句:int x=10;则表达式x-=x+x的值为( )A) -20 B) -10 C) 0 D) 10 B解析 x-=x+x可化为:x=x-(x+x),由于 x初始值为10,所以计算后,x=10-20=-10,因此选B)。 16. 有以下程序 #include main() int a=1,b=0; printf(%d,b=a+b); printf(%dn,a=2*b); 程序运行后的输出结果是( )A) 0,0 B) 1,0 C) 3,2 D) 1,2 D解析 执行第一个print

10、f语句时,b=a+b=1,所以输出1,执行第二个printf语句时,a=2*b=2,所以输出结果为2。 17. 设有定义:int a=1,b=2,c=3;,以下语句中执行效果与其它三个不同的是 A) if(ab) c=a,a=b,b=c; B) if(ab) c=a,a=b,b=c; C) if(ab) c=a;a=b;b=c; D) if(ab) c=a;a=b;b=c; C解析 逗号表达式的求解过程是:按表达式顺序从左往右依次求解。本题中由于判断条件ab的值为假,所以选项A)、B)、D)中if语句后面的语句均未被执行,而C)中的后两条语句a=b和b=c被执行,因此选项C)的执行效果与其他三

11、个不同。 18. 有以下程序 #include main() int c=0,k; for(k=1;kb?(bc?1:0):0;功能相同的是( )A) if(ab)&(bc)k=1; else k=0; B) if(ab)(bc)k=1; else k=0; C) if(a=b)k=0; else if(bb)k=1; else if(bc) k=1; else k=0; A解析 表达式k=ab?(bc?1:0):0表示:如果(ab)条件为真,则k取值(bc?1:0),否则k取值0;当ab的情况下,如果bc,则k值为1,否则为0。所以该表达式与选项A)功能相同。 20. 有以下程序 #incl

12、ude main() char s=012xy;int i,n=0;for(i=0;si!=0;i+) if(si=a&si=z) n+;printf(%dn,n); 程序运行后的输出结果是( )A) 0 B) 2 C) 3 D) 5 B解析 在字符串数组si中,只有当下标i=3和i=4时,才满足订条件,所以n的值从0增加两次,结果为 2。 21. 有以下程序#include main() int n=2,k=0; while(k+&n+2); printf(%d %dn,k,n); 程序运行后的输出结果是( ) A) 0 2 B) 1 3 C) 5 7 D) 1 2 D解析 本题考查逻辑运算

13、符的“短路”现象,由于k的值为0,表达式首先去求k+的值,因为表达式k+的值为0,系统完全可以确定逻辑表达式的运算结果总是为0,因此将跳过n+2,不再对它进行求值,即k的值加1,n的值不变。 22. 有以下定义语句,编译时会出现编译错误的是( )A) char a=a; B) char a=n; C) char a=aa; D) char a=x2d; C解析 aa是字符串,不用加上单引号。 23. 有以下程序 #include stdio.h) main() char c1,c2; c1=A+8-4; c2=A+8-5; printf(%c,%dn,c1,c2);已知字母A的ASCII码为6

14、5,程序运行后的输出结果是 A) E,68 B) D,69 C) E,D D) 输出无定值 A解析 c1输出字符的ASCII码比字母A大4,即字母E;c2以十进制数字形式输出,因此可以判断本题答案为A)。 24. 有以下程序 #include void fun(int p) int d=2; p=d+; printf(%d,p); main() int a=1; fun(a);printf(%dn,a); 程序运行后的输出结果是( )A) 32 B) 12 C) 21 D) 22 C解析 程序运行后,首先输出的是p的值,然后再输出a的值。p=d+,得到P的值为d的初始值2;a的值不变,仍为1。

15、 25. 以下函数findmax拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致不能实现预定功能。#define MIN -2147483647 int findmax(int x,int n) int i,max; for(i=0;in;i+) max=MIN; if(maxxi) max=xi; return max;造成错误的原因是( ) A) 定义语句int i,max;中max未赋初值 B) 赋值语句max=MIN;中,不应给max赋MIN值 C) 语句if(maxxi) max=xi;中判断条件设置错误 D) 赋值语句max=MIN;放错了位置 D解析 对max赋初值,应

16、该要放在循环语句之前,不然每次循环都将是从MIN开始比较。 26. 有以下程序#include main() int m=1,n=2,*p=&m,*q=&n,*r; r=p;p=q;q=r;printf(%d,%d,%d,%dn,m,n,*p,*q); 程序运行后的输出结果是( )A) 1,2,1,2 B) 1,2,2,1 C) 2,1,2,1 D) 2,1,1,2 B解析 m和n的值不变,输出结果为1,2;指针 *p和*q交换了指向的位置,即*p=&n,*q=&m,输出结果分别为2,1。 27. 若有定义语句:int a410,*p,*q4;且0i4,则错误的赋值是( )A) p=a B)

17、qi=ai C) p=ai D) p=&a21 A解析 直接将二维数组a赋给p不合法,两者类型不匹配。 28. 有以下程序#include #include main() char str20=Qne *World,one *Dream!,*p=str1;printf(%d,strlen(p);printf(%sn,p);程序运行后的输出结果是( )A) 9,One*World B) 9,One*Dream! C) 10,One*Dream! D) 10,One*World C解析 可以将二维数组str看成一个是一个特殊的一维数组,其元素也是一个数组。那么,str0为“One * World”

18、,str1为“One * Dream!”。 29. 有以下程序 #include main() int a=2,3,5,4,i; for(i=0;i4;i+) switch(i%2) case 0:switch(ai%2) case 0:ai+;break; case 1:ai-; break;case 1:ai=0; for(i=0;i4;i+) printf(%d,ai);printf(n);程序运行后的输出结果是( )A) 3 3 4 4 B) 2 0 5 0 C) 3 0 4 0 D) 0 3 0 4 C解析 第一次循环,i=0,i%2=0,a0%2= 0,a0=a0+1=3;第二次循

19、环,i=1,1%2=1,a1=0;第三次循环,i=2,a2%2=1,a2=a2-1=4;第四次循环, i=3,i%2=1,a3=0。 30. 有以下程序 #include #include main() char a10=”abcd; printf(%d,%dn,strlen(a),sizeof(a); 程序运行后的输出结果是 A) 7,4 B) 4,10 C) 8,8 D) 10,10 B解析 strlen()用来返回字符串的长度,而si- zeof()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。 31. 下面是有关C语言字符数组的描述,其中错误的是( )A) 不可以用赋值语

20、句给字符数组名赋字符串 B) 可以用输入语句把字符串整体输入给字符数组 C) 字符数组中的内容不一定是字符串 D) 字符数组只能存放字符串 D解析 字符数组中的内容既可以是字符,也可以是字符串,选项D)说法不正确。 32. 下列函数的功能是( )fun(char *a,char *b) while(*b=*a)!=0) a+;b+; A) 将a所指字符串赋给b所指空间 B) 使指针b指向a所指字符串 C) 将a所指字符串和b所指字符串进行比较 D) 检查a和b所指字符串中是否有0 A解析 表达式*b=*a是将a所指的字符赋给b所指的空间,然后,指针a和b依次后移,直到到达指针a所指字符串的结尾

21、。 33. 设有以下函数: void fun(int n,char *s) 则下面对函数指针的定义和赋值均正确的是( )A) void (*pf)(); pf=fun; B) void *pf(); pf=fun; C) void *pf(); *Pf=fun; D) void(*pf)(int,char); pf=&fun; A解析 函数指针的定义形式是:数据类型标识符(*指针变量名)()。void(*pf)()定义了一个没有返回值的函数指针Pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给pf赋值时,只把函数名fun赋给Pf即可。所以正确答案为选项A)。 34. 有以下程序

22、 #include int f(int n); main() int a=3,s; s=f(a);s=s+f(a);printf(%dn,s); int f(int n) static int a=1; n+=a+; return n; 程序运行后的输出结果是( )A) 7 B) 8 C) 9 D) 10 C解析 s=f(a)表达式第一次调用f(n)函数时, f(n)函数运行结果为n=4,a=2,即s等于4;s=s+f(a)表达式第二次调用f(n)函数时,f(n)函数运行结果为n=5,所以得到s值为9。 35. 有以下程序 #include #define f(x) x*x*x main()

23、int a=3,s,t; s=f(a+1);t=f(a+1); printf(%d,%dn,s,t); 程序运行后的输出结果是 A) 10,64 B) 10,10 C) 64,10 D) 64,64 A解析 s=f(a+1)=a+1*a+1*a+1=10;s =f(a+1)=(a+1)*(a+1)*(a+1)=64。 36. 下面结构体的定义语句中,错误的是 A) struct ord int x;int y;int z;struct ord a; B) struct ord int x;int y;int z; struct ord a; C) struct ord int x;int y;

24、int z; a; D) struct int x;int y;int z; a; B解析 定义结构体变量有三种方式:先声明结构体类型,再定义变量名,如选项A)所示;在声明类型的同时定义变量,如选项C)所示;直接定义结构体类型变量,如选项D)所示。 37. 设有定义:char *c;,以下选项中能够使字符型指针c正确指向一个字符串的是 A) char str=string;c=str; B) scarf(%s,c); C) c=getchar(); D) *c=string; A解析 选项B)、D)中,没有为字符串分配空间,因此不能用c指向字符串。选项C)中getchar()函数返回一个字符,

25、不能将字符赋给字符指针c。选项A)中首先定义了字符数组str,然后将str的首地址赋给指针c,这样就使指针c指向了字符串“string”。 38. 有以下程序 #include #include struct A int a;char b10;double c; struct A f(stmct A t); main() struct A a=1001,ZhangDa,1098.0); a=f(a);printf(%d,%s,%6.1fn,a.a,a.b,a.c); struct A f(struct A t) t.a=1002;strcpy(t.b,changRong);t.c=1202.0

26、;return t; 程序运行后的输出结果是( )A) 1001,ZhangDa,10980 B) 1002,ZhangDa,12020 C) 1001,ChangRong,10980 D) 1002,ChangRong,12020 D解析 在主函数中,通过a=f(a)实现函数调用,所以输出的结构体变量相应变为1002,ChangRong,12020。 39. 若有以下程序段 int r=8; printf(%dn,r1); 输出结果是( )A) 16 B) 8 C) 4 D) 2 C解析 8用二进制表示为1000,右移1位后为 0100,即十进制4。 40. 下列关于C语言文件的叙述中正确的

27、是( )A) 文件由一系列数据依次排列组成,只能构成二进制文件 B) 文件由结构序列组成,可以构成二进制文件或文本文件 C) 文件由数据序列组成,可以构成二进制文件或文本文件 D) 文件由字符序列组成,其类型只能是文本文件 C解析 文件由数据序列组成,可以构成二进制文件,也可以构成文本文件。 二、填空题软件技术基础填空题(1-5)1. 某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有_个结点。14解析 在二叉树中,度为0的结点数是度为2的结点数加 1,故二叉树中结点数的总和为度为0的结点数、度为1的结点数及度为2的结点数三者相加,得出结果为14个结点。 2. 程序流程图中的菱形

28、框表示的是_。逻辑判断解析 绘制流程图时事实描述用椭圆形表示、行动方案用矩形表示、问题用菱形表示、箭头代表流动方向。 3. 软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中_阶段产生“软件需求规格说明书”。 需求分析解析 需求分析阶段的工作主要包括需求获取、需求分析、编写需求规格说明书和需求评审等4方面,产生的主要文档为软件需求规格说明书,它可以为用户、分析人员和设计人员之间的交流提供方便,直接支持目标软件系统的确认,也可以作为控制软件开发进程的依据。 4. 在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么“学生”和“可选课程”的联系为_。多对多解析 一名学生可

29、以选择多门课程,一门课程也可以由多名学生选择,因此是多对多的联系。 5. 人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字是 _。身份证号解析 主关键字是表中区别不同的记录的标识,在该表中只有身份证号能具有这个作用,所以用其作为主关键字。 综合填空题(6-15)6. 若有定义语句:int a=5;,则表达式:a+的值是_。5解析 a+的含义是在使用a值以后,使a值加1,所以 a+的值为5。 7. 若有语句double x=17;int y;,当执行y=(int)(x/5)%2;之后y的值为_。1解析 y=(int)(x/5)%2=(int)(3.4)%2=3%2=1。

30、8. 以下程序运行后的输出结果是_。 #include main() int x=20; printf(%d,0x20); printf(%dn,0x&x0 1,x0&x20)的值,该值为假,即为0。 9. 以下程序运行后的输出结果是_。 #include main() int a=1,b=7; do b=b/2;a+=b; while (b1); printf(%dn,a);5解析 第一次循环执行后,b=3,a=4,满足条件b1,循环继续;第二次循环执行后,b=1,a=5,不满足条件b1,结束循环。所以输出的a值为5。 10. 有以下程序 #include main() intf,f1,f2,i; f1=0;f2=1; printf(%d %d ,f1,f2); for (i=3;i=5;i+) f=f1+f2;printf(%d,f); f1=f2;f2=f; printf(n); 程序运行后的输出结果是_。01 123解析 第一个printf语句输出结果为01。循环体总共循环三次,第一次

温馨提示

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

评论

0/150

提交评论