201009计算机二级C语言笔试真题文字word版 详细答案解析.doc_第1页
201009计算机二级C语言笔试真题文字word版 详细答案解析.doc_第2页
201009计算机二级C语言笔试真题文字word版 详细答案解析.doc_第3页
201009计算机二级C语言笔试真题文字word版 详细答案解析.doc_第4页
201009计算机二级C语言笔试真题文字word版 详细答案解析.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

201009二级c真题一、选择题在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确的选项涂写在答题卡相应位置上,答在试卷上不得分。(1)下列叙述中正确的是A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D)上述三种说法都不对(1)B线性表的顺序存储结构是把线性表中相邻的元素存放在相邻的内存单元中,而链式存储结构是用一组任意存储单元来存放表中的数据元素,为了表示出每个元素与其直接后继元素之间的关系,除了存储元素本身的信息外,还需存储一个指示其直接后继的存储位置信息。故线性表的链式存储结构所需的存储空间一般要多于顺序存储结构,答案为B)。(2)下列叙述中正确的是A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D)上述三种说法都不对(2)C栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。当有新元素进栈时,栈顶指针向上移动;当有元素出栈时,栈顶指针向下移动。在栈中栈底指针不变,栈中元素随栈顶指针的变化而动态变化,故答案为C)。(3)软件测试的目的是A)评估软件可靠性 B)发现并改正程序中的错误C)改正程序中的错误 D)发现程序中的错误(3)D软件测试的目的是为了发现程序中的错误而运行程序。(4)下面描述中,不属于软件危机表现的是A)软件过程不规范 B)软件开发生产率低C)软件质量难以控制 D)软件成本不断提高4)A软件危机是计算机软件在它的开发和维护过程中所遇到的一系列严重问题。主要表现在以下几个方面:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件可维护性差;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。故答案选A)。(5)软件生命周期是指A)软件产品从提出、实现、使用维护到停止使用退役的过程B)软件从需求分析、设计、实现到测试完成的过程C)软件的开发过程D)软件的运行维护过程(5)A通常将软件产品从提出、实现、使用维护到使用、退役的过程称为软件生命周期。故答案为A)。(6)面向对象方法中,继承是指A)一组对象所具有的相似性质 B)一个对象具有另一个对象的性质C)各对象之间的共同性质 D)类之间共享属性和操作的机制(6)D继承是面向对象方法的一个重要特征。广义地说,继承是指能够直接获得已有的性质和特征,不必重复定义它们。在面向对象的软件技术中,继承是指子类自动地共享基类中定义的数据和方法的机制,故答案为D)。(7)层次型、网状型和关系型数据库划分原则是A)记录长度 B)文件的大小C)联系的复杂程度 D)数据之间的联系方式(7)D数据库按数据模型分为层次型数据库、网状型数据库、关系型数据库,数据模型即数据之间的联系方式,故答案为D)。(8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是A)一对一 B)一对多 C)多对多 D)多对一(8)C两个实体间的联系可分为3种类型:一对一联系,表现为主表中的一条记录与相关表中的一条记录相关联;一对多联系,表现为主表中的一条记录与相关表中的多条记录相关联;多对多联系,表现为主表中的多条记录与相关表中的多条记录相关联。本题中一个工作人员可以使用多台计算机,一台计算机可被多个人使用。故答案为C)。(9)数据库设计中反映用户对数据要求的模式是A)内模式 B)概念模式 C)外模式 D)设计模式(9)C模式的3个级别反映了模式的3个不同环境,以及对它们的不同要求。其中,内模式处于最低层,它反映了数据在计算机物理结构中的实际存储形式,概念模式处于中层,它反映了设计者的数据全局逻辑要求,而外模式是处于最高层,反映了用户对数据的要求。故答案选C)。(10)有三个关系R、S和T如下:则由关系R和S得到关系T的操作是A)自然连接 B)交 C)投影 D)并(10)A自然连接是最常用的一种连接,它满足下面的条件:两关系有公共域;通过公共域的相等值进行连接,故答案为A)。(11)以下关于结构化程序设计的叙述中正确的是A)一个结构化程序必须同时由顺序、分支、循环三种结构组成B)结构化程序使用goto语句会很便捷C)在C语言中,程序的模块化是利用函数实现的D)由三种基本结构构成的程序只能解决小规模的问题(11)C一个结构化程序可以由顺序、分支、循环三种结构组成,但不是必须同时都包括,可以包括其中的一个或多个,所以选项A)错误。goto语句会破坏程序的结构性、可读性,不得以不要用,所以选项B)错误。三种基本结构构成的程序也可以解决大规模的程序,所以选项D)错误。在C语言中,利用函数来实现程序的模块化,C)正确。(12)以下关于简单程序设计的步骤和顺序的说法中正确的是A)确定算法后,整理并写出文档,最后进行编码和上机调试B)首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档C)先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档D)先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构(12)B设计一个能解决实际问题的计算机程序需要经过以下几个过程: 建立模型。 算法设计:给出解决问题的步骤,即算法。 算法表达:选择一种表达算法的工具,对算法进行清晰的表达。 编写程序:选择一种程序设计语言,把以上算法程序化,这称为编写程序。 程序调试:对编写好的程序进行调试,修改程序中的错误。 程序文档编写与程序维护。综上所述,B)选项是符合上述描述的,其他选项不恰当。(13)以下叙述中错误的是A)C程序在运行过程中所有计算都以二进制方式进行B)C程序在运行过程中所有计算都以十进制方式进行C)所有C程序都需要编译链接无误后才能运行D)C程序中整型变量只能存放整数,实型变量只能存放浮点数(13)BC程序在运行过程中所有计算都以二进制方式进行,所以A)正确B)错误。所有C程序先编译再链接,全都无误后才能运行。C程序中整型变量用于存放整数,实型变量用于存放浮点数。所以,本题答案为B)。(14)有以下定义:int a;long b;double x,y;则以下选项中正确的表达式是A)a%(int)(xy) B)ax!y; C)(a*y)%b D)yxyx(14)BA)选项中如果x与y的值相等那么取余时就会有除数为0的情况。C)选项中取余的两个数据都应为整数,不能有一方为实型变量,而a*y的结果为double型。D)选项表达式本身就错误,不能给表达式赋值。所以,本题答案为B)。(15)以下选项中能表示合法常量的是A)整数:1,200 B)实数:1.5E2.0 C)字符斜杠: D)字符串:007(15)DA)选项中1,200不能表示整数1200。B)选项中应表示为1.5E2。在C语言中,反斜杠是转义符,其后必须跟有其他字符,所以选项C)也是错误的。D)选项正确。(16)表达式aaa9的值是A)9 B)9 C)18 D)0(16)D题干中的表达式可以分解为以下表达式: a=9; a=a-a 即a=9-9,此时a的值为0; a=a+a 即a=0+0,此时a的值为0。故本题的答案为D)。(17)若变量已正确定义,在if(W)printf(%dn,k);中,以下不可替代W的是A)abc B)chgetchar() C) abc D)a(17)A在C语言中,表示不等于不能用,而只能使用!=。其他选项均满足题目的要求。(18)有以下程序#includemain()int a1,b0;if(!a)b;else if(a0) if(a) b2;else b3;printf(%dn,b);程序运行后的输出结果是A)0 B)1 C)2 D)318)A根据在ifelse语句中,else总是和最近的if配对的原则,本题中层次关系是:if(!a)与else if(a=0)是一组,在最外层。而if(a)与else是一组,位于else if(a=0)条件的内层。据此所有条件均不成立,所以b未进行任何操作仍为初始值0。(19)若有定义语句int a,b;double x;则下列选项中没有错误的是A) switch(x%2) B)switch(int)x/2.0)case 0: a;break; case 0: a;break; case 1:b;break; case 1:b;break; default : a; b; default: a; b; C)switch(int)x%2) D)switch(int)(x)%2)case 0:a;break; case 0.0:a;break; case 1:b; break; case 1.0:b; break; default:a; b; default:a; b; (19)Cswitch()中括号内的变量类型应该与下面case语句后的常量保持类型一致。使用(int)x,可以将x强制转换成整型,然后与整型2做取余运算还是整型数据。若与数据2.0做取余运算,按照转换原理:向高精度的数据类型进行转换,结果就变成了实型数据。综上所述,本题C)正确,B)错误。A),D)均不满足switch语句的原则。(20)有以下程序#includemain()int al,b2;while(a6) ba; a2;b%10;printf(%d,%dn,a,b);程序运行后的输出结果是A)5,11 B)7,1 C)7,11 D)6,1(20)B第一次循环后 b为3,a为3;第二次循环后b为6,a为5;第三次循环:执行b+=a,所以b为11;执行a+=2所以a为7;执行b%=10,所以b为1。(21)有以下程序#includemain()int y10;while(y);printf(y%dn,y);程序执行后的输出结果是A)y0 B)y1C)yl D)while构成无限循环(21)B当y减为1时判断while(y-),此时满足条件,但是y变成0。下次循环判断while(y-)时,因为y为0不满足条件跳出循环,但是此时也要执行y-,所以y变成了-1。 打印输出时输出-1。(22)有以下程序#includemain() char srstuv;printf(%cn,*s2);程序运行后的输出结果是A)tuv B)字符t的ASCII码值C)t D)出错(22)C*s+2 相当于(*s)+2即先取出s所指的数据然后对其加2,s是字符串的首地址,所以*s即s0就是字符r,所以在它的ASCII码上加上数字2就变成了字母t的ASCII码,所以以%c格式输出,即为选项C)。(23)有以下程序#include#includemain()char xSTRING;x00;x10;x20;printf(%d%dn,sizeof(x),strlen(x);程序运行后的输出结果是A)61 B)70 C)63 D)71(23)Bsizeof是返回字符串在内存中所占用的空间,是真正的长度。strlen是返回字符串的长度,strlen遇到0就结束,而且不包括0。(24)有以下程序#includeint f(int X);main()int n1,m;mf(f(f(n);printf(%dn,m);int f(int x)return x*2;程序运行后的输出结果是A)1 B)2 C)4 D)8(24)D第一次调用的是最内层的f(n),即f(1) 返回值2。第二次调用中间的f(f(n)),即f(2)返回值4。最后调用最外层的f(f(f(n),即f(4)返回值8,最后打印输出。(25)以下程序段完全正确的是A)int*p; scanf(%d,&p); B)int*p; scanf(%d,p);C)int k,*p&k; scanf(%d,p); D)int k,*p; *p&k; scanf(%d,p);(25)CA)选项输入的是指针型变量p的地址,变量一定义就已分配好了地址不能再指定了,所以A错误。B)选项没有指定指针p应该指向的变量,没给变量赋初值。D)选项中,p是地址,*p是地址内存放的数据,它把整型变量k的地址赋给了*p,所以错误。(26)有定义语句:int *p4;以下选项中与此语句等价的是A)int p4; B)int *p; C)int *(p4); D)int (*p)4;(26)C题目中声明的p表示的是有4个整数指针元素的数组。A选项表示有四个整数元素的数组。B选项表示一个指向整数指针的指针。D选项声明了一个指针变量,它指向的是含4个元素一维数组。所以本题答案为C)。(27)下列定义数组的语句中,正确的是A)int N10; B)#define N 10 C)int x0.10; D)int x; int xN; int xN;(27)BA)中的N是一个变量,不可以用变量来定义数组,所以选项A)错误。C)中把所有的下标均列出不正确,此处只需指明数组长度即可。D)中在定义时没有指明数组长度不正确,如果不指明长度就应在定义时对数组元素进行赋值,而此选项没有,所以错误。故本题答案为B)。(28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是A)int a50; B)int b0,0,0,0,0;C)int c23; D)int i5,di;(28)D在进行数组的定义时,不能使用变量对数组的长度进行定义。其他选项均符合数组定义标准。(29)有以下程序#includevoid f(int*p);main()int a51,2,3,4,5,*ra;f(r);printf(%dn,*r);void f(int *p) pp3; printf(%d,*p);程序运行后的输出结果是A)1,4 B)4,4 C)3,1 D)4,1(29)D指针r所指的位置一直是数组a的起始地址即a0的地址,而形参p通过传递参数开始也指向a数组起始地址,但通过p=p+3后指向了a3的地址,所以先打印输出a3中数据4,然后返回主函数输出r所指a0中数据1。(30)有以下程序(函数fun只对下标为偶数的元素进行操作)#includevoid fun(int *a,int n)int i,j,k,t;for(i0;in1;i2)ki;for(ji; jak)kj;tai;aiak; akt;main()int aa101,2,3,4,5,6,7,i;fun(aa,7);for(i0;iak) k=j;可知当前k是记录数组中较大数据值所在位置的下标变量,所以该函数的作用是对数组a中的下标为偶数位置的数据进行从大到小的排序,即对a0,a2,a4,a6中的数据 1,3,5,7进行从大到小的排序,其他位置的数据不变,所以答案为A)。(31)下列选项中,能够满足若字符串s1等于字符串s2,则执行ST要求的是A)if(strcmp(s2,s1)0) ST; B)if(sls2)ST;C) if(strcpy(s1,s2)1)ST; D)if(sls20)ST;31)A函数strcmp(s2,s1)的作用是比较大小,函数strcpy(s1,s2)的作用是进行字符串复制,所以选择A)选项。B)和D)都是比较的字符串s1与s2的地址是否一致而不是比较字符串内容是否一致。(32)以下不能将s所指字符串正确复制到t所指存储空间的是A)while(*t*s)t;s; B)for(i0;tisi;i);C)do*t*s;while(*s); D)for(i0,j0;tisj; );(32)CC)选项中,当复制完s所指字符串的最后一个非0字符后,指针s指向了0,循环结束,没有将字符串结束符0复制到t中,因此C)选项是错误的。(33)有以下程序(strcat函数用以连接两个字符串)#include#includemain()char a20ABCD0EFG0,bIJK;strcat(a,b);printf(%sn,a);程序运行后的输出结果是A)ABCDE0FG0IJK B)ABCDIJKC)IJK D)EFGIJK(33)Bchar *strcat(char *dest,char *src)的功能是:把src所指字符串添加到dest结尾处(覆盖dest结尾处的0)并添加0。因为0是字符串的结束标志,所以a数组中存放的字符串为ABCD,所以将两个字符串拼接后结果为ABCDIJK。(34)有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母#include#includevoid fun(char *p)int i0;while(pi)if(pi&islower(pi1) pi1pi1aA;i;main()char sl100ab cd EFG !;fun(s1);printf(%sn,s1);程序运行后的输出结果是A)ab cd EFG ! B)Ab Cd EFg ! C)aB cD EFG ! D)ab cd EFg !(34)Cint islower(char ch)的功能是判断字符c是否为小写英文字母,当ch为小写英文字母(a-z)时,返回非零值,否则返回零。后面语句pi-1=pi-1-a+A的作用是把小写字母转化为大写字母。根据判断条件可知,只有当空格字符的前一个字符为小写字符时才把该小写字符变成大写,所以选择C)。(35)有以下程序#includevoid fun(int x)if(x/21)fun(x/2);printf(%d,x);main()fun(7);printf(n);程序运行后的输出结果是A)1 3 7 B)7 3 1 C)7 3 D)3 7(35)D本程序是一个递归函数,第一次实参为7,第二次为3,此时不满足条件,因为3/2结果为1,等于1而不大于1,所以跳过fun(x/2)语句,执行printf语句,即打印出3。然后向上返回到第一次调用打印出7。(36)有以下程序#includeint fun()static int x1;x1; return x;main()int i,s1;for(il;i5;i)sfun();printf(%dn,s);程序运行后的输出结果是A)11 B)21 C)6 D)120(36)B本题目fun()函数中定义的变量x为静态局部变量,第一循环后x的值为2,s的值为3;第二次循环后x的值为3,s的值为6;第三次循环后x的值为4,s的值为10;第四次循环后x的值为5,s的值为15;第五次循环后x的值为6,s的值为21。(37)有以下程序#include#includemain()int *a, *b, *c;abc(int *)malloc(sizeof(int); *a1;*b2,*c3;ab;printf(%d,%d,%dn,*a, *b,*c);程序运行后的输出结果是A)3,3,3 B)2,2,3 C)1,2,3 D)l,l,3(37)A根据程序可以分析出系统只分配了一个整型数据的存储空间,把这个空间的地址分别赋给了指针型变量a、b和c。程序利用指针a把数据1写入了该空间,然后利用指针b,把数据2写入该空间,所以原来的1就被覆盖掉了,最后用指针c把数据3写入该空间把数据2覆盖掉了,此空间中最后留有的数据是3。因为3个指针都指向该空间,所以输出数据均为3。(38)有以下程序#includemain()int s,t,A10;double B6;ssizeof(A); tsizeof(B);printf(%d,%dn,s,t);在VC6平台上编译运行,程序运行后的输出结果是A)2,4 B)4,4 C)4,8 D)10,6(38)Csizeof的作用就是返回一个对象或者类型所占的内存字节数。在VC6中整型占4个字节,双精度实型占8个字节,所以选C)。(39)若有以下语句typedef struct Sint g;char h;T;以下叙述中正确的是A)可用S定义结构体变量 B)可用T定义结构体变量C)S是struct类型的变量 D)T是struct S类型的变量(39)B此题考察的是结构体的定义方式。S是我们定义的结构体的名字,在题目中顺便将T定义为struct S类型,即T被定义为一个类型名。这样就可以用T来定义说明新的变量了。在此S与T 都不是变量的名称。(40)有以下程序#includemain()short c124;cc;printf(%dn,c);若要使程序的运行结果为248,应在下划线处填入的是A)2 B)| 248 C)&0248 D)1(40)D短整型在存储时占用16位,按照移位运算如果右移两位就等于原数除以4,结果为31,如果左移一位相当于原数乘以2结果为248,所以选择D)。二、填空题请将每一个空的正确答案写在答题卡序号的横线上,答在试卷上不给分。(1)一个栈的初始状态为空。首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,则所有元素退栈(包括中间退栈的元素)的顺序为【1】1dcba2345。(1)【1】1DCBA2345栈是限定只在一端进行插入与删除的线性表,栈按照先进后出或后进先出的原则组织数据。当54321入栈后,此时执行退栈操作,出栈的元素是1,然后ABCD入栈,再将所有元素退栈,故退栈顺序为:1DCBA2345。(2)在长度为n的线性表中,寻找最大项至少需要比较【2】1次。(2)【2】1在线性表中,如果元素按从小到大的顺序排列且查找从后向前进行时,比较1次即能找到最大值,这时查找比较次数最少,故至少比较次数为1次。(3)一棵二叉树有10个度为1的结点,7个度为2的结点,则该二叉树共有25【3】个结点。(3)【3】25在二叉树中,根据性质3,度为0的结点是度为2的结点个数+1,故二叉树中结点总和为度为0的结点数、度为1的结点数以及度为2的结点数三者相加,即8+10+7,共25个结点。(4)仅由顺序、选择(分支)和重复(循环)结构构成的程序是【4】 程序。(4)【4】结构化结构化程序是程序设计的先进方法和工具。在1996年,Boehm和Jacopini证明了程序设计语言仅使用三种基本控制结构足以表达出其他形式结构的程序设计方法。这三种基本控制结构就是顺序结构、选择(分支)结构、循环(重复)结构,故本题答案为结构化程序。(5)数据库设计的四个阶段是:需求分析,概念设计,逻辑设计和【5】 。(5)【5】物理设计数据库设计的四个阶段是需求分析、概念设计、逻辑设计和物理设计。(6)以下程序运行后的输出结果是【6】2/8。#includemain()int a200,b010;printf(%d%dn,a,b);(6)【6】2008整型变量a的值为200,b的值010是用八进制表示的10即十进制的8,最后输出格式均为%d,即十进制格式,所以输出为2008。(7)有以下程序#includemain()int x,y;scanf(%2d%1d,&x,&y);printf(%dn,xy);程序运行时输入:1234567,程序的运行结果是【7】15。(7)【7】15可以指定输入数据所占列宽,系统自动按所指定的格式截取所需数据。%2d即将输入数据的2个列宽的数据赋给变量 x ,因为输入的为1234567,所以前两个列宽的数据为12,即x的值为12,同理%1d即把输入数据中前两个列宽所在数据后的一个列宽的数据赋给变量y,所以y的值为3 ,所以x+y的值为15。(8)在C语言中,当表达式值为0时表示逻辑值假,当表达式值为【8】时表示逻辑值真。(8)【8】非0本题一定要明确一个概念,即:所有非0的数(并不只是1),在c语言中都表示逻辑值为真。(9)有以下程序#includemain()int i,n0,0,0,0,0;for(il;i4;i)nini1*31;printf(%d ,ni);程序运行后的输出结果是【9】。9)【9】1 4 13 40第一次循环结果为:n1=0*3+1,即n1的值为1,打印输出1 ;第二次循环结果为:n2=1*3+1,即n2的值为4,打印输出4 ;第三次循环结果为:n3=4*3+1,即n3的值为13,打印输出13 ;第四次循环结果为:n4=13*3+1,即n4的值为40,打印输出40。(10)以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回。请填空。(设N已定义)int fun(int xN)int i,k0;for(i0;iN;i)if(xixk)k【10】;return xk;(10)【10】i通过函数中语句 return xk; 可知xk表示的是该一维数组中最小的值,所以当xi小于xk所代表的数值后应将i变量赋给k变量,使得xk表示当前值较小的那个数据。(11)有以下程序#includeint*f(int *p,int *q);main()int ml,n2,*r&m;rf(r,&n); printf(%dn,*r); int *f(int *p,int *q)return (*p*q)?p:q;程序运行后的输出结果是【11】。(11)【11】2本题中 f 函数的功能是返回指针p与指针q所指的元素中较大的那个

温馨提示

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

评论

0/150

提交评论