版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(操作题)模拟试卷76(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)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**********/return(【3】);}main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing"};intn,k,i;printf("\nTheoriginalstringsare:\n");for(i=0;i标准答案:(1)M(2)<(3)k知识点解析:第一空:循环的目的是在M个字符串中寻找长度最短的字符串,因此,循环变量i从0变化到“M-1”,故第一空处应为“M”。第二空:“*n”记录最小字符串的长度,由审题分析可知,字符串ss[i]长度比min小,则交换最小长度值和下标位置,故第二空处应为“<”。第三空:变量k记录了最小字符串的下标位置,函数的返回值是最短的字符串所在的行下标,故第三空处应为“k”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includechar*fun(chartt[]){inti;for(i=0;tt[i];i++)/**********found***********/if((’a’<=tt[i])||(tt[i]<=’z’))/**********found***********/tt[i]+=32;return(tt);}main(){chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));}标准答案:(1)if((’a’<=tt[i])&&(tt[i]<=’z’))(2)tt[i]一=32;知识点解析:(1)第一个错误标识下的if判断语句中的逻辑有误,应该是与(&&)的关系,不是或(‖)的关系,所以if判断语句改为“if((’a’<=tt[i])&&(tt[i]<=’z’))”。(2)第二个标识下小写字母转换为大写字母的转换算法有误,小写转换为大写应该是减去32,而不是加上32,所以“tt[i]+=32;”改为“tt[i]-=32;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入:17,则应输出:46891012141516。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(intm,int*k,intxx[]){}main(){intm,n,zz[100];voidNONO();printf("\nPleaseenteranintegernumberbetween10and100:");scanf("%d",&n);fun(n,&m,zz);printf("\n\nThereare%dnon-primenumberslessthan%d:",m,n);for(n=0;n<m;n++)printf("\n%4d",zz[n]);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intm,n,zz[100];FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");fscanf(rf,"%d",&n);fun(n,&m,zz);fprintf(wf,"%d\n%d\n"/m,n);for(n=0;n<m;n++)fprintf(wf,"%d\n",zz[n]);fclose(rf);fclose(wf);}标准答案:inti,j;intt=0;//初始化数组个数for(i=2;i知识点解析:(1)根据求素数的方法判断数i是否为素数。(2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组xx中,并且把数组的下标加1,为下一个不是素数的数放在数组中做准备。(3)返回个数,把xx数组中已经写入的数的个数返回即可,即把数组xx的最大下标加1返回即可。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:",tt.num,tt.name);for(i=0;i<3;i++)printf("%5.1f",tt.score[i]);printf("\n");}/*********found*********/voidmodify(【1】*ss,floata){inti;for(i=0;i<3;i++)/*********found*********/ss->*【2】=a;}main(){STUstd={l,"Zhanghua",76.5,78.0,82.0};floata;printf("\nTheoriginalnumbetandnameandscores:\n");show(std);printf("\nInputanumber:");scarlf("%f",&a);/*********found*********/modify(【3】,a);printf("\nAresultofmodifying:\n");show(std);}标准答案:(1)STU(2)score[i](3)&std知识点解析:本题是利用结构体存储学生记录,对记录进行修改并由实参ss返回。填空1:实参ss是一个结构型指针变量,所以应填STU。填空2:该学生的各科成绩都乘以一个系数a,所以应填score[i]。填空3:函数的调用,由于函数定义时使用的指针结构型变量,所以应填&std。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指的数组的尾部。例如,当a所指字符串中的内容为"abcdefg",b所指字符串中的内容为"1234"时,c所指数组中的内容应为"a4b3c2dfg";而当a所指字符串中的内容为"1234",b所指字符串的内容为"abcdefg"时,c所指数组中的内容应该为"1g2t3e4dcba"。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>voidfun(char*a,char*b,char*c){inti,j;charch;i=0;j=strlen(b)-1;/*********found*********/while(i>j){ch=b[i];b[i]=b[j];b[j]=ch;i++;j--;}while(*a||*b){/*********found*********/If(*a){*c=*a;c++;a++;}if(*b){*c=*b;c++;b++;}}*c=0;}main(){chars1[100],s2[100],t[200];printf("\nEnters1string:");scanf("%s",s1);printf("\nEnters2string:");scanf("%s",s2);fun(s1,s2,t);printf("\nTheresultis:%s\n",t);}标准答案:(1)while(i<j)(2)if(*a)知识点解析:(1)由i和j定义的初始值可知,此处应该判断i是否小于j,所以应改为while(i<j)。(2)此处将if错写成If,这个错误比较简单,但往往不容易发现。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,函数fun的功能是:将a、b中的两个正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12。调用该函数后,c=5241。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfun(inta,intb,long*c){}main()(inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%1d\n",a,b,c);}fclose(rf);fclose(wf);}标准答案:voidfun(inta,intb,long*c){*c=(a%10)*1000+(b%10)*100+(a/10)*10+(b/10),}知识点解析:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取a十位数字的方法a/10,取a个位数字的方法a%10。同理可取出整数b的个位数和十位数。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#includevoidfun(char*s,inta,doublef){/**********found**********/___1___fp;charstr[100],str1[100],str2[100];inta1;doublef1;fp=fopen("filel.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);/**********found**********/___2___;fP=fopen("file1.txt","r");/**********found**********/fscanf(___3___,"%s%s%s",str,str1,str2);fclose(fp);a1=atoi(str1);f1=atof(str2);printf("\nTheresult:\n\n%s%d%f\n",str,a1,f1);}main(){ohata[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}标准答案:(1)FILE*(2)fclose(fp)(3)fp知识点解析:第一空:“fp=fopen("file1.txt","w");”可知fp是文件型指针,故第一空处fp的定义应为“FILE*”。第二空:第二处的后面一句是“fp=fopen("file1.txt","r");”再次打开file1.txt,因此在第二次打开file1.txt之前必须将文件关闭,故第二处是关闭文件,即“fclose(fp)”。第三空:fscanf的调用形式是:fscanf(fp,格式字符串,输入列表),因此第三空处应为“fp”,从文件中读出字符串、整数、浮点数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#include#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun(STUa[],intm){STUb[N],*t;inti,j,k;/**********found**********/t=(STU*)calloc(sizeof(STU),m)for(i=0;ib[j].S)j=i;/**********found**********/t(k)=b(j);b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i10){printf("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);}porder=fun(a,m);printf("*****THERESULT*****\n");printf("Thetop:\n");for(i=0;i标准答案:(1)t=(STU*)calloc(sizeof(STU),m);(2)t[k]=b[j];知识点解析:(1)题干中要求结构体STU类型的m个学生放在动态分配的连续存储区中,“t=(STU*)calloe(sizeof(STU),m)”语句没有使用分号“;”结束,因此需要在语句结尾处加分号。calloc函数是C语言的动态分配函数,分配存储空间。(2)第二个标识下是将b数组拷贝到t数组,在C语言中,数组元素的访问使用中括号“[]”而不是元括弧“()”,因此第二标识下应改成“t[k]=b[j];”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,一维数组中的数据是:2223445666677899101010。删除后,数组中的内容应该是:2345678910。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#inclucte#defineN80intfun(inta[],intn){}main(){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;voidNONO();printf("Theoriginaldata:\n");for(i=0;i标准答案:inti,t,j=0,*p=a,t=p[0];//设置临时变量t初值指向第一数组值for(i=0;i<=n;i++)if(t==p[i])//当临时变量与数组中的某个值相同则跳出,比较下一个元素;else//如果临时变量与数组中值不同,则对临时变量重新赋值{a[j]=t;t=p[i];j++,}if(i>=n)a[j]=t;returnj;知识点解析:(1)首先,设置一个临时变量,初值设置为一维数组的第一个元素。(2)然后,依次将数组的元素与临时变量比较,如果相同,则继续取数组下一个元素与临时变量比较;如果不同,则将临时变量的值赋值到数组的第一个元素,同时将此与临时变量不同的数组元素赋值给临时变量。(3)循环执行,直到所有的数据处理完毕。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:求ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。ss所指字符串数组中共有M个字符串,且串长小于N。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#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(1en【2】*n){*n=len;k=i;}}/*********found*********/return(【3】);}main()(charss[M][N]={"shanghai","guangzhou","beijing","tianjing","chongqing");intn,k,i;printf("\nTheoriginalstringsare:\n"),for(i=0;i<M;i++)puts(ss[i]);k=fun(ss,&n);printf("\nThelengthofshorteststringis:%d\n",n);printf(”\nTheshorteststringis:%s\n",ss[k]);}标准答案:(1)M(2)<(3)k知识点解析:本题考查:for循环语句的循环条件;if语句条件表达式;return语句完成函数值的返回。填空1:题目指出ss所指字符串数组中共有M个字符串,所以for循环语句的循环条件是i<M。填空2:要求求长度最短的字符串,*n中存放的是已知字符串中长度最短的字符串的长度,将当前字符串长度与*n比较,若小于*n,则将该长度值赋给*n,因此if语句的条件表达式为len<*n。填空3:将最短字符串的行下标作为函数值返回,变量k存储行下标的值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun的功能是:将tt所指字符串中的小写字母全部改为对应的大写字母,其他字符不变。例如,若输入“Ab,cD”,则输出“AB,CD”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<string.h>char*fun(chartt[]){inti;for(i=0;tt[i];i++)/*********found*********/if((tt[i]>=’a’)||(tt[i]<=’z’))/*********found*********/tt[i]+=32;return(tt);}main(){chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));}标准答案:(1)if((tt[i]>=’a’)&&(tt[i]<=’z’))(2)tt[i]一=32;知识点解析:本题考查:if语句条件表达式;小写字母转换为大写字母的方法。(1)分析本题可知,要判断字符是否为小写字母,即判断其是否在‘a’~‘z’之间,所以这里需要进行连续的比较,用&&。(2)从ASCII码表中可以看出,小写字母的ASCII码值比对应大写字母的ASCII值大32。将字符串中的小写字母改为大写字母的方法是:从字符串第一个字符开始,根据ASCII码值判断该字母是不是小写字母,若是,则ASCII码值减32。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k返回。例如,若输入17,则应输出:46891012141516。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>voidfun(intm,int*k,intXX[]){}voidmain(){intm,n,zz[100];system("CLS");printf("\nPleaseenteranintegernumberbetween10and100:");Scanf("%d",&n);fun(n,&m,zz);printf("\n\nThereare%dnon—primenumberslessthan%d:",m,n);for(n=0;n<m;n++)printf("\n%4d",zz[n]);}标准答案:Voidfun(intm,int:lck,intxx[]){inti,j,n=0;for(i=4;i<m;i++)/*找出大于1小于整数m的非素数*/(for(j=2;j<i;j++)if(i%j==0)break,if(j<i)xx[n++]=i;}*k=n;/*返回非素数的个数*/}知识点解析:本题考查:如何判断非素数;循环判断结构;数组的引用。题目要求将1~m之间的非素数存入数组中,应使用循环判断结构。循环语句用来遍历1~m之间的每个数,判断语句用来判断该数是否为素数,若不是素数,则将其存入数组中。本题是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。判定一个数是否为素数,即判断该数是否除了能被1和它本身整除外,不能被任何数整除。代码实现如下:for(j=2;j<i;j++)if(i%j==0)/*如果余数为0,证明i不是素数*/此语句需要熟记,很多判断素数的题目可通过此法解决。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#includeintfun(intn){inta[10000],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i标准答案:(1)a[i](2)a[i](3)0知识点解析:fun函数的功能是用筛选法可得到2~n(n<10000)之间的所有素数。第一空:循环“for(j=a[i]*2;j<=n;j+=【1】)”中,循环变量j的初始值从a[i]的2倍开始,下一次进入循环j就是a[i]的3倍,第一空处是补充j的变化情况,而j每次都增加一个a[i],即第一空处应为“a[i]”。第二空:根据题意第二空处是从数表中找下一个非0数,即在循环中比较a[i]是否为0,如果为0的话,i++指向后一个数表元素,故第二空处应为“a[i]”。第三空:根据语句“{count++;printf(count%15?"%5d":"\n%5d",a[i]);}”可知在满足条件之后计数变量count自增,并且输出a[i],可知a[i]是一个素数,由审题分析可知,经过筛选之后数表中非0的元素就是素数,故第三空处应为“0”,即a[i]不为0的话就是素数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(inta,int*b,int*c){inti,j,d,y;for(i=3;i<=a/2;i=i+2){/***********found***********/Y=l;for(j=2;j<=sqrt((double)i);j++)if(i%j==0)y=0;if(y==D{/***********found***********/d==a-i;for(j=2;j<=sqrt((double)d);j++)if(d%j==0)y=0;if(y==1){*b=i;*c=d;}}}}main(){inta,b,c;do{printf("\nInputa:");scanf("%d",&a);}while(a%2);fun(a,&b,&c);printf("\n\n%d=%d+%d\n",a,b,c);}标准答案:(1)y=1;(2)d=a—i;知识点解析:函数的功能是为一个偶数查找两个素数,这两个素数之和等于该偶数。(1)第一标识下“Y=1;”变量Y没有定义,编译时会提示出错。题中用标志y区别i是否是素数,y=1是素数,y=0不是素数。第一个标识下当i是素数时,y最后的值就是进入循环结构前的初始化值0,标识该值不是素数,所以“Y=1;”应该改为“y=1;”。(2)在语句“if(y==1)”中,应该是判断(a-i)是否是素数,即d应赋值“a-i”而不是“d=a-i;”,所以第二个标识下“d==a-i;”改为“d=a-i;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includedoublefun(intn){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);s=fun(n);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){intn;doubles;printf("\nInputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n",s);NONO();}标准答案:inti;doublesum=0.0;for(i=1;i<=n;i++)if(i%5==0‖i%9==0)/*被5或9整除*/sum+=1.0/i;returnsum;知识点解析:程序功能是计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。(1)首先,通过循环,判断小于等于n的每一个整数是否符合题干中的要求。其中的判断条件能否被5或者被9整除为:i%5==0‖i%9=0。(2)然后求得符合(1)要求的数的倒数的累加和。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:有NxN矩阵,根据给定的m(m<=N)值,将每行元素中的值均右移m个位置,左边置为0。例如,N=3,m=2,有下列矩阵123456789程序执行结果为001004007请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*t)[N],intm){inti,j;/**********found**********/for(i=0;i=0;j==)/**********found**********/t[i][j+___2___]=t[i][j];/**********found**********/for(j=0;j<___3___;j++)t[i][j]=0;}}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j,m;printf("\nTheoriginalarray:\n");for(i=0;i标准答案:(1)i++(2)m(3)m知识点解析:函数fun的功能是将每行元素中的值均右移m个位置。第一空:题目要求对每行元素中的值均右移m个位置,故第一空处循环变量每次增1,共循环N次,完成对N行的移位操作,因此第一空处应为“i++”。第二空:循环“for([j=N-1-m;j>=0;j--)”是进行行元素中的值右移m个位置,即把t[i][j]元素放置在t[i][j+m]上,因此第二空应为“m”。第三空:循环“for(j=0;j<__3__;j++)”是对空出来的位置补0,每行元素的前m位数据已经移动到后面,每行空处m个元素,因此第三空为“m”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:计算并输出high以内最大的10个素数之和。high的值由主函数传给fun函数。若high的值为:100,则函数的值为:732。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includeintfun(inthigh){intsum=0fn=0,j,yes;/**********found**********/while((high>=2)&&(n<10){yes=1;for(j=2;j<=high/2;j++)if(high%j==0){/**********found**********/yes=0;break}if(yes){sum+=high;n++;)high--;}returnsum;}main(){printf("%dkn",fun(100));}标准答案:(1)while((2<=high)&&(n<10))(2)yes=0;break;知识点解析:函数的功能是计算并输出high以内最大的10个素数之和。(1)C语言中左右括弧必须成对出现,在第一个标识下“while((hfigh>=2)&&(n<10)”中,显然缺少一个右括弧,应改为“while((2<=high)&&(n<10))”。(2)在判断素数的循环过程中,只要被判断的数能被某数整除就不是素数,就会跳出判断循环,在C语言中使用break语句跳出循环,并且C语言中的语句使用分号为结尾。所以“break”应改为“break;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。xn+1=cos(xn)迭代步骤如下:(1)取x1初值为0.0;(2)x0=x1,把x1的值赋给x0:(3)xl=cos(x0),求出一个新的x1;(4)若x0-x1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。程序将输出结果Root=0.739086。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includedoublefun(){}main(){voidNONO();printf("Root=%f\n",fun());NONO();}voidNONO(){/(本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*wf;wf=fopen("out.dat","w");fprintf(wf,"%f\n",fun());fclose(wf);}标准答案:floatx0,x1=0.0;do{x0=x1;x1=cos(x0);}while(fabs(x0-x1)>0.000001);returnx1;知识点解析:该程序功能是利用简单迭代方法求方程的一个实根。牛顿迭代法的求解思想是从一个初始值开始,逐步逼近所求方程的根。其具体过程是:将初始值代入迭代公式,得到一个迭代输出值。再次迭代时,将上一次的迭代输出值当作本次的迭代输入。不断重复以上过程,直到满足题目要求为止。牛顿迭代公式为:xn+1=xn-f(x)/f(x)。其求解过程在题干中已经给出。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新数,作为函数值返回。例如,输入一个整数27638496,函数返回值为64862。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>unsignedlongfun(unsignedlongn){unsignedlongx=0;intt;while(n){t=n%10;/*********found*********/if(t%2==【1】)/*********found*********/x=【2】+t;/*********found*********/n=【3】;}returnx;}main(){unsignedlongn=一1;while(n>99999999||n<0){print:f("Pleaseinput(0<n<100000000):");scar1f("%ld",&n);}print:f("\nTheresult:is:%ld\n",fun(n));}标准答案:(1)0(2)10*x(3)n/10知识点解析:本题考查:已知某数,如何求该数各个位数值;已知各个位数值,如何表示该数;除法运算。填空1:定义变量t用来存放某数的各个位数值,此处判断t是否为偶数,即对2求余结果是否为0。填空2:将t作为x的个位数,原来x的各个位上升1位,即x=10*x+t。填空3:每循环一次,通过除法运算,去掉数值最后一位。如果知道某数n的各个位数值,可以得到该数值n。例如,n的个位为a、十位为b、百位为c,那么n=c*100+b*10+a。如果知道数值n,可以采用求余和除法操作来表示其各个位数值,即n%10(取个位)、n/10(取十位)。读者可以自己考虑一下,如果是三位数,如何提取各个位数值?如果是四位数呢?二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun的功能是:将长整型数中各位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidfun(longs,long*t){intd;longs1=1;/*********found*********/t=0;while(s>0){d=s%10;/*********found*********/if(d%2==0){*t=d*s1+*t;s1*=10;}s/=10;}}voidmain(){longs,t;system("CLS");print("\nPleaseenters:");scanf("%id",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)*t=0;(2)if(d%21=0)或if(d%2==1)知识点解析:本题考查:指针型变量作为函数参数;if语句条件表达式,结合奇偶数的表示方法来确定该表达式内容。(1)由函数定义可知,变量t是指针变量,所以对t进行赋初值0是不对的。因为t指向的是存放新数的变量,所以此处应给新数赋初值0,即*t=0;(2)变量d表示数s各位上的数,此处的if条件应为判断d是否为奇数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:实现两个字符串的连接(不要使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串的后面。例如,分别输入下面两个字符串:“FirstString一一”“SecondString”程序输出:“FirstString一一SecondString”注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<stdio.h>#include<conio.h>voidfun(charp1[],charp2[]){}voidmain(){chars1[80],s2[40],system("CLS");printf("Enters1ands2:、n");scanf("%S%s",s1,s2);printf("s1=%s\n",s1);printf("s2=%s\n",s2);printf("Invokefun(s1,s2):\n");fun(s1,s2);printf("Afterinvoking:\n");printf("%S\n",s1);}标准答案:voidfun(charp1[],charp2[]){inti,j;for(i=0;p1[i]!=’\0’;i++);/*求出的i为pl字符串的总长度,包括结束标记符*/for(j=0;p2[j]!=’\0’;j++)p1[i++]=p2[j];/*将p2字符串连在pl字符串后面*/p1[i]=’\0’;/*在字符串最后加上结束标记符*/}知识点解析:本题考查:不使用字符串函数实现字符串连接操作。通过for循环语句来完成,最后需加上字符串结束标识‘\0’。本题用两个循环完成操作,第1个循环的作用是求出第1个字符串的长度,即将i指到第1个字符串的末尾;第2个循环的作用是将第2个字符串的字符连到第1个字符串的末尾。最后在第1个字符串的结尾加上字符串结束标识‘\0’。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:从形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回剩余字符串的个数。SS所指字符串数组中共有N个字符串,且串长小于M。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineN5#defineM10intfun(char(*ss)[M],intk){inti,j=0,len;/*********found*********/for(i=0;i<【1】;i++){len=strlen(ss[i]);/*********found*********/if(len<=【2】)/*********found*********/strcpy(ss[j++],【3】);}returnj;}voidmain(){charx[N][M]={"Beijing","Shanghai","Tianjin","Nanjing","Wuhan");inti,f;printf("\nTheoriginalstring\n\n");for(i=0;i<N;i++)puts(x[i]);printf("\n");f=fun(x,7);printf("Thestringwitchlengthislessthanorequalto7:\n");for(i=0;i<f;i++)puts(x[i]);printf("\n");}标准答案:(1)N(2)k(3)ss[i]知识点解析:本题考查:for循环语句;if语句条件表达式;字符串复制函数strcpy的使用。填空1:for循环语句的作用是遍历字符串数组中的每一个字符串,所以循环变量i的循环条件是i<N。填空2:题目要求删除串长度大于k的字符串,所以if条件语句的条件表达式是len<=k。填空3:通过字符串复制函数将串长不大于k的字符串另存,并记录个数。字符串复制函数strcpy,其格式为:strcpy(字符数组名1,字符数组名2)功能:把字符数组2中的字符串复制到字符数组1中。字符串结束标识‘\0’也一同复制。字符数组名2,也可以是一个字符串常量,这时相当于把一个字符串赋予一个字符数组。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如,变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>intfun(int*x,inty){intt;/*********found*********/t=x;x=y;/*********found*********/return(y);}voidmain(){inta=3,b=8;system("CLS");printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}标准答案:(1)t=*x;*x=y;(2)retum(t);或returnt;知识点解析:本题考查:指针型变量的使用;通过return语句完成函数值的返回。首先,定义变量t作为中间变量,然后进行数据交换,注意参数x是指针变量,交换时应使用*x,最后确定返回值;根据代码b=fun(8a,b),可以知道返回值将赋给变量b,而b中应存放交换前*x中的值,所以函数应返回变量t。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#defineM4#include<stdio.h>intfun(inta[][M]){}voidmain(){intarr[2][M]={5,8,3,45,76,一4,12,82);printf("max=%d\n",fun(arr));}标准答案:intfun(inta[][M]){inti,j,max=a[0][0];/*对二维数组进行遍历*/for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])/*将最大值保存在max中*/max=a[i][j];returnmax;}知识点解析:本题考查:求数组的最大值,需运用循环语句。因为数组是二维数值,所以应使用二层加for循环嵌套。使用for循环语句时需注意循环变量的取值范围。此类求最大值或最小值的问题,可以采用逐个比较的方式,对数组中所有元素遍历一遍,从中找出数组最大值或最小值。首先定义变量max用来存放数组的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于max,则将该值赋予max,循环结束后max的值即为数组最大值,最后将该值返回。该类题目考查较多,需要掌握逐个比较的方法。对于m*n二维数组,如果采用逐个查找方法,代码实现如下:for(i=0;i<m;i++)for(j=0;j<n;j++)国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:计算直到。若x=2.5,函数值为:1.917915。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!1#include<stdio.h>2#include<math.h>3doublefun(doublex)4{doublef,t;intn;5f=1.0+x;6/**********found**********/7t=__1___;8n=1;9do{10n++;11/**********found**********/12t*=(-1.0)*x/__2__;13f+=t;14}15/**********found**********/16while(__3__>=le-6);17returnf;18}19main()20{doublex,y;21x=2.5;22y=fun(x);23printf(’’\nTheresultis:\n’’);24printf(’’x=%-12.6fy=%-12.6f\n’’,x,y);25}标准答案:(1)x(2)n(3)fabs(t)知识点解析:函数fun的功能是计算级数和。第一空:“f=1.0+x;”f的初始化为级数的前两项之和,dowhile循环从第三项x2/2开始计算,第一空处是给t赋初值,t表示级数项,“n++;t*=(-1.0)*x/__2__;”即第一次进入do循环之后n的值为2,故t的初值应该为x,第一空处应为“x”。第二空:由审题分析可知,后一项乘以(-1)*x除以n,故第二空处应为“n”。第三空:循环的终止条件是(x0/n!)的绝对值小于1e-6,即只要(xn/n!)大于等于le-6,do循环就执行,故第三处应为“fabs(t)”,fabs函数的功能是求绝对值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到C所指数组中,形成一个新的字符串。例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd,则c中的字符串应为:aBcdeFgH。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿坝藏族羌族自治州松潘县2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 巢湖市巢湖区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 德州市庆云县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 自贡市自流井区2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 商丘市夏邑县2025-2026学年第二学期四年级语文期中考试卷(部编版含答案)
- 呼和浩特市土默特左旗2025-2026学年第二学期六年级语文第五单元测试卷部编版含答案
- 软件开发实施方案
- 短视频营销方案
- 深度解析(2026)《CBT 4416-2016船用手抬机动消防泵组》
- 深度解析(2026)《CBT 3921-2001船用辅锅炉人孔装置》
- 工业机器人视觉技术PPT全套完整教学课件
- 医学微生态学
- 《包装设计师》理论考试题库大全-上(单选、多选题汇总)
- 《创新中国 》期末考试答案
- 铁路职业技能鉴定参考丛书电力线路工高级技师习题集
- LY/T 1752-2008荒漠生态系统定位观测技术规范
- GB/T 29256.5-2012纺织品机织物结构分析方法第5部分:织物中拆下纱线线密度的测定
- (原创2022)地理高考双向细目表
- GB/T 1410-2006固体绝缘材料体积电阻率和表面电阻率试验方法
- 《工程机械设计》第7章-挖掘机工作装置设计课件
- 南京酒店定位报告(修改)
评论
0/150
提交评论