全国计算机二级C选择题题库第套_第1页
全国计算机二级C选择题题库第套_第2页
全国计算机二级C选择题题库第套_第3页
全国计算机二级C选择题题库第套_第4页
全国计算机二级C选择题题库第套_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

全国计算机二级C选择题题库第套全国计算机二级C选择题题库第套全国计算机二级C选择题题库第套xxx公司全国计算机二级C选择题题库第套文件编号:文件日期:修订次数:第1.0次更改批准审核制定方案设计,管理制度全国计算机二级C选择题题库第34套1、下列叙述中错误的是A)数据结构中的数据元素不能是另一数据结构B)数据结构中的数据元素可以是另一数据结构C)空数据结构可以是线性结构也可以是非线性结构D)非空数据结构可以没有根结点参考答案:A数据元素是一个含义很广泛的概念,它是数据的"基本单位",在计算机中通常作为一个整体进行考虑和处理。数据元素可以是一个数据也可以是被抽象出的具有一定结构数据集合,所以数据结构中的数据元素可以是另一数据结构。满足有且只有一个根结点并且每一个结点最多有一个前件,也最多有一个后件的非空的数据结构认为是线性结构,不满足条件的结构为非线性结构。空数据结构可以是线性结构也可以是非线性结构。非空数据结构可以没有根结点,如非性线结构"图"就没有根结点。故选A选项。2、为了降低算法的空间复杂度,要求算法尽量采用原地工作(inplace)。所谓原地工作是指A)执行算法时所使用的额外空间固定(即不随算法所处理的数据空间大小的变化而变化)B)执行算法时所使用的额外空间随算法所处理的数据空间大小的变化而变化C)执行算法时不使用额外空间D)执行算法时不使用任何存储空间参考答案:A算法的空间复杂度是指执行这个算法所需要的内存空间,包括输入数据所占的存储空间、程序本身所占的存储空间、算法执行过程中所需要的额外空间。如果额外空间量相对于问题规模(即输入数据所占的存储空间)来说是常数,即额外空间量不随问题规模的变化而变化,则称该算法是原地工作的。故选A选项3、某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m,rear=m-1,则该循环队列中的元素个数为A)m-1B)mC)1D)0参考答案:A循环队列长度为m,由初始状态为front=rear=m,可知此时循环队列为空。入队运算时,首先队尾指针进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear=m+1时,置rear=1。退队运算时,排头指针进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m。该题中m-1<m,即rear-front<0,则该循环队列中的元素个数为(m-1)-m+m=m-1。故选A选项。4、某棵树只有度为3的结点和叶子结点,其中度为3的结点有8个,则该树中的叶子结点数为A)15B)16C)17D)不存在这样的树参考答案:C树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。由于只有度为3的结点和叶子结点,可知最后一层都为叶子结点,倒数第二层一部分结点度为3,一部分为叶子结点,其余的结点的度均为3,计算度为3的结点总数(33-1-1)/2<8<(34-1-1)/2可知,树共有4层,前两层有度为3的结点(33-1-1)/2=4个,第三层有33=9个结点,其中4个是度为3的结点,5个是叶子结点,所以该树中的叶子结点数为4×3+5=17。故选C选项。5、某二叉树共有530个结点,其中度为2的结点有250个,则度为1的结点数为A)29B)30C)249D)251参考答案:A在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。对任何一棵二叉树,度为0的结点总是比度为2的结点多一个。二叉树结点总数为530,度为2的结点有250个,则度为0的结点有251个,那么度为1的结点个数为530-250-251=29。故选A选项。6、若某二叉树中的所有结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,则该二叉树遍历序列中有序的是A)前序序列B)中序序列C)后序序列D)以上说法均可以参考答案:B二叉树遍历可以分为3种:前序遍历(访问根结点在访问左子树和访问右子树之前)、中序遍历(访问根结点在访问左子树和访问右子树两者之间)、后序遍历(访问根结点在访问左子树和访问右子树之后)。由于结点值均大于其左子树上的所有结点值,且小于右子树上的所有结点值,那么只要遍历时访问根结点在访问左子树和右子树之间,遍历序列有序,即中序序列有序。故选B选项。7、将C语言的整数设为整数类I,则下面属于类I实例的是A)-103B)10E3C)D)"0103"参考答案:A整数类实例包括:十进制常量用0~9表示,不能以0开头;八进制常量用0~7表示,必须用0开头;十六进制常量用0~9和A~F(a~f)表示,必须以0x或0X开头。本题中B选项是科学计数法表示的浮点数实例,C选项是浮点数实例,D选项是字符串实例。故选A选项。8、下列叙述中正确的是A)软件是程序、数据和文档B)软件是程序和数据C)软件是算法和数据结构D)软件是算法和程序参考答案:A计算机软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。故选A选项。9、软件生命周期是指A)软件的定义和开发阶段B)软件的需求分析、设计与实现阶段C)软件的开发阶段D)软件产品从提出、实现、使用维护到停止使用退役的过程参考答案:D通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项A、B、C选项均为生命周期的一部分。故选D选项。10、下列叙述中正确的是A)数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能B)数据库系统能够管理各种类型的文件,而文件系统只能管理程序文件C)数据库系统可以管理庞大的数据量,而文件系统管理的数据量较少D)数据库系统独立性较差,而文件系统独立性较好参考答案:A数据管理技术的发展经历了3个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。三者各自的特点如下表所示。特点人工管理阶段文件系统阶段数据库系统阶段管理者人文件系统数据库管理系统面向对象某个应用程序某个应用程序现实世界共享程度无共享,冗余度大共享性差,冗余度大共享性大,冗余度小独立性不独立,完全依赖于程序独立性差具有高度的物理独立性和一定的逻辑独立性结构化无结构记录内有结构,整体无结构整体结构化,用数据模型描述控制能力由应用程序控制由应用程序控制由DBMS提供数据安全性、完整性、并发控制和恢复数据库系统可以解决数据冗余和数据独立性问题,而文件系统不能。数据库系统和文件系统的区别不仅在于管理的文件类型与数据量的多少。数据库系统具有高度的物理独立性和一定的逻辑独立性,而文件系统独立性较好。故本题选A选项。11、关于程序模块化,以下叙述错误的是A)程序模块化可以提高程序运行的效率B)程序模块化可以提高程序编制的效率C)程序模块化可以提高程序代码复用率D)程序模块化可以提高调试程序的效率参考答案:A模块化程序的优点:1、易于维护和复用,可以提高程序编制的效率,2、易于分工合作,3、易于模块化调试测试。模块化程序的副作用:1、可能会降低程序运行效率,2、设计的前期工作需要多花费时间。可知选项B,C,D正确。12、以下是正确C语言标识符的A)&3B)#3C)_3D)-3参考答案:CC语言合法标识名的命名规则是:(1)标识符由字母、数字和下划线组成,(2)第一个字符不能是数字只能是字母或下划线。选项A的第一个字符为&,非法,选项B,第一个字符为#,非法,选项D,第一个字符为-,非法。答案为选项C。13、若有定义:inta,b,c;以下程序段的输出结果是a=11;b=3;c=0;printf("%d\n",c=(a/b,a%b));A)2B)0C)3D)1参考答案:AC语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。因此c的值为a%b即11%3=2,故答案为A选项。14、以下选项中合法的C语言常量是A)'C-STR'B)C)"\D)2EK参考答案:B所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项A是字符串,但使用单引号,错误,选项C,D,为实型常量中指数形式,但指数形式e(E)之前必须是数字,之后必须为整数,错误。故答案为B选项。15、设有定义:intx,y,z;,且各变量已赋正整数值,则以下能正确表示代数式""的C语言表达式是()。A)x/y/zB)1/x*y*zC)1/(x*y*z)D)1/x/y/(double)z参考答案:A代数表达式1/是小数,转为c语言的表达式必须是小数A选项由于为浮点数,计算结果自动转换为浮点数,故A正确。选项B,C,D的表达式均为0,因此只有选项A正确。答案为A选项。16、有以下程序#include<>main(){chara,b,c,d;scanf("%c%c",&a,&b);c=getchar();d=getchar();printf("%c%c%c%c\n",a,b,c,d);}当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)12<CR>34<CR>则输出结果是A)123B)12C)1234D)1234参考答案:Ascanf()函数从标准输入输出中读入两个字符'1''2'分别赋给变量a、b,遇到回车自动结束,但回车符已经存入缓冲区,函数getchar()将从中接受这个字符,故c赋值为回车符,然后第二个getchar()读入字符'3',因此a='1',b='2',c=<CR>,d='3',故答案为A选项。17、有以下程序#include<>main(){inta,b;for(a=0;a<3;a++){scanf("%d",&b);switch(b){default:printf("%d,",b+1);continue;case1:printf("%d,",b+1);case2:printf("%d,",b+1);continue;}}}执行时输入:123<回车>,则输出结果是A)2,2,3,4,4,4,B)2,3,4,C)2,2,3,4,D)2,3,3,4,5,6,参考答案:Ccontinue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。switch…case如果没有break会导致多个分支重叠。因此,输入1,2,3,则1执行case1:printf("%d,",b+1);case2:printf("%d,",b+1);continue;后结束。2则执行case2:printf("%d,",b+1);continue;3则执行default:printf("%d,",b+1);continue;得到的结果是2,2,3,4。故答案为C选项。18、有以下程序#include<>#include<>main(){doublex,y,z;scanf("%lf%lf",&x,&y);z=x/y;while(1)if(fabs(z)>){x=y;y=x;z=x/y;}elsebreak;printf("y=%f\n",y);}执行时输入:<回车>,则输出结果是A)B)C)D)参考答案:A题目中程序执行过程中关键语句的结果为:z=,if条件成立,x=,y=,z=,下一次循环if条件不成立跳出循环,按照格式打印y值为。故答案为A选项。19、有以下程序#include<>main(){inti;charc;scanf("%c",&c);for(i=0;i<5;i++){if(i>c)continue;printf("%d,",i);}}执行时输入:0<回车>后,则输出结果是A)5B)0,0,0,0,0,C)0,1,2,3,4,D)0,1,参考答案:Cscanf("%c",&c),输入的字符,题目中输入了0,是字符,对应于ASCII码为48,因此for循环,i的范围从0~5,均小于48,if条件不成立,直接执行下一条语句,因此执行printf,因此得到的结果是0,1,2,3,4。故答案为C选项。20、以下程序拟实现计算sum=1+1/2+1/3+…+1/50。#include<>main(){inti;doublesum;sum=;i=1;do{i++;sum+=1/i;}while(i<50);printf("sum=%lf\n",sum);}程序运行后,不能得到正确结果,出现问题的语句是A)sum+=1/i;B)while(i<50);C)sum=;D)i++;参考答案:A选项A,sum+=1/i;i为整型,因此1/i是整型类型,当1/i有小数时,会被截断。因此1/i结果始终为0,导致结果出错。,应该改为sum+=i。因此答案为A选项。21、若有定义语句:doublea,*p=&a;以下叙述中错误的是A)定义语句中的*号是一个间址运算符B)定义语句中的*号是一个说明符C)定义语句中的p只能存放double类型变量的地址D)定义语句中*p=&a把变量a的地址作为初值赋给指针变量p参考答案:A指针运算符(通常称为间接引用运算符:indirectionoperator或复引用运算符:dereferencingoperator),它返回其操作数(即一个指针)所指向的对象的值。定义语句中的*号不是一个间址运算符,而是定义指针变量的说明符,因此,A项错误,B项正确,原则上说p可以放double兼容性的变量地址,C项正确,根据指针的赋值运算,可知D项正确。故答案为A选项。22、关于函数返回值,以下叙述正确的是A)函数可以返回整个结构体,即使结构体中有数组B)函数只能返回基本数据类型的数值或指针C)函数不可以返回一个数组D)函数不能没有返回值参考答案:A函数返回值可以整型、实型、字符型、指针和结构类型,也可以没有返回值。因此选项A正确,可以返回数组指针,因此可知选项B,C,D错误。故答案为A选项。23、有以下程序#include<>intfun(int*b,intn){inti,r=1;for(i=0;i<=n;i++)r=r*b[i];returnr;}main(){intx,a[]={2,3,4,5,6,7,8,9};x=fun(a,3);printf("%d\n",x);}程序运行后的输出结果是A)24B)720C)120D)6参考答案:Cfun(),求数组指定返回的元素的积。fun(a,3),求的是数组a[0]~a[3]的积。因此结果为2*3*4*5=120,故答案为C选项。24、若有语句:inta[3][4],(*p)[4];p=a;,则以下选项中叙述错误的是A)系统将开辟一个名为p的二维数组,p[0][0]中的值即为a[0][0]中的值B)p+1代表a[1][0]的地址C)p中将存放a数组的首地址D)p+2代表a数组最后一行的首地址参考答案:A(*p)[4]定义了一个数组指针。p可以指向类似于arry[][4]的数组,题设中,p不是一个二维数组,只是可以指向这类二维数组,因此选项A错误。p+1代表了第一行第一个元素的地址,p=a指向数组a的首地址,则B、C选项正确,同理可知选项D也正确。故答案为A选项。25、有以下程序#include<>voidchange(char*array,intlen){for(len--;len>=0;len--)array[len]+=1;}main(){inti;chararray[5]="ABCD";change(array,4);for(i=0;i<4;i++)printf("%c,",array[i]);}程序运行后的输出结果是A)B,C,D,E,B)A,B,C,D,C)C,D,E,F,D)B,D,F,H,参考答案:A函数change()的作用将从数组尾部将数组内的元素值加1。数组的初始值为ABCD,因此经change()后,得到的值为BCDE。故答案为A选项。26、设有以下程序段floata[8]={,};intb[1]={0};charc[]={"A","B"};chard=="1";以下叙述正确的是A)只有变量c的定义是合法的B)只有变量a,b,c的定义是完全合法的C)所有变量的定义都是完全合法的D)只有变量a,b的定义是完全合法的参考答案:Dfloata[8]={,};定义了一个包含8个float型元素的数组,并初始化了数组的前2项,其他项是随机数。intb[1]={0},定义了只有一个int型元素的数组,并初始化为0。charc[]={"A","B"};定义一个char型数组,大小有初始化元素决定,但初始化值是字符串,类型不兼容,编译出错。chard="1";定义一个char型变量,但是初始化赋值字符串,类型不兼容,编译出错。因此只有a,b定义和初始化正确。故答案为D选项。27、有以下程序#include<>main(){inta[4],p,x,i;for(i=3;i>0;i--)a[i-1]=i*2-1;scanf("%d",&x);i=0;while(a[i]<x)i++;p=i;for(i=3;i>p;i--)a[i]=a[i-1];a[p]=x;for(i=0;i<4;i++)printf("%3d",a[i]);printf("\n");}执行时输入:2<回车>,则输出结果是A)1234B)5431C)1235D)3214参考答案:C第一个for循环初始化数组a,分别为1,3,5,随机数,形成了基本有序的序列,再将输入的数字插入到数组a,使他们形成有序序列。因此可以分析出,打印的结果为1,2,3,5。故答案为C选项。28、有以下程序#include<>intfun(inta[],intn,intx){int*p=a;while(p<a+n&&*p!=x)p++;if(p<a+n)returnp-a;elsereturn-1;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10};printf("%d\n",fun(a,10,10));}程序运行后的输出结果是A)9B)-1C)10D)0参考答案:Awhile(p<a+n&&*p!=x)p++;p=a;n=10,x=10;while循环条件成立,直到p=a+9,结束循环,执行下一条语句,if条件成立,返回p-a,此时执行p-a=a+9-a=9;因此,输出9。故答案为A选项。29、有以下程序#include<>main(){charw[20],a[5][10]={"abcde","fghij","klmno","pqrst","uvwxy"};inti;for(i=0;i<5;i++)w[i]=a[i][i];w[5]='\0';printf("%s\n",w);}程序运行后的输出结果是A)ejotyB)afkpuC)agmsyD)eimqu参考答案:C数组a是二维数组,数组w存放二维数组a行列值相同位置的元素,由a[5][10]可得w[0]~w[4]的元素分别是agmsy,因此打印结果为agmsy。故答案为C选项。30、语句printf("%d\n",strlen("\t\"\\\n\'\065\08AB"));的输出结果是A)6B)7C)8D)9参考答案:A字符串"\t\"\\\n\'\065\08AB"中共有13个字符,而strlen()函数从字符串第一个字符开始扫描,直到碰到第一个结束符'\0'为止,然后返回计数器值(长度不包含"\0")。故输出结果为6。答案为A选项。31、有以下程序#include<>#include<>voidfun(char*s,intm1,intm2){chart,*p;p=s+m1;s=s+m2;while(s<p){t=*s;*s=*p;*p=t;s++;p--;}}main()intn=6;fun(ss,0,n-1);fun(ss,9,n);fun(ss,0,9);printf("%s\n",ss);}程序运行后的输出结果是A)012345B)C)876543D)参考答案:Afun(*ss,m1,m2)的作用是,如果m1>m2交换数组元素ss[m1],ss[m2]。因此,fun(ss,0,5)后ss的0,1,2,3,4,5,6,7,8,\0。fun(ss,9,6)后ss的0,1,2,3,4,5,\0,8,7,6。fun(ss,0,9)后ss的0,1,2,3,4,5,\0,8,7,6。因此打印结果012345。故答案为A选项。32、有以下程序#include<>intm=1,n=2;voidsub1(intm,intn){m+=2;n++;}voidsub2(){m++;n+=2;}main(){printf("%d,%d,",m,n);sub1(4,5);printf("%d,%d,",m,n);sub2();printf("%d,%d\n",m,n);}程序运行后的输出结果是A)1,2,1,2,2,4B)1,2,6,6,7,8C)1,2,2,4,2,4D)1,2,6,6,2,4参考答案:A全局变量与函数体内局部变量同名时,局部变量会覆盖全局变量,因此在sub1()函数内,全局变量m,n是不可见的,在sub1()对m,n操作的是局部变量,对全局变量不产生影响。但在sub2()函数内,由于没有和全局变量变量重名,因此在此函数内,m,n是可见的。因此,第一个printf()打印的是全局变量m,n,故打印的是1,2,第二个printf(),调用sub1(),没有修改全局变量m,n.故打印的是1,2,第三个printf(),之前调用了sub2(),修改了全局变量m,n。因此,打印的是2,4,故答案为A选项。33、有以下程序#include<>#include<>longfun(chars[]){longn;intsign;for(;isspace(*s);s++);sign=(*s=='-')-1:1;if(*s=='+'||*s=='-')s++;for(n=0;isdigit(*s);s++)n=10*n+(*s-'0');returnsign*n;}main(){chars[]="-26a3";printf("%d\n",fun(s));}程序运行后的输出结果是A)-263B)2C)0D)-26参考答案:Disspace(c)检查参数c是否为空格字符,也就是判断是否为空格('')、水平定位字符('\t')、归位键('\r')、换行('\n')、垂直定位字符('\v')或翻页('\f')的情况。若参数c为空格字符,则返回TRUE,否则返回NULL(0)。Isdigit(c)函数检查参数c是否为阿拉伯数字0到9。返回值若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。fun()函数的第一个for循环判断字符串是否负号。第二个for循环获取符号后面的数字字符,并将它们转化为整数。遇到了非数字的字符跳出,最后返回数组的结果。因此,可知首先获取负号,紧接着获取数值26,遇到了字符a,跳出返回-26,因此打印的结果是-26。故答案为D选项。34、设有定义:structcomplex{intreal,unreal;}data1={1,8},data2;则以下赋值语句中错误的是A)data2=(2,6);B)data2=data1;C)=;D)=;参考答案:A结构体变量建议在定义的时候进行初始化。结构体常见的几种初始化方法如下:(1)structaa1={.b=1,.c=2};(2)structaa1={b:1,c:2};(3)structaa1={1,2};计算机内核喜欢用第一种,使用第一种和第二种时,成员初始化顺序可变。因此,可以判断选项A错误。35、有以下程序#include<>#defineS(x)x*x/xmain(){intk=6,j=3;printf("%d,%d\n",S(k+j+2),S(j+k+2));}程序运行后的输出结果是A)11,11B)29,29C)26,29D)121,121参考答案:B#define命令是C语言中的一个宏定义命令,标识符一般使用大写,为了区分其他标识符,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本。宏定义不进行其他操作,仅仅只是替换标识符。S(k+j+2)=k+j+2*k+j+2/k+j+2,经计算可得29,S(j+k+2)=j+k+2*k+j+2/j+k+2,计算可得29。因此输出为29,29。答案为B选项。36、若有定义typedefint*T[10];Ta;则以下选项与上述定义中a的类型完全相同的是A)int*a[10];B)int(*a)[10];C)inta[10];D)int(*a[10])();参考答案:AC语言允许由用户自己定义类型说明符,也就是说允许由用户为数据类型取"别名"。类型定义符typedef即可用来完成此功能,可以完全代替原来的类型说明符。因此,变量a的类型为int*a[10]。typedefint*T[10],由于[]运算符优先级高于*,可以看成typedefint[10]*T,替换T可得int[10]*a=>int*a[10],因此,答案为A选项。37、有以下程序#include<>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("","w+");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[5-i]);rewind(fp);for(i=0;i<6;i++){fscanf(fp,"%d",&k);printf("%d,",k);}fclose(fp);}程序运行后的输出结果是A)

温馨提示

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

评论

0/150

提交评论