2009年9月计算机二级c语言试题及详细解答答案_第1页
2009年9月计算机二级c语言试题及详细解答答案_第2页
2009年9月计算机二级c语言试题及详细解答答案_第3页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写 在答题卡相应位置上,答在试卷上不得分。(1)下列数据结构中,属于非线性结构的是 。A)循环队列B)带链队列C)二叉树D)带链栈(2) 下列数据结构中,能够按照"先进后出”原则存取数据的是 。A)循环队列B)栈C)队列D)二叉树(3) 对于循环队列,下列叙述中正确的是 。A)队头指针是固定不变的B)队头指针一定大于队尾指针C)队头指针一定小于队尾指针D)队头指针可以大于队尾指针,也可以小于队尾指针(4) 算法的空间复杂度是指 。A)算法在执行过程中所需要的计算机存储空间B)算法所处理的数据

2、量C)算法程序中的语句或指令条数D)算法在执行过程中所需要的临时工作单元数(5)软件设计中划分模块的一个准则是 。A)低内聚低耦合B)高内聚低耦合C)低内聚高耦合D)高内聚高耦合(6)下列选项中不属于结构化程序设计原则的是 A)可封装 B)自顶向下 C)模块化 D)逐步求精(7)软件详细设计产生的图如下:该图是。A)N-S图 B)PAD图 C)程序流程图D)E R图(8)数据库管理系统是。A)操作系统的一部分B)在操作系统支持下的系统软件C)一种编译系统D)一种操作系统(9)在E R图中,用来表示实体联系的图形是 A)椭圆形 B)矩形C)菱形 D)三角形(10)有三个关系R,S和T如下:RAB

3、Ca12b21c31SABCd32TABCa12b21c31d32其中关系T由关系R和S通过某种操作得到,该操作为 A)选择 B)投影 C)交 D)并(11)以下叙述中正确的是。A)程序设计的任务就是编写程序代码并上机调试B)程序设计的任务就是确定所用数据结构C)程序设计的任务就是确定所用算法D)以上三种说法都不完整(12)以下选项中,能用作用户标识符的是 A)voidB) 8_8C)_0_D)u nsig ned(13)阅读以下程序:#i nclude<stdio.h>main () int case; float printF ; printf("请输入2个数:&qu

4、ot;);scanf("%d %f" , &case ,&printF) ;printf("% d %fn" , case, printF) ;该程序在编译时产生错误,其出错原因是 A) 定义语句出错,case是关键字,不能用作用户自定义标识符B) 定义语句出错,C) 定义语句无错,printF 不能用作用户自定义标识符 sea nf不能作为输入函数使用D) 定义语句无错,printf不能输出case的值(14) 表达式: (int)(double)9/2) (9)%2的值是 。A) 0B)3C)4D)5(15) 若有定义语句:int x

5、 = 10;,则表达式x = x + x的值为A) 20B)10C)0D)10( 16)有以下程序:#include <stdio.h>main() int a= 1, b= 0;printf("%d , ", b= a+ b);printf("%dn" , a= 2程序运行后的输出结果是 。A) 0,0B)1,0C)3,2D)1,2(17)设有定义:int a= 1 , b = 2 , c= 3;,以下语句中执行效果与其他三个不同的是 。A) if(a>b)c = a, a= b, b= c;B) if(a>b)c = a, a

6、= b, b = c; C) if(a>b)c = a; a= b; b= c;D) if(a>b)c = a; a= b; b = c; ( 18)有以下程序:#include<stdio.h> main() intc= 0, k;for (k = 1; k<3; k+ ) switch(k) default:c+= k;case 2: c; break; case 4: c+= 2; break; printf("%dn" , c);程序运行后的输出结果是 。A) 3 B)5C)7 D)90;功能相同的是 (19)以下程序段中,与语句:k

7、= a>b? (b>c? 1: 0)A)if(a>b)&&(b>c)k = 1;else k = 0;B) if(a>b) II (b>)kelse k= 0 ;C) if(a< = b)k = 0;else if(b< = c)k = 1 ;D) if(a>b)k = 1;else if(b>c) k= 1;else k = 0 ;( 20)有以下程序:#include <stdio.h>main() char s = "012xy" ; int i , n = 0;for(i = 0

8、; si! = 0; i + + )if (si> = 'a'&&si< = 'z') n + + ; printf("%dn" , n); 程序运行后的输出结果是 。A)0B)2C) 3D)5( 21 )有以下程序:#include <stdio.h>main() int n= 2, k = 0;while(k &&n >2); printf("%d %dn" , k, n);程序运行后的输出结果是 。A)02B)13C)5 7D)12( 22)有以下定义语句

9、,编译时会出现编译错误的是A) char a= 'a'B) char a= 'n'C) char a= 'aa'D) char a= 'x2d'( 23)有以下程序:#include <stdio.h>main() char cl , c2;cl= A + 84;c2= A + 8 '5'printf("%c , %dn" , cl, c2);已知字母A的ASCII码为65,程序运行后的输出结果是 。A)E,68B)D,69C) E, DD)输出无定值(24)有以下程序:#inclu

10、de <stdio.h> void fun(int p) int d = 2;p= d + + ;printf("%d" , p); main() int a= 1;fun(a) ; printf("%dn" , a); 程序运行后的输出结果是 。A)32B)12C)21D)22( 2 5)以下函数 findmax 拟实现在数组中查找最大值并作为函数值返回,但程序中有错导致 不能实现预定功能。#define MIN 2147483647int findmax(int x, int n) int i, max;for(i = 0; i<n

11、 ; i + + ) max = MIN ;if(max<xi) max = xi ; return max;造成错误的原因是 。A) 定义语句int i , max ;中max未赋初值B) 赋值语句max = MIN ;中,不应给 max赋MIN值C) 语句if(max<xi)max = xi;中判断条件设置错误D) 赋值语句max = MIN ;放错了位置(26)有以下程序:#include <stdio.h>main() int m = 1, n= 2, *p= &m , *q= &n , *r;r= p ; p= q; q= r;printf(&

12、quot;%d , %d, %d, %dn", m, n, *p, *q);程序运行后的输出结果是 。A)1,2,1,2B)1,2,2,1C)2,1,2,1D)2,1,1,2(27)若有定义语句:int a410 , *p , *q4;且OW i<4,则错误的赋值是 A)p = aB)qi = aiC)p = aiD)p = &a21( 28)有以下程序:#include <stdio.h>#include <string.h>main() char str20 = "Qne*World" , "one*Dream

13、! " , *p = str1;printf("%d , ", strlen(p) ; printf("%sn" , p);程序运行后的输出结果是 。A)9 , One*WorldB)9 , One*Dream!C)1O, One*Dream!D)1O, One*World( 29)有以下程序:#include <stdio.h>main() int a = 2,3,5,4 , i;for(i = 0; i<4; i + + )switch(i%2) case 0: switch(ai%2)case 0: ai ; break

14、;case 1: ai;break;case 1: ai = 0;for(i = 0; i<4; i + + ) printf("%d" , ai) ; printf("n");程序运行后的输出结果是 。A)3 3 4 4B)2 0 5 0C)3 0 4 0D)0 3 0 4( 30)有以下程序:#include <stdio.h>#include <string.h>main() char a10 = "abed"printf("%d , %dn" , strlen(a), size

15、of(a) ;程序运行后的输出结果是 。A)7,4B)4,10C)8,8D)10,10(31)下面是有关C语言字符数组的描述,其中错误的是 。A) 不可以用赋值语句给字符数组名赋字符串B) 可以用输入语句把字符串整体输入给字符数组C) 字符数组中的内容不一定是字符串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所指字符串中是否有

16、'0'(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 ;(34) 有以下程序:#include <stdio.h>int f(int n) ;main() int a = 3, s;s= f(a); s= s+ f(a); printf("%dn" , s

17、);int f(int n) static int a = 1;n+= a+ + ;return n;程序运行后的输出结果是 。A)7 B)8C)9 D)10(35) 有以下程序:#include <stdio.h>#define f(x) x*x*xmain() int a = 3, s, t;s= f(a + 1); t= f(a + 1); printf("%d , %dn" , s, t); 程序运行后的输出结果是 。A)10,64B)10,10C)64,10 D)64,64A)structordintx; int y; int z; ; structo

18、rda;B)structordintx; inty;intz; struct orda;C)structordintx; inty;intz ; a ;D)structintx; inty;intz; )a;(37)设有定义:char *c ;,以下选项中能够使字符型指针c正确指向一个字符串的是A) char str = "string" ; c= str;B) scanf("%s" , c);C) c = getchar();D)*c = "string"(38) 有以下程序:#include<stdio.h>#incl

19、ude<string.h>struct Aint a ; char b10 ; double c; ;struct A f(struct 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; return t; 程序运行

20、后的输出结果是 。A) 1001 , ZhangDa,1098.0B) 1002, ZhangDa,1202.0C) 1001 , ChangRong,1098.0D) 1002 , ChangRong,1202.0(39) 若有以下程序段:int r = 8;printf("%dn" , r>>1);输出结果是 。A)16B)8C)4D)2(40) 下列关于C语言文件的叙述中正确的是 A) 文件由一系列数据依次排列组成,只能构成二进制文件B) 文件由结构序列组成,可以构成二进制文件或文本文件C) 文件由数据序列组成,可以构成二进制文件或文本文件D)文件由字符序

21、列组成,其类型只能是文本文件、填空题 请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。_【1】个结点。(1)某二叉树有5个度为2的结点以及3个度为1的结点,则该二叉树中共有(2) 程序流程图中的菱形框表示的是_【2】_。(3)软件开发过程主要分为需求分析、设计、编码与测试四个阶段,其中 产生"软件需求规格说明书”。(4)在数据库技术中,实体集之间的联系可以是一对一或一对多或多对多的,那么"学生"和"可选课程"的联系为【4】_。(5)人员基本信息一般包括:身份证号,姓名,性别,年龄等。其中可以作为主关键字是 【5】。(6) 若有定

22、义语句:int a = 5;,则表达式:a+ +的值是 【6】_。(7) 若有语句double x = 17; int y ;,当执行y = (int)(x/5)%2 ;之后y的值为_【7】_。(8) 以下程序运行后的输出结果是【8】_。#i nclude <stdio.h>main () int x= 20;printf("%d" , 0<x<20);printf("%dn" , 0<x&&x<20) ;(9) 以下程序运行后的输出结果是【9】。#i nclude <stdio.h>mai

23、n () int a = 1, b = 7;dob= b/2; a+= b; while(b>1);printf("%dn" , a); (10) 有以下程序:#in clude<stdio.h>main () int f, fl , 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&qu

24、ot;);程序运行后的输出结果是【10】(11) 有以下程序:#in elude <stdio.h>int a = 5;void fun (i nt b) int a = 10;a+= b; printf("%d" , a);main () int c = 20;fun(c); a+= c; printf("%dn" , a);程序运行后的输出结果是_【11】_ 。(12) 设有定义:struct pers on int ID ; char name12 ; p ;p的成员ID正确读入请将scanf("%d",_【12】_

25、);语句补充完整,使其能够为结构体变量 数据。(13) 有以下程序:#i nclude <stdio.h>main () char a20 = "How are you ? ", b20;scanf("%s", b); printf("%s %sn" , a, b);程序运行时从键盘输入:How are you ? <回车>则输出结果为_【13】_。(14) 有以下程序:#in clude <stdio.h> typedef struct int num ; double s; REC ;void

26、funl(REC x)x.num = 23; x.s= 88.5; main () REC a = 16,90.0);fun 1(a);printf("%dn" , a.num);程序运行后的输出结果是【14】。(15) 有以下程序:#in clude <stdio.h>fun (i nt x)if(x/2>0) fun(x/2);printf("%d.", x); main () fun(6) , printf("n") ; 程序运行后的输出结果是【15】一、选择题(1) C【解析】根据数据结构中各数据元素之间前后

27、关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。线性结构表示数据元素之间为一对一的关系,非线性结构表示数据元 素之间为一对多或者多对一的关系。根据各种结构的定义知二叉树是一种非线性结构。B【解析】 栈是限定只在一端进行插入与删除的线性表,通常称插入、删除的这一端为栈顶,另 一端为栈底。栈顶元素总是后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插 入的元素,也是最后才能被删除的元素。栈是按照”先进后出"或"后进先出”的原则组织数据的。D【解析】循环队列是将顺序队列首尾相连形成的,随着插入元素或删除元素的进行,其队头指针及队尾指针是在不断变化的,有时

28、可能会出现队头指针大于队尾指针的情况,也可能是队尾 指针大于队头指针,故答案为 D)。A【解析】算法的空间复杂度是指:算法执行过程中所需的存储空间。一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额 外空间。B【解析】 模块划分应考虑的因素包括模块之间的耦合和内聚。一般来说,要求模块之间的耦合 尽可能地低,即模块尽可能独立,要求模块的内聚程度尽可能地高,即遵循高内聚、低耦合的 原则。A【解析】 模块化、自顶向下、逐步求精都是结构化程序设计的原则;可封装是面向对象程序设 计原则。C【解析】N S图是由若干基本框图构成的流程图,其特点是没有流程

29、线;PAD图即问题分析图(Problem Analysis Diagram),它是一种由左往右展开的二维树形结构;程序流程图用于描述问题解决的过程和步骤,其中方框表示处理步骤,菱形框表示逻辑判断,箭头表示控制流向;E R图即实体联系图(Entity Relationship Diagram),用来描述现实世界的概念模型,构成元素有实体、属性和联系,分别用矩形、椭圆形和菱形表示。本题答案为C)。(8) B数据库管理系统是为【解析】数据库管理系统是指位于用户与操作系统之间的数据管理软件。数据库建立、使用和维护而配置的软件。(9) C【解析】E R图中用矩形表示实体(等同于表),用椭圆形表示实体的属

30、性(等同于表中字段),用菱形表示实体关系 (等同于外键 )。(10) D【解析】 两个相同结构关系的并是由属于这两个关系的元组组成的集合。(11) D【解析】 程序设计通常分为问题建模、算法设计、编写代码和编译调试四个阶段。所以选项 A)、B)、C)说法都不完整。(12) C【解析】C语言的标识符命名规则为:只能由字母、数值和下划线3种字符组成;第一个字符必须是字母或下划线;不能与C语言中的关键字或保留字相同。(13) A【解析】 标识符不能与C编译系统已经预定义的、具有特殊用途的保留标识符(即关键字)同名,否则程序在编译时会出现错误。题目源程序中使用了已经预定义的关键字case,所以将出现错

31、误。(14) B【解析】(int)(double)9/2)的值为 4,(9)%2 的值为 1,因此(int)(double)9/2) (9)%2 的值为 3。(15) B【解析】x= x + x可化为:x= x (x + x),由于x初始值为10,所以计算后,x = 10 20 = 10,因此选 B)。(16) D【解析】 执行第一个printf语句时,b= a+ b = 1,所以输出1,执行第二个printf语句时,a= 2*b=2, 所以输出结果为 2 。(17) C【解析】 逗号表达式的求解过程是:按表达式顺序从左往右依次求解。本题中由于判断条件a>b的值为假,所以选项 A)、B)

32、、D)中if语句后面的语句均未被执行,而 C)中的后两条语句a= b 和b = c被执行,因此选项C)的执行效果与其他三个不同。(18) A【解析】 第一次循环时,k= 1,在switch语句中,先执行default后面的语句,即c = c+ k= 1, 因为没有break语句,所以不会跳出switch结构,会接着执行case2后面的语句,即c= c+1= 2, 然后跳出switch ;第二次循环时,k = 2,直接执行case2后面的语句,即c= c+ 1 = 3,然后跳出switch 语句,结束循环,执行输出语句。(19) A【解析】 表达式k = a>b? (b>c ? 1

33、: 0) : 0表示:如果(a>b)条件为真,贝U k取值(b>c ? 1 : 0),否 则k取值0;当a>b的情况下,如果b>c,则k值为1,否则为0。所以该表达式与选项 A)功能相同。(20) B【解析】 在字符串数组si中,只有当下标i = 3和i = 4时,才满足if条件,所以n的值从0增加两 次,结果为 2 。(21) D【解析】 本题考查逻辑运算符的”短路"现象,由于k的值为0,表达式首先去求k+ +的值,因 为表达式k+ +的值为0,系统完全可以确定逻辑表达式的运算结果总是为0,因此将跳过n + +>2,不再对它进行求值,即 k的值加1,

34、n的值不变。(22) C【解析】aa是字符串,不用加上单引号。(23) A【解析】cl输出字符的ASCII码比字母A大4,即字母E; C2以十进制数字形式输出,因此可以 判断本题答案为 A) 。(24) C【解析】 程序运行后,首先输出的是 p的值,然后输出a的值。p = d + +,得到p的值为d的初始 值2; a的值不变,仍为1。(25) D【解析】 对max赋初值,应该放在循环语句之前,不然每次循环都将是从MIN开始比较。(26) B【解析】m和n的值不变,输出结果为1,2。指针*p和*q交换了指向的位置,即*p = &n , *q = &m , 输出结果分别为 2,1。

35、(27) A【解析】直接将二维数组a赋给p不合法,两者类型不匹配。(28) C【解析】可以将二维数组str看成是一个特殊的一维数组,其元素也是一个数组。那么,str0为"One*World" , str1为"One*Dream !"。(29) C【解析】 第一次循环,i = 0, i%2 = 0, a0%2 = 0, a0 = a0 + 1 = 3;第二次循环,i= 1,1%2 =1, a1 = 0;第三次循环,i = 2, a2%2 = 1, a2 = a2 1 = 4;第四次循环,i = 3, i%2 = 1, a3= 0。(30) B【解析】str

36、le n()用来返回字符串的长度,而sizeof()返回的是一个对象或者类型所占的内存字节数,即数组所占的内存。(31) D【解析】字符数组中的内容既可以是字符,也可以是字符串,选项D)说法不正确。(32) A【解析】表达式*b = *a是将a所指的字符赋给b所指的空间,然后,指针 a和b依次后移,直到到达指针a所指字符串的结尾。(33) A【解析】 函数指针的定义形式是:数据类型标识符 (*指针变量名 )()。 void(*pf)() 定义了一个没 有返回值的函数指针pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给 pf赋值时,只把函数名fun赋给pf即可。所以正确答案为选

37、项A。(34) 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) A【解析】 s=f(a+1)=a+1*a+1*a+1=10;s=f(a+1)=(a+1)*(a+1)*(a+1)=64 。(36) B【解析】定义结构体变量有三种方式:先声明结构体类型,再定义变量名,如选项A)所示;在声明类型的同时定义变量,如选项 C)所示;直接定义结构体类型变量,如选项D)所示。(37) A【解析】 选项B)、D)中,没有为字符串分配

38、空间,因此不能用 c指向字符串。选项C)中getchar() 函数返回一个字符,不能将字符赋给字符指针c。选项A)中首先定义了字符数组 str,然后将str的首地址赋给指针c,这样就使指针c指向了字符串"string"。(38) D【解析】在主函数中,通过a= f(a)实现函数调用,所以输出的结构体变量相应变为1002,ChangRong,1202.0。(39) C【解析】8用二进制表示为 1000,右移 1位后为 0100,即十进制 4。(40) C【解析】 文件由数据序列组成,可以构成二进制文件,也可以构成文本文件。二、填空题(1) 【 1 】 14【解析】 在二叉树中, 度为 0的结点数是度为 2的结点数加 1,故二叉树中结点数的总和为度为 0 的结点数、度为 1的结点数及

温馨提示

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

评论

0/150

提交评论