国家二级C语言机试(选择题)模拟试卷49(共240题)_第1页
国家二级C语言机试(选择题)模拟试卷49(共240题)_第2页
国家二级C语言机试(选择题)模拟试卷49(共240题)_第3页
国家二级C语言机试(选择题)模拟试卷49(共240题)_第4页
国家二级C语言机试(选择题)模拟试卷49(共240题)_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷49(共9套)(共240题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中正确的是()。A、所谓算法就是计算方法B、程序可以作为算法的一种描述方法C、算法设计只需考虑得到计算结果D、算法设计可以忽略算法的运算时间标准答案:B知识点解析:算法是指对解题方案的准确而完整的描述,算法不等于数学上的计算方法,也不等于程序。算法设计需要考虑可行性、确定性、有穷性与足够的情报,不能只考虑计算结果。算法设计有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的。算法在实现时需要用具体的程序设计语言描述,所以程序町以作为算法的一种描述方法。2、下列叙述中正确的是()。A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)标准答案:A知识点解析:本题主要考查的知识点为查找技术。顺序查找的使用情况:①线性表为无序表;②表采用链式存储结构。二分法查找只适用于顺序存储的有序表,并不适用于线性链表。3、有以下程序:#includevoidmain(){intm=1,n=2,*P=&m,*q=&n,*r;r=P;p=q;q=r;printf(“%d,%d,%d,%d\n”,m,n,*P,*q);}程序运行后的输出结果是()。A、1,2,1,2B、1,2,2,1C、2,1,2,1D、2,1,1,2标准答案:B知识点解析:本题定义了两个整型变量,然后用两个指针分别指向这两个整型变量,接着对指针进行交换,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。4、在关系数据库设计中,关系模式是用来记录用户数据的()。A、实体B、视图C、属性D、二维表标准答案:D知识点解析:关系模式采用二维表来表示关系,简称表。5、在软件设计中,不属于过程设计工具的是A、PDL(过程设计语言)B、PAD图C、N-S图D、DFD图标准答案:D知识点解析:DFD(数据流图Data-Flow-Diagram)是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示。它直接支持系统功能建模。在软件详细设计的过程阶段,要对每个模块规定的功能以及算法的设计给出适当的算法描述。常见的过程设计工具有:图形工具:程序流程图,N—S,PAD,HIPO。表格工具:判定表。语言工具:PDL(伪码)。6、下列关于数据库设计的叙述中,正确的是A、在需求分析阶段建立数据字典B、在概念设计阶段建立数据字典C、在逻辑设计阶段建立数据字典D、在物理设计阶段建立数据字典标准答案:A知识点解析:数据库设计目前一般采用生命周期法,即将整个数据库应用系统的开发分解成目标独立的若干阶段。分别是:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。数据字典是对系统中数据的详尽描述,是各类数据属性的清单。对数据设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。7、设有以下定义和语句,输出的结果是(用small模式编译,指针变量占2个字节)()。structU{long*cat;stmctU*next;doubledog;}u;printf("%d",sizeof(u));A、20B、16C、14D、12标准答案:D知识点解析:当结构成员是指针时,它将占用2字节的存储单元(在small编译模式下),而与它所指向的数据类型无关。本题中,指针cat的长度为2字节;next是指向结构structU的指针,但它本身也只是一个指针,其长度也是2字节;double型变量dog的长度为8字节。因此,结构变量u的总长度为12字节。8、在下列定义语句中,编译时会出现编译错误的是()。A、chara=’\x2d’;B、chara=’\n’;C、chara=’a’;D、chara="aa";标准答案:D知识点解析:D选项中将字符串常量“aa”赋给字符变量a是错误的。9、设有定义:inta;floatb;执行scanf(’’%2d%f’,&a,&b);语句时,若从键盘输入876543.0则a和b的值分别是A、876和543.0B、87和6.0C、87和543.0D、76和543.0标准答案:B知识点解析:在输入函数scanf的输入格式符%2d%f中,2d表示输入的数据的宽度为2,所以当从键盘输入876543.0<CR>时,这时把输入数字串的前两位87赋给变量a,然后将紧接着将6按照格式控制符%f的形式赋给变量b,所以b的值为6.000000。10、若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:由于B和C有一一对应的联系,而A和B只间有一对多的联系,则通过关系之间的传递,则A和C之间也是一对多的联系。11、有以下程序:#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)fnr(j=i;j<=i;j++)t+=b[i][b[j][i]];printf(“%d\n”,t);}程序的运行结果是()。A、3B、4C、1D、9标准答案:B知识点解析:每次内循环只循环一次就结束,第1次外循环时,t=t+b[0][b[0][0]]=1+b[0][0]=1+0=1;第2次外循环时,t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第3次外循环时,t=t+b[2][b[2][2]]=2+b[2][2]=2+2=4。12、在关系数据库中,用来表示实体间联系的是A、属性B、-维表C、网状结构D、树状结构标准答案:B知识点解析:在关系数据库中,实体间的联系由一个二维表来表示。13、有以下程序main(){inta=1,b=2,c=3,d=0;if(a=1&&b++==2)if(b!=211c一!=3)printf("%d,%d,%d\n",a,b,c);elseprintff"%d,%d,%d\n",a,b,c);elseprintf("%d,%d,%d\n",a,b,c);}程序运行后的输出结果是A、1,3,2B、1,2,3C、l,3,3D、3,2,1标准答案:C知识点解析:a,b,c,d初始值分别为1,2,3,0。嵌套的if语句中,第一个if中,表达式a==1&&b++==2值为1,执行嵌套的if分支,此时“b=3,b!=2”成立,由于运算符是‖,不管后面一个表达式的值是不是1,其整个表达式的值总是1,“c--!=3”表达式不执行,最后打印出a,b,c的值是1,3,3。14、软件集成测试不采用A、迭代式组装B、自顶向下增量组装C、一次性组装D、自底向上增量组装标准答案:A知识点解析:集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。常采用自顶向下、自底向上和一次性组装测试15、以下叙述中正确的是A、函数名代表该函数的入口地址B、所有函数均不能接受函数名作为实参传入C、函数体中的语句不能出现对自己的调用D、如果函数带有参数,就不能调用自己标准答案:A知识点解析:函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项B错误的,在C语言中允许进行递归调用,即自己调用自己,选项C和选项D是错误的。16、设变量均已正确定义并赋值,以下与其他三组输出结果不同的一组语句是A、x++;printf(”%d\n”,x);B、++x;printf(”%d\n”,x);C、n=x++;printf(”%d\n”,n);D、n=++x;printf(”%)d\n”,n);标准答案:C知识点解析:本题考查自增运算符。++在前表示先自增然后使用,++在后面表示先使用然后自增。选项A)中首先执行x++,执行完后x自增1,然后printf输出的是x自增后的值:选项B)首先执行++,x的值增加1,接着输出x的值;选项C)中++在x的后面,因此n的值是x自增前的值,printf输出韵是x自增前的值,选项D)中++在x的前面,因此x首先自增,然后再赋值给n,n的值是x自增后的值,输出的也是x自增后的值。17、将数据库的结构划分成多个层次,是为了提高数据库的物理独立性和A、规范程度B、操作独立性C、逻辑独立性D、降低数据冗余标准答案:C知识点解析:物理独立性是指用户的应用程序与存储在磁盘上的数据库中数据是相互独立的。即,数据在磁盘上怎样存储由DBMS管理,用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变了,应用程序不用改变;逻辑独立性存在于外模式和内模式之间。数据的逻辑独立性是指数据与程序的逻辑独立性。用户的应用程序和数据库中的逻辑结构是相互独立的,当数据的逻辑结构发生改变时应用不需要改变,逻辑独立性存在于外模式和内模式之间。数据的逻辑独立性是指数据与程序的逻辑独立性。18、以下选项中合法的实型常量是A、.914B、3.13e-2.1C、0D、2.0*10标准答案:A知识点解析:实型常量又称实数或浮点数,一般用小数形式或指数形式来表示。实型常量分为以下两种形式:①小数形式:小数形式是由数字和小数点组成的一种实数表示形式。例如0.345、123、0.0等是合法的实数。这种表示形式必须要有小数点。②指数形式:在C语言中,用“e”或“E”后跟一个整数来表示以10为底的幂数。注意:字母“e”或“E”之前必须要有数字,后面的指数必须为整数。选项B中e后必须为整数,选项C没有小数点,而选项D则出现非法字符*。19、若有以下函数首部intfun(doublex[10],int*n)则下面针对此函数的函数声明语句中正确的是A、intfun(double,int);B、intfun(double*x,intn);C、intfun(double*,int*);D、intfun(doublex,int*n);标准答案:C知识点解析:函数说明的一般形式为:类型名函数名(参数类型1,参数类型2,……)。因为函数intfun(doublex[10],int*n)的第1个形式参数是一个双精度型的一维数组,第2个参数是一个整型指针,并返回一个整型值。一维数组的名字表示的是一维数组的地址。20、下面描述错误的是A、模块的独立性与模块的信息隐蔽和局部化无关B、内聚性和耦合性是模块独立程度的定性度量标准C、一个模块的内聚性越高则该模块的独立性越强D、一个模块的耦合性越高则该模块的独立性越弱标准答案:A知识点解析:模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其它模块的联系最少且接口简单。一般较优秀的软件设计,应尽量做到高内聚,低偶合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。所以选项A正确。21、有以下程序#includemain(){intx;scanf("%d",&x);if(x<=3);elseif(x!=10)printf("%d\n",x);}程序运行时,输入的值在哪个范围才会有输出结果A、小于3的整数B、不等于10的整数C、大于3或等于10的整数D、大于3且不等10的整数标准答案:D知识点解析:根据代码可知如果x的值小于3,执行空语句,不进行打印操作,如果x的值大于3,再判断x的值是否不等于10,如果不等于10就打印x的值,所以选择D选项。22、有以下程序#includeintfuna(inta,intb){returna+b;}intfunb(inta,intb){returna-b;}intsss(int:(*t)(),intx,inty){return((*t)(x,y));)main(){intx;x=sss(funa,9,3);x+=sss(funb,8,3);printf("%d\n",x);}程序运行后的输出结果是A、17B、23C、24D、22标准答案:A知识点解析:函数funa的功能计算两个数据的和,funb的功能计算两个数据的差,函数sss中利用指向函数的指针作为函数的参数,可以在调用的时候,根据接收的函数地址来决定调用那一个函数。主函数中调用x=sss(funa,9,3),将funa函数的地址传递给t,因此SSS涿l数成为求两个数据的和12,继续将:funb函数地址传给t,求两个数据差为5,和s累加后结果为17。23、有以下程序main(){intij;for(i=1;i<4;i++){for(j=i;j<4;j++)printf("%d*%d=%d",i,j,i*j);printf("\n");}}A、1*1=11*2=21*3=32*1=22*2=43*1=3B、1*1=11*2=22*2=41*3=32*3=63*3:9C、1*1=11*2=21*3=32*2=42*3=63*3=9D、1*1=12*1=22*2=.43*1=33*2=63*3=9标准答案:C知识点解析:外层for循环的自变量i从1开始,每次循环后增1,直到i等于3结束。对于外层循环自变量i的每一个值,内层循环的自变量j每次从i开始,每次循环后增1,直到j等于3结束。所以在每次外循环开始后,内层循环在一行先打印i*j=两个乘数的积,然后回车换行,下次循环从下一行开始打印输出结果。24、若有以下程序#include<stdio.h>main(){inta=1,b=2,c=3,d=4;if((a=2)||(b=1))c=2;if((c==3)&&(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}则程序的输出结果是A、2,1,2,-1B、2,2,2,4C、5,1,2,-1D、1,2,3,4标准答案:B知识点解析:代码中有两条并列的if语句,第一条if语句执行,(a=2)||(b=1)值为1,由于逻辑或表达式,根据其短路运算规则,a=2,b=2,即b值不变执行if分支c=2。并列的if语句中表达式(c==3)&&(d=-1)为逻辑与表达式,c==3不成立,不考虑d=-1表达式,d为5.逻辑表达式值为0,不执行相应if分支。25、以下叙述中正确的是()。A、三种循环for,while,do-while可以互相嵌套B、循环发生嵌套时,最多只能两层C、循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误D、for语句的圆括号中的表达式不能都省略掉标准答案:A知识点解析:C语言中,循环嵌套可以多层,选项B)错;循环嵌套时建议采用缩进形式书写,这是为了增加代码的可读性,但是不会产生编译错误,选项C)错误;for语句的圆括号内的三个表达式在语法上都可以省略,但是两个分号";"不能省略,选项D)错;选项A)的表述正确,所以答案选A)。26、有以下程序#includeintfun(charp[][10]){intn=0,i;for(i=0;i<7;i++)if(p[i][0]==’T’)n++;returnn;}main(){charstr[][10]={"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};printf("%d\n",fun(str));}程序执行后的输出结果是A、1B、2C、3D、0标准答案:B知识点解析:此程序是统计一周七天中英文名称首字母为"T"的个数。P[i][0]是字符串的首字符,一共有两个"T",所以n=2。因此B选项正确。27、有以下程序#include<stdio.h>intfun(intx,inty)main(){if(x==y)return(x);{inta=4,b=5,c=6;elsereturn((x+y)/2);printf("%d\n",fun(2*a,fun(b,c)));}}程序运行后的输出结果是A、3B、6C、8D、12标准答案:B知识点解析:fun(b,c)即fun(5,6),5!=6,所以返回(5+6)/2=5:fun(2*a,5)即fun(8,5),8!=5,所以返回(8+5)/2=6。28、对于一个正常运行的C程序,以下叙述中正确的是A、程序的执行总是从程序的第一个函数开始,在main函数结束B、程序的执行总是从main函数开始,在程序的最后一个函数中结束C、程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束D、程序的执行总是从main函数开始标准答案:D知识点解析:一个C语言源程序无论包括了多少函数,在正常情况下总是从main函数开始执行,从main函数结束。29、有以下程序#include<stdio.h>main()(inty=10;while(y--);printf("y=%d\n",y);}程序执行后的输出结果是A、y=0B、y=-1C、y=1D、while构成无限循环标准答案:B知识点解析:在while循环中每次变量y的值减1,直到其值等于0时退出循环,这时y的再减1变为-1。30、设有定义:intx=0,*p;紧接着的赋值语句正确的是A、*p=NULL;B、p=NULL;C、p=x;D、*p=x;标准答案:B知识点解析:定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址。31、以下叙述中正确的是A、break语句不能用于提前结束for语句的本层循环B、continue语句使得整个循环终止C、使用break语句可以使流程跳出switch语句体D、在for语句中,continue与break的效果是一样的,可以互换标准答案:C知识点解析:用break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,从而提前结束循环,而continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。32、有以下程序#include<stdio.h>intfun(inta,intb){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序运行后的输出结果是A、15B、21C、20D、31标准答案:B知识点解析:本题考查函数的调用,函数fun功能为求两个数据的和。主函数中表达式r=fun(fun(x,y),z--),首先计算内层调用fun(x,y),计算结果为13,然后外层调用fun(13,8),结果为21。33、有以下程序#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序运行后的输出结果是A、a=1,b=1B、a=1,b=0C、a=2,b=1D、a=2,b=2标准答案:C知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。34、有以下程序,程序运行后的输出结果是#include#defineS(x)4*(x)*x+1voidmain(){intk=5,j=2;printf("%d\n",S(k+j));}A、197B、143C、33D、28标准答案:B知识点解析:这道题涉及到带参数的宏的定义和替换这个知识点。在程序中定义了带参数的宏S(x),当在主函数中用参数k+j调用宏S时,根据宏替换的原则,则S(k+i)=S(5+2)=4*7*5+2+1=143。35、有以下程序,程序运行后的输出结果是main(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}A、1,2,1,2B、1,2,2,1C、2,1,2,1D、2,1,1,2标准答案:B知识点解析:在主函数定义了3个整数指针变量p,q,r,并且使p指向m,q指向n,再执行“r=p;p=q;q=r;”这三条语句,使q指向m,p指向n,再输出变量“m,n,*p,*q”时,它们值分别为1,2,2,1。36、以下结构体类型说明和变量定义中正确的是A、typedefstruct{intn;charc;}REC;RECt1,t2;B、structREC;{intn;charc;);RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;)t1,t2;D、struct{intn;charc;}REC;RECt1,t2;标准答案:A知识点解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct结构体名后不能加“;”号,所以选项B)、C)错误,选项D)中定义无名称的结构体类型同时定义结构体变量形式应为“structt1,t2;”。选项A)为用户自定义类型,其为正确的定义形式。37、以下叙述中正确的是A、字符变量在定义时不能赋初值B、字符常量可以参与任何整数运算C、同一英文字母的大写和小写形式代表的是同一个字符常量D、转义字符用"\"符号开头标准答案:B知识点解析:A选项中,字符变量在定义时可以赋初值;C选项中,同一英文字母的大写和小写形式代表的是不同的字符常量;D选项中,转义字符以反斜线"\"开头的。因此B选项正确。38、若有定义语句:intyear=2009,*p=&year;以下不能使变量year中的值增至2010的语句是A、(*p)++;B、*p++;C、++(*p);D、*p+=1;标准答案:B知识点解析:由于自加运算符++的运算级别高于间接运算*的运算级别,所以B选项的表达式*p++不能使变量year中的值增至2010。因此B选项正确。39、若变量已正确定义,则以下语句的输出结果是s=32;s^=32;printf("%d",s);A、-1B、0C、1D、32标准答案:B知识点解析:本题考查逻辑异或运算,异或运算只有在两个比较的位不同时其结果是1,否则结果为0,题目中两个值相同,所以结果为0。40、有以下程序#includeintfun(inta,intB){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序运行后的输出结果是A、21B、15C、20D、31标准答案:A知识点解析:函数fun的功能是返回两个形参的和。调用函数fun(x,y)时,将变量x=6和y=7的值分别传送变量a和b,并且通过语句returna+b;将13返回给主函数。继续调用函数fun(13,z--),这里z--指将z的值参与运算后,再将z的值减1操作;将13和8分别传送变量a和b,且通过语句returna+b;将21返回给主函数。因此A选项正确。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、在软件开发中,需求分析阶段产生的主要文档是()。A、数据字典B、详细设计说明书C、数据流图说明书D、软件需求规格说明书标准答案:D知识点解析:需求分析的最终结果是生成软件需求规格说明书,可以为用户、分析人员和设计人员之间的交流提供方便。2、对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是A、冒泡排序为n/2B、冒泡排序为nC、快速排序为nD、快速排序为n(n.1)/2标准答案:D知识点解析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。快速排序法也是一种互换类的排序方法,但由于它比冒泡排序法的速度快,因此,称为快速排序法。3、计算机程序设计的模块化一般是哪一项实现的?()A、语句B、程序行C、函数D、变量标准答案:C知识点解析:用函数作为程序模块以实现C程序的模块化,程序有多个函数构成,每个函数可以实现一个具体的功能,多个函数便可以实现程序的模块化设计。4、有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为A、并B、自然连接C、笛卡尔积D、交标准答案:D知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组组成的,记为R∩S。5、以下叙述中错误的是A、C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件B、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中C、C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令D、C语言源程序经编译后生成后缀为.obi的目标程序标准答案:C知识点解析:C语言中的非执行语句例如宏定义命令,在预编译之后替换到代码中,该命令本身也就不存在了,不会转换成二进制的机器指令。由高级语言编写的程序称为“源程序”,把由二进制代码表示的程序称为“目标程序”。C语言编写的源程序就是一ASCII的形式存放在文本文件中的。C源程序经过C编译程序编译之后生成一个后缀为.obj的二进制文件(称为目标文件),然后由称为“连接程序”(Link)的软件,把此.obj文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。6、有以下程序:#include<stdio.h>main(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)s+=*(t+i);printf(’’%d\n’’,s);}程序的运行结果是()。A、20B、25C、45D、36标准答案:B知识点解析:统计1~9这9个数中的奇数和,此题考查指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此*(t+i)代表数组的第i+1个元素。程序的运行结果是1+3+5+7+9=25。7、计算机能直接执行的程序是A、目标程序B、可执行程序C、汇编程序D、源程序标准答案:B知识点解析:把由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”(后缀名为.obj),由汇编语言编写的程序称为“汇编程序”。为了把源程序转换成机器能接受的目标程序,软件工作者编制了一系列软件,通过这些软件可以把用户按规定语法写出的语句——翻译成二进制的机器指令。这种具有翻译功能的软件称为“编译程序”,每种高级语言都有与它对应的编译程序。C源程序经过C编译程序编译之后生成一个后缀为.obj的二制进文件(称为目标文件),这个目标程序要和C语言的库函数相链接生成一个后缀为.exe的文件,这个文件可以在操作系统中直接执行,称为可执行程序。8、下面属于系统软件的是A、Oracle数据库管理系统B、人事管理系统C、WPS编辑软件D、杀毒软件标准答案:A知识点解析:一般来讲,系统软件包括操作系统和一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具),是支持计算机系统正常运行并实现用户操作的那部分软件。所以Oracle数据库管理系统是系统软件。9、有以下程序#includemain(){inta=0,b=0;/*给a赋值a=10:b=20;给b赋值*/printf("a+b=%d\n",a+b);/*输出计算结果*/}程序运行后的输出结果是A、a+b=30B、a+b=10C、出错D、a+b=0标准答案:D知识点解析:C语言规定,在字符“/*”和其后紧跟的第一个字符“*/”中间的部分是注释内容,且注释部分的内容不参与程序的编译和运行,因此,本题中程序语句“a=10;b=20;”没有执行。10、若有以下程序,则程序的输出结果是#includemain(){inta=0,b=0,c=0;c=(a-=++A),(a+=b,b+=4);printf("%d,%d,%d\n",a,b,c);}A、0,4,4B、1,4,1C、0,4,0D、1,4,4标准答案:C知识点解析:表达式c=(a-=++a),(a+=b,b+=4)相当于逗号表达式,首先计算c=(a-=++a),其中a-=++a)等价于a=a-(++a),得到a的值0,c的值为0,在计算(a+=b,b+=4)时,a和b的初值为0,计算以后,a为0,b为4。11、以下选项中,合法的一组C语言数值常量是A、12.0Xa234.5e0B、028.5e-3-0xfC、.1774e1.50abcD、0x8A10,0003.e5标准答案:A知识点解析:八进制数其开头必须是数字“0”,其数字包括0~7,而在选项B中,028是错误的。浮点数据的指数形式表示常量中,C语言规定字母e或E之前必须要有数字,且e或E之后的指数必须为整数,而选项C中4e1.5是错误的。在选项D中,整型数据lO,000的表示形式是错误的。12、以下叙述中正确的是A、语句“charstr[10]="string!";”和“charstr[10]={"string!"};”并不等价B、对于一维字符数组,不能使用字符串常量来赋初值C、对于字符串常量“string!”,系统已自动在最后加入了“’\0’”字符,表示串结尾D、在语句charstr[1]="string!";中,数组str的大小等于字符串的长度标准答案:C知识点解析:在C语言中,字符串是借助于字符型一维数组来存放的,可以借助在定义时初始化以及输入来把字符串存入数组,并规定以字符’\0’作为“字符串结束标志”。’\0’是一个转义字符,称为空值,它的ASCII码值为0。’\0’作为标志占用存储空间,但不计入字符串的实际长度。在C语言中,系统在每个字符串的最后自动加入一个字符(’\0’)作为字符串的结束标志。13、若有以下程序#include<stdio.h>main(){intb=10,a=-11;a%=b%=4:printf("%d%d\n",a,b);}则程序的输出结果是A、12B、-1÷2C、-12D、1-2标准答案:C知识点解析:对于表达式a%=b%=4为复合的赋值运算,结合性自右至左,相当于先计算b=b%4,a=a%b;结果的符号和第一个操作数的符号相同,因此b为2,a的结果为-1。14、以下叙述中错误的是A、typedef的作用是用一个新的标识符来代表已存在的类型名B、typedef说明的新类型名必须使用大写字母,否则会出编译错误C、可以用typedef说明的新类型名来定义变量D、用typedef可以说明一种新的类型名标准答案:B知识点解析:typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原来类型名依然有效。为了便于识别,一般习惯将新的类型名用大写字母表示。15、有以下程序#includemain(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的运行结果是A、963B、852C、741D、875421标准答案:B知识点解析:y的值的初值为9,所以在for循环中,当y的值为9、6或3时,if语句的条件成立,执行输出语句,输出表达式--y的值。因为自减符号在y的前面,所以首先y的自减1,然后再输出v的值,故输出结果为852。16、若有以下程序intf(inta[],intn)main(){if(n>1){inta[]={8,2,9,1,3,6,4,7,5};{intt;t=f(a,n-1);printf("%d\n",f(a,9));returnt>a[n-1]?t:a[n—1];}}elsereturna[0];}则程序的输出结果是A、9B、1C、8D、5标准答案:A知识点解析:主函数中调用f(a,9),递归函数的调用过程如下:f(a,9)→f(a,8)→f(a,7)→f(a,6)→f(a,5)→f(a,4)→f(a,3)→f(a,2)→f(a,1),f(a,1)得到返回值为a[0],值为8,递归过程开始回归,回归过程描述如下:8>a[1],返回8→8>a[2]不成立,返回a[2]的值为9……因此函数f的主要功能为计算数组中的最大值。主函数中输出最大值为9。17、设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:□代表空格字符)A、10□X20□YB、10□X20□YC、10X20YD、10□X□20□Y标准答案:C知识点解析:暂无解析18、有以下程序#includemain(){intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}程序运行后的输出结果是A、26B、23C、43D、46标准答案:B知识点解析:观察题目,可以发现,*p=&aa[0][0]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,*p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[0][0],输出2,而i=1时执行了++p操作使指针向后移动指向了aa[0][1],所以在输出*p时应为3。因此B选项正确。19、若有定义语句:inta[2][3],*p[3];,则以下语句中正确的是A、p=a;B、p[0]=a;C、p[0]=a[1][2];D、p[1]=a;标准答案:C知识点解析:本题考查多维数组和数组指针。a是一个二维数组,p是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量:选项B)数据类型不匹配,p[0]是指向一个整型对象,而a是一个二维数组首地址:选项C)正确,是把元素a[1][2]赋值给p[0];选项D)和选项B)一样属于数据类型不匹配,p[1]是指向一个整型对象,而a是一个二维数组首地址。20、有以下程序main(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf("%d",*(p++));printf("%d\n",**k);}程序运行后的输出结果是A、44B、24C、22D、46标准答案:B知识点解析:主函数中指针变量p指向数组a中下标为0的元素,k指向P,那么*(p++)的值为2,p指向数组中下标为1的元素,k指向P,所以**k的值为4。21、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是A、选择B、差C、交D、并标准答案:B知识点解析:关系T是关系R的一部分,并且是关系R去掉R和S相同的元素,符合差操作。22、有以下程序#include<stdio.h>main(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fp=fopen("myfile.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);fclose(fp);}程序运行后的输出结果是A、28cB、abc28C、abcD、因类型不一致而出错标准答案:B知识点解析:存程序中首先把字符串abc写入到文件myfile.dat中,然后再把整数28追加到字符串abc的后面,最后把文件myfile.dat的内容读入到字符串str中,并把其内容输出。23、以下叙述中正确的是A、每个后缀为.C的C语言源程序都可以单独进行编译B、每个后缀为.C的C语言源程序都应该包含一个main函数C、在C语言程序中,main函数必须放在其他函数的最前面D、在C语言程序中,只有main函数才可单独进行编译标准答案:A知识点解析:一个普通的C函数可以单独作为一个C的程序文件存在被包含到其他程序中,每个后缀为.C的C语言源程序都可以单独进行编译,所以B、D错误,main函数可以放在程序的开始,中间,最后,所以C错误。24、以下选项中不合法的标识符是()。A、&aB、FORC、printD、00标准答案:A知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B)选项中的"FOR"可以作为标识符来用。A)选项中含有非法字符&,所以选择A)。25、下列叙述中正确的是A、循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D、循环队列中元素的个数是由队头指针和队尾指针共同决定标准答案:D知识点解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B与C错误。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、在数据处理中,其处理的最小单位是()。A、数据B、数据项C、数据结构D、数据元素标准答案:B知识点解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。2、结构化程序的三种基本控制结构是()。A、顺序、选择和调用B、过程、子程序和分程序C、顺序、选择和重复(循环)D、调用、返回和转移标准答案:C知识点解析:1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、选择和重复三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。3、设树T的深度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1。则T中的叶子结点数为A、8B、7C、6D、5标准答案:B知识点解析:深度为m二叉树其总结点数为2m-1=24-1=15。总结点数减去度为1,2,3,4的结点个数就是叶子结点数。15-4-2-1-1=7。4、下列排序方法中,最坏情况下比较次数最少的是A、冒泡排序B、简单选择排序C、直接插入排序D、堆排序标准答案:D知识点解析:冒泡排序、简单选择排序和直接插入排序法在最坏的情况下比较次数为:n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)。其中堆排序的比较次数最少。5、下面不属于软件设计阶段任务的是A、软件总体设计B、算法设计C、制定软件确认测试计划D、数据库设计标准答案:C知识点解析:软件设计阶段总体分为两部分:概要设计和详细设计,此阶段的主要任务就是将需求规格说明文档转换为软件设计文档,将需求阶段提出的问题,一一解释,形成详细设计文档,并根据功能要求,定制相应数据结构、各种流程图等,为下一步编码做准备。6、下面描述中,不属于软件危机表现的是A、软件过程不规范B、软件开发生产率低C、软件质量难以控制D、软件成本不断提高标准答案:A知识点解析:软件危机主要表现在以下6个方面:①软件需求的增长得不到满足;②软件开发成本和进度无法控制;③软件质量难以保证;④软件不可维护或维护程度非常低;⑤软件的成本不断提高;⑥软件开发生产率的提高赶不上硬件的发展和应用需求的增长。7、软件工程的三要素是()。A、方法、工具和过程B、建模、方法和工具C、建模、方法和过程D、定义、方法和过程标准答案:A知识点解析:软件工程的三要素是方法、工具和过程,答案选A。8、带链栈空的条件是A、top=bottom=NULLB、top=-1且bottom=NULLC、top=NULL且bottom-1D、top=bottom=-1标准答案:A知识点解析:栈的链式存储结构称为链栈。在链栈中,只会出现栈空和非空两种状态。当栈为空时,有top=bottom=NULL;当栈非空时,top指向链表的第一个结点(栈顶)。所以选项A正确。9、软件调试的目的是A、发现错误B、改正错误C、改善软件的性能D、验证软件的正确性标准答案:B知识点解析:软件调试的任务是诊断和改正程序中的错误。程序调试活动由两部分组成,一是根据错误的迹象确定程序中的错误的确切性质、原因和位置。二是对程序进行修改,排除这个错误。10、设有定义:inta=1,b=2,c=3;以下语句中执行效果与其它三个不同的是A、if(a>b)c=a;a=b;b=c;B、if(a>b){c=a,a=b,b=c;}C、if(a>b)c=a,a=b,b=c;D、if(a>b){c=a;a=b;b=c;}标准答案:A知识点解析:在C语言中,用分号表示一条语句的结束,用{}把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B、C、D表示的功能相同,而选项A表示的是一条if语句,两条赋值语句。11、以下关于结构化程序设计的叙述中正确的是A、结构化程序使用goto语句会很便捷B、一个结构化程序必须同时由顺序、分支、循环三种结构组成C、由三种基本结构构成的程序只能解决小规模的问题D、在C语言中,程序的模块化是利用函数实现的标准答案:D知识点解析:C语言是结构化程序设计语言,顺序结构、选择结构、循环结构是结构化程序设计的三种基本结构,研究证明任何程序都可以由这三种基本结构组成。但是程序可以包含一种或者几种结构,不是必须包含全部三种结构。自从提倡结构化设计以来,goto就成了有争议的语句。首先,由于goto语句可以灵活跳转,如果不加限制,它的确会破坏结构化设计风格。其次,goto语句经常带来错误或隐患。它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句。Goto语句的使用会使程序容易发生错误并且也不易阅读,所以应避免使用。由三种基本结构构成的程序几乎能解决大部分问题。12、有以下程序:#includemain(){FILE*fp;inta[10]={1,2,3},i,n;fp=fopen(“d1.dat”,”W”);for(i=0;i<3;i++)fprintf(fp,“%d”,a[i]);fprintf(fp,“\n”);felose(fp);fp=fopen(“d1.dat”,“r”);fscanf(fp,“%d”,&n);fclose(fp);printf(“%d\n”,n);}程序的运行结果是()。A、321B、12300C、1D、123标准答案:D知识点解析:程序首先将数组a[10]中的元素1、2、3分别写入了文件d1.dat文件中,然后又将d1.dat文件中的数据123整体写到变量n的空间中,所以打印n时输出的数据为123。13、表达式:(int)((double)9/2)-9%2的值是A、0B、4C、3D、5标准答案:C知识点解析:这个表达式的计算过程为,首先求出9除以2的商等于4,再把其强制转化为实型数据为4.0,然后再强制转4,减去9对2求余数1,得到其结果等于3。14、以下能正确定义字符串的语句是A、charstr="\x43";B、charstr[]="\0";C、charstr=";D、charstr[]={’\064’};标准答案:B知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。15、若有以下程序#includemain(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;else;if(c!=3)r+=3;else;if(d==4)r+=4;printf("%d\n",r);}则程序的输出结果是A、10B、6C、7D、3标准答案:C知识点解析:程序代码中有四条并列的if语句,第一条if表达式a!_l不成立,执行else分支,r=l;第二条if表达式b==2成立,执行r+=2,r==3;第三条if语句c!=3不成立,执行else分支,分支为空语句;第四条if分支d==4成立,执行该if分支语句,r+=4,r=7。16、以下不合法的字符常量是A、’\"’B、’\\’C、’\018’D、’\xcc’标准答案:C知识点解析:在C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来用为字符常量。转义字符常量也是必须括在一对单引号内,以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的ASCII字符。在选项C)中,’\018’是用八进制数来代表一个字符常量,所以其中的数字只能小于8,并不包括8。17、有以下程序main(){inti=5;do{if(i%3=1)if(i%5==2){printf("**%d",i);break;}i++;}while(i!=0);printf("\n");}程序的运行结果是A、*3*5B、*5C、*7D、*2*6标准答案:C知识点解析:由于循环变量i的初值等于5,所以第一、二次进入do....while循环语句时,条件语句if(i%3==1),if(i%5==2){printf(“*%d”,i);break;}不执行,只执行i++语句。当i=7时,满足条件语句if(i%3==1),if(i%5==2){printf("*%d",i);break;},所以输出*7,结束循环。18、有以下程序#include<stdio.h>intfun(){staticintx=1;main(){inti,s=1;x+=1;for(i=1;i<=5;i++)s+=fun();returnx;}printf("%d\n",s);}程序运行后的输出结果是A、11B、21C、6D、120标准答案:B知识点解析:这道试题主要考查了局部静态变量的应用。在函数fun()中定义了局部静态变量整型x,其初值等于1,在主函数中循环执行5次,第一次变量s的值等于3.变量x的值等于2,第二次变量s的值等于6,变量x的值等于3,第三次变量s的值等于10,变量x的值等于4,第四次变量s的值等于15,变量x的值等于5,第五次变量s的值等于21,变量x的值等于6。19、以下叙述中正确的是A、函数既可以直接调用自己,也可以间接调用自己B、任何情况下都不能用函数名作为实参C、函数的递归调用不需要额外开销,所以效率很高D、简单递归不需要明确的结束递归的条件标准答案:A知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,各函数之间是平行的,除了主函数外,函数之间可以相互调用,甚至C语言中的函数可以直接或间接地自己调用自己,称之为递归调用,该调用主要用于把要解决的问题转化为一个新的问题,而这个新问题的解决方法仍与原来的解法相同,只是所处理的对象有规律地递增或递减,可以应用这个转化过程使问题得到解决,同时为了有效使用递归调用必定要有一个明确的结束递归的条件。而每次进行递归调用时候,需要利用栈保存现场信息,因此并不会提高效率,选项C和选项D不正确。函数名表名了函数的入口地址,如果函数的形参为指向函数的指针变量,那么对应的实参必须为函数名,因此函数名可以为函数的参数,选项B错误。20、若有以下程序#includemain(){intc;c=13|5;printf("%d\n",c);}则程序的输出结果是A、13B、15C、18D、5标准答案:A知识点解析:本题考查位运算中按位或运算符,或运算只要两个比较的位中有一个为1,其结果是1,否则结果为0,,13用二进制表示为00001101,5用二进制表示为00000101,或后00001101,即13,选项A正确。21、以下叙述中正确的是A、在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B、在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C、在printf函数中,各个输出项只能是变量D、使用printf函数无法输出百分号%标准答案:A知识点解析:scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项A正确;在使用scanf函数输入整数或实数时,输入数据之间可以用空格、跳格、回车来分隔,选项B错误;printf输出项不但可以为变量,还可以表达式或者常量,选项C错误;如果要输出“%”,可以在格式控制中用“%%”表示,将输出一个“%”,选项D错误。22、有下列程序:#include<stdio.h>#include<string.h>typedefstruct{charname[9];charsex;floatscore[2];}STU;STUf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];returna;}main(){STUc={"QA、Qian,m,85,90B、Zhao,f,95,92C、Zhao,m,85,90D、Qian,f,95,92标准答案:D知识点解析:f()函数的功能是对形参a的各个成员用结构体变量b的各个成员进行赋值后,然后返回变量a。在主函数中调用f(c)函数时,将STU类型的结构体变量c的值传递给形参a,函数f()在对a的各个成员进行重新赋值后,再将返回变量a的值传给d,最后输出结构变量d的各个成员的值。23、有以下程序#incllldeintfun(chars[])main(){intn=0;{chars[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’,’*’};while(*s<=’9’&&*s>=’0’)printf("%d\n",fun(s));{n=10*n+*s-’0’;s++;}}return(n);}程序的运行结果是A、61490B、61C、9D、5标准答案:B知识点解析:在fun函数中,while循环的功能是逐个取字符数组s的字符判断其是否是数字。若是则将这些数字组成一个数保存到变量n中,并返回变量n的值。所以在主函数中调用fun(s)时,将把字符数组s中的数字组成一个数输出。因为当指针s指向数组的第3位时,即字符件’*’,循环条件不成立,循环结束,返回n的值。所以输出n的值为61。24、有以下程序#includemain(){chara=4;printf("%d\n",a=a<<1);}A、8B、16C、40D、4标准答案:A知识点解析:本题主要考查按位右移运算。a=4的二进制为00000100,a<<1后为00001000,其值为十进制数值8。25、有下列程序#include<stdio.h>main(){char*P="6938";inti,s=0;for(i=3;i>=0;i--)s=10*s+p[i]-’0’;printf("%d\n",s);}程序运行后的输出结果是()。A、8396B、6938C、3869D、3689标准答案:A知识点解析:程序首先定义一个字符指针p,指向一个字符串“6938”,然后通过for循环使用逆序的方式遍历字符串的各个字符,并将各个字符当作整数参与算术运算,其中p[i]-‘0’含义是将字符串中的数字字符转换成对应的整数;10*s是将上一次运算结果乘以10后与转换后的整数相加,再累加到s中,所以for循环执行完后,s的值是将字符串“6938”逆序后当作整数输出,本题答案为A。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、深度为5的完全二叉树的结点数不可能是()。A、15B、16C、17D、18标准答案:A知识点解析:对于满二叉树,叶子结点的数目等于2n—1,n为深度,这里就是24=16。2、设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=m。现又在栈中退出一个元素后,栈顶指针top值为()。A、0B、m-1C、m+1D、产生栈空错误标准答案:C知识点解析:栈的顺序存储空间为S(1:m),初始状态top=m+1,所以这个栈是m在栈底(也可理解为开口向下的栈)。经过一系列入栈与退栈操作后top=m,则栈中有1个元素,若现在又退出一个元素,那么栈顶指针下移一位,回到m+1的位置。3、以下叙述中正确的是A、C程序书写格式严格,要求一行内只能写一个语句B、C程序书写格式自由,一个语句可以写在多行上C、C程序中的注释只能出现在程序的开始位置和语句的后面D、用C语言编写的程序只能放在一个程序文件中标准答案:B知识点解析:本题主要考查的足C语言结构中的源程序书写格式这个知识点,在C语言中注释部分对程序的运行结果不产生任何影响,它可以出现在任意位置;c语言书写自由,一行内可以写多个语句,一个语句可以写在多行上;由于C语言编写的程序有很好的移植性,可以放在多个程序文件中。4、某二叉树共有12个结点,其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)A、3B、6C、8D、12标准答案:D知识点解析:根据二叉树的性质,度为0的结点(即叶子结点)总是比度为2的结点多一个。题目中的二叉树的叶子结点为1,因此度为2的结点的数目为0,故该二叉树为12层,每层只有一个结点。5、请阅读程序:#include<math.h>#include<stdio.h>main(){floata,b,c;scanf("%f%f",&a,&b);c=a/b;while(1){if(fabs(c)>1.6){a=b;b=c;c=a/b;}elsebreak;}printf("%f\n",b);}若运行时从键盘上输入3.62.4<回车>,则输出结果是()。A、1.500000B、1.600000C、2.000000D、2.400000标准答案:D知识点解析:本题考查甩break语句终止循环。程序中定义了两个实型变量a、b,并给scanf()函数赋值,键盘输入3.62.4<回车>后,a=3.6,b=2.4,c=a/b=3.6/2.4=1.5,因为c=1.5<1.6,退出循环,输出b的原值。表面上看,while(1)条件恒为真,将会产生死循环,但利用break语句可以终止循环。6、下列叙述中正确的是()。A、数据库系统避免了一切冗余B、数据库系统减少了数据冗余C、数据库系统中数据的一致性是指数据类型一致D、数据库系统比文件系统能管理更多的数据标准答案:B知识点解析:数据库系统共享性大,冗余度小,但只是减少了冗余,并不是避免一切冗余。数据的一致性是指在系统中同一数据在不同位置的出现应保持相同的值,而不是数据类型的一致。数据库系统比文件系统有更强的管理控制能力,而不是管理更多的数据。7、下面描述中错误的是()。A、系统总体结构图支持软件系统的详细设计B、软件设计是将软件需求转换为软件表示的过程C、数据结构与数据库设计是软件设计的任务之一D、PAD图是软件详细设计的表示工具标准答案:A知识点解析:软件设计是将软件需求转换为软件表示的过程;数据结构与数据库设计是软件设计的任务之一;PAD图,即问题分析图,是一种主要用于描述软件详细设计的图形工具。8、有以下程序#includemain(){inta1,a2;charc1,c2;scanf(’’%d%c%d%c’’,&al,&c1,&a2,&c2);printf(’’%d,%c,%d,%c’’,a1,c1,a2,c2);}若想通过键盘输入,使得a1的值为12,a2的值为34,cl的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b则正确的输入格式是(以下□代表空格,代表回车)A、12□a□34□bB、12,a,34,bC、12a34bD、12□a34□b标准答案:C知识点解析:本题考查scanf语句。scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。其调用格式为:scanff”<格式化字符串>”,<地址表>)格式化字符串包括以下3类不同的字符;①格式化说明符:格式化说明符与前而用的printf()函数中的格式说明符基本相同。②空白字符:空白字符会使scanff)函数在读操作中略去输入中的一个或多个空白字符。③非空白字符:一个非空白字符会使scanff()函数在读入时剔除掉与这个非空白字符相同的字符。由于在scanf函数中,几个变量之间没有任何间隔,所以输入的时候,也同样不应该有间隔。9、设有定义:doublea[10],*s=a;,以下能够代表数组元素a[3]的是()。A、(*s)[3]B、*(s+3)C、*s[3]D、*s+3标准答案:B知识点解析:题中,首先定义了double型的数组a,并将数组首地址赋给指针s。s[3]能够表示a[3],故选项A、C不能表示a[3];选项D的*s+3=a[0]+3。故本题答案为B选项。10、有以下程序#includeintflintx,inty){return((y-x)*x);}main()finta=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf("%d\n",d);}程序运行后的输出结果是A、10B、8C、9D、7标准答案:C知识点解析:本题考查函数的嵌套调用。首先计算f(a,b)与f(a,c),f(a,b)=(b—a)*a=3,f(a,c)=(c-a)*a=6,然后计算f(3,6)=(6—3)*3=9。11、以下程序的输出结果是()。#includevoidfun(char**P){++p;printf(’’%sh’’,*P);}main(){char*a[]={’’Morning’’,’’Afternoon’’,’’Evening’’,’’Night’’);fun(a);}A、MorningB、fternoonC、orningD、Afternoon标准答案:D知识点解析:题目中指针的指针变量a和p都是指向字符串的指针。执行fun(a)语句时,p指向的是字符串数组a的第一个字符串“Morning”,p自加1之后,*p指向了字符串数组a的第2个字符串“Afternoon”。12、有以下程序#include<stdio.h>#deftneN2#defineMN+1#defineNUM(M+1)*M/2main(){printf(’’%d\n’’,NUM);)程序运行后的输出结果是A、4B、8C、9D、6标准答案:B知识点解析:宏展开以后NuM为(2+1+1)*2+1/2,计算以后值为8。注意在进行宏展开的时候,千万不要试图计算,展开以后再进行计算。13、设变量均已正确定义,若要通过scanf(”%d%c%d%c”,&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。以下所示的输入形式中正确的是(注:口代表空格字符)A、10口X20口YB、10口X20口YC、10X20YD、10口X口20口Y标准答案:C知识点解析:在使用scanf函数进行输入数据时,输入的数据之间必须用空格、回车符、制表符(Tab键)等间隔符隔开,但是空格为合法的字符型数据的输入。而按照格式符"%d%c%d%c"说明,数值型数据和字符数据输入之间不要加入空格间隔,而字符型数据和数值型数据的输入却可以加入任意的空格,回车和跳格。14、下列叙述中正确的是A、在switch语句中必须使用defaultB、break语句必须与switch语句中的case配对使用C、在switch语句中,不一定使用break语句D、break语句只能用于switch语句标准答案:C知识点解析:break为C语言关键字,又称间断语句。break语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在switch语句中,也可以出现在循环语句中。defauh是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。15、若以下选项中的变量a,b,y均己正确定义并赋值,则语法正确的switch语句是A、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;}B、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}C、switch(a+9){casea:y=a-b:caseb:y=a+b:}D、switcha*b{case10:y=a+b;default:y=a-b;}标准答案:A知识点解析:使用switch语句直接处理多个分支,其一般形式为:switch(表达式){case常量表达式1:语句1:break;case常量表达式n:语句n:break;defauh:语句n+1;break;}switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句;若圆括号中表达式的值与所有case后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句。对于选项B),case语句和常量之问没有空格,而选项C)中的case后面为变量.选项D)中switch后面没给出圆括号。16、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是A、24B、5C、32D、40标准答案:C知识点解析:在for循环体中,首先判断自变量i能否被5整除,然后再自加两次,最后判断i能否被8整除。当for循环执行到第30次时,i的值为30能被5整除,然后i经过两次自加1运算,值变为32,能被8整除,故执行“printf("%d",i);”语句,即输出32。17、以下叙述中错误的是A、算法正确的程序最终一定会结束B、算法正确的程序可以有零个输入C、算法正确的程序可以有零个输出D、算法正确的程序对于相同的输入一定有相同的结果标准答案:C知识点解析:算法是指为解决某个特定问题而采取的确定且有限的步骤。一个算法应该具有以下5个特征:①有穷性。一个算法包含的操作步骤应该是有限的。也就是说,在执行若干个操作步骤之后,算法将结束,而且每一步都在合理的时间内完成。②确定性。算法中的每一条指令必须有确切的含义,不能有二义性,对于相同的输入必能得出相同的执行结果。③可行性。算法中指定的操作,都可以通过已经验证过可以实现的基本运算执行有限次后实现。④有零个或多个输入。在计算机上实现的算法是

温馨提示

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

评论

0/150

提交评论