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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷1(共9套)(共306题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为()。A、23,13,51,57,66,26,81,69,76B、13,23,26,51,57,66,8176,69C、23,13,51,57,26,66,81,69,76D、23,13,51,57,81,26,66,69,76标准答案:A知识点解析:快速排序是起泡捧序的改进。在快速捧序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键码值比它小的在一部分。关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。2、下列关于线性链表的叙述中,正确的是()。A、各数据节点的存储空间可以不连续,但他们的存储顺序与逻辑顺序必须一致B、各数据节点的存储顺序与逻辑顺序可以不一致,但它们的存储空间不需连续C、进行插入数据与删除数据时,不需要移动表中的元素D、以上说法均不对标准答案:C知识点解析:一般来说,在线性表的链式存储结构中,各数据节点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插人和删除都不需要移动表中的元素,只需要改变节点的指针域。3、有以下程序:main(){intk=33;printf("%d,%o,%x",k,k,k);}执行后的输出结果是()。A、33,033,0x21B、33,033,21C、33,041,021D、33,41,21标准答案:D知识点解析:本题考查不同进制间的转换。printf输出函数中输出变量的格式,由输出格式符决定。题中“%o”格式符表示以八进制的形式输出;“%x”格式符表示以十六进制的形式输出。“33”的八进制和十六进制分别是41和21。4、有以下程序:#includevoidfun(inta[],intn){inti,t;for(i=0;iA、321678B、876543C、1098765D、345678标准答案:A知识点解析:本题中的函数fun()的功能是将数组k中前5个元素倒序,所以返回后数组k中的元素排列是5,4,3,2,1,6,7,8,9,10。所以打印输出k[2]到k[7]元素的值,即321678,所以选择A。5、有以下程序#includemain(){char*mm[4]={"abcd","1234","mnop","5678"};char**pm=mm;inti;for(i=0;i<4;i++)printf("%s",pm[i]+i);printf("\n");}程序的运行结果是()。A、abcd234op8B、abcd1234mnop5678C、a2o8D、a1m5标准答案:A知识点解析:输出语句"printf("%s",pm[i]+i);"表明输出以pm[i]+i为首地址的之后的字符串,输出语句共执行4次,输出以p[0],p[1]+1,p[2]+2,p[3]+3为起始位置的字符串,分别为"abcd","234","op","8",所以答案选A)。6、下列程序的运行结果是()。#includevoidsub(int*S,int*y){staticintm=4;*y=s[m];m--;}voidmain(){inta[]={1,2,3,4,5},k,x;printf(“\n”);for(k=0;k<=4;k++){sub(a,&x);printf(“%d,”,x);}}A、5,4,3,2,1,B、1,2,3,4,5,C、0,0,0,0,0,D、4,4,4,4,4,标准答案:A知识点解析:本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当main()函数中的for循环中语句sub(a,&x);执行时,sub函数中m的值依次是4,3,2,1,0;因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。7、下列叙述中,不属于设计准则的是()。A、提高模块独立性B、使模块的作用域在该模块的控制域中C、设计成多入口、多出口模块D、设计功能可预测的模块标准答案:C知识点解析:大量软件设计表明,以下的设计准则是可以借鉴为设计的指导和对软件结构图进行优化,这些准则是:提高模块独立性;模块规模适中;深度、宽度、扇出和扇入适当;使模块的作用域在该模块的控制域中;应减少模块的接口和界面的复杂性;设计成单入口、单出口的模块;设计功能可预测的模块。8、设变量已正确定义并赋值,以下正确的表达式是()。A、x=y+z+5,++yB)int(15.8%5)B、x=y*5=x+zC、x=25%5.0标准答案:A知识点解析:B与D选项中取模运算符%的左右两个操作数均应为整数,所以B、D错误。C选项中不能将x+y的值赋给表达式y*5,所以C错误。9、若在定义语句:inta,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是()。A、scanf("%d",a,b,c);B、scanf("%d%d%d",a,b,c);C、scanfi["%d",p);D、scanf("%d",&p);标准答案:C知识点解析:程序语句“inta,b,c,*p=&c;”定义了3个整型变量a,b,c和一个整型指针变量p,并且把变量c的地址赋给p。scanf函数的一般形式为“scanf("格式控制字符串",地址列表)”,其中的地址列表应当是存放输入数据变量的地址。10、下列说法正确的是()。A、int(**def)[10];----def指向一个指针,该指针指向10个整型变量构成的数组B、int*(*gh[10]);---gh指向一个指针,该指针指向10个整型变量构成的数组C、int*(*gh[10]);---gh是一个指针,指向由10个指向整型变量的指针构成的数组D、A,C均正确标准答案:D知识点解析:int*(*gh[10]):---gh是一个指针,指向由10个指向整型变量的指针构成的数组,int(**def)[10];----def指向一个指针,该指针指向10个整型变量构成的数组。11、当用“#defineF37.5f”定义后,下列叙述正确的是()。A、F是float型数B、F是char型数C、F无类型D、F是字符串标准答案:D知识点解析:字符替换定义格式为:#define标识符(形参表)形参表达式。题中F是代表形参表达式的标识符(字符串)。12、设有关键码序列(Q,G,M,Z,A,N,B,P,X,H,Y,S,T,L,K,E、),采用堆排序法进行排序,经过仞始建堆后关键码值B在序列中的序号是()。A、1B、3C、7D、9标准答案:B知识点解析:建堆的算法:首先将要排序的所有关键码放到一棵完全二叉树的各个结点中(这时的二叉树不具备堆的特性),然后,从i=[n/2](n为结点的个数)的结点Ki开始,逐步把以K[n/2],K[n/2]-1,K[n/2]-2…为根的子树排成堆,直到以K1为根的树排成堆,就完成了建堆过程。此题中,n=16,i=[16/2]=8,即从第8个结点开始,建堆完成后如下图:所以经过初始建堆后关键码值B在序列中的序号是3。13、下列叙述中正确的是()。A、调用printf()函数时,必须要有输出项B、使用putchar()函数时,必须在之前包含头文件stdio.hC、在C语言中,整数可以以二进制、八进制或十六进制的形式输出D、调节getchar()函数读入字符时,可以从键盘上输入字符所对应的ASCII码标准答案:B知识点解析:选项A),若printf函数没有输出项,且格式字符串中不含格式信息,则输出的是格式字符串本身,若格式字符串含有格式信息,运行时则出现错误提示;选项C),在C语言中,整数可以十进制、八进制或十六进制的形式输出;选项D),getchar函数是从标准输入设备读取一个字符。14、执行以下程序段后,w的值为()。intw=’A’,x=14,y=15;w=((x|y)&&(w<’a’));A、一1B、NULLC、1D、0标准答案:C知识点解析:因为x=14,y=15都是非零整数,因此x|y=1。又因为’A’+32=’a’,知w<’a’也为真,因此(x|y)&&(w<’a’)的值为1。15、开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做()。A、软件矛盾B、软件危机C、软件藕合D、软件产生标准答案:B知识点解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的“软件危机”。16、C语言规定,在一个C程序中,main()函数的位置()。A、必须在系统调用的库函数之后B、必须在程序的开始C、必须在程序的最后D、可以在任意位置标准答案:D知识点解析:每个C程序有且只有一个主函数(main),且程序必须从“main()”函数开始执行,而且“main()”函数可以放在程序中的任意位置。17、有如下嵌套的if语句:if(aA、k=(ac)?b:c);B、k=(aC、k=(aD、k=(a标准答案:B知识点解析:题目中嵌套语句的含义是当a18、已有定义inta=3;和输出语句printf("%8x",a);以下正确的叙述是()。A、整型变量的输出格式符只有%d一种B、%x是格式符的一种,它可以适用于任何一种类型的数据C、%x是格式符的一种,其变量的值按十六进制数输出,但%8x是错误的D、%8x是正确的格式符,其中数字8规定了输出字段的宽度标准答案:D知识点解析:本题考查printf函数的格式。“%8x”表示以十六进制无符号形式输出整型数据。“8”表示指定输出数据的宽度为8位。19、支持子程序调用的数据结构是()。A、栈B、树C、队列D、二叉树标准答案:A知识点解析:栈支持子程序调用。栈是一种只能在一端进行插入或删除的线性表,在主程序调用子函数时要首先保存主程序当前的状态,然后转去执行子程序,最终把子程序的执行结果返回到主程序中调用子程序的位置,继续向下执行,这种调用符合栈的特点,因此本题的答案为A)。20、有以下程序:#includemain(){inty=10;while(y--);printf("y=%d\n",y);}程序执行后的输出结果是()。A、Y=0B、y=-1C、y=1D、while构成无限循环标准答案:B知识点解析:执行y--直到值为0,由于y--是先用再减,所以退出循环时,y的值为-1。21、下列程序的运行结果是()。#includevoidfun(int*S,int*P){staticintt=3;*p=s[t];t--;}voidmain(){inta[]={2,3,4,5),k,x;for(k=0;k<4;k++){fun(a,&x);printf(“%d,”,x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,标准答案:A知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素以前的元素逆置赋给数组p。由于fun函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组x,最后输出x数组。22、有以下程序:#includemain(){structSTU{charname[9];charsex;doublescore[2];};structSTUa={"Zhao",’m’,85.0,90.0},b={"Qian",’f’,95.0,92.0};b=a;printf("%s,%c,%2.Of,%2.Of\n",b.name,b.sex,b.score[0],b.score[1]);}程序运行的结果是()。A、Qian,f,95,92B、Qian,f,85,90C、Zhao,f,95,92D、Zhao,m,85,90标准答案:D知识点解析:在C语言中,相同类型变量可以通过等号直接赋值,按照每个成员在结构体中的顺序一一对应赋初值,已知a.name="Zhao",a.sex=’f’,a.score[0]=85.0,a.score[1]=90.0,则b=a,b.name:"Zhao",b.sex=’m’,b.score[0]=85.0,b.score[1]=90.0。23、有以下程序:#include<stdio.h>#include<string.h>typedefstruet{charname[9];charsex;floatscore[2];}STU;voidf(STUa){STUb={"Zhao",’m’,85.0,90.0};inti;strepy(a.name,b.name);a.sex=b.sex;for(i=0;i<2;i++)a.score[i]=b.score[i];}main(){STUc={"Qian",’f’,95.0,92.0};f(c);print]f("%8,%c,%2.0f,%2.0f\n",c.name,c.sex,c.seore[0],c.score[1]);}程序运行后的输出结果是()。A、Zhao,m,85,90B、Qian,m,85,90C、Zhao,f,95,92D、Qian,f,95,92标准答案:D知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数c的一个副本,而不会改变c的值,所以c值维持原值,选项D正确。24、以下叙述中错误的是()。A、可以给指针变量赋一个整数作为地址值B、函数可以返回地址值C、改变函数形参的值,不会改变对应实参的值D、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL标准答案:A知识点解析:不能将一个整数直接赋给指针变量作为地址,所以A选项是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。25、有以下程序#include<stdio.h>intfun(intx){intp;if(x==0||x==1)return(3);p=x-fun(x-2);returnp;}main(){printf("%d\n",fun(7));}执行后的输出结果是A、2B、3C、7D、0标准答案:A知识点解析:因为fun(intx)是一个递归函数,所以主函数中fun(7)经过3次递归调用,其过程可以描述为"fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7-5=2",所以最后输出结果为2。因此A选项正确。26、有以下程序:#includestruetord{intx,y;}dt[2]={1,2,3,4};main(){struetord*P=dt;prinff(“%d,”,++(P一>x));prinff(“%d\n”,++(P一>y));}程序运行后的输出结果是()。A、3,4B、4,1C、2,3D、1,2标准答案:C知识点解析:本题考查结构体数组的相关操作,dt为结构体数组,那么指针p指向了结构体数组的一个元素,所以p一>x为1,p一>y为2,结果为2,3。选项C正确。27、若有定义语句:charstr[8]=’’abcdef\0\0’’;则strlen(str)的值是()。A、6B、7C、8D、9标准答案:A知识点解析:系统会在字符数组末尾加一个字符(’\0’)作为结束符,strlen()会将’\0’作为字符串的结束符,因此,本题中的字符串的实际长度是6。28、有以下程序:#include#includetypedefstruct{charname[9];charsex;floatscore[2];}ST;voidfun(STx){STUy={’’Tom’’,’m’,98.0,90.0};inti;strcpy(x.name,y.name);x.sex=y.sex:for(i=0;i<2;i++)x.score[i]=y.score[1];}main(){STstudent={’’Bob’’,’f,99.2,89.0};fun(student);printf(’’%s,%c,%2.0f,%2.0f\n’’,student.name,student.sex,student.score[0],student.score[1]);}程序运行后的输出结果是()。A、Tom,m,98,90B、Bob,f,99,89C、Bob,f,98,90D、Tom,f,99,89标准答案:B知识点解析:子函数的功能是将形参的值用一个固定的值覆盖,但因为是值传递,所以实参的值不会变化,所以在主函数中的结构体astudent的值没有发生变化。29、若有以下程序#include<stdio.h>main(){intc;c=13|5;printf("%d\n",c);}则程序的输出结果是A、13B、15C、18D、5标准答案:A知识点解析:本题考查位运算中按位或运算符,或运算只要两个比较的位中有一个为1,其结果是1,否则结果为0,,13用二进制表示为00001101,5用二进制表示为00000101,或后00001101,即13,选项A正确。30、数据库系统的三级模式不包括()。A、数据模式B、内模式C、外模式D、概念模式标准答案:A知识点解析:数据库系统的三级模式是概念模式、内模式和外模式。31、以下叙述中正确的是A、对于逻辑表达式:a++||b++,设a的值为1,则求解表达式的值后,b的值会发生改变B、对于逻辑表达式:a++&&b++,设a的值为0,则求解表达式的值后,b的值会发生改变C、else不是一条独立的语句,它只是if语句的一部分D、关系运算符的结果有三种:0,1,-1标准答案:C知识点解析:选项A中,设a的值为1,根据逻辑短路原则,表达式a++||b++中a++=1,不计算b++的值,表达式结果为真;B选项中根据逻辑短路原则,表达式a++&&b++,当a=0时a++=0,不计算b++的值表达式的值为假;D选项中,关系运算符的结果有"真"和"假"两种。因此C选项正确。32、关于doublea,*p=&a;的叙述中错误的是()。A、定义语句中的&是一个地址运算符B、定义语句中的*是一个指针变量说明符C、定义语句中的P可以存放double以外数据类型变量的地址D、定义语句中的*p=&a把变量a的地址作为初值赋给指针变量p标准答案:C知识点解析:指针变量在定义时便指定了其类型,本题中double*p的定义,说明p只能存放double类型变量的地址。其他选项正确。33、C语言中的数组定义语句中不正确的是()。A、inta[][3]={1,2,3,4,5,6};B、inta[2][41={{1,2},{3,4},{5,6}};C、inta[]={{1,2},3,4,5,6};D、inta[][4]={1,2,3,4,5,6};标准答案:B知识点解析:定义数组时一维数组可以不指定列数,二维数组可以不指定行数,系统将根据输入的数据来决定,但如果指定了具体的行列数,赋值时就必须按照行列数输入,选项B定义了2行但输入却是3行,所以错误。34、C语言程序中,运算对象必须是整型数的运算符是A、&&B、/C、%D、*标准答案:C知识点解析:%取余运算是二目运算符,且要求运算对象必须为整数,所以选C。35、下列叙述中正确的是A、栈与队列都只能顺序存储B、循环队列是队列的顺序存储结构C、循环链表是循环队列的链式存储结构D、栈是顺序存储结构而队列是链式存储结构标准答案:B知识点解析:栈是所有的插入与删除都限定在表的同一端进行的线性表;队列是指允许在一端进行插入,而在另一端进行删除的线性表,二者均即可以顺序存储也可以链式存储。为了充分地利用数组的存储空间,把数组的前端和后端连接起来,形成一个环形的表,称为循环队列,因此循环队列是队列的一种顺序存储结构,B选项正确。36、以下对联合类型叙述正确的是()。A、可以对联合变量名直接赋值B、使用联合变量的目的是为了节省内存C、任何一个联合变量可以同时引用联合中的不同成员D、联合类型定义中不能同时出现结构类型的成员标准答案:B知识点解析:由于联合体是同一存储区域由不同类型的变量共享,所以不可以直接对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持某一成员的数据;另外合体中可以出现结构类型的成员。37、有以下程序#include<stdio.h>voidf(intx[],intn){if(n>1){printf("%d,",x[0]);f(&x[1],n-1);printf("%d,",x[0]);}elseprintf("%d,",x[0]);}main(){intz[3]={4,5,6};f(z,3);printf("\n");}程序运行后的输出结果是A、6,5,4,6,5,4,B、4,5,6,5,4,C、4,5,6,4,5,6,D、6,5,4,5,6,标准答案:B知识点解析:本题考查了函数的递归调用,在main函数中调用f(z,3)后,系统进入f()函数,随后进入if语句,输出x[0],再进入f()函数时,存在&x[1]函数的递归,输出x[1],再进入f函数,再进行递归,输出x[2],随后结束返回输出上一个f()函数,输出x[1],再返回第一个f()函数中,输出x[0],程序运行后的输出结果是.4。因此答案为B选项。38、有以下程序#include<stdio.h>main(){inta=2,b=3,c=4;a*=16+(b++)-(++c);printf("%d\n",a);}程序运行后的输出结果是A、15B、30C、28D、14标准答案:C知识点解析:1、后置自增运算:k++表示先运算,后自加。2、前置自增运算:++k表示先自加,后运算。++单目运算符的优先级高于赋值运算符。a*=16+(b++)-(++c);可转化为:a=a*(16+b-(c+1));b=b+1;代入值计算可得值a=28。答案为C选项.39、算法的时间复杂度是指A、设计该算法所需的工作量B、执行该算法所需要的时间C、执行该算法时所需要的基本运算次数D、算法中指令的条数标准答案:C知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量。它与算法程序执行的具体时间并不一致,因为算法执行的具体时间受到所使用的计算机、程序设计语言以及算法实现过程中许多细节的影响。算法的计算工作量是用算法所执行的基本运算次数来度量的。故选C选项40、有以下程序:#include<stdio.h>#include<string.h>structA{inta;charb[l0];doublec;};structAf(structAt):main(){structAa={1001,"ZhangDa",1098.0};a=f(a):printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}structAf(structAt){t.a=1002:strcpy(t.b,"ChangRong"):t.c=1202.0:returnt;}程序运行后的输出结果是()。A、1001,ZhangDa,1098.0B、1002,ZhangDa,1202.0C、1001,ChangRong,1098.0D、1002,ChangRong,1202.0标准答案:D知识点解析:函数f对结构体进行修改,并返回新的结构体;main函数先定义了一个结构体变量a并为它赋初值,然后调用函数f修改结构体变量的成员值,最后输出新的结构体变量成员。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是将不带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2、4、6、8、10,逆置后,从头至尾结点数据域依次为10、8、6、4、2。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<stdlib.h>3#defineN54typedefstructnode{5intdata;6structnode*next;7NODE;8/*********found*********/9【1】*fun(NODE*h)10{NODE*p,*q,*r;11p=h;12if(p==NULL)13returnNULL;14q=p->next;15p->next=NULL;16while(q)17{18/*********found*********/19r=q->【2】;20q->next=p;21p=q;22/*********found*********/23q=【3】;24}25returnp;26}27NODE*creatlist(inta[])28{NODE*h,*p,*q;inti;29h=NULL;30for(i=0;i<N;i++)31{q=(NODE*)malloc(sizeof(NODE);32q->data=a[i];33q->next=NULL;34if(h==NULL)h=p=q;35else{p->next=q;p=q;}36}37returnh;38}39voidoutlist(NODE*h)40{NODE*p;41p=h;42if(p==NULL)43printf(’’ThelistisNULL!\n’’);44else45{printf(’’\nHead’’);46do47{printf(’’->%d’’,p->data);48p=p->next;}49while(p!=NULL);50printf(’’->End\n’’);51}52}53main()54{NODE*head;55inta[N]={2,4,6,8,10);56head=creatlist(a);57printf(’’\nTheoriginallist:\n’’);58outliSt(head);59head=fun(head);60printf(’’\nThelistafterinverting:\n’’);61outlist(head);62}标准答案:(1)NODE(2)next(3)r知识点解析:填空1:本题考查了函数指针变量的函数返回值的类型,*fun(NODE*h)的返回值为p,而p的数据类型为NODE,因此本空应该填写NODE。填空2:从此空的形式p->可知本空应该填写next。填空3:本题要求将不带头结点的单向链表逆置,为了使q的指针向后移,此空应该填写r。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODIl.C中函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。例如,字符串中的数据为:AABBCCDDEEFF,则输出应当是:ABBCDDEFF。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#defimeN80voidfun(char*s,chart[]){inti,j=0;for(i=0;i<(int)strlen(s);i++)/***********found**********/if(i%2&&s[i]%2==0)t[j++]=s[i];/***********found**********/t[i]=’\0’;)msin(){chars[N],t[N];printf("\nPleaseenterstrings:");gets(s);fun(s,t);printf("\nq?heresultis:%s\n",t);}标准答案:(1)if(i%2||s[i]%2==0)或if(i%2!=0||s[i]%2==0)(2)t[j]=’\0’;或t[j]=0;知识点解析:(1)第一个错误标识下的if条件应该是判定字符是奇数位置或者ASCII码是偶数,原题中给出的是字符是奇数位置并且ASCII码为偶数,逻辑关系表达式不对,应该是或的关系,所以“if(i%2&&s[i]%2==0)”,改为“if(i%2‖s[i]%2==0)”或“if(i%2!=0‖s[i]%2==0)”。(2)第二个标识符下应该是新生成的串尾加尾符标志,新串的位置标志变量是i,原题给出的i是原串的位置标志变量,所以“t[i]=’\0’;”改为“t[j]=’\0’:”或“t[j]=0;”。四、程序设计题(本题共1题,每题1.0分,共1分。)43、请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p<n-1)的数组元素平移到数组的前面。例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为6。移动后,一维数组的内容应为7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。【试题源程序】#include#defineN80voidfun(int*w,intp,intn){}main(){inta[N]:{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf(’%3d",a[i]);printf("\n\nEnterp:");seanf("%d",&p);fun(a,p,n);printf("\nThedataaftermoving:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}标准答案:voidfun(int*w,intp,intn){inti,j,t;for(i=p;i<=n-1;i++){t=w[n-1];for(j=n-2;j>=0;j--)w[j+1]=w[j];w[0]=t;}知识点解析:本题采用“循环右移”的算法。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数fun的功能是:将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。例如,若传给形参a的数据中学号、姓名和三门课的成绩依次是:10001、“ZhangSan”、95、80、88,修改后的数据应为:10002、“LiSi”、96、81、89。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>structstudent{longsno;charname[10];floatscore[3];};/*********found*********/【1】fun(structstudenta)(inti;a.sno=10002;/*********found*********/strcpy(【2】,"LiSi");/*********found*********/for(i=0;i<3;i++)【3】+=1;returna;}main(){struerstudents={10001,"ZhangSan",95,80,88},t;inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%ldName:%s\nScores:",s.sno,s.name);for(i=0;i<3;i++)printf("%6.2f",s.score[i]);printf("\n");t=fun(s);printf("\nThedataaftermodified:\n");printf("\nNo:%ldName:%s\nScores:",t.sno,t.name);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}标准答案:(1)structstudent(2)a.name(3)a.score[i]知识点解析:填空1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。本题中,用结构类型定义函数类型。填空2和填空3:此处考查结构体变量成员的表示方法,a.name和a.score[i]分别表示学生的姓名和成绩。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,假定整数数列中的数不重复,并存放在数组中。下列给定程序中函数fun的功能是:删除数列中值为x的元素,变量n中存放数列中元素的个数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN20fun(int*a,intn,intx){intp=0,i;a[n]=x;while(x!=a[p])p=p+1;/*********found*********/if(p==n)return-1;else{for(i=P;i<n-1;i++)/*********found*********/a[i+1]=a[i];returnn-1;}}voidmain(){intw[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i,n=10;printf("Tneorigianaldata:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\nInputx(todelete):");scanf("%d",&x);printf("Delete:%d\n",x);n=fun(w,n,x);if(n==1)printf("***Nobefound!***\n\n");else{printf("Thedataafterdeleted:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\n\n");}}标准答案:(1)if(p==n)return-1;(2)a[i]=a[i+1];知识点解析:(1)需要确定if条件语句的条件表达式,发现变量p大写,C语言中变量是区别大小写的。(2)删除数列中的元素,删除后,后面的元素依次前移一个位置,因此此处应为a[i]=a[i+1];。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12时,调用该函数后,c=1524。注意:部分源程序给出如下。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);}标准答案:voidfun(inta,intb,long*c){/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*c=a/10+(b%10)★10+(a%10)★100+(b/10)★1000;}知识点解析:本题主要的问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除以10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1即可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、以下对C语言中联合类型数据的正确叙述是()。A、定义了联合变量后,即可引用该变量或该变量中的任意成员B、一个联合变量中可以同时存放其所有成员C、联合中的各个成员使用共同的存储区域D、在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变标准答案:C知识点解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。2、若二维数组a有m列,则在a[i][j]前的元素个数为()。A、j*m+iB、i*m+jC、j*m+i+1D、i*m+j+1标准答案:B知识点解析:二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是i,说明它前面还有j列,有j个元素,所以共有i*m+j个元素。3、设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是()。A、k=*q1*(*q2);B、q1=k;C、q1=q2;D、k=*q1+*q2;标准答案:B知识点解析:本题考查指针变量的赋值操作。选项A)是将指针q1和q2所指向的变量值相乘,然后赋给k;选项B)中,float型数据和指针型数据之间不能进行赋值运算;选项C)中,是两个指针变量之间的赋值;选项D)中,是两个指针型变量所指向的两个int型数据相加。4、有以下程序#include<stdio.h>main(){FILE*fp;inti=20,j=30,k,n;fp=fopen("d1.dat","w");fprintf(fp"%d\n",i);fprintf(fp,"%d\n",j);fclose(fp);fp=fopen("d1.dat","r");fscanf(fp"%d%d",&k,&n);printf("%d%d\n",k,n);fclose(fp);}程序运行后的输出结果是()。A、2030B、2050C、3050D、3020标准答案:A知识点解析:分析程序段,首先以只写方式打开文件,利用fprintf函数将i和j的值写入到文件dl.dat中,然后关闭文件:再以只读方式打开文件,利用格式化输入函数fscanf将文件中的数据赋值给k和n,最后输出k和n的值,分别是20和30。5、若变量已正确定义并赋值,则错误的赋值语句是()。A、a+=a+1;B、a=sizeof(double);C、a=d∥c;D、a+1=a;标准答案:D知识点解析:赋值号“=”的左边必须是一个变量名,不可以是表达式。6、以下函数实现按每行8个输出w所指数组中的数据:#include<stdio.h>voidfun(int*w,intn){inti;for(i=0;i<n;i++){______________printf("%d",w[i]);}printf("\n");}在横线处瘦填入的话句是()。A、if(i/8==0)printf("\n");B、if(i/8==0)continue;C、if(i%8==0)printf("\n");D、if(i%8==0)continue;标准答案:C知识点解析:要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。7、以下叙述中正确的是()。A、语句inta[8]={0};是合法的B、语句inta[]={0};是不合法的,遗漏了数组的大小C、语句chara[2]={"A","B"};是合法的,定义了一个包含两个字符的数组D、语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符标准答案:A知识点解析:考查一维数组以及字符数组的初始化。初始化的时候可以只给数组的前面一部分元素设定初值,故A)正确。若对数组全部元素赋初值时,可以不指定数组元素的个数,选项B)错。字符数组中的每个元素为一个字符,需要用单引号,选项C)错。定义字符数组时可以将字符串直接赋给该字符数组,其他情况则不可以,选项D)错。答案选A)。8、数据结构中,与所使用的计算机无关的是数据的()。A、存储结构B、物理结构C、逻辑结构D、线性结构标准答案:C知识点解析:数据的逻辑结构反映的是数据元素之间的逻辑关系,与使用的计算机无关。9、下列数据结构中,能够按照“先进后出”原则存取数据的是()。A、循环队列B、栈C、队列D、二叉树标准答案:B知识点解析:栈是按“先进后出”的原则组织数据的;队列是按“先进先出”的原则组织数据的,因此本题答案为B。10、待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5标准答案:A知识点解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则放在第二个位置。11、下列选项中,不能作为合法常量的是()。A、1.234e04B、1.234e0.4C、1.234e+4D、1.234e0标准答案:B知识点解析:用指数形式表示的实型常量需注意两点:①e或E后面的指数必须是整数:②指数必须是不超过数据表示范围的正负整数,并且在e或E前必须有数字。12、有以下程序段:#includeinta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;prinff(“a=%db=%dc=%d\n”,a,b,c);程序运行后的输出结果是()。A、a=10b=50c=30B、a=10b=50c=10C、a=10b=30c=10D、a=50b=30c=50标准答案:B知识点解析:本题中a>b的条件不满足,所以不执行逗号表达式a=b,b=c;的操作,而是执行c=a操作,即c的值为10。13、有以下程序:#include<stdio.h>main(){chaurx=2,y=2,z;z=(y<<1)&(x>>1);pnnff("%d\n",z);}程序的输出结果是()。A、1B、0C、4D、8标准答案:B知识点解析:本题考查位运算<<和&。y<<1为4,x>>1为1,二者与运算后为0,故B选项正确。14、以下程序运行后的输出结果是()。#includevoidreverse(inta[],intn){inti,t;for(i=0;iA、27B、6C、25D、30标准答案:B知识点解析:本题考查函数调用时的参数传递。函数reverse将数组b进行了逆置,此时b[10]={10,9,8,7,6,5,4,3,2,1},后面for语句的功能是将b中的后3个数累加,并将结果放在s中,最后将s输出,结果s=1+2+3=6。15、在数据处理中,其处理的最小单位是()。A、数据B、数据项C、数据结构D、数据元素标准答案:B知识点解析:数据元素是由多个数据项组成,数据是能够被计算机识别、存储和加工处理的信息载体,数据处理的最小单位是数据项。16、若变量已正确定义为int型,要通过语句scanf("%d,%d,%d",&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)A、1,2,3<回车>B、□□□1,2,3<回车>C、1,□□□2,□□□3<回车>D、1□2□3<回车>标准答案:D知识点解析:scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配,所以逗号必须输入。17、设有如下关系表:则下列操作正确的是()。A、T=R/SB、T=R×SC、T=R∩SD、T=∪US标准答案:C知识点解析:T就是关系R中有的,同时S中也有的有序组(4、5、6),即交运算(∩)。18、有如下程序#include<stdio.h>main(){inti,data;scanf("%d",&data);for(i=0;i<5;i++){if((i<data&&i%2)||(i>data&&i%3==0))continue;printf("%d,",i);程序运行时,从键盘输入:13<回车>后,程序输出结果为()。A、0,2.4,B、1,3,5,C、0,1,2.3,4,5,D、0,1,2,3,标准答案:A知识点解析:程序通过scanf()函数,输入data的值13,for循环中,i的值遍历0~4,对每个i的值执行if语句判断,其中:i>data始终为假;所以表达式i>data&&i%3==0始终为假;所以if语句的判断条件需要看i<data&&i%2的值,由于i<data始终为真,所以i<data&&i%2的值又取决于i%2的值,也就是说整个if语句的判断条件取决于i%2的值,如果i%2为真,那么if语句成立,执行continue,否则执行printf()函数,所以当i取值l、3时,i%2的为1,if条件成立,执行continue;当i取值0、2、4时,i%2的值为0,if条件不成立,执行printf()函数,输出0,2,4,本题答案为A。19、设有如下的程序段:charstr[]="HelloWorld";char*ptr;ptr=str;执行上面的程序段后,*(ptr10)的值为()。A、’\0’B、’0’C、不确定的值D、’0’的地址标准答案:A知识点解析:本题涉及字符数组和指针两个知识点:①在C语言中,字符数组在存放字符串时会自动在末尾加上’\0’,所以题中数组s仃有11个元素;②ptr指向数组str的首地址,ptr+10是指向str[10],*(ptr+10)是引用str[10]的值(即结束符’\0’)。20、下列关于二叉树的叙述中,正确的是()。A、叶子结点总是比度为2的结点少一个B、叶子结点总是比度为2的结点多一个C、叶子结点数是度为2的结点数的两倍D、度为2的结点数是度为1的结点数的两倍标准答案:B知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个。所以选择B21、下列程序的运行结果是()。#inc1udevoidsub(int*s,int*y){staticintm=4;*y:s[m];m——;}voidmain(){inta[]={1,2,3,4,5},k,x;printf("\n");for(k=0;k<=4;kH){sub(a,&x);printf("%d,",x);}}A、5,4,3,2,1,B、1,2,3,4,5,C、0,0,0,0,0,D、4,4,4,4,4,标准答案:A知识点解析:本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留;所以当main()函数中的for循环中语句“sub(a,&X)”;执行时,sub函数中m的值依次是4、3、2、1、0:因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。22、已知一个文件中存放若干工人档案记录,其数据结构如下:structa{charnumber[100];intage;floatp[6];};定义一个数组:structab[10];假定文件已正确打开,不能正确地从文件中读入10名工人数据到数组b中的是()。A、fread(b,sizeof(structa),10,fp);B、for(i=0;i<10;i++)fread(b[i],sizeof(structa),1,fp);C、for(i=0;i<10;i++)fread(b+i,sizeof(structa),1,fp));D、for(i=0;i<5;i+=2)fread(b+i,sezeof(structa),2,fp);标准答案:B知识点解析:数据块输入/输出函数的调用格式为:fread(buffer,size,count,fp),其中:“buffer”是一个指针,对于fread来说,它是读入数据的存放地址。“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B中b[i]是一个数组,不是指针,需改为&b[i]。23、设有以下函数:voidfun(intn,char*s){……}则下面对函数指针的定义和赋值均正确的是()。A、void(*pf)(int,char);pf=&fun;B、void*pf();pf=fun;C、void*pf();*pf=fun;D、void(*pf)(int,char*);pf=fun;标准答案:D知识点解析:函数的参数可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。函数名代表函数的人口地址,指向函数的指针应该定义为void(*pf)()。如果定义为void*pf(),则表示函数pf返回值为一个基类型为void的指针。因此D选项正确。24、以下选项中可用做C程序合法实数的是()。A、3.0e0.2B、.1e0C、E9D、9.12E标准答案:B知识点解析:A选项中e后面的指数必须为整数,所以错误。C语言规定,E之前必须要有数字,所以C选项错误。E后面必须要有数字,且必须为整数,所以D选项错误。25、有以下程序:#include<stdio.h>main(){inta=5,b=1,t;t=(a<<2)Ib;printf("%d\n",t);}程序运行后的输出结果是()。A、1B、11C、6D、21标准答案:D知识点解析:本题考查位运算,以及按位或操作,将a左移一位相当于是将8乘以了4,所以a<<2等于20,二进制表示为00010100,与b按位或得到00010101。即21,所以选项D正确。26、下列关于二叉树的叙述中,正确的是()。A、叶子结点总是比度为2的结点少一个B、叶子结点总是比度为2的结点多一个C、叶子结点数是度为2的结点数的两倍D、度为2的结点数是度为1的结点数的两倍标准答案:B知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个。所以选择B。27、有以下程序:#include#includemain(){charstr[][zo]={"One*World","One*Dream!"},*P=str[1];printf("%d,",strlen(P));printf("%s\n",P);程序运行后的输出结果是()。A、10,One*Dream!B、9,One*Dream!C、9,One*WoddD、10,One*World标准答案:A知识点解析:p是指向二维字符数组第二行“One*Dream!”的数组指针,所以长度是10,打印输出的也是该字符串。28、以下选项中关于C语言常量的叙述错误的是()。A、经常被使用的变量可以定义成常量B、常量分为整型常量、实型常量、字符常量和字符串常量C、常量可分为数值型常量和非数值型常量D、所谓常量,是指在程序运行过程中,其值不能被改变的量标准答案:A知识点解析:C语言中,常量是指在程序运行过程中其值不能被改变的量,变量是指运行过程中其值可以改变的量,二者不能混淆,所以A选项错误。29、以下叙述中正确的是A、continue语句的作用是:使程序的执行流程跳出包含它的所有循环B、break语句只能用在循环体内和switch语句体内C、在循环体内使用break语句和continue语句的作用相同D、break语句只能用于switch语句体中标准答案:B知识点解析:continue语句的作用是:跳过循环体中剩余的语句而进行下一次循环,所以A选项错误,Break语句的作用是终止正在执行的switch流程,跳出switch结构或者强制终止当前循环,从当前执行的循环中跳出,所以C,D选项错误。30、输出语句:printf("%d\n",11+011);的输出结果是()。A、20B、22C、022D、021标准答案:A知识点解析:printf("%d\n",11+011),11为十进制,011为八进制形式,打印格式%d表示十进制格式输出,因此。先将八进制数转化为十进制,011(8)=81*1+1*80=9。相当于printf("%d\n",11+9),故答案为20,A选项正确。31、有以下程序:#includemain(){intm=20;while(m--);printf(’’y=%d\n’’,m);}程序执行后的输出结果是()。A、m=-1B、m=0C、m=1D、while构成无限循环标准答案:A知识点解析:注意while循环体为空语句,m是先使用值再减1,所以当m=0时退出循环,再减1,结果为一1。32、以下结构体说明和变量定义中,正确的是A、typedefstructabc{intn;doublem;}ABC;ABCx,y;B、structabc{intn;doublem};structabcx,y;C、structABC{intn;doublem;}structABCx,y;D、structabc{intn;doublem;};abcx,y;标准答案:A知识点解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,选项A中ABC为新的类型别名,定义正确。33、有以下程序#include<stdio.h>main(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序运行后的输出结果是A、6938B、9824C、4528D、6385标准答案:D知识点解析:本题中首先是将二维字符数组c赋值指针数组p,然后遍历p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为638534、以下程序的运行结果是()。#includemain(){inta=3,b=4,c=8,d=4,m=1,n=3;printf("%d\n",(m=a>b)&&(n=c>d));}A、0B、1C、2D、3标准答案:A知识点解析:逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为1时,整个表达式的值为1,否则为0。因为a=3<b=4,即m=0,所以整个表达式的值为0。35、有以下程序:#include<stdio.h>main(){FILE*pf;char*s1="China",*s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf);/*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是()。A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina标准答案:B知识点解析:本题考查函数fwrite的使用。函数fwrite的调用形式为:intfwrite(char*pt,unsignedn,FILE*fp);其功能是把pt所指向的n*size个字节输出到fp所指文件中,第二次调用该函数时,从文件的第一个位置开始写入,之前已有的会被覆盖掉,如果第二次写入的长度没有第一次的长,则后面短出的部分保留原样。36、有以下程序#include<ctype.h>#include<stdio.h>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标准答案:D知识点解析:isspace(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选项37、35.以下叙述中错误的是()。A、可以给指针变量赋一个整数作为地址值B、函数可以返回地址值C、改变函数形参的值,不会改变对应实参的值D、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL标准答案:A知识点解析:不能将一个整数直接赋给指针变量作为地址,所以A)是错误的。函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。38、执行以下程序段后,w的值为()。intw=’A’,x=14,y=15;w=((x‖y)&&(w<’a’));A、-1B、NULLC、1D、0标准答案:C知识点解析:字符变量w的初值为字符“’A’”,其ASCII码值为65,字符“’A’”的ASCII码值为97,所以关系表达式“W<’a’”的值为1;变量x=14,变量y=15,“x‖y”为或,x、y均为真,所以x‖y的结果1。因而逻辑表达式“(x‖y)&&(w<’a’)”的值为1。39、算法的时间复杂度是指()。A、算法的长度B、执行算法所需要的时间C、算法中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。40、设某二叉树的后序序列为CBA,中序序列为ABC,则该二叉树的前序序列为()。A、BCAB、CBAC、ABCD、CAB标准答案:C知识点解析:后序序列为CBA,中序序列为ABC,则说明,A为根结点,并且B和C均在A的右子树上;结点B和C中,后序序列为CB,中序序列为BC,则说明结点C在结点B的右子树上,根据分析可得,该二叉树的前序序列为ABC,答案选C。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<stdlib.h>3#defineN84typedefstructlist5{intdata;6structlist*next;7}SLIST;8SLIST*creatlist(int*a);9voidoutlist(SLIST*);10voidfun(SLIST*h,int*n)11{SLIST*p;12/**********found**********/13___1___=0;14p=h->next;15while(p)16{(*n)++;17/**********found**********/18p=p->___2___;19}20}21msin()22{SLIST*head;23inta[N]={12,87,45,32,91,16,20,48},num;24head=creatlist(a);outlist(head);25/**********found**********/26fun(__3__,&num);27printf(’’\nnumber=%d\n’’,num);28}29SLIST*creatliSt(inta[])30{SLIST*h,*p,*q;inti;31h=p=(SLIST*)malloc(sizeof(SLIST));32for(i=0;i<N;i++)33{q=(SLIST*)malloc(sizeof(SLIST));34q->data=a[i];p->next=q;p=q;35}36p->next=

温馨提示

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

评论

0/150

提交评论