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

下载本文档

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

文档简介

全国计算机二级C选取题题库1、下列论述中对的是A)程序可以作为算法一种表达方式B)算法有穷性是指算法规模不能太大C)算法复杂度用于衡量算法控制构造D)算法效率与数据存储构造无关参照答案:A算法有穷性是指操作环节有限且能在有限时间内完毕,如果一种算法执行耗费时间太长,虽然最后得出了对的成果,也是没故意义。B选项错误。一种算法复杂度高低体当前运营该算法所需要计算机资源多少。C选项错误。算法效率是指算法执行时间,算法执行时间需通过根据该算法编制程序在计算机上运营时所消耗时间来度量,这就与算法自身设计优劣以及详细编程实既关于,数据存储构造会极大影响程序执行时间。D选项错误。算法在实现时需要用品体程序设计语言来实现,因此程序可以作为实现算法一种表达方式。故选A选项。2、某循环队列存储空间为Q(1:m),初始状态为front=rear=m。现通过一系列入队操作和退队操作后,front=m-1,rear=m,则该循环队列中元素个数为A)m-1B)1C)mD)0参照答案:B循环队列长度为m,由初始状态为front=rear=m可知此时循环队列为空。入队运算时,一方面队尾指针(rear)进1(即rear+1),然后在rear指针指向位置插入新元素。特别,当队尾指针rear=m+1时,置rear=1。退队运算时,排头指针(front)进1(即front+1),然后删除front指针指向位置上元素,当排头指针front=m+1时,置front=1。从排头指针front指向后一种位置直到队尾指针rear指向位置之间所有元素均为队列中元素,则该循环队列中元素个数为m-(m-1)=1。故选取A选项。3、能从任意一种结点开始没有重复地扫描到所有结点数据构造是A)循环链表B)双向链表C)二叉链表D)有序链表参照答案:A在单链表第一种结点前增长一种表头结点,队头指针指向表头结点,最后一种结点指针域值由NULL改为指向表头结点,这样链表称为循环链表。在循环链表中,只要指出表中任何一种结点位置,就可以从它出发没有重复地扫描到表中其她所有结点。双向链表与二叉链表都可以扫描到所有结点,但是会有重复。有序链表如果是单链表状况下,不能扫描到所有结点。故A选项对的。4、某棵树中共有25个结点,且只有度为3结点和叶子结点,其中叶子结点有7个,则该树中度为3结点数为A)不存在这样树B)7C)8D)6参照答案:A树是一种简朴非线性构造,直观地来看,树是以分支关系定义层次构造。在树构造中,一种结点所拥有后件个数称为该结点度,所有结点中最大度称为树度。一方面假设这样树是存在,由于只有度为3结点和叶子结点,可知最后一层都为叶子结点,倒数第二层一某些结点度为3,一某些结点为叶子结点。结点总数为25,叶子结点有7个,则度为3结点有18个,由于(34-1-1)/2<18<(35-1-1)/2可知,树共有5层,前三层有度为3结点(34-1-1)/2=13个,第四层有34-1=27个结点,其中5个是度为3结点,22个是叶子结点,此时与题目给出叶子结点有7个相矛盾,故不存在这样树。故选取A选项。5、在最坏状况下,二分查找法时间复杂度为A)B)C)D)参照答案:C二分法查找也称拆半查找,能使用二分法查找线性表必要满足两个条件,用顺序存储构造以及线性表有序。运用二分法查找元素X过程如下:将X与线性表中间项比较,如果X值与中间项值相等,则查找成功,结束查找;如果X不大于中间项值,则在线性表前半某些以二分法继续查找;如果X不不大于中间项值,则在线性表后半某些以二分法继续查找。可以证明,对于长度为n有序线性表,在最坏状况下,二分法查找需比较次,故时间复杂度为。故选取A选项。6、某二叉树共有730个结点,其中度为1结点有30个,则叶子结点个数为A)不存在这样二叉树B)351C)1D)350参照答案:A在树构造中,一种结点所拥有后件个数称为该结点度,所有结点中最大度称为树度。对任何一棵二叉树,度为0结点总是比度为2结点多一种。如果有一棵二叉树,结点总数为730,假设度为0结点个数为n,则有n+30+n-1=730,n=350.5,由于结点个数必要是整数,因此不也许存在题目中这样二叉树。故选A选项。7、软件开发中需求分析重要任务是A)定义和描述目的系统"做什么"B)获取需求C)给出软件解决方案D)需求评审参照答案:A需求分析阶段工作可以分为4个方面:需求获取、需求分析、编写需求规格阐明书和需求评审。需求分析任务是发现需求、求精、建模和定义需求过程,是描述"做什么"软件开发阶段。故选A选项。8、软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件是A)学生成绩管理系统B)ERP系统C)办公自动化系统D)UNIX系统参照答案:D系统软件是管理计算机资源,提高计算机使用效率,为顾客提供各种服务软件。应用软件是为了应用于特定领域而开发软件。选项A属于系统软件,选项B、C、D属于应用软件。故选D选项。9、医生可觉得病人开不同药,而同一种药也可由不同医生开给病人,则实体医生和实体药之间联系是A)多对多B)一对一C)多对一D)一对多参照答案:A实体集之间通过联系来建立联接关系分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。由于医生可觉得病人开不同药,而同一种药也可由不同医生开给病人,因此两者联系属于多对多。故选A选项。10、学生选课成绩表关系模式是SC(S#,C#,G),其中S#为学号,C#为课号,G为成绩,检索课号为2且成绩及格学生学号表达式为A)B)C)D)参照答案:A表达针对属性进行投影运算,表达针对元组进行选取运算,''表达交运算,''表达并运算。规定检索成果为关系模式中学生学号S#,一方面在几种属性中选取学生学号,另一方面要在其中选取满足条件元组,条件是课号为2且成绩及格,即为"",故完整表达式为。本题选A选项。11、若想定义int型变量a,b,c,d并都赋值为1,如下写法中错误是A)inta=b=c=d=1;B)inta=1,b=1,c=1,d=1;C)inta,b,c,d;a=b=c=d=1;D)inta,b,c,d=1;a=b=c=d;参照答案:AC语言赋值运算符结合方向是从右向左,使用变量必要都是已经定义了,inta=b=c=d=1;本条语句一方面执行赋值运算d=1,由于b并未定义,故编译不通过,提示没有定义标记符b、c、d,故A项错误。答案为A选项。12、若有定义:charc;doubled;程序运营时输入:12<回车>,能把字符1输入给变量c、数值2输入给变量d输入语句是A)scanf("%d%lf",&c,&d);B)scanf("%c%lf",&c,&d);C)scanf("%c%f",&c,&d);D)scanf("%d%f",&c,&d);参照答案:B%lf是针对double,如果仅用%f,输入数据也许没有被完全接受,数据精度也许局限性,选项C,D错误。%f重要针对float类型变量输入。%d重要针对整型数据输入,%c重要针对字符类型数据输入,选项A错误。故答案为B选项。13、输出语句:printf("%d\n",11+011);输出成果是A)20B)22C)022D)021参照答案:Aprintf("%d\n",11+011)中,11为十进制,011为八进制形式,打印格式%d表达十进制格式输出,,因而,先将八进制数转化为十进制,011(8)=81*1+1*80=9,相称于printf("%d\n",11+9),故答案为20,A选项对的。14、如下论述对的是A)有些算法不能用三种基本构造来表达B)C语言程序不编译也能直接运营C)构造化程序三种基本构造是循环构造、选取构造、顺序构造D)如果C语言程序实现算法很简朴,则计算机不进行任何代码转换就能执行程序参照答案:C算法三种基本构造可以表达任何算法,只是不同实现复杂度不相似。因而选项A错误。C语言是编译型语言,程序必要先编译、链接才干运营,因而选项B错误。C语言是高档程序语言,计算机不能辨认除了机器语言以外任何语言,因而C程序代码转换为机器语言才干在计算机上运营。因而选项D错误。答案为C选项。15、若有定义:doublex;,则表达式:x=0,x+10,x++值是A)11.0B)10.0C)0.0D)1.0参照答案:CC语言中,逗号运算符可以把两个以上(包括两个)表达式连接成一种表达式。逗号运算符优先级是所有运算符中级别最低,逗号运算符保证左边子表达式运算结束后才进行右边子表达式运算。也就是说,逗号运算符是一种序列点,其左边所有副作用都结束后,才对其右边子表达式进行运算,并以最右边表达式值作为整个逗号表达式值。1、后置自增运算:k++表达先运算,后自加。2、前置自增运算:++k表达先自加,后运算。因而,表达式x=0,x+10,x++计算过程为一方面赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并,依照后置自增运算计算成果,即为x=0.0。,故答案为C选项。16、有如下程序#include<stdio.h>main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序运营成果是A)a=2,b=2B)a=2,b=1C)a=1,b=1D)a=1,b=0参照答案:BC语言还提供了一种用于多分支选取switch语句,计算表达式值。并逐个与其后常量表达式值相比较,当表达式值与某个常量表达式值相等时,即执行其后语句,然后不再进行判断,继续执行背面所有case后语句。如表达式值与所有case后常量表达式均不相似时,则执行default后语句。x=1;进入第一层switch,y=0;进入第二层switch,执行a++;break;后a=1;在进入case2,(这里case1:没有break,)执行了a++,b++,由于存在break,则跳出switch,得到a=2,b=1,因而答案为B选项。左边所有副作用都结束后,才对其右边子表达式进行运算,并以最右边表达式值作为整个逗号表达式值。1、后置自增运算:k++表达先运算,后自加。2、前置自增运算:++k表达先自加,后运算。因而,表达式x=0,x+10,x++计算过程为一方面赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并,依照后置自增运算计算成果,即为x=0.0。,故答案为C选项。17、如下程序段中变量已正拟定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");该程序段输出成果是A)*B)****C)**D)********参照答案:AC语言商定分号为一条语句结束。因而for(i=0;i<4;i++,i++)for(k=1;k<3;k++);是完整语句,对printf();没有任何影响,最后printf("*"),执行一次。因而答案为A选项。18、有如下程序#include<stdio.h>main(){charc;for(;(c=getchar())!='#';){if(c>='a'&&c<='z')c=c-'a'+'A';putchar(++c);}}执行时输入:aBcDefG##<回车>,则输出成果是A)AbCdEFgB)ABCDEFGC)BCDEFGHD)bcdefgh参照答案:C循环作用是将输入字符串转化为大写,getchar()每次读入一种字符,putchar()每次输出一种字符,当遇到#字符结束。putchar(++c),表达将字符变量c加1后输出。因而,输入aBcDefG##,得到成果是BCDEFGH。故答案为C选项。19、有如下程序#include<stdio.h>intf(intx);main(){intn=1,m;m=f(f(f(n)));printf("%d\n",m);}intf(intx){returnx*2;}程序运营后输出成果是A)4B)2C)8D)1参照答案:C在C语言中,需要在main函数背面定义函数,需要提前声明,否则调用报错,无法找到该函数。m=f(f(f(n))),一共调用3次f()函数,f()函数是对n*2,因而,成果是n*2*2*2,得到成果为8。故答案为C选项20、关于地址和指针,如下论述对的是A)可以通过强制类型转换让char型指针指向double型变量B)函数指针p指向一种同类型函数f时,必要写成:p=&f;C)指针p指向一种数组f时,必要写成:p=&f;D)一种指针变量p可以指向自身参照答案:A函数指针p指向一种同类型函数f时,可以写成:p=f,而不能写成&f,选项B错误。函数名代表函数入口地址,指针p指向一种数组f时,可以写成:p=f,也可写成&f,数组名f,可以代表数组首地址,选项C错误。指针变量指向是地址,是个常量,不能将地址指向另一种地址,选项D错误。char型依照转化原则可以转化为double类型,因而答案为A选项。21、有如下程序#include<stdio.h>#defineN4intfun(inta[][N]){inti,j,x=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==j)x+=a[N-1-j][i];returnx;}main(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,17}},y;y=fun(x);printf("%d\n",y);}程序运营后输出成果是A)34B)35C)28D)59参照答案:Afun函数求矩阵反对角线元素之和。依照fun()函数,当数组行列下标相等时,对该行反对角线上元素求和。故成果为4+7+11+13=34,答案为A选项。22、有如下程序#include<stdio.h>#defineN3voidfun(intx[][N],int*r1,int*r2){inti,j;*r1=*r2=0;for(i=0;i<N;i++){j=N-(i+1);if(x[*r1][*r2]<x[i][j]){*r1=i;*r2=j;}}}main(){inta[N][N]={1,5,7,9,2,6,4,3,8},i,j;fun(a,&i,&j);printf("%d\n",a[i][j]);}程序运营后输出成果是A)8B)6C)7D)9参照答案:Cfun()获取矩阵正反对角线元素最大值,fun()中for(i=0;i<N;i++){j=N-(i+1);//反对角线列位置if(x[*r1][*r2]<x[i][j]){*r1=i;*r2=j;}//比较正反对角线元素,使得*r1,*r2始终只在最大元素位置。}由数组元素可得,正反对角线最大元素为7。答案为C选项。23、对于如下函数声明voidfun(intarray[4],int*ptr);如下论述中对的是A)array,ptr都是指针变量B)调用fun函数时,实参值将逐个复制给arrayC)调用fun函数时,array按值传送,ptr按地址传送D)array是数组,ptr是指针,它们性质不同参照答案:Avoidfun(intarray[4],int*ptr);fun()函数,第一种参数虽然是数组类型,但是会退化为指针,并且形参数组个数没有用。第二个参数是指针,因而事实上二个形参都是指针。两个形参都是指针,传递都是地址,而不是值。可知选项B、C、D错误。答案为A选项。24、设有定义:intx[10],*p=x,i;,若要为数组x读入数据,如下选项对的是A)for(i=0;i<10;i++)scanf("%d",p+i);B)for(i=0;i<10;i++)scanf("%d",*p+i);C)for(i=0;i<10;i++)scanf("%d",*(p+i));D)for(i=0;i<10;i++)scanf("%d",x[i]);参照答案:AC语言声明scanf("<格式化字符串>",<地址表>);可知scanf()第二个参数是地址,因而,从四个答案中可以判断,只有选项A是p[i]地址,其她均是变量自身。故答案为A选项。25、有如下程序#include<stdio.h>main(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>='0'&&s[i]<='9')n++;printf("%d\n",n);}程序运营后输出成果是A)7B)0C)3D)8参照答案:C题意记录字符s中阿拉伯数字个数。chars[]='012xy\08s34f4w2';元素是字符型。'0'=48;而'\0'=0;因而可以计算出'\0'之前阿拉伯数字个数,由字符串s可知,有3个阿拉伯数字。答案为C选项。26、有如下程序段charstr[4][12]={"aaa","bbb","ccc","ddd"},*p[4];inti;for(i=0;i<4;i++)p[i]=str[i];如下选项中不能对的引用字符串是A)*p[3]B)p[3]C)str[2]D)*p参照答案:A*p[3]p[3][0]是一种字符,不是字符串,选项A错误。p[3]和str[2]和*p分别代表了ddd,ccc,aaa。答案为A选项。27、有如下程序#include<stdio.h>intmul(intval){staticintinit=1;returninit*=val;}main(){inti;for(i=1;i<=5;i++)printf("%d,",mul(i));}程序运营后输出成果是A)1,2,6,24,120,B)1,2,3,4,5,C)1,1,1,1,1,D)1,2,4,6,8,参照答案:Astatic静态变量只在声明时初始化一次。mul()累乘,第一次init=1,init*=val,第二次init=1,val=2,第三次init=2,val=3,第四次init=6,val=4,第五层init=24,val=5,因而成果为1,2,6,24,120。故答案为A选项。28、有如下程序#include<stdio.h>voidfun(intn){staticintk=0;if(n<0){printf("-");n=-n;}k+=n%10;printf("%d,",k);if(n/10)fun(n/10);}main(){intx=-12;fun(x);printf("\n");}程序运营后输出成果是A)-2,3B)-1,-2,C)-2,-3,D)-2,1参照答案:Afun()函数使用了静态变量,静态变量只在声明时初始化一次。一方面实参数值是-12,if判断后输出负号,并将n=12,计算k+=n%10k+=22,因而输出2,,后将数值除以10,成果为1,递归调用fun()函数,第二次调用fun(),此时n=1,k=2,计算k+=n%10k+=13,因而打印3,。故最后打印成果为-2,3,。故答案为A选项。29、有如下程序#include<stdio.h>structS{intn;inta[20];};voidf(structS*p){inti,j,t;for(i=0;i<p->n-1;i++)for(j=i+1;j<p->n;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(&s);for(i=0;i<s.n;i++)printf("%d,",s.a[i]);}程序运营后输出成果是A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)2,3,1,6,8,7,5,4,10,9,D)10,9,8,7,6,1,2,3,4,5,参照答案:A构造体s中n代表数组实际长度,a是个定长数组。函数f(),对构造体S内a数组元素使用冒泡法进行递增排序。因而最后数组元素是一种递增序列。故答案为A选项。30、有如下程序#include<stdio.h>typedefstructstu{charname[10];chargender;intscore;}STU;voidf(STUa,STU*b,STUc){*b=c=a;printf("%s,%c,%d,",b->name,b->gender,b->score);printf("%s,%c,%d,",,c.gender,c.score);}main(){STUa={"Zhao",'m',290},b={"Qian",'f',350},c={"Sun",'m',370};f(a,&b,c);printf("%s,%c,%d,",,b.gender,b.score);printf("%s,%c,%d\n",,c.gender,c.score);}程序运营后输出成果是A)Zhao,m,290,Zhao,m,290,Zhao,m,290,Sun,m,370B)Zhao,m,290,Zhao,m,290,Zhao,m,290,Zhao,m,290C)Zhao,m,290,Zhao,m,290,Qian,f,350,Sun,m,370D)Zhao,m,290,Zhao,m,290,Qian,f,350,Zhao,m,290参照答案:AC语言函数参数传递分为:1、值传递过程中,被调函数形参作为被调函数局部变量解决,即在内存堆栈中开辟空间以存储由主调函数放进来实参值,从而成为了实参一种拷贝。值传递特点是被调函数对形参任何操作都是作为局部变量进行,不会影响主调函数实参变量值。2、地址传递过程中,被调函数形参虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存储是由主调函数放进来实参变量地址。被调函数对形参任何操作都被解决成间接寻址,即通过堆栈中存储地址访问主调函数中实参变量。正由于如此,被调函数对形参做任何操作都影响了主调函数中实参变量。题设中,参数b是地址传递,因而会直接影响实参变量。a,c是值传递,传递是a,c拷贝,不会a,c实参产生影响,因而,调用函数返回,c没有被修改,b被修改了。故答案为A选项。31、有如下程序#include<stdio.h>#defineSUB(x,y)(x)*(y)main(){inta=3,b=4;printf("%d\n",SUB(a++,b++));}程序运营后输出成果是A)15B)12C)16D)20参照答案:B#define命令是C语言中一种宏定义命令,标记符普通使用大写,为了区别其她标记符,它用来将一种标记符定义为一种字符串,该标记符被称为宏名,被定义字符串称为替代文本。宏定义不进行其她操作,仅仅只是替代标记符。后置自增运算:k++表达先运算,后自加。意思是遇到k++了,先把当前k值拿来参加运算,背面再去管它自加。SUB(a++,b++)(a++)*(b++)3*4。故答案为B选项。32、有如下程序#include<stdio.h>main(){structcm{intx;inty;}a[2]={4,3,2,1};printf("%d\n",a[0].y/a[0].x*a[1].x);}程序运营后输出成果是A)1B)4C)0D)3参照答案:C由构造体定义同步初始化可知,a[0].x=4,a[0].y=3,a[1].x=2,a[1].y=1,因而计算a[0].y/a[0].x*a[1].x=3/4*2=(3/4)*2=0*2=0,故答案为C选项。33、如下选项中编译预解决命令行,对的是A)#defineE2.38B)##definePI_21.56C)#defineintINTD)#DEFINETRUE参照答案:A无参宏定义格式:#define标记符字符串,标记符与C语言规定相似,因而,可知选项B,多了#,选项C使用c语言核心字,选项D格式不对。因而答案为A选项。34、设有如下程序段structbook{floatprice;charlanguage;chartitle[20];}rec,*ptr;ptr=&rec;规定输入字符串给构造体变量rectitle成员,错误输入语句是A)scanf("%s",ptr.title);B)scanf("%s",rec.title);C)scanf("%s",(*ptr).title);D)scanf("%s",ptr->title);参照答案:A"->"是指针特用,"."用于指定元素成员。ptr是指针,只能用->,因而选项A错误。*p是指定元素(rec)可以使用.运算,因而选项D对的。选项B,rec.title代表数组title,同理选项C对的。答案为A选项。35、有如下程序#include<stdio.h>#include<string.h>structcomputer{charCPU[10];};main(){structcomputerpc1,pc2;strcpy(pc1.CPU,"3.2G");strcpy(pc2.CPU,"????");pc1=pc2;printf("%s\n",pc1.CPU);}程序运营后输出成果是A)?B)3.2GC)????D)?.2G参照答案:C二个类型相似构造体,可以使用一种给另一种初始化,使它们相等。前提是右值构造体变量所有成员所有初始化了。pc1=pc2,pc2成员值和pc1中相应成员相等。因而pc1.CPU输出????。答案为C选项。36、有如下程序#include<stdio.h

温馨提示

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

评论

0/150

提交评论