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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷13(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是按条件删除一个字符串指定字符一半的数目,具体要求如下:如果该字符串所包含的指定字符的个数是奇数,则不予删除,如果其数目是偶数,则删除原串后半部分的指定字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,c中存放指定的字符。例如:当a输入“abababa”,c=‘a’时,b的输出为“ababb”;如果a的输入为“ababa”,则b的输出为“ababa”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineLEN80voidfun(chara[],charb[],charC){inti=0,j=0;intn=0;intm=0;while(a[i]!=‘\0’){if(a[i]==c)n++;i++;}【】;if(n%2){while(a[j]!=’\0’){b[j]=a[j];j++;}b[j]=’\0’;}elsewhile(a[i]!=’\0’){b[j++]=a[i];if(a[i]==c)m+十;if((m>n/2)&&(a[i]==c))【】;i++;}【】;}}main(){chara[LEN],b[LEN];charc;clrscr();printf("Enterthestring:\n");gets(a);printf("Enterthecharacterofthestringdeleted:");scanf("%c",&c);fun(a,b,c);printf("ThenewstringiS:%s\n",b);}标准答案:i=0j--b[j]=’\0’知识点解析:第一空:执行完while循环后,变量i的值为数组a[]中元素的个数,而后面的while循环中通过变量i访问数组a[]的各元素,所以,在这里需要对变量i清零。第二空:当找到原字符串中后半部分的指定字符时,这个字符不应该存入数组b中,所以要将数组b的下标减l,让下一个非指定宁符去覆盖它。第三空:按条件删除后的字符串存于数组b后,还要在数组b的最后加上字符串结束标记符’\0’。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:对N名学生的学习成绩,按从低到高的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<string.h>#include<stdio.h>#include<alloc.h>#defineN10typedefstructSS{charnum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/*************found*************/*t=calloc(m,sizeof(STU));for(i=0;i<N;i++)b[i]=a[i];for(k=0;k<m;k++){/*************found*************/for(i=j=0;i<N;j++)if(b[i].s<b[j],s)j=i;/*************found*************/t[k].s=b[j].s;b[j].s=100;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i<N;i++)fprintf(pf,"NO=%SMark=%d\n",a[i].num,a[i].S);fprintf(pf,"\n\n");}main(){STUa[N]={{“A01”,77},{“A02”,85},{“A03”,96},{“A04”,65},{“A05”,75},{“A06”,96},{“A07”,76},{“A08”,63},{“A09”,69},{“A10”,78}};STU*porder;inti,m;clrscr();printf(“*****THERESULT*****\n”);outresult(a,stdout);printf(“\nGivethenumberofthestudentswhohavelowerscore:”);scanf(“%d”,&m);while(m>10){printf(“\nGivethenumberofthestudentswhohavelowerscore:”);scanf(“%d”,&m);}porder=fun(a,m);printf(“*****THERESULT*****\n”);printf(“Thelow:\n”);for(i=0;i<m;i++)printf(“%s%d\n”,porder[i].num,porder[i].s);free(porder);}标准答案:(1)错误:*t=calloc(m,sizeof(STU));正确:t=calloc(m,sizeof(STU));(2)错误:for(i=j=0;i<N;j++)正确:for(i=j=0;i<N;i++)(3)错误:t[k].s=b[j].s;正确:t[k]=b[j];知识点解析:错误1:calloc也用于分配内存空间。调用形式:(类型说明符*)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址,而本题中t定义为指针类型。(类型说明符*)用于强制类型转换。calloc函数与malloc函数的区别仅在于一次可以分配n块区域。例如:ps=(stmetstu*)calloc(2,sizeof(stmctstu));其中的sizeof(stmctstu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配两块连续区域,强制转换为sm类型,并把其首地址赋予指针变量ps。错误2:此循环中,变量i递增。错误3:本题旨在考查对结构体概念的掌握和灵活应用程度。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),其功能是:将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为siegAHdied,则在t所指数组中的内容应是seAde。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*S,chart[]){}main(){chars[100],t[100];clrscr();printf("\nPleaseenterstrings:");scanf("%S",S);fun(S,t);printf("\nTheresultis:%s\n",t);}标准答案:voidfun(char*S,chart[]){inti,j=0,k=strlen(s);/*k为字符串的长度*/for(i=0;i<k;i=i+2)/*将s所指字符串中下标为偶数的字符存入t所指字符串中*/t[j++]=s[i];t[j]=’\0’;/*在字符串最后加上结束标志*/}知识点解析:本题使用了一种i永远是偶数的循环方法,即for(i=0;i<k;i=i+2),因为开始时i的值为0,当i+2循环时,此值永远是偶数。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、从键盘输入一组无符号整数并保存在数组xx[M]中,以整数0结束输入,即第M+1个数是0(共M个数据),数与数之间以Enter键分隔,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数proc()。请补充函数proc(),该函数的功能是:从数组xx中找出十位和百位的数字之和大于5的所有无符号整数,结果保存在数组YY中,其个数由函数proc()返回。例如,当xx[8]={36373694213573345467}时,bb[4]={637369421733467)。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。试题程序:#include#defineM1000intproc(intxx[],intbb[],intnum){inti,n=0;intg,s;for(i=0;i5)【2】;}return【3】;}voidmain(){intxx[M];intyy[M];intnum=0,n=0,i=0;printf("Inputnumber:\n");do{scanf("%u",&xx[num]);}while(xx[num++]!=0);n=proc(xx,yy,num);printf("\nyy=");for(i=0;i标准答案:【1】xx[i]/100【2】bb[n++]=xx[i]【3】n知识点解析:从数组xx中找出十位和百位的数字之和大于5的所有无符号整数,首先要得到每一个整数十位和百位的数字。要得到一个整数十位和百位的数字,可以通过取余采实现,因此,【1】处填“xx[i]/100”;每得到一个符合要求的整数,放在数组bb中,因此,【2】处填“bb[n++]=xx[i]”;变量n中存放的是符合要求的个数,最后返回各主函数,因此【3】处填“n"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如:若k=10,则应输出:3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includelongfun(intk){/************found************/ifk>0return(k*fun(k-1));/************found************/elseif(k=0)return1L;}main(){intk=10;printf("%d!=%ld\n",k,fun(k));}标准答案:if(k>0)elseif(k==0)知识点解析:(1)第一个标识下的if语句的条件表达式,根据C语言的基本语法条件,表达式应该用括号括起来,所以将“ifk>0”改为“if(k>0)”。(2)第二个标识下“elseif(k=0)”判断k是否等于0,在C语言中,“==”表示等于,而“=”表示赋值,故第二个标识处应为“elseif(k==0)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inLm,intk,intxx[]){}Nain(){intIn,n,zz[1000];voidNONO();printf("\nPleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;m标准答案:intr=0,temp,P,sign=1;for(temp=m+1;temp=temp)知识点解析:进入fun函数,根据前面的分析:首先,定义、初始化变量sign,作为素数的标志;定义r,初始化为存储素数数组的起始位。然后,每判断一次temp中的值是否为素数后,使temp的值增1,再次对temp中新的值进行判断其是否为素数,不断循环此过程,直到m的值等于指定的个数,即函数中的k个数。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在形参s所指字符串中寻找与参数c相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则函数不做任何处理。例如,s所指字符串为:baacda,c中的字符为:a,执行后s所指字符串为:baaaacdaa。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s,charc){inti,j,n;/**********found**********/for(i=0;s[i]!=【1】;i++)if(s[i]==c){/**********found**********/n=【2】;while(s[i+1+n]!=’\0’)n++;for(j=i+n+1;j>i;j--)s[j+1]=s[j];/**********found**********/s[j+1]=【3】;i=i+1;}}main(){chars[80]="baacda",c;printf("\nThestring:%s\n",s);printf("\nInputacharacter:");scanf("%c",&c);fun(s,c);printf("\nTheresultis:%s\n",s);}标准答案:00c知识点解析:第一空:“for(i=0;s[i]!=___1___;i++)”循环从第一个字符到最后一个字符逐个搜索,字符串以“\0”结束,因此循环的结束条件是s[i]!=’\0’,故第一空处应为“0”或’\0’。第二空:显然“while(s[i+1+n]!=’\0’)n++;”n是记录s[i+1]后面的字符数量,在n计数之前,需要对n赋初值,即第二空处应为“0”。第三空:在“for(j=i+n+1;j>i;j--)s[j+1]=s[j];”循环结束时j=i,即s[j+1]是s[i]之后的字符,在此位置插入字符c,所以第三空是“c”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includeintfun(int*x,inty){intt;/**************found**************/t=*x;*x=y;/**************found**************/return(t);}main(){inta=3,b=8;printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}标准答案:t=*x;*x=y;return(t);或returnt;知识点解析:(1)根据fun中x变量的定义,x为指针型变量,所以第一个错误标识下的“t=x;x=y;”改为“t=*x;*x=y;”。(2)交换之后t中存放原来x的值,x存放原来y的值,这里应该是返回原来x的值,所以第二个标识下的“return(y);”应该改为“return(t);”或者“returnt;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个:若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。例如,字符串中的内容为:****A*BC*DEF*G********,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为7,则字符串中的内容仍为:****A*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(char*a,intn){}main(){chars[81];intn;voidNONO();printf("Enterastring:\n");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf("Thestringafterdeleted:\n");puts(s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,n;chars[81];in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);fscanf(in,"%d",&n);fun(s,n);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}标准答案:{inti=0,j=0;char*p,*t;p=t=a;while(*t)//让指针t指向串尾t++;t--;//t指向串中的最后一个字符while(*t==’*’)//当t指针当前指向的字符是"*"号时{j++;//对"*"号计数的累加器加1t--;//指向前一个字符}t++;//跳出"*"号统计后,指针t继续指向字符串的下一个字符if(j>n)//对统计的"*"号数目大于给定的"*"号总数n{while(*p&&p知识点解析:(1)首先确定字符串的尾,然后判断“*”号字符,并对字符串中的字符进行判断,如果字符是符号“*”则对“*”号进行统计。(2)根据统计的“*”号数目结合题目中对“*”号个数的要求,判断是执行对“*”号的截取操作,还是什么都不用做。(3)所有字符处理完后,记得在新串s的末尾加上结束符“’\0’”。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将a和b所指的两个字符串转换成面值相同的整数,并进行相加作为函数值返回,规定字符串中只含9个以下数字字符。例如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#include#defineN9longctod(char*s){longd=0;while(*s)if(isdigit(*s)){/***************found****************/d=d*10+*s-1;/***************found****************/【2】;}returnd;}longfun(char*a,char*b){/***************found****************/return【3】;}main(){chars1[N],s2[N];do{printf("Inputstrings1:");gets(s1);}while(strlen(s1)>N);do{printf("Inputstrings2:");gets(s2);}while(strlen(82)>N);printf("Theresultis:%id\n",fun(s1,S2));}标准答案:(1)’0’(2)s++(3)ctod(a)+ctod(b)知识点解析:第一空:举例说明ctod内循环的作用,例如将字符串“123"转换为数字时:第一次进入循环时,*s等于字符“1",d应等于0*10+1,第一空处是将字符变成数字,字符“1"变成数字l可由字符“1"减去字符“0"得到,故第二空处应为“’0’"。;第二空:s是数组指针,在循环中s不断往后移动商至到达数组结束,故第二空处应为“s++"。第三空:由审题分析可知,在fun函数内两次调用ctod函数完成字符串到整数的变换,然后求和,故第三空处为“ctod(a)+ctod(b)"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:例如,a为2时,平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include#include/******************found*******************/doublefun(doublea,dounlex0){doublex1,y;xl=(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);printff"Thesquarerootof%lfis%lf\n",x,fun(x,1.0));}标准答案:(1)doublefun(doublea,doublex0)(2)if(fabs(x1—x0)>0.00001)知识点解析:(1)主函数中“fim(x,1.0)",x是double型变量,1.0是浮点数,可知fun有两个double型参数,而第一标识下“dounle"不是C语言关键字,所以应将“doublefun(doublea.dounlex0)"改为“doublefun(doublea,doublex0)"。(2)第二个标识下的if语句是判断进行递归运算的条件,第二标识下变量x0没有定义,根据题意,这里是判断x1和x0的差值的绝对值是否比0.00001大,所以第二个标识下“if(fabs(x1-xo)>0.00001)"改为“if(fabs(x1—x0)>0.00001)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:A*BC*DEF*G。注意:部分源程序在文件FROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(char*a,intn,inth,inte){}main(){chars[81],*t,*f;intm=0,tn=0,fn=0;voidNONO();printf(”Enterastring:\n”);gets(s);t=f=s;while(*t)(t++;m++;)t--;while(*t==’*’){t--;tn++;)while(*f==’*’){f++;fn++;)fun(s,m,fn,tn);printf(”Thestringafterdeleted:\n”);puts(s);NONO();}voidNONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81],*t,*f;intm=0,tn=0,fn=0;in=fopen(”in.dat”,”r”);out=fopen(”out.dat”,”W”);for(i=0;i<10;i++){fscanf(in,”%s”,s);t=f=s;m=0;tn=0;fn=0;while(*t){t++;m++;)t--;while(*t==’*’){t--;tn++;}while(*f==’*’){f++;fn++;}fun(s,m,fn,tn);fprintf(out,”%s\n”,s);}fclose(in);fclose(out);}标准答案:char*p=a;intj=0,len=0;while(*p){p++;len++;}while(j知识点解析:(1)主函数中,首先统计字符串长度、前导和尾部"*"号的数量,把这些参数传给函数fun。(2)根据字符串长度,前导以及尾部"*"号统计的数目,确定执行字符移动的起始位置。(3)在循环中依次执行字符的移动。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:求n!例如7!=5040。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>main(){inti,n;longf=1;clrscr();printf("Inputn:");scanf("%d",【】);for(【】;i<=n;i++)【】;printf("%d!=%1d\n",n,f);}标准答案:&ni=1或i=2f*=i知识点解析:第一空:本题考查对调用标准输入函数scanf()的掌握,地址列表中都是地址值,所以在变量名前要加上取址运算符&。第三空:n的阶乘是将1、2、3……n累积相乘,所以for循环中i从1开始取数。但因为1乘以任何数都等于这个数本身,所以地可以从2开始取数。第三空:掌握了阶乘的算法,这空就非常简单了。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:4123341223411234请改正程序中的错误,使它能得出正确的结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序;#include<stdio.h>#defineM4/*******************************/voidfun(inta){inti,j,k,m;printf("Enter4number:");for(i=0;i<M;i++)scanf("%d",&a[i]);printf("\n\nTheresult:\n\n");for(i=M;i>0;i--){k=a[M-1];for(j=M-1;j>0;j--)/**********************************/a[j]=a[j+1];a[0]=k;for(m=0;m<M;m++)printf("%d",a[m]);printf("\n");}}main(){inta[M];fun(a);printf("\n\n");}标准答案:(1)错误:voidfun(inta)正确:intfim(int*a(2)错误:a[j]=a[j+1];正确:a[j]=a[j-1];知识点解析:其实,该题中题目信息已经告诉我们按“如下规律”,这就需要去认真分析矩阵的“规律”了,在第1列中,数列以4开始递减,直至1,在该数列中,行和列都是递减循环排列,所以题目在循环的时候有循环条件for(i=M;i>0;i--)和for(j=M-1;j>0;j--),当然每次循环结束后在列中的赋值语句应该是a[j]=a[j-1];。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序;#include<stdio.h>#include<conio.h>voidfun(char*a){}main(){chars[81];printf("Enterastring:\n");gets(s);fun(s);printf("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a){char*p=a;while(*P==‘+’)p++;/*指针p指向字符串第一个字母*/for(;*p!=‘\0’;p++,a++)*a=*p;/*从第—个字母开始,其后的字符都放入指针a所指的字符串中*/*a=‘\0’;/*在字符串最后加上结束标记符*/}知识点解析:在前面的改错题和编程题中,相关试题已经出现好多次了,我们在此提供另一种解答方法。#include<string.h>voidfun(char*a){char*p=a;while(*p==‘*’)p++;strcpy(a,p);}国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)"r"(2)fs(3)ft知识点解析:fun函数要求实现的功能是将指定源文件中的内容复制到指定的目标文件中,即以只读方式打开源文件,以只写方式打开目标文件,然后将源文件内的内容复制到目标文件中。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将十进制正整数m转换成k(2≤k≤9)进制数,并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。请改正fun函数中的错误,使它能得出正确的结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构!#include#includevoidfun(intm,intk){intaa[20],i;for(i=0;m;i++){/**************found****************/a6ta[i]=m/k;m/=k,}for(;i;i--)/**************found****************/printf("%d",aa[i]);}main(){intb;n;printf("\nPleaseenteranumberandabase:\n");scanf("%d%dtt,&n,&b);fun(n,b),printf("\n");}标准答案:(1)aa[i]=m%k;(2)printf("%d",aa[i一1]);知识点解析:(1)第二个标识下的“aa[i]m/k;"是进制的转换,应该是取余,所以第二个标识下“aa[i]=m/k;"应该改为--“aa[i]=m%k;"。(2)数制转换处理过程中所得的结果,和实际要输出的结果顺序是相反的,所以必须对存放余数的数组反向输出。原题中“printf("%d,aa[i]);"的下标有误。因为下标i的起始值为0,故反向输出时应该从i-1开始,因此改为“printf("%dt",aa[i-1]);"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}main(){STRECs[N]={{”GA05”,85},{”G03”,76},{”GA02”,69},{”GA04”,85},{”GA01”,91},{”GA07”,72},{”GA08”,64},{”GA06”,87}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf(”The%dstudentdatawhichislowerthan%7.3f:\n”,n,ave);for(i=0;ih[j].s){t=h[i];h[i]=h[j];h[j]=t;}for(i=0;i标准答案:{inti;doubleave=0.0;*n=0;for(i=0;i知识点解析:(1)首先,通过循环求总分,然后求得平均分。(2)在循环中,进行平均分与每个成绩进行比较,并将满足条件的数据存入数组及对其进行累加。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在行线上填入所编写的若干表达式或语句。[试题源程序]#include<stdio.h>#include<string.h>#include<stdlib.h>voidWriteText(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);}}标准答案:*fwstrstr知识点解析:本题要求是把键盘上输入的内容写到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。填空1:要求填写文件流的自变量名,在这个函数中,已有的语句fputs("\n",fw);分析可知:由于文件流变量fw在函数体没有定义过,所以本处应填*fw或fw[]。填空2:通过while循环语句,把键盘上输入的内容,要写入到指定的文件中,键盘上输入的内容已存入字符串str变量中,因此,本处应填写str。填空3:要把已存入文件中的内容,再从文件中读出且已存入字符串变量str中,最后在屏幕显示出来,因此,此处应填写str。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。[试题源程序]#include<stdio.h>/************found************/voidfun(longs,longt){longs1=10;s/=10;*t=s%10;/************found************/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}mein(){longs,t;printf("\nPleaseenters:");scanf("%1d",&s);fun(s,&t);printf("Theresultis:%1d\n",t);}标准答案:(1)错误:voidfun(longs,longt)正确:voidfun(longs,long*t)(2)错误:while(s<0)正确:while(s>0)知识点解析:错误1:在函数fun体中,t是一个指针型变量,由C的基础知识我们可以知道,定义形参时也应定义指针。错误2:由题目可以知道,此处条件应该s>0,所以这里应改为:while(s>0)。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。注意:要求n的值大于2但不大于100。部分源程序给出如下。清勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。[试题源程序]#include<math.h>#include<stdio.h>doublefun(intn){}main(){intn;doublesum;printf("\n\nInputn:");scanf("%d",&n);sum=fun(n);printf("\n\nsum=%f\n\n",sum);}标准答案:doublefun(intn){inti,j=0;doubles=0;for(i=3;i<=n;i++){for(j=2;j<i;j++)if(i%j==0)break;if(j==i)s=s+sqrt(i);}returns;}知识点解析:暂无解析国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main()函数,该函数的功能是求出1!+2!+3!+4!…+N!的和。例如,1!+2!+3!+4!+…+9!=409113。仅在横线上填写所需要的若干表达式或语句,请勿改动函数中的其他任何内容。注意:部分源程序给出如下。试题程序:#includevoidmain(){inti,n;longsum=0,temp=1;printf("\nInputn:\n");scanf("%d",【1】);for(i=1;i<=n;i++){temp=【2】;sum=【3】;}printf(“1!+…十%d!=%ld\n",n,sum);}标准答案:【1】&n【2】temp*i【3】sum+temp知识点解析:该题中函数功能是求得题干中给出的数列值。解题过程,首先计算数列中每一项的值,然后对数列中有限项累加求和。第一空:根据提示语句“printf(”\nlnputm:\n”);”,知道第一空是获得由键盘输入的n,所以根据C语言中的输入语句,第一空填“&n”。第二空:根据“temp=1”语句中temp的初始化,知道temp用来存放阶乘,也就是数列的每一项,所以第二空填“temp*i”。第三空:同理可知sum用来存放数列的和,所以第三空填“sum+temp”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#incluclelongfun(intx,inty,long*p){inti;longt=1;/***************found***************/for(i=1;i标准答案:(1)for(i=1;i<=v;i++)(2)t=t%1000;知识点解析:(1)第一个标识下的“for(i=l;i三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,intl,inth){}main(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N],tt;FILE*out;inti,j,n,low,heigh,t;printf("Enter2integernumberlow&heigh:");scanf("%d%d",&low,&heigh);if(heigh<low){t=heigh;heigh=low;low=t;}n=fun(s,h,low,heigh);printf("Thestudent’sdatabetween%d--%d:\n",low,heigh);for(i=0;ih[j].s){tt=h[i];h[i]=h[j];h[j]=tt;}for(i=0;i标准答案:{inti,j=0;for(i=0;i=l&&a[i].s<=h)b[j++]=a[i];returnj;}知识点解析:(1)在for循环过程中,利用if条件表达式“if(a[i].s>=l&&a[i].s<=h)”逐个判断学生结构体中的成绩元素是否满足题目中的范围。(2)将符合条件的结果存入指定数组,并对统计变量进行加1操作。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)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所指数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.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=

温馨提示

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

评论

0/150

提交评论