




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(程序填空题)模拟试卷1(共9套)(共45题)国家二级C语言机试(程序填空题)模拟试卷第1套一、程序填空题(本题共5题,每题1.0分,共5分。)1、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长#include{}defineM5{}defineN20intfun(char(*ss)[N],int*n){inti,k=0,len=N;/**********found**********/for(i=0;i<___1___;i++){len=strlen(ss[i]);if(i==0)*n=len;/**********found**********/if(len___2___*n){*n=len;k=i;}}/**********found**********/Eeturn(___3___);}main(){charss[M][N]:{"shanghai","guangzhou","beijing","tianjing","chongqing"};intn,k,i;printf("\nTheoriginalstringsare:\n");for(2=0;i标准答案:(1)M(2)<(3)k知识点解析:第一空:循环的目的是在M个字符串中寻找长度最短的字符串,因此循环变量i从0变化到M-1,故第一空处应为“M”。第二空:*n记录最小字符串的长度,由审题分析可知,字符串ss[i]长度比min小,则交换最小长度值和下标位置,故第二空处应为“<”。第三空:变量k记录了最小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处应为“k”。2、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例如,有下列矩阵:123451234512345若k为2,程序执行结果为345123451234512请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineM3#defineN5voidfun(int(*a)[N],intk){inti,j,p,temp;/*********found*********/for(p=1;p<=【1】;p++)for(i=0;i<M;i++){temp=a[i][0];/*********found*********/for(j=0;j<【2】;j++)a[i][j]=a[i][j+1];/*********found*********/a[i][N﹣1]=【3】;}}main(){intx[M][N]=f{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}},i,j;printf("Thearraybeforemoving:\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++).printf("%3d",x[i][j]);printf("\n"),}fun(x,2);printf("Thearrayaftermoving:\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%3d",x[i][j]),printf("\n");}}标准答案:(1)k(2)N﹣1(3)temp知识点解析:填空1:外循环p的值为数组移动的次数,试题要求第k列左移,则需要移动的次数为k,所以应填k。填空2:矩阵共N列,所以应填N﹣1。填空3:临时变量temp中存放的值为数组最左边元素的值,需要把temp放到数组的末尾,即放到a[i][N﹣1]中,所以应填temp。3、给定程序中,函数fun的功能是:将形参指针所指结构体数组中的三个元素按Bum成员进行升序排列。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注:卷:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstructintnum;charname[10];}PERSON;/******found******/voidfun(PERSON____1____){/******found******/____2____temp;if(std[0].num>std[1].num){temp=std[0];std[0]=std[1j;std[1]=temp;}if(std[0].num>std[2].Hum){temp=std[0];std[0]=std{2];std[2]=temp;}if(std[1].num>std[2].num){temp=std[1];std[1]=std[2];std[2]=temp;}}main(){PERSONstd[]={5,″Zhanghu″,2,″WangLi″,6,″LinMin″};inti;/******found******/fun(___3___);printf(″\nTheresultis:\n″);for(i=0;i<3;i++)printf(″%d,%s\n″,std[i].num,std[i].name);}标准答案:(1)std[](2)PERSON(3)std知识点解析:本题考查:数据类型的定义;数组元素的操作;函数参数的传递。要使用函数对整个数组进行操作时,应使用数组名作为函数的实参。当使用数组名作实参时,函数传递的实际上是数组的首地址,而并非数组本身,此时形参除了可以定义为指针变量外,还可以定义为数组,并且数组可以不指定大小。但无论用哪种形式,程序在编译时都将其作为一个指针变量处理。填空1:定义形参变量引用数组std,此时形参可以定义为指针变量,也可以定义为数组。由下文可知,程序是通过数组下标对数组元素进行操作的,因此形参应使用数组形式,而非指针形式。填空2:程序使用变量temp交换结构体数组元素的值,因而temp应定义为PERSON型。填空3:程序通过函数fun对数组std进行操作,因此函数的实参应为std。4、给定程序中,函数fun的功能是:有N×N矩阵,将矩阵的外围元素顺时针旋转。操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。例如,若N=3,有下列矩阵:123计算结果为741456852789963请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*t)[N]){intj,r[N];t[0][N—j—1]=t[j][____1____];for(j=N—l;j>=0;2)t[N—1][N—1—j]=t[j][N—1];for(j=N—l;j>=0;j——)t[j][N—lJ=r[____3____];}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf("\nTheoriginalarray:\n");{for(j=0;j标准答案:(1)0(2)j——(3)j知识点解析:函数fun操作顺序是:首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,临时数组中的元素成为最后一列。第一空:由审题分析可知,此处是使第一列成为第一行,即把第一列元素移动到第一行,第一列元素是“t[j][0]”,第一行元素是“t[0][N—j—1]”,故第一空处应为“0”。第二空:第四个循环是最后一列成为最后一行,即将最后一列移动到最后一行,“for(j=N—1;j>=0;____2____)”循环变量j从N一1开始,到0结束,共循环N次,故j每次减1,第三空处是“j——”。第三空:最后一个循环将临时数组中的元素成为最后1列,即“t[j][N—1]=r[j]”,故第三空处应为“j”。5、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:4632404548请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN10doublefun(doublex[],double*y){inti,j;doubleav;/*********found**********/av=____1____;for(i=0;iav)y[____3____]=x[i];returnav;}main(){inti;doublex[Nlry[Nl;for(i=0;i=0;1++)printfprintf("\n");}标准答案:(1)0(2)x[i]/N(3)j++知识点解析:函数fun的功能是计算形参x所指数组中N个数的平均值,同时利用传址参数传回平均值。第一空:“returnav,”可知变量av保存了平均值,故第一空处av初始化应为0,即第一空处应填”0”。第二空:“for(i=0;iav)y[____3____]=x[il;,,是将x[i]保存在y所指的数组中,i是循环变量,j初始化为0,故y[]的计数变量为j,故第三空处应为“j++”。国家二级C语言机试(程序填空题)模拟试卷第2套一、程序填空题(本题共5题,每题1.0分,共5分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的作用是:统计整型变量m中各数字出现的次数,并存放到数组a中,其中:a[0]存放0出现的次数,a[1]存放1出现的次数,…,a[9]存放9出现的次数。例如,若m为14579233,则输出结果应为:0,1,1,2,1,1,0,1,0,1,请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(intm,inta[10]){inti;for(i=0;i<10;i++)/*********found*********/【1】=0;while(m>0){/*********found*********/i=【2】;a[i]++;/*********found*********/m=【3】;}}main(){intm,a[10],i;printf("请输入一个整数:"),scanf("%d",&m);fun(m,a);for(i=0,i<10;i++)printf("%d,",a[i]);printf("\n");}标准答案:(1)a[i](2)m%10(3)m/10知识点解析:数组a各元素初始化为0,用求余和整除相结合的方法得到数字的每一位数字,并用它做为数组a的下标,相应元素加1。填空1:数组a的10个元素赋值为0。填空2:m%10可得到数m的最后一位数字。填空3:m/10可使数字截短,即去掉最后一位。2、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新数,作为函数值返回。例如,从主函数输入一个整数27638496,则函数返回值为26846。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>unsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;s=n;/*********found*********/i=【1】;/*********found*********/while(【2】){t=s%10;if(t%2==0){/*********found*********/x=x+t*i;i=【3】;}s=s/10;}returnx;}main(){unsignedlongn=﹣1;while(n>99999999||n<0){printf("Pleaseinput(0<n<100000000):");scanf("%ld",&n);}printf("\nTheresultis:%ld\n",fun(n));}标准答案:(1)1(2)s>0(3)i*10知识点解析:填空1:变量i用来控制被取出的偶数在新数中的位置,应赋初值1。3、下列给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。例如,若S所指字符串为“asdl23fgh543df”,处理后新字符串为“asdfghdf123543”。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>char*fun(char*s){inti,j,k,n;char*p,*t;n=str1en(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*si一zeof(char));j=0;k=0;for(i=0;i<n;i++){if(((s[i]>=’a’)&&(s[i]<=’z))||((s[i]>=’A’)&&(s[i]<=’Z’))){/*********found*********/t[j]=【1】;j++;}else{p[k]=s[i];k++;)}/*********found*********/for(i=0;i<【2】;i++)t[j+i]=p[i];/*********found*********/t[j+k]=【3】;returnt;}main(){chars[80];printf("Pleaseinput:");scanf("%s",s);printf("\nTheresultis:%s\n",fun(s));}标准答案:(1)s[i](2)k(3)’\0’或0知识点解析:填空1:将字符串s中所有字母元素赋给数组t。填空2:字符串中所有非字母元素放到字母元素后面,所以i的取值范围是0一k。填空3:最后给字符串加入结束标识‘\0’。4、程序通过定义学生结构体变量,存储学生的学号、姓名和三门课的成绩。函数fun的功能是:将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。例如,若传给形参a的数据中学号、姓名和三门课的成绩依次是:10001、“ZhangSan”、95、80、88,修改后的数据应为:10002、“LiSi”、96、81、89。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#inclucle<stdio.h>#include<string.h>structstudent{longsrlo;charname[10];floatScoEe[3];};/*********found*********/【1】fun(structstudenta){inti;a.sno=10002;/*********found*********/strcpy(【2】,"Lisi");/*********found*********/for(i=0;i<3;i++)【3】+=1;returna;}main(){structstudentS={1000l,"ZhangSan",95,80,88),t;inti;print[f"\n\nTheoriginaldata:\n");print["\nNo:%ldName:%s\nScores:",s.sno,s.name);for(i=0;i<3;i++)print[("%6.2f",s.score[i]);print[("\n");t=fun(s);print[f"\nThedataaftermodified:\n");print[("\nNo:%ldName:%s\nScoEes:",t.sno,t.name);for(i=0;i<3;i++)print[("%6.2f",t.score[i]);print[("\n");}标准答案:(1)structstudent(2)a.name(3)a.score[i]知识点解析:填空1:函数定义时,类型标识符指明了本函数的类型,函数的类型实际上是函数返回值的类型。本题中,用结构类型定义函数类型。填空2和填空3:此处考查结构体变量成员的表示方法,a.name和a.score[i]分别表示学生的姓名和成绩。5、下列给定程序中,函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]…中,把偶数从数组中删除,奇数个数通过函数值返回。例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除偶数后,a所指数组中的数据为:9,1,3,5,7,返回值为5。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#inclucle<stdio.h>#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i<n;i++)/*********found*********/if(a[i]%2==【1】){/*********found*********/a[j]=a[i];【2】;}/*********found*********/return【3】;}main(){intb[N]={9,1,4,2,3,6,5,8,7},i,n;printf("\nTheorig~naldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");n=fun(b,N);printf(”\nThenumberofodd:%d\n",r1);printf("\nTheoddnumber:\n");for(i=0;i<1"1;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)1(2)j++(3)j知识点解析:本题考查:if语句条件表达式;自增、自减运算符;函数返回值。填空1:根据题目要求,需进行奇偶数的判定,可以通过if条件语句来判断数组元素是否为奇数,如果元素不能被2整除,则为奇数,所以填入if(a[i]%2==1)。填空2:将为奇数的元素重新存放到数组的前面,同时下标增1。填空3:函数返回值需要返回数组中奇数的个数,因此返回变量j。奇数和偶数的判定方法,对2求余运算,结果为0是偶数,结果为1是奇数。自增1、自减1运算符:自增1运算符记为“++”,其功能是使变量的值自增1;自减1运算符记为“一一”,其功能是使变量值自减1。自增1、自减1运算符均为单目运算符,具有右结合性,有以下几种形式:++i:i自增1后再参与其他运算。一一i:i自减1后再参与其他运算。i++:i参与运算后,i的值再自增1。i一一:i参与运算后,i的值再自减1。国家二级C语言机试(程序填空题)模拟试卷第3套一、程序填空题(本题共5题,每题1.0分,共5分。)1、函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中;其余以此类推。例如:若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN9/**********found**********/voidfun(int___1___,intn)(inti,j,max,min,px,pn,t;/**********found**********/for(i=0;ia[j]){min=a[j];pn=j;}}if(px!=i){t=a[i];a[i]=max;a[px]=t;if(pn==i)pn=px;}if(pn!=i+1){t=a[i+1];a[i+1]--min;a[pn]=t;)}}main(){intb[N]={1,4,2,3,9,6,5,8,7},i;printf("\nTheoriginaldata:\n");for(i=0;i标准答案:(1)*a(2)2(3)i+1知识点解析:第一空:主函数内fun函数的调用“fun(b,N);”,其中b为整型数组名,故fun函数的第一参数为整型指针,又根据“max=a[j]”可知第一个参数名为a,故第一空处为“*a”。第二空:根据题意a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,升序排序和降序排序的下标变化是每次在前一次的基础上+2,即a[0]、a[2]、a[4]、…降序排序,a[1]、a[3]、a[5]…升序排序,故第二空应为“2”。第三空:选择排序法中的升序排序,首先从数组中挑选一个最小的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最小的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。故内层循环变量i应该从i+1开始,因此第三空处应为“i+1”。2、给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。例如,形参s所指的字符串为abs5defl26jkm8,程序执行后的输出结果为22。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#include<ctype.h>intfun(char*s){intsum=0;while(*s){/*********found*********/if(isdigit(*s))sum+=*s—【1】;/*********found*********/【2】;}/*********found*********/return【3】;}main(){chars[81];intn;printf("\nEnterastring:\n\n");gets(s);n=fun(s);printf("\nTheresultis:%d\n\n",n);}标准答案:(1)48或’0’(2)s++(3)sum知识点解析:本题是把字符串中是数字字符转换成对应的数值并进行累加。填空1:’0’字符对应的ASCII码值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填48或者’0’。填空2:判断完一个字符之后,将字符串指针移到下一个位置,所以应填s++。填空3:返回累加和sum,所以应填sum。3、程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:nclude#defineN5typedefstructstudent{longsno;charname[10];floatscore[3];}STU;voidfun(char*filename){FILE*fp;inti,j;STUs[N],t;/******found******/fp=fopen(filename,___1___);fread(s,sizeof(STU),N,fp);felose(fp);for(i=0;i标准答案:(1)“r”(2)>(3)fwrite知识点解析:填空1:题目中要求从形参fiename所指的文件中读入学生的数据,以此可以看出本空应该填写“r”。填空2:此处的if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写>。填空3:题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写fwrite。4、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#includevoidWriteText(FILE*);voidReadText(FILE*);main(){FILE*fp;if((fp=fopen("myfile4.txt","w"))==NULL){printf("openfail!!\n");exit(0);}WriteText(fp);fclose(fp);if((fp=fopen("myfile4.txt","r"))==NULL){printf("openfail!!\n");exit(0);}ReadText(fp);fclose(fp);}/**********found**********/voidWriteText(FILE【1】){charstr[81];printf("\nEnterstringwith-1toend:\n");gets(str);while(strcmp(str,"-1")!=0){/**********found**********/fputs(【2】,fw);fputs("\n",fw);gets(str);}}voidReadText(FILE*fr){charstr[81];printf("\nReadfileandoutputtoscreen:\n");fgets(str,81,fr);while(!feof(fr)){/*********found**********/printf("%s",【3】);fgets(str,81,fr);}}标准答案:(1)*fw(2)str(3)str知识点解析:第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,“fputs("\n",fw)”是将字符“\n”写入文件,可知fw是文件指针名,因此,第一空处应该是“voidWriteText(FILE*fw)”。第二空:“while(strcmp(str,"-1")!=0)”循环的结束标志是str字符串等于“-1”时循环退出,如果str不等于“-1”,执行循环体内容:用fputs函数将str字符串写入文件。fputs函数的调用形式是:“fputs(s,fp)”,其中,s是指向字符串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此,第二处应该是“fputs(str,fw)”。第三空:“while(!feof(fr))”循环的作用是不断读取文件直到到达文件尾,每次最多读81个,将读到的数据放在str字符串里,并用printf输出到屏幕,因此,第三处应该是“printf("%s",str)”。5、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<string.h>3#defineM54#defineN205intfun(char(*ss)[N],int*n)6{inti,k=0,len=N;7/**********found**********/8for(i=0;i<___1___;i++)9{len=strlen(ss[i]);10if(i==0)*n=len;11/**********found**********/12if(len__2__*n)13{*n=len;14k=i;15}16}17/**********found**********/18return(__3__);19}20main()21{charss[M][N]={’’shanghai’’,’’guangzhou’’,’’beijing’’,’’tianjing’’,’’chongqing’’);22intn,k,i;23printf(’’\nTheoriginalstringsare:\n’’);24for(i=0;i<M;i++)puts(ss[i]);25k=fun(ss,&n);26printf(’’\nThelengthofshorteststringis:%d\n’’,n);27printf(’’\nTheshorteststringis:%s\n’’,ss[k]);28}标准答案:(1)M(2)<(3)k知识点解析:函数fun的功能是求ss所指字符串数组中长度最短的字符串所在的行下标。求最短字符串所在的下标,一般假设第一个字符串的长度最短min,用k记录最长字符串的下标的话,开始时min=strlen(ss[0]),k=0,然后逐个比较其他字符串长度,如果字符串ss[i]长度比min小,则将min赋值为这个字符串长度,“k=i”,如此便可求得最短字符串和最短字符串所在的下标位置。第一空:循环的目的是在M个字符串中寻找长度最短的字符串,因此,循环变量i从0变化到“M-1”,故第一空处应为“M”。第二空:“*n”记录最小字符串的长度,由审题分析可知,字符串ss[i]长度比min小,则交换最小长度值和下标位置,故第二空处应为“<”。第三空:变量k记录了最小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处应为“k”。国家二级C语言机试(程序填空题)模拟试卷第4套一、程序填空题(本题共5题,每题1.0分,共5分。)1、给定程序中,函数fun的功能是:将a所指4×3矩阵中第k行的元素与第0行元素交换。例如,有下列矩阵:123456789101112若k为2,程序执行结果为:789456123101112请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#inClude<stdio.h>#defineN3#defineM4/*********found*********/voidfun(int(*a)[N],int【1】){inti,temp;/*********found*********/for(i=0;i<【2】;i++){temp=a[0][i];/*********found*********/a[0][i]=【3】;a[k][i]=temp;}}main(){intX[M][N]={{1,2,3},{4,5,6},{7,8,9),{10,11,12)},i,j;printf("Thearraybeforemoving:\n\n");for(i=0,i<M,i++){for(j=0,j<N;j++)printf("%3d",x[i][j]),printf("\n\n");}fun(x,2),printf("Thearrayaftermoving:\n\n");for(i=0;i<M,i++){for(j=0;j<N;j++)printf("%3d",x[i][j]);printf("\n\n");}}标准答案:(1)k(2)N(3)a[k][i]知识点解析:填空1:变量k在函数体fun中已经使用,但在函数体中没有定义,肯定是在函数的形参中定义的,所以应填k。填空2:数组共N列,所以应填N。填空3:这部分语句实现的功能是变量值的交换,所以应填a[k][i]。2、给定程序中,函数fun的功能是:在任给给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序:列,并将中间数作为函数值返回。例如,有9个正整数:1572387582145按升序排列时的中间数为:8处理后主函数中输出的数列为:8882387882145请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN9intfun(intx[])(inti,j,k,t,mid,b[N];for(i=0;i<N;i++)b[i]=x[i];for(i=0;i<=N/2;i++){k=i;for(j=i+1;j<N;j++)if(b[k]>b[j])k=j;if(k!=i){/*********found*********/t=b[i];b[i]=【1】;b[k]=t;}}/*********found*********/mid=b【2】;for(i=0;i<N;i++)/*********found*********/if(x[i]【2】mid)x[i]=mid;returnmid;}main(){inti,x[N]={1,5,7,23,87,5,8,21,45};for(i=0;i<N;i++)printf("%d",x[i]);printf("\nThemiddatais:%d\n",fun(x));for(i=0;i<N;i++)printf("%d",x[i]);printf("\n");}标准答案:(1)b[k](2)4或N/2(3)<知识点解析:数组中的9个数任意排列,要找到按升序排列时处于中间位置的数,应首先对数组进行升序排列。因为只需找到中间位置的数即可,故不必对整个数组进行排序,只需要排列出数组的前半部分。找到中间数后,遍历原数组,将小于中间数的元素进行替换。填空1:利用选择算法排序,先指定一个元素为最小,用这个数与其后的所有数进行比较,若找小于此数,则进行替换。此处考查替换操作。填空2:元素mid存放中间位置的数,数组长度为9,因此中间元素数为b[4]。填空3:遍历数组,当元素小于中间位置的数(即mid)时,进行替换。3、函数fun的功能是:在有n个元素的结构体数组std中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。例如,主函数中给出了4名学生的数据,则程序运行的结果为:学号:N1002学号:N1006共有2位学生有不及格科目请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstruct{charnum[8];doublescore[2];/******found******/}___(1)___;intfun(STUstd[],intn){inti,k=0;for(i=0;i<n;i++)/******found******/if(std[i].score[0]<60___(2)___std[i].score[1]<60){k++;printf(″学号:%s″,std[i].num);}/******found******/return___(3)___;}main(){STUstd[4]={″N1001″,76.5,82.0,″N1002″,53.5,73.0,″N1005″,80.5,66.0.″N1006″,81.0,56.0};printf(″\n共有%d位学生有不及格科目\n″,fun(std,4));}标准答案:(1)STU(2)||(3)k知识点解析:本题考查:对结构体的定义和使用,以及逻辑运算符的使用。填空1:STU结构体别名,通过main()中的语句可知。填空2:||只要学生两门课成绩有不及格的,就算不及格,因此使用或运算。填空3:k返回的是不及格的学生个数,有题意可知k是累计个数的。4、给定程序中,函数fun的功能是:判断形参S所指字符串是否是“回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。“回文”是正读和反读都一样的字符串(不区分大小写字母)。例如,LEVEL和Level是“回文”,而LEVLEV不是。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<string.h>3#include<ctype.h>4intfun(char*s)5{char*ip,*rp;6/**********found**********/7ip___1___;8rp=s+strlen(s)-1;9while((toupper(*1p)==toupper(*rp))&&(ip<rp)){10/**********found**********/111p++;rp____2___;}12/**********found**********/13if(ip<rp)___3___;14elsereturn1;15}16main()17{chars[81];18printf(’’Enterastring:’’);scanf(’’%s’’,s);19if(fun(s))printf(’’in\’’%s\’’isapalindrome.\n\n’’,s);20elseprintf(’’in\’’%s\’’ist’taPalindrome.\n\n’’,s);21}标准答案:(1)s(2)--(3)return0知识点解析:函数fun的功能是:判断形参s所指字符串是否是“回文”,即比较第一个字符和最后一个字符是否相同,第二个字符和倒数第二个字符是否相同,依此类推,可以用循环来实现。第一空:“rp=s+strlen(s)-1;”可知rp指向最后一个元素,因此,lp是指向第一个元素,故第一空应为“s”。第二空:“lp++;rp__2___;”lp往后移动,rp应该往前移动,故第二空处应为“--”。第三空:“if(lp<rp)”成立说明lp和rp比较没有比较到字符串的最中间的字符,也就是说s字符串不是回文,因此,第三空处的应为“return0”。5、给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;while(p){q=____2____;while(q){/*********found**********/if(p—>data____3____q—>data){t—p—>data;p—>data=q—>data;q=>data=t;}q=q—>next;}p=p—>next;}}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h—>next=NULL;{q=(NODE*)malloc(sizeof(NODE));q—>data=a[i];q—>next=NULL;if(h—>next==NULL)h—>next=p=q;else{p—>next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;p=h—>next;if(p==NULL)printf("Thelistiselse{printf("\nHead");do{printf("—>%d",p—>data);p=p—>next;}while(p!=NULL);printf("—>End\n");}}main(){NODE*head;inta[N]={0,10,4,2,8f6};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistaftersorting:outlist(head);}标准答案:(1)h—>next(2)p—>next(3)>=知识点解析:函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序,在fun函数内采用的是选择法排序。第一空:由审题分析可知,q从h的下一个元素开始寻找最小值,故第一空为“h—>next”。第二空:由审题分析可知,while循环是在剩下的元素当中找最小值,剩下的结点是由q指向的链表,q从p的后一个结点开始,故第二空处应为“p—>next”。第三空:“if(p—>data____3____q—>data)”是比较p结点和q结点数据的大小,如果p结点的数据比q结点的数据大,那么应该将p结点和q结点的数据进行交换,故第三空处应为“>—"。国家二级C语言机试(程序填空题)模拟试卷第5套一、程序填空题(本题共5题,每题1.0分,共5分。)1、给定程序中,函数fun的功能是:把形参S所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参S所指的字符串为:abedefgh,执行结果为:ahcbedgf。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s){inti,n,k;charc;n=0,for(i=0,s[i]!=’\0’;i++)n++;/**********found**********/if(n%2=--O)k=n-___1___;elsek=n-2;/**********found**********/c=___2___;for(i=k-2;i>=1;i=i-2)s[i+2]=s[i];/**********found**********/s[1]=___3___;}main(){chars[80]="abcdefgh";printf("\nTheoriginalstringis:%s\n",s);fun(s);printf("\nTheresultis:%s\n",s);}标准答案:(1)1(2)s[k](3)c知识点解析:函数fun的功能是移动下标为奇数位置的字符。第一空:“for(i=0;s[i]!=’\0’;i++)n++;”n记录了数组s的长度,“if(n%2==0)”如果长度n是偶数,那么最右边被移出的字符的下标是在n-1,如果n是奇数,那么最右边被移出的字符的下标是n-2,因此第一空处应为“1”。第二空:题目要求最右边被移出字符串的字符绕回放到第一个奇数位置,因此最右边被移出的字符是s[k],在s[k]被替换之前必须先把s[k]保存在其他变量中,故第二空处应为“s[k]”,将s[k]保存在c中。第三空:此处是把最右边被移出字符串的字符绕回放到第一个奇数位置,最右边被移出字符保存在c,第一奇数位置是s[1],故第三处应为“c”。2、给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter’a’:3timesletter’s’:3times请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#include<ctype.h>voidfun(char*s){intk[26]={0},n,i,max=0;charch;while(*s){if(isalpha(*s)){/*********found*********/ch=tolower(【1】);n=ch一’a’;/*********found*********/k[n]+=【2】;}s++;/*********found*********/if(max<k[n])max=【3】;printf("\nAftercount:\n");for(i=0;i<26;i++)if(k[i]==max)printf("\nletter\’%c\’:%dtimes\n",i+’a’,k[i]);}main(){chars[81];printf("\nEnterastring:\n\n");gets(s);fun(s);}标准答案:(1)*s(2)1(3)k[n]知识点解析:本题统计字符串中各字母的个数,建立了一个包括26个整型变量的数组,用来存储每个字母的个数。填空1:isalpha函数的作用是判断当前字符是否为字母,tolower函数的作用是将当前字母转换为小写字母,所以应填*s。填空2:把该字母出现的个数累加到指定的数组中,所以应填1。填空3:max用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填k[n]。3、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<Stdlib.h>3#defineN84typedefstructlist5{intdata;6struct1ist*next;7}SLIST;8voidfun(SLIST*p)9{SLIST*t,*e;10t=p->next;s=p;11while(t->next!=NULL)12{s=t;13/**********found**********/14t=t->___1___;15}16/**********found**********/17printf(’’%d’’,___2____);18s->next=NULL;19/**********found**********/20free(___3____);21}22SLIST*creatlist(int*a)23{SLIST*h,*p,*q;iti;24h=p=(SLIST*)malloc(sizeof(SLIST));25for(i=0;i<N;i++)26{q=(SLIST*)malloc(sizeof(SLIST));27q->data=a[i];p->next=q;p=q;28}29p->next=0;30returnh;31}32voidoutlist(SLIST*h)33{SLIST*p;34p=h->next;35if(p==NULL)printf(’’\nThelistisNULL!\n’’);36else37{printf(’’\nnead’’);38do{printf(’’->%d’’,p->data);p=p->next;}while(p!=NULL);39printf(’’->End\n’’);40}41}42main()43{SLIST*head;44inta[N]={11,12,15,18,19,22,25,29};45head=creatlist(a);46printf(’’\nOutputfromhead:\n’’);outlist(head);47printf(’’\nOutputfromtail:\n’’);48while(head->next!=NULL){49fun(head);50printf(’’\n\n’’);51printf(’’\nOutputfromheadagain:\n’’);outlistIhead);52}53}标准答案:(1)next(2)t->data(3)t知识点解析:fun函数的功能是输出链表尾部结点中的数据,并释放该结点,使链表缩短。由于链表是单向的,找到链表尾部结点需要利用循环从头结点开始查找,直至找到最后一个,找到之后输出尾部结点的数据,然后删除尾结点。第一空:fun函数中的循环目的是找到尾结点“while(t->next!=NULL)”,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此,第一空处应该是“t=t->next;”。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此,第二空处应该为“printf(’’%d’’,t->data),”。第三空输出尾结点数据之后删除尾结点,使用free,又因为尾结点是t,因此,第三空处应该为“flee(t);”。4、给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<string.h>3#defineN54#defineM85voidfun(char(*ss)[M])6{char*ps[N],*tp;inti,j,k;7for(i=0;i<N;i++)ps[i]=ss[i];8for(i=0;i<N-1;i++){9/**********found**********/10k=__1___;11for(j=i+1;j<N;j++)12/**********found**********/13if(strlen(ps[k])<strlen(___2___))k=j;14/**********found**********/15tp=ps[i];ps[i]=ps[k];ps[k]=___3____;16}17printf(’’\nThestringaftersortingbylength:\n\n’’);18for(i=0;i<N;i++)puts(ps[i]);19}20main()21{charch[N][M]={’’red’’,’’green’’,"blue’’,¨yellow","black¨),22inti;23printf(’’\nTheoriginalstring\n\n’’);24for(i=0;i<N;i++)puts(ch[i]);printf(’’\n’’);25fun(ch)}标准答案:(1)i(2)ps[j](3)tp知识点解析:本题中函数fun的功能是利用指针数组对形参ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。在fun函数中采用了选择排序法,在选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。第一空:分析可知,fun函数采用的选择排序,在第一空处是初始化k。“for(j=i+1;j<N;j++)”循环是寻找长度最长的字符串,找到之后和k字符串交换,因此k从0开始,随着i变化,故第一空处应为“i”。第二空:“if(strlenq(ps[k])<strlen(__2__))k=j;”新的字符串ps[j]如果比ps[k]的长度长,那么k记录下新的最长的字符串的下标位置j,故第二空处应为“ps[j]”。第三空:“tp=ps[i];ps[i]=ps[k];ps[k]=__3___;”是字符串地址交换,显然第三空处应是临时变量tp。5、给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字符串为:abcdef35adgh3kjsdf7。输出结果为:4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2voidfun(char*s,int*t)3{inti,n;4n=0;5/**********found**********/6for(i=0;__1___!=0;i++)7/**********found**********/8if(s[i]>=’0’&&S[i]<=__2__)n++;9/**********found**********/10__3__;11}12main()13{chars[80]=’’abcdef35adgh3kjsdf7’’;14intt;15printf(’’\nTheoriginalstringis:%s\n’’,s);16fun(s,&t);17printf(’’\nTheresultis:%d\n’’,t);}标准答案:(1)s[i](2)’9’(3)*t=n知识点解析:搜索整个字符串,判断s[i]>=’0’且s[i]<=’9’,满足该条件后,计数变量加1,因此,第一空:循环终止条件是达到了字符串的尾部,字符串以“\0”(或NULL)结束,故第一空处应为s[i]。第二空:数字字符的判断是s[i]>=’0’且s[i]<=’9’,故第二空处应为“’9’”。第三空:这里是将数字字符出现的次数存放在形参t里,n记录了数字字符的个数,而形参t是指针变量,故第三处应为“t=n”。国家二级C语言机试(程序填空题)模拟试卷第6套一、程序填空题(本题共5题,每题1.0分,共5分。)1、甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次,丙每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时炸响,只算一次响声,第一次响声是在第0秒。例如,若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#inolude/**********found**********/#defineOK(i,t,n)((___1___%t==0)&&(i/t标准答案:(1)i(2)t++(3)count知识点解析:第一空:由“if(OK(t,t1,n)‖OK(t,t2,n)‖OK(t,t3,n)‖OK(t:t4,n))count++;”可知count计数听到的鞭炮声,在满足if条件时,计数加1。t时刻,至少有一个人放了一个鞭炮才能听得到声音,故t%t1==0、t%t2==0、t%t3=0、t%t4==0这四个当中至少一个成立,四者是或的关系。第一个标识下是宏OK的定义,由前面的分析可知,OK宏的作用就是判断t%i(i等于1、2、3和4)是否等于0且i/t2、给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。例如,有10个正数:46、30、32、40、6、17、45、15、48、26,平均值为30.500000。主函数中输出m=30。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#defineN10doublefun(doublex[],double*av){inti,j;doubled,s;s=0;for(i=0;i<N;i++)s=s+x[i],/*********found*********/【1】=s/N;d=32767;if(x[i]<*av&&*av一x[i]<=d){/*********found*********/d=*av一x[i];j=【2】;}/*********found*********/return【3】;}main(){inti;doublex[N],av,m;printf"’\n");m=fun(xf&av);printf("\nTheaverageis:%f\nl’,av);printf("m=%5.lf",m);printf("\n");}标准答案:(1)*av(2)i(3)x[j]知识点解析:填空1:从原程序中可以看出*av代表的是平均值,而s/N表示的就是平均值,因此本空应该填*av。填空2:if语句来判断找最接近平均值的数,因而此空应该填i。填空3:题目要求将小于平均值且最接近平均值的数作为函数返回,而j表达的是最接近平均值的数在数组中的下标,因而本空应该填写x[j]。3、给定程序中,函数fun的功能是:找出NxN矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工商变更股权转让协议
- 售后服务流程与响应时效统计表
- 医学资料 医疗类模版 学习课件
- 房地产开发借款合同
- 岩板背景墙的施工方案
- 学校校区房屋租赁合同
- 技术推广服务合同
- 2025年期末小联考试题及答案
- 1.4 等腰三角形(4) 等边三角形的判定-八年级数学下册10分钟课前预习练(北师大版)(原卷版)
- 烘干机不锈钢网筒施工方案
- 2025年河北省职业院校技能大赛高职组(商务数据分析赛项)参考试题库(含答案)
- 秦朝文书课件
- DB32-T 2197-2022 水文自动测报系统数据传输规约
- 2025届高考生物一轮复习新考案-大单元11生物技术与工程微难点5pcr相关问题分析(人教版2019)
- 机床设备质量保证协议(2024版)3篇
- 律师业务档案管理办法-司律通字(1991)153号
- 五年级英语高频考点每日一练
- 2024年国网35条严重违章及其释义解读-知识培训
- 《阻燃材料与技术》课件 第4讲 阻燃剂性能与应用
- 中国电信5G NTN技术白皮书
- 新能源汽车三电系统知识详解
评论
0/150
提交评论