版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)笔试模拟试卷81(题后含答案及解析)题型有:1.选择题2.填空题选择题(1-10、21-40每题2分,11-20每题1分,共70分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上。1.在深度为5的满二叉树中,结点的个数为()。A.32B.31C.16D.15正确答案:B解析:根据二叉树的定义,深度为m的二叉树最多有2m-1个结点。由此可知答案为B项。注意,满二叉树中叶子结点的个数为2m-1个。2.在数据结构中,从逻辑上可以把数据结构分成()。A.动态结构和静态结构B.线性结构和非线性结构C.集合结构和非集合结构D.树形结构和图状结构,正确答案:B解析:逻辑结构即数据元素之间的逻辑关系,是从逻辑关系上描述数据,与数据的存储无关。因此根据数据元素与数据元素之间的关系,逻辑结构被分为两大类:线性结构和非线性结构。3.下面这个程序段的时间复杂度是()。for(i=1;i<n;i++){y=y+3;for(j=0;j<=(2*n);j++)x++;}A.O(log2n)B.O(n)C.O(nlog2n)D.O(n2)正确答案:D解析:语句的频度指的是该语句重复执行的次数。一个算法中所有语句的频度之和构成了该算法的运行时间。在本例算法中,语句①的频度是n-1,语句②的频度是(n-1)(2n+1)-2n2-n-1。则该程序段的时间复杂度是T(n)=n-1+2n2-n-1=O(n2)。4.程序流程图(PFD)中的箭头代表的是()。A.组成关系B.控制流C.调用关系D.数据流正确答案:B解析:在程序流程图(PFD)中,箭头代表的是控制流,用以指明程序的动态执行顺序。5.在面向对象方法中,如果“鸡”是一类对象,“公鸡”、“母鸡”等都继承了“鸡”类的性质,因而是“鸡”的()。A.子类B.实例C.对象D.父类正确答案:A解析:面向对象方法中,继承是表示类之间的相似性的机制。如果类X继承类Y,则X为Y的子类,Y为X的父类(超类)。如果“鸡”是一类对象,“公鸡”、“母鸡”等都继承了“鸡”类的性质,因而是“鸡”的子类。6.在结构化设计方法中生成的结构图(SC)中,带有圆圈的小箭头表示()。A.模块B.数据的流向C.模块间的信息传递D.模块之间的调用关系正确答案:C解析:在结构化设计方法中生成的结构图(SC)中,包括以下4种成分:模块(用矩形框表示)、调用(带有箭头的连线)、模块间信息传递(带有圆圈的小箭头)、辅助符号(如菱形符号表示有条件的选择,循环调用符号表示循环调用下层模块等)。7.程序的测试方法中,使用测试用例在计算机上运行程序,使程序在运行过程中暴露错误,这种方法称为()。A.静态分析B.动态分析C.代码检查D.代码质量度量正确答案:B解析:从是否需要执行被测软件的角度,测试方法可以分为静态测试和动态测试方法。静态测试包括代码检查、静态结构分析、代码质量度量等,动态测试是为了发现错误而执行程序的过程,是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例去运行程序,以发现程序错误的过程。如果将程序的测试方法分为静态分析和动态分析,则使用测试用例在计算机上运行程序,使程序在运行过程中暴露错误,这是动态分析。8.关系表中的每一横行称为一个()。A.元组B.码C.属性D.字段正确答案:A解析:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。关系表中的每一横行称为一个元组。9.下列关系运算中,能使经运算后得到的新关系中元组个数少于原来关系中元组个数的是()。A.选择B.投影C.连接D.并正确答案:A解析:选择运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集。因此,一个关系经选择运算后得到的新关系中,元组个数少于原来关系中元组个数。10.利用E-R模型进行数据库的概念设计,可以分成3步:首先设计局部E-R模型,然后把各个局部E-R模型综合成一个全局的模型,最后对全局E-R模型进行(),得到最终的E-R模型。A.简化B.结构化C.最小化D.优化正确答案:D解析:在概念设计中按照模块的划分画出每个模块的E-R图,然后把这些图合成一张E-R图作为全局模型,最后应该对全局E-R图进行优化,看看是否有重复和不合理的地方。不能只是进行简单的合并。11.能将高级语言程序转换成目标语言程序的是______。A.调试程序B.解释程序C.编译程序D.编辑程序正确答案:C解析:用高级语言编写的程序为“源程序”,而计算机只能识别和执行由0和1组成的二进制指令,所以高级语言必须先用一种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”。12.是构成C语言程序的基本单位。A.函数B.过程C.子程序D.子例程正确答案:A解析:C程序是由函数构成的。一个C源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数,因此,函数是C程序的基本单位。13.可以在C语言中用做用户标识符的是______。A.voiddefineWORDB.as_b3_123IfC.for-abccasD.2cDoSIG正确答案:B解析:C语言规定,标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。另外还需要注意的是关键字不能作标识符。选项A中void,C中for都为关键字,D中2c以字母开头。14.若有以下类型说明语句:charw;intx;floaty,z;则表达式w*x+z-y的结果为______类型。A.floatB.charC.intD.double正确答案:A解析:在进行运算时,不同类型的数据参加运算;需要先将其转换成同一类型的数据,然后再进行运算。转换的顺序由低到高为:char,shor→int→unsigned→long→double←float,故结果为float型。15.main(){floatx=123.456;printf(“%-5.2f\n”,x);}以上程序输出的结果是______。A.123.4B.123.5C.123.45D.123.46正确答案:D解析:f格式符,用来输出实数,以小数形式输出。“%-m.nf”的含义是:输出数据共占m列,其中n位小数,如果输出位数小于m,则右端补空格。如果总长度大于列数,则按实际情况四舍五入输出。16.下面语句的输出结果是______。printf(“%d\n”,strlen(“\t\”065\xff\n”));A.14B.8C.5D.输出项不合法,无正常输出正确答案:C解析:在C语言中,以“\”开头的字符均为转义字符,其中“\”后可跟1~3位八进制数或在“\”后跟字母x及1~2位十六进制数,以此来代表一个特定的字符。17.下列程序的输出结果是______。main(){inta=0,b=0,c=0;if(++a>0||++b>0)++c;printf(“\na=%d,b=%d,c=%d”,a,b,c);}A.a=0,b=0,c=0B.a=1,b=1,c=1C.a=1,b=0,c=1D.a=0,b=1,c=1正确答案:C解析:“||”是或运算,它有个“短路”的特点需特别注意,当“||”运算符左边的表达式的值为真时,则程序就不再对“||”右边的表达式的值进行运算,而是使得整个表达式的值直接为真。18.下列程序的输出结果是______。main(){inti;for(i=1;i+1;i++){if(i>4){printf(“%d”,i++);break;}}printf(“%d”,i++);}A.55B.56C.程序错误,没有输出D.循环条件永远为真,死循环正确答案:B解析:本程序中有个for循环,但注意到for循环的条件是“i+1”,也就是只要i+1的值为真(非零值均为真),就执行循环。当i=1的时,i+1的值为真,判断if条件不成立,执行i++,输出i的值为5。19.下列程序的输出结果是______。#defineA100main(){inti=0,sum=0;do{if(i==(i/2)*2)continue;sum+=i;}while(++i<A);printf(“%d\n”,sum);}A.2500B.2050C.4D.0正确答案:A解析:本题程序的功能是求1到99之间(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这一次循环,执行下一次循环,否则求和。最后输出的值是1到99之间(包括1和99)所有奇数之和(1+99)*50/2=2500。20.下列程序的输出结果是______。main(){inti=3;switch(i){case1:case2:printf(“%d”,i);case3:case4:break;default:printf(“OK”);}}A.0B.3C.OKD.没有任何输出正确答案:D解析:在题中,i的值为3,由于“case3:”后面没有break语句,所以继续向下执行“case4:”后面的语句,由于“case4:”后面的语句为break强行迟出switch语句,所以,本题没有任何输出。21.若x和y代表整型数,以下表达式中不能正确表示数学关系|x-y|<10的是()。A.abs(x-y)<10B.x-y>-10&&x-y<10C.!(x-y)<-10||!(y-x)>10D.(x-y)*(x-y)<100正确答案:C解析:选项A用了一个绝对值函数abs(),故选项A正确;选项B中用了一个&&逻辑与,故选项B正确;选项C中,||左边的式子如为真,将不再判断其后表达式的值,故选项C不正确;选项D为本题中数学关系式的一个等价命题,故选项D正确。所以,4个选项中选项C符合题意。22.若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0),s=a;for(b=1;b<=c;b++)s=s+1;则与上述程序段功能等价的赋值语句是()。A.s=a+b;B.s=a+c;C.s=s+c;D.s=b+c;正确答案:B解析:本程序中for循环共循环了c次,而每循环一次s的值加1,所以s的值为s+c。最开始s的值为a,故4个选项中选项B符合题意。23.有以下程序:main(){intx=0,y=5,z=3;while(z-->0&&++x<5)y=y-1;printf(“%d,%d,%d\n”,x,y,z);}程序执行后的输出结果是()。A.3,2,0B.3,2,-1C.4,3,-1D.5,-2,-5正确答案:B解析:本题中首先定义了3个整型变量x、y和z,并分别赋值为0、5和3,while循环的判定条件为z-->0&&++x<5,由于z的初值为3,所以当z--执行3次后,z-->O将不再成立,又由于x的初值为0,所以++x执行5次,++x<5将不再成立,而它们两个表达式的值为逻辑与的关系,故当z-->O不成立时整个表达式的值为假,因此该循环共执行了3次,即语句y=y-1:共执行了三次,但while循环的判定表达式却执行了四次,故最后输出的x、y、z的值分别为3,2,-1,所以,4个选项中选项B符合题意。24.有以下程序:main(){inti,s=0;for(i=1;i<10;i+=2)s+=i+1;ptintf(“%d\n”,s);}程序执行后的输出结果是()。A.自然数1~9的累加和B.自然数1~10的累加和C.自然数1~9中奇数之和D.自然数1~10中偶数之和正确答案:D解析:本题中,i赋初值为1,并对其每次进行加2操作,即i每次均为1~10之间的奇数,s+=i+1,即s=s+i+1,相当于s等于原来的s每次加上1~10之间的偶数,直到i<lO不成立;当i=1时,s=0+1+1=2;当i=3时,s=2+3+1=2+4;当i=5时,s=2+4+5+1=2+4+6;当i=7时,s=2+4+6+7+1=2+4+6+8;当i=9时,s=2+4+6+8+9+1=2+4+6+8+10;当i=11时,i<10不成立,结束循环。所以,4个选项中选项D符合题意。25.有以下程序:main(){inti,n=0;for(i=2;i<5;i++){do{if(i%3)continue;n++;}while(!i);n++;}printf(“n=%d\n”,n);}程序执行后的输出结果是()。A.n=5B.n=2C.n=3D.n=4正确答案:D解析:for循环当i=2时,执行do循环。由于if表达式的条件为真,执行continue语句,结束本次循环,判断while循环条件为假,故退出while循环,执行n++,此时n的值为1。当i=3时,执行do循环,由于if{3%3)为假,执行下面的n++语句,此时n的值为2,结束本次循环,继续判断while循环条件为假,故退出while循环,执行n++语句,此时n的值为3。当i=4时,执行do循环。由于if(4%3)为真,执行continue语句,结束本次循环,继续判断while循环条件为假,故退出while循环,执行n++,此时n的值为4。当i=5时,退出for循环,因此最后输出的n值为4。所以,4个选项中选项D符合题意。26.若程序中定义了以下函数:doublemyadd(doublea,doubleb){return(a+b);}并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是()。A.doublemyadd(doublea,b);B.doublemyadd(double,double);C.doublemyadd(doubleb,doublea);D.doublemyadd(doublex,doubley);正确答案:A解析:函数声明是对所用到的函数的特征进行必要的声明,编译系统以函数声明中给出的信息为依据,对调用表达式进行检测,以保证调用表达式与函数之间的参数正确传递。函数声明的一般格式为:类型标识符函数名(类型标识符形参,…);这些信息就是函数定义中的第一行的内容。这里形参的名字是不重要的,重要的是类型标识符,函数声明中也可以不写形参名只写该形参的类型,但不能只写形参名而不写该形参的类型。本题中,选项A中doublemyadd(doublea,b),没写出形参b的类型,故选项A不正确。27.有以下程序:charfun(charx,chary){if(x<y)returnx;returny;}main(){inta=‘9’,b=‘8’,c=‘7’;printf(“%c\n”,fun(fun(a,b),fun(b,c));}程序的执行结果是()。A.函数调用出错B.8C.9D.7正确答案:D解析:经过分析得出函数fun()的功能是比较形参x和形参y的大小,返回较小的一个。函数fun()有两个参数。本题中,首先定义了3个整型变量a、b和c,分别赋初值为9、8和7。然后执行函数fun(fun(a,b),fun(b,c))。在该函数中分别将fun(a,b)和fun(b,c)函数的返回值作为该函数的两个实参。在函数fun(a,b)中,由于a>b,故返回较小值b即8,在函数fun(b,c)中,由于b<c,故返回较小值c即为7,因此调用函数fun(fun(a,b),fun(b,c))相当于执行函数fun(8,7),返回较小值即7。所以,4个选项中选项D符合题意。28.设有定义:intn=0,*p=&n,**q=&p;,则以下选项中,正确的赋值语句是()。A.p=1;B.*q=2;C.q=p;D.*p=5;正确答案:D解析:本题中首先定义了整型变量n,其初值为0,接着定义一个指针变量p并让它指向n,然后定义了一个指向指针的指针变量q,并让它指向p。选项A中将常量1赋给指针p,而p的值应为地址,所以不正确。选项B中*p的值也应为地址,故将常量2复制给*p不正确。选项C中将p的值赋给q,使q也指向p所指向的存储单元,该存储单元中存放的是常量0,而q被定义为一个指向指针的指针变量,它所指向的存储单元中应该存放的是地址值,故不正确。所以,4个选项中选项D符合题意。29.有以下程序:voidf(intv,intw){intt;t=v;V=W;W=t;}main(){intx=1,y=3,z=2;if(x>y)f(x,y);elseif(y>z)f(y,z);elsef(x,z);printf(“%d,%d<%d\n”,x,y,Z);}执行后输出结果是()。A.1,2,3B.3,1,2C.1,3,2D.2,3,1正确答案:C解析:C语言规定else总是和离它最近的if语句配对。分析可以知道,。函数f()作用是让形参v和形参w的值交换。在主函数中首先定义了3个变量x、y和z。然后再执行下面的if-else语句。由程序可以看出第一个else和第一个if搭配,第二个else和第二个if搭配。由于调用函数时是进行值传递的。即将实参x、y、z传给形参v和w,以后行参和实参再无联系,故通过if语句调用f()函数后,x、y和z的值并没有改变。因此最后输出的x、y和z的值为1、3和2,所以,4个选项中选项C符合题意。30.有以下程序段:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()。A.5B.6C.8D.9正确答案:D解析:C语言中规定:一个数组名代表它的起始地址。本题中,定义了一个长度为10的数组a并赋初值,数组名a就是数组的起始地址,由于数组下标是从0开始,因此a[0]的地址也是a的值,a[1]的地址可以用a+1表示,也就是说a+1指向数组a中下标为1的元素,同样a+i是a[i]的地址,*p=&a[3]表明指针变量p指向元素a[3],即p指向数组a的第4个元素4,p[5]的值应为数组a中的第9个元素的值即a[8]的值,即p[5]=9,所以b=9。故4个选项中选项D符合题意。31.s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指字符串大于s2所指字符串时,执行语句S;则以下选项中正确的是()。A.if(sl>s2)S;B.if(strcmp(s1,s2))S;C.if(strcmp(s2,s1>0)S;D.if(strcmp)(s1,s2)>0)S;正确答案:D解析:在C语言中字符串的比较用strcmp()函数,该函数有两个参数,分别为被比较的两个字符串。如果第一个字符串大于第二个字符串返回值大于0,若小于返回值小于0,相等返回值为0。字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符大,该字符所在的字符串就是较大的字符串,如果遇到某一个字符小,该字符所在的字符串就是较小的字符串。本题中要求当s1所指字符串大于s2所指字符串时,执行语句s,因此应该为strcmp(s1,s2)>0或者strcmp(s2,s1)<0,所以,4个选项中选项D符合题意。32.下面程序的输出结果是()。include<stcdio.h>f(intb[],intn){inti,r;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=f(a,3);printf(“%d\n”,x);}A.720B.120C.24D.6正确答案:B解析:主函数将数组a的数组名作为实参传递给函数f()。函数f()的功能是求数组a的前n+1个元素的积,函数返回值r=2*3*4*5=120。33.有以下程序:#include<stdio.h>main(){inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;*q=*(p+5);printf(“%d%d\n”,*p,*q);}程序运行后的输出结果是()。A.运行后报错B.66C.611D.510正确答案:A解析:本题中首先定义了一个一维数组a并初始化,该数组的长度为初值的个数即12。数组名a代表数组的首地址,所以*p=a+5语句使得p指向数组的第6个元素,还一个指针变量q,q为空指针,实际上程序并没有在内存中为指针q开辟存储空间。语句*q=*(p+5);向q的存储空间赋值是错误的,故该程序运行后报错。34.有以下程序:intf(intb[][4]){inti,j,s=0;for(j=0;i<4;i++){i=j;if(i>2)i=3-j;s+=b[i][j];}returns;}main(){inta[4][4]={{1,2,3,4,},{0,2,4,6},{3,6,9,12},{3,2,1,0}};printf(“%d\n”,f(a));}执行后的输出结果是()。A.12B.11C.18D.16正确答案:D解析:在主函数中首先定义了一个4行4列的二维数组a,并用该数组的数组名作为实参调用函数f()。函数f()中的for循环作用,是将数组前3行中的对角线上的元素,即b[0][0]、b[1][1]、b[2][2]和第一行的第四列元素即b[0][3]累加到变量s中,s=a[0][0]+a[1][1]+a[2][2]+a[0][3]=1+2+9+4=16。然后将s的值返回在主函数中输出。35.有以下定义:#include<stdio.h>chara[10],*b=a;不能给数组a输入字符串的语句是()。A.gets(a)B.gets(a10])C.gets(&a[0});D.gets(b);正确答案:B解析:函数gets()的调用形式为gets(str_adr);str_adr存放字符串的起始地址。可以是字符数组名、字符指针或字符数组元素的地址。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。本题中定义一个长度为10的字符数组,和一个指针变量b,并且通过赋值让它指向数组a。选项A、选项B、选项C和选项D中只有选项B中gets函数的参数a[0]不能表示数组a的首地址,故选项B不正确。所以,4个选项中选项B符合题意。36.有以下程序:main(){char*p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”);printf(“%d\n”,strlen(p[4]));}执行后输出结果是()。A.2B.3C.4D.5正确答案:A解析:本题中首先定义了一个长度为10的指针数组,并赋初值,前5个元素分别指向字符串”abc”,”aabdfg”,”dcdbe”,”abbd”,“cd”。strlen(p[4])的返回值为p[4]所指向的字符串所含字符的个数,p[4]指向字符串”cd”,则返回值为2,输出2。37.在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则()。A.称为函数的直接递归调用B.称为函数的间接递归调用C.称为函数的循环调用D.C语言中不允许这样的递归调用正确答案:B解析:在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。显然题目中所说得函数调用为函数的间接递归调用。所以,4个选项中选项B符合题意。38.已有定义:inti,a[10],*p;,则合法的赋值语句是()。A.p=100;B.p=a[5]C.p=a[2]+2D.p=a+2;正确答案:D解析:本题中定义了一个整型数组a和一个整型指针变量p。选项A中将一个整型数赋值给一个指针变量,C语言规定,只能将地址赋给指针变量,故选项A不正确。选项B中a[5]为一数组元素,同样不是一个地址,故选项B不正确。选项c中a[2]为一数组元素,同样是一个整型数据,不是个地址,故选项C不正确。数组名a代表数组首地址,首地址加2代表第3个元素的地址,将该地址赋值给指针变量,故选项D正确。所以,4个选项中选项D符合题意。39.有以下程序:fun(ihta,intb){if(a>b)return(a);elsereturn(b);}main(){intx=3,y=8,z=6,r;r=fun(fun(x,y),2*z);printf(“%d\n”,r);}程序运行后的输出结果是()。A.3B.6C.8D.12正确答案:D解析:主函数中首先定义了4个整型变量x、y、z和r,并分别给x、y、z赋初值为3、8、6,接着调用一个fun()函数,并将返回值赋给变量r。其中将fun(x,y)函数的返回值和2*z作为fun()函数的两个参数。在内层fun(x,y)函数中,将x的值和y的值传给形参a和b,此时a和b的值分别为3和8,执行if浯句,由于if后面判断条件表达式a>b为假,所以执行else后面的语句,返回值为8。此时,外层fun(x,y)函数两个参数为8和2*z=12,所以r的赋值语句相当于r=fun(8,12),同上分析可知tim(8,12)返回值为12,因此最后r的值为12。40.若有定义“int*p[3];”,则以下叙述中正确的是()。A.定义了一个基类型为int的指针变量p,该变量具有3个指针B.定义了一个指针数组p,该数组含有3个元素,每个元素都是基类型为int的指针C.定义了一个名为*p的整型数组,该数组含有3个int类型元素D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有3个int类型元素正确答案:B解析:本题定义了一个指针数组p,每个元素都是基类型为int,它的长度为3即该数组含有3个元素。选项A、C和D都不正确,只有选项B符合题意。41.有以下程序:main(){unsignedchara,b,c;a=0x3;b=a|0x8;c=b<<1;printf(“%d%d\n”,b,C);}程序运行后的输出结果是()。A.-1112B.-6-13C.1224D.1122正确答案:D解析:将a的值用二进制表示:00000011。a与Ox8(二进制表示为00001000)按位或,得到结果00001011赋值给b,b的值为11。再将b左移一位得到:00010110,赋值给c,c的值为22。所以最后输出的b,c的值为11,22。42.下面程序的功能是输出以下形式的金字塔图案:****************main(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf(““);for(j=1;j<=();j++)printf(“*”);printf(“\n”);}}在下划线处应填入的是()。A.iB.2*-1C.2*i+1D.i+2正确答案:B解析:观察可知图形共4行,主函数中通过一个for5循环循环4次,输出4行。第1行输出3个空格和1个*,第2行输出2个空格和3个*,第3行输出1个空格和5个*,第4行输出7个*,主函数中通过第2个循环控制每行的输出空格数,第3个for循环控制输出*的个数,总结规律:每行输出*的个数,总比前一行的多2个,且第1行的个数为1,可以断定每行输出*的个数组成了一个公差为2的等差数列,所以每行输出。的个数即该等差数列的通项,故该空白处应该填写2*i-1,所以,4个选项中选项B符合题意。43.有以下程序:voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i+=2)for(j=i+2;j<n;j+=2)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++)printf(“%d”,aa[i]);printf(“\n”);}其输出结果是()。A.1,2,3,4,5,6,7,8,9,10,B.10,9,8,7,6,5,4,3,2,1,C.9,2,7,4,5,6,3,8,1,10,D.1,10,3,8,5,6,7,4,9,2,正确答案:C解析:son()函数作用是将数组aa中的下标为偶数的元素按大到小排序。主函数中首先定义了一个长度为10的数组并赋值,然后调用sort()函数,将数组aa中奇数个元素的值按大到小排序,因此执行完该函数后,数组中奇数个元素的值为9、7、5、3和1,故主函数中最后通过一个for循环输出数组aa中各元素的值为9、2、7、4、5、6、3、8、1和10,所以,4个选项中选项C符合题意。44.以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是()。A.chars[10]==“abcdefg”;B.chart[]=“abcdefg”,*s=t;C.chars[10];s=“abcdefg”;D.chars[10];strcpy(s,”abcdefg”);正确答案:C解析:选项A中定义了一个字符型数组并使用字符串常量给它赋初值,故选项A正确。选项B定义了一个字符型数组t并初始化,然后定义了一个指针变量s并让它指向t,故选项B正确。选项C先定义了一个长度为10的字符型数组,然后再给它赋值,这时应该分别给数组中的每个元素赋值,故选项C不正确;选项D中先定义了一个长度为10的字符型数组s,然后通过字符串复制函数将字符串“abcdefg”赋值给它,选项D正确。所以,4个选项中选项C符合题意。45.有以下程序:#include<string.h>main(intargc,char*argv[]){inti,len=0;for(i=1;i<argc;i+=2)len+=strlen(argv[i]);printf(“%d\n”,len);}经编译链接后生成的可执行文件是ex.exe,若运行时输入以下带参数的命令行exabcdefgh3k44执行后输出的结果是()。A.14B.12C.8D.6正确答案:D解析:主函数的第一个参数argc为整形参数,记下从命令行输入的参数的个数;第二个参数argv是一个字符型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中argc的值为5,argv[0]指向字符串“ex”,argv[l]指向参数字符串“abcd”,argv[2]指向字符串“efg”,argv[3]指向参数字符串“h3”,argv[4]指向参数字符串“k44”。在main()函数中,for循环执行了两次,当i=1时,len=O+strlen(argv[1]),而其中argv[l]=“abcd”,故此时len的值为4;当i=3时,len=4+strlen(argv[3]),而其中argv[3]=“h3”,故此时len的值为6;当i=5时,退出循环,故最后输出的len值为6。所以,4个选项中选项D符合题意。46.有以下程序:voidf(inta[],inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;f(a,i+1,j-1);}}main(){inti,aa[5]={1,2,3,4,5};f(aa,0,4);for(i=0;i<5;i++)printf(“%d,”,aa[i]);printf(“\n”);}执行后输出结果是()。A.5,4,3,2,1,B.5,2,3,4,1,C.1,2,3,4,5,D.1,5,4,3,2,正确答案:A解析:在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数f(a,i,j)为一递归函数,其功能是当i<j时,将数组中的元素a[i]和a[j]交换,然后再调用函数f(a,i+1,j-1),将数组中a[i+1]和a[j--]交换,这样一直递归到数组下标i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了一个长度为5的数组aa并初始化,然后调用f(a,0,4),将数组a中的元素依次互换,故最后for循环输出的数组aa中各元素的值为5、4、3、2、1,所以,4个选项中选项A符合题意。47.有以下程序:structSTU{charnum[10];floatscore[3];);main(){structstus[3]={{“20021”,90,95,85},{“20022”,95,80,75},{“20023”,100,95,90}},*p=s;inti;floatsum=0;for(i=0;i<3,i++)sum=sum+p->score[i];printf(“%6.2f\n”,sum);}程序运行后的输出结果是()。A.260B.270C.280D.285正确答案:B解析:程序中首先定义了一个结构体,其成员为一字符数组和一实型数组。在main()中首先定义了一个结构体数组并初始化。接下来在for循环中遍历了结构体数组的第一个元素中数组成员即{“20021”,90,95,85”}循环结果为90+95+85=270最后sum为270,又输出格式为%6.2f\n要求保留两位小数,故最后输出为270.00。所以4个选项中B正确。48.有以下程序:#include<stdlib.h>main(){char*p,*q;p=(char*)malloc(sizeof(char)*20);q=p;scanf(“%s%s”,p,q);ptintf(“%s%s\n”,p,q);}若从键盘输入abcdef<回车>,则输出的结果是()。A.defdefB.abcdefC.abcdD.dd正确答案:A解析:本题首先定义两个字符型指针变量p和q,通过malloc()函数申请20个字符的存储空间,并把它的首地址赋给p,再把p的值赋给小p和q指向同一个存储区。在scanf()语句中读取字符串到p和q指向的字符串,先把abc读取到p指向的存储区中,第一个空格是结束标记,第二个空格是分隔符,再把def存放到q指向的存储区,把原先的内容覆盖。所以p和q指向的存储区内容是def,故最后输出的def,def。4个选项中A正确。49.有以下程序:#include<stdio.h>main(){FILE*fp;inti,k=0,n=0;fp=fopen(“d1.dat”,”w”);for(i=1;i<4;i++)fprintf(fp,”%d”,i);fclose(fp);fp=fopen(“d1.dat”,”r”);fscanf(fp,”%d%d”,&k,&n);printf(“%d%d\n”,k,n);fclose(fp);}执行后输出结果是()。A.12B.1230C.123D.00正确答案:B解析:本题中首先定义了一个文件指针fp,然后通过函数fopen以w的方式打开文件d1.dat,直接通过一个for循环,每循环一次调用函数fprintf将i的值写进fp所指的文件中,该循环共循环3次,循环完后fp所指文件的内容为123,然后通过fclose函数关闭fp所指文件。接着通过fscanf函数将中所指文件的内容读出并赋值给变量k和变量n,由于fp所指文件中只有123没有分隔符,故只给k赋值为123,变量n的值依然为以前的值,故最后输出k和n的值为123、0,所以,4个选项中选项B符合题意。50.以下程序试图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#时结束输入和输出操作,但程序有错。#include<stdio.h>main(){FILE*fout;charch;fout=fopen(‘abc.txt’,’W’);ch=fgetc(stdin);while(ch!=‘#’){fputc(ch,fout);ch=fgetc(stdin);}fclose(fout);}出错的原因是()。A.函数fopen调用形式错误B.输入文件没有关闭C.函数fgetc调用形式错误D.文件指针stdin没有定义正确答案:A解析:stdin是标准输入设备的文件指针,不须定义直接可以使用,它随系统的启动而打开,随系统的关闭而关闭,fgetc()函数的作用是从某个文件中读取一个数据,其参数为要读取文件的文件指针,所以本题中的调用形式是正确的。fopen()函数有两个参数,第一个参数是打开的文件名,第二个参数是文件打开模式,两个参数都是字符串,本例中“fout=fopen(‘abc.txt’,’w’);”语句的fopen()函数参数是错误的,应该用双引号”“,正确的应改为“fout=fopen(“abc.txt”,”w”);”。所以,A选项为所选。填空题(每空2分,共30分)请将每一个空的正确答案写在答题卡上。注意:以命令关键字填空的必须拼写完整。51.在最坏情况下,冒泡排序所需要的比较次数为【】。正确答案:n(n-1)/2解析:在最坏情况下,冒泡排序所需要的比较次数为n(n-1)/2。52.在面向对象方法中,信息隐蔽是通过对象的【】性来实现的。正确答案:封装解析:封装是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。用户只能见到对象封装界面上的信息,不必知道实现的细节。53.软件生命周期包括8个阶段。为使各时期的任务更明确,又可以分为以下3个时期:软件定义期、软件开发期、软件维护期。编码和测试属于【】期。正确答案:软件开发。解析:通常,软件生命周期包括8个阶段:问题定义、可行性研究、需求分析、系统设计、详细设计、编码、测试、运行维护。还分为3个时期,软件定义期:包括问题定义、可行性研究和需求分析3个阶段;软件开发期:包括系统设计、详细设计、编码和测试4个阶段;软件维护期:即运行维护阶段。54.数据独立性分为逻辑独立性与物理独立性。当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为【】。正确答案:物理独立性解析:数据独立性分为逻辑独立性与物理独立性。物理独立性是指,由于数据的存储结构与逻辑结构之间由系统提供映像,使得当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改。55.在关系运算中,【】运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集。正确答案:选择解析:关系运算中,选择运算是在指定的关系中选取所有满足给定条件的元组,构成一个新的关系,而这个新的关系是原关系的一个子集。56.执行下列程序的输出结果是【】。main(){floata=1,b;b=++a*++a;printf(“%f\n”,b);}正确答案:6解析:++的优先级高于*,先作自加运算,b=++a*++a=2.0*3.0=6.0。b按实型输出6.000000。57.若有如下程序:main(){ints[]={1,2,3,4,5,6,},*p=s;printf{“%d,%d\n”,*(p+3),*(p+5)}}则程序运行后的输出结果是【】。正确答案:4,6解析:指针p指向数组s的首地址。*(p+3)是取p后3位地址单元中的值即4,*(p+5)是取p后5位地址单元中的值即6。这里p+3或p+5并未改变p的值,p始终指向数组s的首地址。58.执行下面程序后,输出结果是【】。main(){chars[12]=“verygood!”;printf(“%d”,strlen(s));}正确答案:10解析:strlen(s)函数的返回值为字符串s包含的字符个数<不计最后的’\0’)。59.若有如下程序:voidsub(){staticintx=8;x/=2;printf(“%d”,x);}main(){intm;for(m=0;m<2;m++)sub();}则程序运行后的输出结果是【】.正确答案:42解析:主函数中的for循环循环两次,即函数sub()被调用两次。在sub()中x被定义为静态整型变量,当调用函数sub()完毕返回主函数,x中的值仍然保留,下次调用函数sub()时,x不再被赋初值。第1次调用x/=2相当于x=x/2=8/2=4,第2次调用x=x/2=4/2=2,因此输出42。60.若有以下程序:main(){inta[4][4]={{l,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}};inti,j,s=0;for(i=0;i<4;i++){for(j=0;j<4;j++){if(a[i][j]<0)continue;if(a[i][j]==0)break;s+=a[i][j];}}printf(“%d\n”,s);}执行后输出的结果是【】。正确答案:58解析:本题中处理二维数组元素用了两重循环,外循环变量i表示数组的行,内层循环变量j表示数组的列。在第二重循环中首先判断数组元素的值是否小于0,若是则处理该行的下一个元素;若不是则判断a[¨刚的值是否等于0,若等于0则退出内层循环开始处理下一行;其他情况下,把a[i][j]的值加到变量s中。所以本程序段的功能是把每行值为0的元素前面的所有大于0的元素值加到变量s中。61.doublefun(intn){doubles=0.0,fac=1.0;inti;for(i=1;i<=n;i++){fac=fac【】;s=s+fac;}returns;}正确答案:/i或*1.O/i或*1或*(1.O/i)或/(double)i解析:主函数中首先定义了两个double型的变量s和fac,并给它们赋初值为0.0和1.0,在函数中s和fac的作用是存放和以及要加到的那一项的值。通过分析可知,第i项的值可以由第i-1项的值得到,即第i项是第i-1项的值除以i。可见横线处应添/i或与它等价的表达式。62.若有以下程序:intf(intx,inty){return(y-x)*x;}main(){inta=3,b=4,c=5,d;d=f(f(3,4),f(3,5));printf(“%d\n”,d);}执行后输出的结果是【】。正确答案:9解析:在主函数中函数f(f(3,4),f(3,5))的返回值赋给do函数的第一个参数为f(3,4)的返回值,函数f(3,4)返回值为(4-3)*3=3,f(3,5)返回值为(5-3)*3=6,那么函数f(f(3,4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024城市二手房买卖合同(32篇)
- 沪教版九年级化学上册(上海版)全套讲义
- 农业金融服务提升产量潜力
- 高一化学教案:专题第三单元第二课时有机高分子的合成
- 2024高中化学第二章烃和卤代烃2-1苯的结构与性质课时作业含解析新人教版选修5
- 2024高中地理第四章自然环境对人类活动的影响4自然灾害对人类的危害课时作业含解析湘教版必修1
- 2024高中生物第五章生态系统及其稳定性第5节生态系统的稳定性精练含解析新人教版必修3
- 2024高中语文第二课千言万语总关“音”第2节耳听为虚-同音字和同音词练习含解析新人教版选修语言文字应用
- 2024高中语文精读课文一第1课1长安十年作业含解析新人教版选修中外传记蚜
- 2024高考历史一轮复习方案专题六古代中国经济的基本结构与特点专题综合测验含解析人民版
- 邮政银行借款合同
- 2024春期国开电大专科《中国古代文化常识》在线形考(形考任务一至四)试题及答案
- GB/T 17937-2024电工用铝包钢线
- 广告宣传物料广告宣传物料配送方案
- 2024年长春医学高等专科学校单招职业适应性测试题库及答案解析
- 解析几何-2023上海市高三数学一模汇编【教师版】
- 项目维修维保方案
- 上海市浦东新区2023-2024学年一年级上学期期末考试数学试题
- 插图在小学英语口语教学中的运用
- 前列腺增生药物治疗
- 人工智能知识图谱(归纳导图)
评论
0/150
提交评论