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

下载本文档

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

文档简介

国家二级C语言机试(操作题)模拟试卷10(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。例如:b所指变量t中的学号、姓名、和三门课的成绩依次是:10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为:10004、"LiJie"、93、85、87。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>structStudent{longsno;charname[10];floatScore[3];};voidfun(StructStudent*b){/**********found**********/b___1___=10004;/**********found**********/strcpy(b___2___,"LiJie");}main(){structstudentt={10002,"ZhangQi",93,85,87};inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%idName:%s\nScores:",t.sno,t.name);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");/**********found**********/fun(___3___);printf("\nThedataaftermodified:\n");printf("\nNo:%idName:%s\nScores:",t.sno,t.name);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}标准答案:(1)->sno(2)->name(3)&t知识点解析:函数fun的功能是对形参b所指结构体变量中的数据进行修改。第一空:“b___1___=10004;”等号右边是整型值,故这里是修改结构体成员sno的值,b是结构体指针,访问结构体数据成员时使用“->”运算符,因此,第一空为“b->sno”。第二空:“strcpy(b___2___,”LiJie”);”,strcpy是字符串拷贝函数,因此,这里是修改结构体的name成员值,故第二空处为“b->name”。第三空:fun函数的定义形式是:voidfun(structstudent*b),可知fun的参数是指针,因此,主函数内调用fun函数时传入的参数是结构体t的地址,故第三空处为“&t”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:例如,a为2时,平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include<stdio.h>#include<math.h>/**********found**********/doublefun(doublea,dounlex0){doublex1,y;x1=(x0+a/x0)/2.0;/**********found**********/if(fabs(x1-x0)>0.00001)y=fun(a,x1);elsey=x1;returny;}main(){doublex;printf("Enterx:");scanf("%1f",&x);printf("Thesquarerootof%lfis%lf\n",x,fun(x,1.0));}标准答案:(1)doublefun(doublea,doublex0)(2)if(fabs(x1-x0)>0.00001)知识点解析:函数的功能是应用递归算法求某数a的平方根。(1)主函数中“fun(x,1.0)”,x是double型变量,1.0是浮点数,可知fun有两个double型参数,而第一标识下“dounle”不是C语言关键字,所以应将“doublefun(doublea,dounlex0)”改为“doublefun(doublea,doublex0)”。(2)第二个标识下的if语句是判断进行递归运算的条件,第二标识下变量xo没有定义,根据题意,这里是判断x1和x0的差值的绝对值是否比0.00001大,所以第二个标识下“if(fabs(x1-xo)>0.00001)”改为“if(fabs(x1-x0)>0.0000])”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#defineN12typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}main(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA09",60},{"GA11",79},{"GA12",73},{"GA10",90}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichishigherthan%7.3f:\n",n,ave);for(i=0;i<n;i++)printf("%s%4.1f\n",h[i].num,h[i].s);printf("\n");out=fopen("out.dat","w");fprintf(out,"%d\n%7.3f\n",n,ave);for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(h[i].s<h[j].s){t=h[i];h[i]=h[j];h[j]=t;}for(i=0;i<n;i++)fprintf(out,"%4.1f\n",h[i].s);fclose(out);}标准答案:doublet=0;inti;*n=0;for(2=0;i<N;i++)t=t+a[i].s;t=t/N;for(i=0;i<N;i++)if(a[i].s>t)b[(*n)++]=a[i];returnt;知识点解析:该程序功能是把高于或等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数返回值返回。解题过程首先求得平均分,然后将所有成绩与平均分进行比较,如果大于或等于平均分,存入指定数组。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如,形参s所指的字符串为:Abc@lx56*,程序执行后t所指字符数组中的字符串应为:A@156*。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intfun(char*s,char*t){intn=0;while(*s){if(*s<97){/*********found*********/*(t+n)=【1】;n++;}/*********found*********/【2】;}*(t+n)=0;/*********found*********/return【3】;}main(){chars[81],t[81];intn;printf("\nEnterastring:\n");gets(s);n=fun(s,t);printf("\nThereare%dletterwhichASCIIcodeislessthan97:%s\n",n,t);}标准答案:(1)*s(2)s++(3)n知识点解析:填空1:判断s所指向的字符串中的字符符合条件时,将当前字符存放到t指向的字符串中,所以应填*s。填空2:判断完一个字符之后,将字符串的指针移到下一个位置,所以应填s++。填空3:题目要求函数要返回符合条件的字符个数n,所以应填n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。例如,n=8时,输入193.1991195.673、195.757、196.051、196.092、196.596、196.579、196.763、所得平均值为195.838745,在平均值以上的实数个数应为5。请改正程序中的错误,使其能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdlio.h>intfun(floatx[],intn)/*********found*********/intj,c=0;floatxa=0.0;for(j=0;j<n;j++)xa+=x[j]/n;printf("ave=%f\n",xa);for(j=0;j<n;j++)/*********found*********/if(x[j]=>xa)c++;returnc;}main(){floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763};system("cls");printf("%d\n",fun(x,8));}标准答案:(1){intj,c=0;floatxa=0.0;(2)if(x[j]>=xa)知识点解析:(1)本题着重考查考生对C语言基本语法以及比较运算符的掌握情况。(2)本题中的第一个错误:在C语言中,{}应成对出现,所以程序中的语句"intj,c=0;floatxa=0.0;"应改为"{intj,c=0;floatxa=0.0;"或相同作用的语句;本题中的第二个错误:在c语言中,判断大于或等于的运算符应为>=,所以程序中的语句"if(x[j]=>xa)"应改为"if(x[j]>=xa)"或相同作用的语句。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>floatfun(intm,intn){}main()/*主函数*/{voidNONO();printf("P=%f\n",fun(12,8));NONO();1}1voidNONO()1{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,m,n;floats;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d,%d",&m,&n);s=fun(m,n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:floatfun(intm,intn){floatp1=1,p2=1,p3=1;inti;for(i=1;i<=m;i++)p1★=i;for(i=1;i<=n;i++)p2★=i;for(i=1;i<=(m-n);i++)p3★=i;returnp1/(p2★p3);}知识点解析:本题考查循环的使用。通过三个for循环分别计算阶乘。其中p1=m!,p2=n!,p3=(m-n)!。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名及3门课的成绩。函数fun()的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2typedefstruct3{intnum;4charname[9];5floatscore[3];6}STU;7voidshow(STUtt)8{inti;9printf("%d%s:",tt.num,tt.name);10for(i=0;i<3;i++)11printf("%5.1f",tt.score[i]);12printf("\n");13}14/*********found*********/15voidmodify(<u>【1】</u>*ss,floata)16{inti;17for(i=0;i<3;i++)18/*********found*********/19ss-><u>【2】</u>*=a;20}21main()22{STUstd={1,"Zhanghua",76.5,78.0,82.0};23floata;24printf("\nTheoriginalnumberandnameandscores:\n");25show(std);26printf("\nInputanumber:");27scanf("%f",&a);28/*********found*********/29modify(<u>【3】</u>,a);30printf("\nAresultofmodifying:\n");31show(std);32}标准答案:(1)STU(2)score[i](3)&std知识点解析:本题利用结构体存储学生记录,对记录进行修改并由实参ss返回。填空1:实参ss是一个结构体指针变量,故空1处应该填STU。填空2:该学生的各科成绩都乘以一个系数a,成员score为数组,故空2处应该填score[i]。填空3:函数的调用,由于函数定义时使用的是结构体指针变量,将结构变量std作为实参传入函数,故空3处应该填&std。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是求k!(k<13),所求阶乘的值作为函数值返回。例如,若k=10,则应输出3628800。请改正程序中的错误.使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<conio.h>2#include<stdio.h>3longfun(intk)4{5/*********found*********/6ifk>17return(k*fun(k-1));8return1;9}10main()11{12intk=10;13printf("%d!=%1d\n",k,fun(k));14}标准答案:if(k>1)知识点解析:本题考查:if语句,考生需要根据题意来判断if语句是否正确。if条件语句经常考,考生需掌握。这里为语法错误,讧条件表达式应写在圆括号内。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是使数组下三角元素中的值乘以n。例如,若n的值为3,a数组中的值为注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2#include<conio.h>3#include<stdlib.h>4#defineN55voidfun(inta[][N],intn)6{78}9main()10{11inta[N][N],n,i,j;12printf("*****Thearray*****\n");13for(i=0;i<N;i++)14{15for(j=0,j<N;j++)16{17a[i][j]=rand()%10;18printf("%4d",a[i][j]);19}20printf("\n");21}22n=rand()%4;23printf("n=%4d\n",n);24fun(a,n);25printf("*****TheResult*****\n");26for(i=0;i<N;i++)27}28for(j=0;j<N;j++)29printf("%4d",a[i][j]);30printf("\n");31}32}标准答案:1voidfun(inta[][N],intn)2{3inti,j;4for(i=0;i知识点解析:首先从数组中找出要乘以n的元素。这其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标的范围是从每行中第1个元素开始,直到列数等于该行行数为止。即数组下三角元素的列下标(j)小于等于(<=)行下标(j)。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#defineN20voidfun(int*a){inti,x,n=0;x=rand()%20;/******found******/while(n<___1___){for(i=0;i<n;i++)/******found******/if(x==a[i])___2___;/******found******/if(i==___3___){a[n]=x;n++;}x=rand()%20;}}main(){intx[N]={0},i;fun(x);printf(″Theresult:\n″);for(i=0;i<N;i++){printf(″%4d″,x[i]);if((i+1)%5==0)printf(″\n″);}printf(″\n″);}标准答案:(1)N或20(2)break(3)n知识点解析:填空1:变量n用于存储数组的下标,要通过while语句对数组进行赋值,数组的容量为20,因此循环条件应为n<20填空2:通过一个for循环判断x是否与数组中已存的元素重复,若重复则跳出for循环结束。填空3:若for循环是由break语句结束的,则x与数组中的元素重复,此时i必然小于n;若for循环是因为循环变量i递增到某值,而不再满足循环条件结束的,说明x的值与数组中的元素不重复,则此时i的值等于n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:输出M×M整数方阵,然后求两条对角线上元素之和,并作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineM5/******found******/intfun(intn,intxx[][]){inti,j,sum=0;printf(″\nThe%dx%dmatrix:\n″,M,M);for(i=0;i<M;i++){for(j=0;j<M;j++)/******found******/printf(″%f″,xx[i][j]);printf(″\n″);}for(i=0;i<n;i++)sum+=xx[i][i]+xx[i][n—i—1];return(sum);}main(){intaa[M][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};printf(″\nThesumofallelementson2diagnalsis%d.″,fun(M,aa));}标准答案:(1)intfun(intn,intxx[][M])(2)printf(″%d″,xx[i][j]);知识点解析:本题考查:函数定义形式;printf格式输出函数,注意其函数形式。(1)当用数组作为函数的形参时,可以不定义数组的行数,但一定要定义数组的列数。(2)该处错误比较隐蔽,一般C语言上机考试很少涉及printf函数中的错误,此处只要明白″d″和″f″的区别就可以了。格式字符d表示以带符号的十进制形式输出整数(正整数不输出符号);格式字符f表示以小数形式输出单精度、双精度数据,隐含输出6位小数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出3~n之间所有素数的平方根之和。例如,若主函数从键盘给n输入100后,则输出为sum=148.874270。注意:n的值要大于2但不大于100。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<math.h>doublefun(intn){}main(){intn;doublesum;FILE*out;printf(″Inputn=″);scanf(″%d″,&n);sum=fun(n);printf(″\nsum=%f\n″,sum);/****************/out=fopen(″out.dat″,″w″);fprintf(out,″%f\n″,fun(180));fclose(out);/****************/}标准答案:doublefun(intn){intm,k,i;doubles=0.0;for(m=3;m<=n;m++){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)s+=sqrt(m);}returns;}知识点解析:本题考查:素数的判定方法及求平方根函数sqrt的使用。首先确定n的范围,然后确定循环条件,最后根据素数的判定方法确定条件语句。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]……中,把奇数从数组中删除,偶数的个数通过函数值返回。例如,若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后,a所指数组中的数据为:4、2、6、8,返回值为4。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0,i<n;i++)/*********found*********/if(【1】==0){/*********found*********/【2】=a[i];j++;}/*********found*********/return【3】;}main(){intb[N]={9,1,4,2,3,6,5,8,7),i,n;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");n=fun(b,N);printf("\nThenumberofeven:%d\n",n);printf("\nTheeven:\n");for(i=0;i<n;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)a[i]%2(2)a[j](3)j知识点解析:填空1:if语句条件表达式,判断数组元素是否为偶数,对2求余,结果为0,则为偶数;结果为1则为奇数。填空2:如果该数组元素是偶数,则将其值保存。填空3:最后按要求将偶数个数通过return语句返回给main函数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.e。在此程序中,函数fun的功能是:按以下递归公式求函数的值。例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>/*********found*********/fun(n){intc;/*********found*********/if(n=1)c=10;elsec=fun(n-1)+2;return(c);}main(){intn;printf("Entern:");scanf("%d¨,&n);printf("Theresult:%d\n\n",fun(n));}标准答案:(1)intfun(intn)(2)if(n==1)知识点解析:(1)定义有参函数时,形参变量要分别定义其类型,根据主函数中的调用函数可知,此处形参变量应定义为int型。(2)if条件判断表达式中,n=1是赋值表达式,表达式的值永远为真,不能形成判断条件,应将n=1改为n==1。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:使字符串中尾部的木号不多于n个,若多于n个,则删除多余的*号;若少于或等于n个,则不做任何操作,字符串中间和前面的*号不删除。例如,字符串中的内容为“*****A*BC*DEF*G*******”,若n的值为4,删除后,字符串中的内容应为“****A*BC*DEF*G****”;若n的值为7,则字符串中的内容仍为“****A*BC*DEF*G*******”。n的值在主函数中输入。编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfun(char*a,intn){}main(){chars[81];intn;printf("Enterastring:\n");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a,intn){inti=0,k=0;char*p,*t;p=t=a;/*将指针移动到字符串末尾*/while(*t)t++;t--;/*从后往前如果是‘*’则使k++,找到最后一个*所在的位置,并记录‘*’的个数*/while(*t==’*’)/*指针t指向前一个,同时标量k增加一*/{k++;t--;}/*如果最后*的个数大于允许的个数*/if(k>n)/*循环次数不大于前面的字符与最大允许*的个数之和*/{while(*p&&p<t+n+1)/*把字符保存到数组a中*/{a[i]=*p;i++;p++;}a[i]=’\0’;}}知识点解析:字符串中尾部*号不能多于n个,多余的要删除。首先需要通过while循环统计字符串尾部*号,然后通过if条件语句完成尾部木号数和n的比较,若尾部木号数多于n个,则需要把n个*号和其余字符重新保留。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数mn的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换,形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#inolude<stdio.h>#defineN9voidfun(inta[],intn){inti,t,p;/**********found**********/p=(n%2==0)?n/2:n/2+___1___;for(i=0;i<n/2;i++){t=a[i];/**********found**********/a[i]=a[p+___2___];/**********found**********/___3___=t;}}main(){intb[N]={1,2,3,4,5,6,7,8,9},i;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n”");fun(b,N);printf("\nThedataaftermoving:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)1(2)i(3)a[p+i]知识点解析:函数fun的功能是将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。第一空:“p(n%2==9)?n/2:n/2+1;”和“a[i]=a[p+___2___];”“n%2==0”判断是否是偶数,a[i]和a[p+___2___]交换,如果n是偶数,a[0]和a[n/2]交换,如果n是奇数,那么a[0]和a[n/2+1]交换,依此类推,故n为偶数时a[i]和a[i+n/2]交换,n为奇数时a[i]和a[i+n/2+1]交换。因此,如果n是奇数的话,p应该等于n/2+1,故第一空处应为“1”。第二空:由上分析可知,a[i]和a[i+p]交换,故第二空应为“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三处应该是把a[i]赋值给a[p+i],a[i]保存在t中,故第三空应为“a[p+i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include<stdio.h>voidfun(float*a,float*b,float*c){/**********found**********/float*k;if(*a<*b){k=*a;*a=*b;*b=k;}/**********found**********/if(*a>*c){k=*c,*c=*a;*a=k;}if(*b<*c)(k=*b;*b=*c;*c=k;}}main(){floata,b,c;printf("Inputabc:");scanf("%f%f%f",&a,&b,&c);printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,e);fun(&a,&b,&c);printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);}标准答案:(1)floatk;(2)if(*a<*c)知识点解析:函数对三个数进行两两比较,实现判断。(1)第一个标识下的变量k是在比较过程中,临时存放数据的变量,因此k不应是指针,所以将“float*k;”改为“floatk;”。(2)分析函数中第一个if语句,如果主函数中a<b,则对调,把大数放在a中;分析第二个if语句,如果主函数中的a>c,则进行对调,又把大数放在c中,这样的逻辑显然是混乱的。因此,第二个标识下“if(*a>*c)”应该改为“if(*a<*c)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>#defineN16typedefstruct{charrluIn[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N];inti,n;FILE*ouL;n=fun(s,h);printf("The%dhighestscore:\n",n);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s),printf("\n");out=fopen("out.dat","w");fprintf(out,"%d\n",n);for(i=0;i<n;i++)fprintf(out,"%4d\n",h[i].s);fclose(out);}标准答案:inti,max=a[0].s,n=0;for(i=1;i<N;i++)if(metx<a[i].s)max=a[i].s;/*找出最高成绩*/for(i=0;i<N;i++)if(max==a[i].s)b[n++]:a[i];/*找相等的最高成绩并存入数组b中*/returnn;/*返回符合条件的人数*/知识点解析:程序功能是把分数最高的学生数据放在h所指的数组中。(1)要把最高分数的学生数据放在数组中,首先求出最高分数,再使用一个for循环把所有的成绩进行比较,找出最高的分数来。(2)找出所有与最高分数相等的学生,并将最高分数的人数累加。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是建立一个N×N的矩阵。矩阵元素的构成规律:最外层元素的值全部为1:从外向内第2层元素的值全部为2;第3层元素的值全部为3……依此类推。例如,若N=5,生成的矩阵为请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件blank1.c中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#defineN73/*********found*********/4voidfun(int(*a)<u>【1】</u>)5{inti,j,k,m;6if(N%2==0)m=N/2;7elsem=N/2+1;8for(i=0;i<m;i++){9/*********found*********/10for(j=<u>【2】</u>;j<N-i;j++)11a[i][j]=a[N-i-1][j]=i+1;12for(k=i+1;k<N-i;k++)13/*********found*********/14a[k][i]=a[k][N-i-1]=<u>【3】</u>;15}16}17main()18{intx[N][N]={0},i,j;19fun(x);20printf("\nTheresultis:\n");21for(i=0;i<N;i++)22{for(j=0;j<N;j++)23printf("%3d",x[i][j]);24printf("\n");25}26}标准答案:(1)[N](2);(3)i+1【解题思路l填空1:本题考查了形参的确定。参数传递时将实参的值赋给形参,实参和形参是一一对应的,故空1处应该填[N]。填空2:第2个for循环中a[i][j]和a[N-i-1][j]表示第1行和最后一行数组a[N][N]的值,故空2处应该填i。填空3:第3个for循环代表的是a[N][N]中每一列的值,故空3处应该填i+1。知识点解析:暂无解析二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000(十进制数8转换成二进制表示应为1000)。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件modi1.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<conio.h>3/*********found*********/4voidfun{intm,intk);5{intaa[20],i;6for(i=0;m;i++)7{8/*********found*********/9aa[i]=m/k;10m/=k;11}12for(;i;i--)13/*********found*********/14printf("%d",aa[i]);15}16main()17{18intb,n;19print:f("\nPleaseenteranumberandabase:\n");20scanf("%d%d",&n,&b);21fun(n,b);22printf("\n");23}标准答案:(1)voidfun(intm,intk)(2)aa[i]=m%k;(3)printf("%d",aa[i-1]);知识点解析:(1)函数定义的格式错误,不应带有";"。(2)将十进制正整数转换为任意进制的数与十进制正整数转换成二进制数的方法是一样的。从整数n译出它的k进制数值,需采用除以k取余的方法,即求n除以k的余数,得到它的k进制的个位数,接着将n除以k。在n不等于0的情况下循环,能顺序求出n的k进制的各个位上的数。(3)在for(i=0;m;i++)循环结束时,i已经多加了一个1,所以这里要减去1。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写一个函数,其功能是从传人的num个字符串中找出最长的一个字符串,并通过形参指针max传回该字符串的地址(用****作为结束输入的标识)。注意:部分源程序在文件pmg1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#include<stdio.h>3#include<string.h>4#include<stdlib.h>5char*fun(char(*a)[81],intnum,char*max)6{78}9voidmain()10{11FILE*wf;12charss[10][81],*ps=NULL;13chars[3][81]={"abecd","deg","diegns"},*p=NULL;14inti=0,n;15system("CLS");16printf("输入若干个字符串:");17gets(ss[i]);18puts(ss[i]);19while(!strcmp(ss[i],"****")==0)/*用4个星号作为结束输入的标志*/20{21i++;22gets(ss[i]);23puts(ss[i]);24}25n=i;26ps=fun(ss,n,ps);27printf("\nmax=%s\n",ps);28/*********found*********/29wf=fopen("out.dat","w");30p=fun(s,3,p);31fprintf(wf,"%s",p);32fclose(wf);33/*********found*********/34}标准答案:1char*fun(char(*a)[81],intnum,char*max)2{3inti=0;4max=a[0];5for(i=0;i<num;i++)/*找出最长的一个字符串*/6if(strlen(max)<strlen(a[i]))7max=a[i];8returnmax;/*传回最长字符串的地址*/9}知识点解析:解答本题之前,首先应该明白ss是数组名,是指数组首元素的地址。max是字符指针变量,可以指向一个字符串。假定max指向数组中第1个字符串,它的长度最长。先使用循环语句遍历字符串数组,再使用条件语句判断该字符串的长度是否大于max指向的字符串的长度,如大于,则max指向该字符串。保证max指向的字符串最长,并将其作为函数值返回。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:将N×N矩阵主对角线元素的值与反向对角线对应位置上元素的值进行交换。例如,若N=3,有下列矩阵:123456789交换后为:321456987请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN4/******found******/voidfun(int____1____,intn)inti,s:/******found******/for(____2____;i++){s=t[i][i];t[i][i]=t[i][n—i—1];/******found******/t[i][n—1—i]=____3____;}}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf(″\nTheoriginaarray:\n″);for(i=0;i<N;i++)for(j=0;j<N;j++)printf(″%d″,t[i][j]);printf(″\n″);}fun(t,N);printf(″\nTheresultis:\n″);for(i=0;i<N;i++){for(j=0;j<N;j++)printf(″%d″,t[i][j]);printf(″\n″);}标准答案:(1)t[][N](2)i=0;i<N(3)s知识点解析:本题考查:函数定义;for循环语句;数组元素的引用和赋值;变量值交换算法。填空1:根据main函数中的函数调用语句,可以填写fun函数定义中的形参内容。填空2:由于是N×N矩阵,所以for语句中循环变量i的取值范围是0到N。填空3:for循环体中是变量值交换算法。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCⅡ码值升序排序后输出。例如,若输入″edcba″,则应输出″abcde″。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<string.h>#include<stdio.h>voidfun(chart[]){charc;inti,j;/******found******/for(i=strlen(t);i;i——)for(j=0;j<i;j++)/******found******/if(t[j]<t[j+1]){c=t[j];t[j]=t[j+1];t[j+1]=c;}}main(){chars[81];printf(″\nPleaseenteracharacterstring:″);gets(s);printf(″\n\nBeforesorting:\n%s″,s);fun(s);printf(″\nAftersortingdecendingly:\n%s″,s);}标准答案:(1)for(i=strlen(t)—1;i;i——)或for(i=strlen(1)—1;i>0;i——)(2)if(t[j]>t[j+1])知识点解析:(1)本题是利用选择法对数组元素进行比较排序。所谓选择法,是依次用当前取得的元素和其后面的元素进行比较,在第一个元素和其后面的元素顺次比较时,可以借助中间变量来对两个数进行交换,要保证第一个元素始终存放数组中的最大数,以后依次挑选出次大数,这样最终的数组就是有序的。strlen函数所求得的字符串长度包括字符串结束符,所以要减1。(2)这里是一个分析逻辑错误,题中要求按升序排序,所以应改为if(f[j]>t[j+1])。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:2223445666677899101010删除后,数组中的内容应该是:2345678910注意:请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN80intfun(inta[],intn){}voidmain(){FILE*wf;inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10},i,n=20;printf(″Theoriginaldata:\n″);for(i=0;i<n;i++)printf(″%3d″,a[i]);n=fun(a,n);printf(″\nThedataafterdeleted:\n″);for(i=0;i<n;i++)printf(″%3d″,a[i]);printf(″\n″);/****************/wf=fopen(″out.dat″,″w″);for(i=0;i<n;i++)fprintf(wf,″%3d″,a[i]);fclose(wf);/****************/}标准答案:intfun(inta[],intn){inti,j=1;for(i=1;i<n;i++)if(a[j—1]!=a[i])/*若该数与前一个数不相同,则要保留*/a[j++]=a[i];returnj;/*返回不相同数的个数*/}知识点解析:该程序的流程是:定义变量i和j,其中j用于控制删除后剩下的数在数组中的下标,i用于搜索原数组中的元素。j始终是新数组中最后一个元素的下一个元素的下标,所以if语句中的条件是a[j—1]!=a[i],其中a[j—1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要保留到新数组中。注意:本题中i和j的初值都要从1开始,该算法只能用于数组已排序的题目中。国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:判断形参S所指字符串是否是“回文”(Palindrome),若是,函数返回值为1;不是,函数返回值为0。“回文”是正读和反读都一样的字符串(不区分大小写字母)。例如,LEVEL和Level是“回文”,而LEVLEV不是。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>@include<string.h>#include<ctype.h>intfun(char*s){char*lp,*rp;/**********found**********/lp___1___;rp=s+strlen(s)-1;while((toupper(*lp)==toupper(*rp))&&(ip<rp)){/**********found**********/lp++;rp___2___;}/**********found*******

温馨提示

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

评论

0/150

提交评论