下载此文档

国家二级(C语言)机试模拟试卷39(题后含答案及解析).pdf


文档分类:资格/认证考试 | 页数:约14页 举报非法文档有奖
1/14
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/14 下载此文档
文档列表 文档介绍
该【国家二级(C语言)机试模拟试卷39(题后含答案及解析) 】是由【青山代下】上传分享,文档一共【14】页,该文档可以免费在线阅读,需要了解更多关于【国家二级(C语言)机试模拟试卷39(题后含答案及解析) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..国家二级(C语言)机试模拟试卷39(题后含答案及解析)题型有:,,,:D解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。:A解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。,:B解析:二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。,:..:C解析:冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。、数据及相关文档正确答案:D解析:软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。、开发阶段和维护阶段,:C解析:开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。(DD)(DFD图):A解析:结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。,:..(键)正确答案:A解析:关系模型采用二维表来表示,即每个二维表称为一个关系。,实体B和C是一对一的联系,:B解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。、S和T如下::D解析:关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。,经过编译最终都将转换成二进制的机器指令。:C解析:一个C语句经过编译后产生若干条机器指令,声明部分不是语句,不产生机器指令,只是对有关数据的声明,而且固定类型和格式的C语句被转换成机器指令的条数固定,所以选择C选项。”while(条件表达式)循环体”,:..:B解析:while循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体,所以选择B选项。,,:B解析:在C语言中,可以用一个标识符来代表一个常量,称为符号常量,这个标识符必须在程序中进行特别的”指定”,并符合标识符的命名规则,用作符号常量的标识符通常采用大写字母表示,在主函数中其值不能再被定义,所以选择B选项。#include<>main(){intb=10,a=-11;a%=b%=4;printf(“%d%d”,a,b);}.-12C.-:B解析:先计算b%=4,即b=b%4,结果为2,然后计算a%=2,结果为-1,最后a的值为-1,b的值为2,所以选择B选项。#include<>main(){inta=0,b=0,c=0;c=(a-=++a),(a+=b,b+=4);printf(“%d,%d,%d”,a,b,c);},4,,4,,4,,4,4正确答案:A解析:逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算。且逗号运算符的优先级最低,所以先计算c=(a-=++a)这部分。其中,赋值运算符从右往左计算,先执行++a,a自增1后再赋值,所以a的值为1,执行a=a-1,即a=1-1,a的值为0,并将0赋给变量c?第二部分(a+=b,b+=4),先执行a=a+b,a=0+0,即a的值:..为0,然后执行b+=4,b=0+4,即b的值为4?所以打印结果为0,4,0,选择A选项?#include<>main(){inta=0,b=0,c=0,d;c=(a+=b,,b+=a);/*第4行*/d=c;;/*第5行*/;/*第6行*/;printf(“%d,%d,%d”,a,b,c);/*第7行*/}编译时出现错误,:A解析:第4行逗号表达式中间的第二个表达式为空,是不合法的,可以去掉写成a+=b,b+=a,也可以在里面补一个表达式,如a+=b,a,b+=a,所以选择A选项。#include<>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”,a,b,c,d);},2,3,,1,2,-,1,2,-,2,2,4正确答案:D解析:第一个if语句的判断条件中是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断,执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2,判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=-1操作和a=5操作,所以结果为选项D。#include<>main(){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”,r);}:B解析:else总是和与之最近的上面的if配对,执行第一个if,判断条件不成立,执行elser=1;语句,再执行第二个if语句中的判断条件,成立,左移执行r+=2,r的值为3,再执行第三个if的判断条件,不成立执行第7行else后面的空语句”;”,再:..执行第四个if的判断条件d==4成立,执行r+=4,r的值为7,然后打印输出。#include<>main(){ints=0,n;for(n=0;n<4;n++){switch(n){default:s+=4;case1:s+=1;case2:s+=2;case3:s+=3;}}printf(“%d”,s);}:D解析:第一次for循环,n的值为0,所以从default后面的语句开始执行,s+=4,s+=1,s+=2,s+=3,s的值为10,在进入第二次for循环,n的值为1,所以执行s+=1,s+=2,s+=3,s的值为16,在进入第三次for循环,n的值为2,所以执行s+=2,s+=3,s的值为21,在进入第四次for循环,n的值为3,所以执行s+=3,s的值为24。#include<>main(){inta=-2,b=0;while(a++)++b;printf(“%d,%d”,a,b);},,,,3正确答案:A解析:第一次while判断条件中a++,先用后加,为-2不为0条件为真,执行a的自加与++b操作,a的值变为-1,b的值变为1,第二次while判断后,a的值变为0,b的值变为2,第三次while判断条件为假,但是仍要执行自加操作,即值为1,跳出循环,打印1和2。#include<>main(){inta=6,b=0,c=0;for(;a;){b+=a;a-=++c;}printf(“%d,%d,%d”,a,b,c);},14,,14,,18,,14,6正确答案:B解析:本循环的条件判断时只要a为0就退出循环体,初始值a的值为6,满足条件执行完循环体,b的值为6,a-=++c即a=a-(++c),所以a的值为5,c的值为1?第二次循环后b的值为11,a的值为3,c的值为2?第三次也是最后循环后,a的值为:..0,b的值14,c的值为3?.’’B.’’C.’aa’D.’’正确答案:C解析:C选项中是字符串常量,应该用双引号表示即”aa”,所以选择C选项。#include<>charf(charx){returnx*x+’a’;}main(){chara,b=0;for(a=0;a<4;a+=1){b=f(a);putchar(b);}}:C解析:该题目首先初始化变量a和b,通过for循环语句使a取值为0、1、2、3,f函数的功能是将a*a+’a’的值返回给b,即b为a、b、e、j。最后通过字符输出函数putchar()将b输出。因此C选项正确。#include<>voidsp(int*a){intb=2;a=&b;*a=*a*2;printf(“%d,”,*a);}main(){intk=3,*p=&k;sp(p);printf(“%d,%d”,k,*p);},3,,3,,3,,6,6正确答案:A解析:首先在主函数中给整型变量k赋值为3,将变量k的地址赋给指针变量p;调用sp函数,将实参p的值传给形参a,在sp函数中,指针变量a又获得变量b的地址,通过运算后,输出a的值为4;返回主函数,输出k的值和p的值为3和3。因此A选项正确。#include<>intk=7;voidf(int**s){int*t=&k;*s=t;printf(“%d,%d,%d,”,k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf(“%d,%d,%d”,i,*p,**r);},3,3,7,7,7:..,7,7,7,7,,7,7,3,3,,7,7,3,7,7正确答案:D解析:在主函数中分别给整型变量i,指针型变量p和指向指针的指针变量r赋初值;调用f函数,并将实参变量r的值传递给形参变量s,在f函数中,通过printf(“%d,%d,%d,”,k,*t,**s);语句输出7,7,7;返回主函数,通过printf(“%d,%d,%d”,i,*p,**r);输出3,7,7,因此D选项正确。#include<>int*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf(“%d,%d,%d,%d,%d”,i,j,*p,*q,*r);},5,5,3,,5,3,5,,3,5,3,,3,3,5,5正确答案:B解析:在主函数中分别给整型变量i、j和指针型变量p、q赋初值,并声明指针变量r;调用f函数,并将实参变量p和q的值传递给形参变量s和t,并且f函数是指针型函数,即函数的返回值将是一个地址。在f函数中,如果条件成立,则将指针变量s和t互换,并且将指针s的地址返回主函数。最后输出i,j,*p,*q,*r的值,即3,5,3,5,5。因此B选项正确。#include<>#defineN4voidfun(inta[][N],intb[],intflag){inti,j;for(i=0;i<N;i++){b[i]=a[i][0];for(j=1;j<N;j++)if(flag?(b[i]>a[i][j]):(b[i]<a[i][j]))b[i]=a[i][j];}}main(){intx[N][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16},y[N],i;fun(x,y,1);for(i=0;i<N;i++)printf(“%d,”,y[i]);fun(x,y,0);for(i=0;i<N;i++)printf(“%d,”,y[i]);printf(“”);},5,9,13,4,8,12,16,,8,12,16,1,5,9,13,,2,3,4,13,14,15,16,,14,15,16,1,2,3,4,正确答案:A解析:该题首先初始化二维数组,if(flag:(b[i]>a[i][j]):(b[i]<a[i][j]))条件语句的条件表达式使用了条件运算符构成的选择结构,即flag为真时,以(b[i]>a[i][j])作为条件表达式的值,否则以(b[i]<a[i][j])作为条件表达式的值,fun函数功能是给一维数组赋值,fun(x,y,1);该函数调用后,即当flag为真时,使一维数组获得二维数组第1列的数值;fun(x,y,0);该函数调用后,即当flag为假时,使一维:..数组获得二维数组第4列的数值;因此A选项正确。#include<>voidfun(inta[],intn){intt,i,j;for(i=1;i<n;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(){intc[10]={10,9,8,7,6,5,4,3,2,1},i;fun(c,10);for(i=0;i<10;i++)printf(“%d,”,c[i]);printf(“”);},10,3,8,5,6,7,4,9,2,,9,8,7,6,5,4,3,2,1,,9,4,7,6,5,8,3,10,1,,1,8,3,6,5,4,7,2,9,正确答案:D解析:该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为10到1;fun(c,10);语句调用fun函数,fun函数的功能是将一维数组偶数位元素的数值由小到大排序;最后将排好序的新的一维数组进行输出。因此D选项正确。#include<>main(){inti,j=0;chara[]=“Howareyou!”;for(i=0;a[i];i++)if(a[i]!=‘‘)a[j++]=a[i];a[j]=‘’;printf(“%s”,a);}!!!正确答案:C解析:主函数中首先定义字符数组a[]=“Howareyou!”;执行for循环语句,语句if(a[i]!=‘‘)a[j++]=a[i];其功能是将字符数组中的空格去掉。因此C选项正确。#include<>char*a=“you”;charb[]=“eyoutoChina!”;main(){inti,j=0;char*p;for(i=0;b[i]!=‘’;i++){if(*a==b[i]){p=a;for(j=i;*p!=‘’;j++){if(*p!=b[j])break;p++;}if(*p==‘’)break;}}printf(“%s”,&b[i]);}!!!!正确答案:D解析:该程序首先定义*a和b[],并进行初始化。主函数中通过外层for循环语句,遍历字符数组b[],并且将符合if条件语句的字符赋给数组p;for内层循环语句,遍历字符数组a[]。再将符合if条件语句的结果输出。因此D选项正:..#include<>main(){chara[20],b[]=Theskyisblue.”;inti;for(i=0;i<7;i++)scanf(“%c”,&b[i]);gets(a);printf(“%s%s”,a,b);}执行时若输入:(其中<Enter>表示回车符)Figflowerisred.<Enter>:A解析:程序首先初始化字符数组b[],执行for循环语句,循环变量i的取值范围从0到6?在for循环语句中通过scanf函数将从键盘上输入的数据输入到b[]中,即b的值为Figfloisblue.?退出for循环语句,执行语句gets(a);,gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名?字符数组元素的地址或字符指针变量?gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止,即a的值为werisred.?因此A选项正确?#include<>main(){charw[20],a[5][10]={“abcdef”,“ghijkl”,“mnopq”,“rstuv”,“wxyz”};intp[6][2]={{0,1},{1,5},{0,0},{0,2},{1,4},{4,4}},i;for(i=0;i<6;i++)w[i]=a[p[i][0]][p[i][1]];puts(w);}:D解析:程序首先初始化字符数组a[5][10]和二维数组p[6][2]。执行for循环语句,循环变量i从0取值到5,得到字符数组w[]的值,并通过字符串输出函数puts进行输出操作。w[0]=a[0][1]、w[1]=a[1][5]、w[2]=a[0][0]、w[3]=a[0][2]、w[4]=a[1][4]、w[5]=a[4][4];因此最后字符数组w的结果为black。因此D选项正确。#include<>voidf(intx){if(x>=10){printf(“%d-”,x%10);f(x/10);}elseprintf(“%d”,x);}main(){intz=123456;f(z);}-5-4-3-2-1--5-4-3-2--2-3-4-5--2-3-4-5-6-:..B解析:本题重点考察函数的递归调用,程序首先初始化整型变量z为123456,调用函数f。f函数中首先通过if条件语句判断x是否大于等于10,如果条件成立,求x除以10的余数并输出,同时将变量x进行x/10运算,同时调用函数f。如果条件不成立,直接输出变量x。因此第1次调用函数,变量x为123456,条件成立,输出余数6;第2次调用函数,变量x为12345,条件成立,输出余数5;第3次调用函数,变量x为1234,条件成立,输出余数4;第4次调用函数,变量x为123,条件成立,输出余数3;第5次调用函数,变量x为12,条件成立,输出余数2;第6次调用函数,变量x为12345,条件不成立,输出1。因此B选项正确。#include<>inta=2;intf(intm){staticintn;n=0;n++;a++;returnn+m+a;}main(){intk;for(k=0;k<4;k++)printf(%d,”,f(k));},5,6,7,,7,10,13,,6,8,10,,5,7,9,正确答案:C解析:主函数中变量k作为for语句的循环变量,取值0、1、2、3,同时也作为实参通过调用函数f传递给形参变量m。由于变量a是全局变量,变量n是static静态变量,因此k=0时,f函数中,语句returnn+m+a;即1+0+3=4;k=1时,f函数中,语句returnn+m+a;即2+1+3=6;k=2时,f函数中,语句returnn+m+a;即3+2+3=8;k=3时,f函数中,语句returnn+m+a;即4+3+3=10。因此C选项正确。#include<>#defineS(x)x*x#(x)S(x)*S(x)main(){intk=5,j=2;printf(“%d,%d”,S(k+j),T(k+j));},,,,289正确答案:C解析:本题考查宏定义,宏定义只是做个简单的替换,执行S(k+j)=k+j*k+j=17,T(k+j)=S(k+j)*S(k+j)=k+j*k+j*k+j*k+j=37,选项C正确。#include<>#include<>#include<>structstu{char*name,gender;intscore;};main(){structstua={NULL,‘m’,290},b;=(char:..*)malloc(10);strcpy(,Zhao”);b=a;=‘f’;=350;strcpy(,“Qian”);printf(“%s,%c,%d,”,,,);printf(“%s,%c,%d”,,,);},m,290,Zhao,f,,m,290,Qian,f,,f,350,Qian,f,,m,290,Qian,f,350正确答案:D解析:本题中考查结构体中变量的引用,a结构体中name被修改为Qian,所以本题答案为D。#include<>#include<>#include<>typedefstructstu{char*name,gender;intscore;}STU;voidf(char*p){p=(char*)malloc(10);strcpy(p,“Qian”);}main(){STUa={NULL,‘m’,290},b;=(char*)malloc(10);strcpy(,“Zhao”);b=a;f();=‘f’;=350;printf(“%s,%c,%d,”,,,);printf(“%s,%c,%d”,,,);},m,290,Qian,f,,m,290,Zhao,f,,f,350,Qian,f,,m,290,Qian,f,350正确答案:B解析:本题考查结构体变量中的引用,其中a的name为Zhao,b执行函数f()后b的name并没有改变,还是Zhao,所以答案为B选项。*T;Ta[10];(*a)[10];*a[10];*a;[10];正确答案:B解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,其中本题中int*用T来代替,所以定义Ta[10];就相当于是int*a[10];选项B正确。#include<>main(){intc;c=10;printf(“%d”,c);}:..:B解析:本题考查位运算中按位异或运算符,异或运算只有在两个比较的位不同时其结果是1,否则结果为0,10用二进制表示为00001010,5用二进制表示为00000101,异或后00001111,即15,选项B正确。#include<>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen(”,“w+”);for(i=0;i<6;i++){fseek(fp,0L,0);fprintf(fp,“%d”,a[i]);}rewind(fp);fscanf(fp,“%d”,&k);fclose(fp);printf(“%d”,k);}:C解析:本题考查文件操作函数,fseek用于二进制方式打开的文件,移动文件读写指针位置。将文件内部的位置指针重新指向一个流(数据流/文件)的开头。所以最后只保留了6,答案为C。,函数fun的功能是:找出100—999(含100和999)所有整数中各位上数字之和为X(x为正整数)的整数,并输出;符合条件

国家二级(C语言)机试模拟试卷39(题后含答案及解析) 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数14
  • 收藏数0 收藏
  • 顶次数0
  • 上传人青山代下
  • 文件大小1.15 MB
  • 时间2024-03-29