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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷20(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、字符串str由数字字符‘0’和‘1’组成(长度不超过8个字符),可看作二进制数,请补充函数fun(),该函数的功能是:把str字符串转换成十进制数,结果由函数返回。例如,输入“1001”,结果输出:9。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>intfun(char*str){intn;char*p=str;【】;p++;while(*p){n=【】;p++;}return【】;}main(){charstr[9];inti;intn;printf("Enterastringmadeupof’0’and’1’digitalcharacter:");gets(str);if(strlen(str)>8){printf("Error:stringtoolonger!pleaseinputagain!\n\n");exit(0);}for(i=0;str[i];i++)if(str[i]<’0’||str[i]>’1’){printf("Error:%cnotis’0’and’1’digitalcharacter!\n\n",str[i]);exit(0);}printf("Theoriginalstring:");puts(str);n=fun(str);printf("\n%sisconveredtodecimalnumber:%d\n\n",str,n);}标准答案:n=*p-’0’n*2+*p’0’n知识点解析:第一空:’0’和’1’是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符’0’的ASCII码,就得到对应的数字。第二空:将二进制数转换为十进制数的算法是:以1001为例,对应的十进制数为1*23+0*22+0*2+1=2*(2*(2*1+0)+0)+1=9。明白了这一算法,此空就非常容易了。第三空:最后计算的结果存放在变量n中,所以函数的返回值为n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序中,函数fun()的功能是:使数组中的元素的值缩小5倍。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>floatm[10];/*************found**************/intfun(void){intj;printf("Insubfuncaftercalling\n");for(j=O;j<lO;j++){;/*************found**************/print("%f",m[j]%5);}}main(){inti;printf("Inmainbeforecalling\n");for(i=0;i<10;i++){m[i]=i+20;printf("%f",m[i]);}fun();printf("\nInmainaftercalling\n");for(i=O;i<10;i++)printf("%f",m[i]/5);}标准答案:(1)错误:intfun(void)正确:voidfun(void)(2)错误:printf("%f",m[j]%5);正确:printf("%f",m[j]/5);知识点解析:错误1:函数fun()没有返回值,所以定义函数类型为void。错误2:此处考查的是除法运算符和取余运算符的区别。三、程序设计题(本题共1题,每题1.0分,共1分。)3、m个人的成绩存放在score数组中,请编写函数fun(),它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为10,20,30,40,50,60,70,80,90时,函数返回的人数应该是4,below中的数据应为10,20,30,40。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>intfun(intscore[],intm,intbelow[]){}main(){ihti,n,below[9];intscore[9]={10,20,30,40,50,60,70,80,90};clrscr();n=fun(score,9,below);printf("\nBelowtheaveragescoreare:");for(i=0;i<n;i++)printf("%d",below[i]);}标准答案:intfun(intscore[],intm,intbelow[]){inti,j=0;floatav=0.0;for(i=0;i<m;i++)av=av+score[i]/m;/*求平均值*/for(i=0;i<m;i++)if(score[i]<av)/*如果分数低于平均分,则将此分数放入below数组中*/below[j++]=score[i];returnj;/*返回低于平均分的人数*/}知识点解析:该题第1个循环的作用是求出平均分av,第2个循环的作用是找出低于平均分的成绩并存入below数组中。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*a)[N],int*b){inti,j;for(i=0;i标准答案:(1)a[0][i](2)<(3)x,y知识点解析:第一空:第二个循环是寻找每列的最大值,方法是用最大值变量b[i]标记第一个待找数据,逐个把所有待找数据和b[i]进行比较,并用b[i]标记其当前最大值,从而找出最大值。故第一空处为第一个待找数据“a[0][i]。第二空:由上述的分析可知,如果b[i]小于a[j][i],那么用b[i]标记其当前最大值,故第二空处为“<"。第三空:fun函数的声明为:voidfun(int(*a)[N],int*b),函数的两个参数均是指针。故在主函数内fun函数的调用形式为“fun(x,y)",x是二维数组首地址,y是一维数组首地址。二、程序修改题(本题共1题,每题1.0分,共1分。)2、数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun()的功能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。如,当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。符合此条件的累加值应为42,126,366,570,1010。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#defineN20intfun(ihtn,int*a)/*************found*************/{inti,j,k,sum;sum=0;for(k=3,i=0;i<n;i++,k+=5){sum=sum+k;/************found***************/if(sum%4=2)a[j++]=sum;}/*************found**************/returnj;}main(){inta[N],d,n,i;printf("\nEntern(4<=n<=50):");scanf("%d",&n);d=fun(n,a);printf("\n\nTheresult:\n");for(i=0;i<d;i++)printf("%6d",a[i]);printf("\n\n");}标准答案:(1)错误:inti,j,k,sum;正确:inti,j=0,k,sum;(2)错误:if(sum%4=2)正确:if(sum%4=2)(3)错误:returnj;正确:returnj++;知识点解析:按照老办法,我们先看数学思路,该题是一个公差为5的等差数列,简单吧,要是用数学的办法解决也就是一个公式两个符号,迎刃而解,所以这样很有规律的等差数列前n项和用C语言来求的话,也相当简单,关键看细节!i,k,sum都分别定义了,那j呢?所以,正确的应该是inti,j=0,k,sum;,再往下看,if(sum%4=2)是在说明题干中“在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数”,那么“余2”的表示方法呢?不用看就知道应该是if(sum%4==2),后面的返回错误就不提了吧,看看a[j++]=sum;语句,难道还能返回给j吗?三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出下列多项式的值:例如,在主函数中从键盘给n输入8后,输出为:s=0.662872。注意:要求n的值大于1但不大于100。部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includedoublefun(intn){}NONO()(/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;intn,i;doubles;rf=fopen(”in.dat”,”r”);wf=fopen(”out.ctat”,”w”);for(i=0;i<10;i++){fscanf(rf,”%d”,&n);S=fun(n);fprintf(wf,”%lf\n”,s);}fclose(rf);fclose(wf);}main(){intnjdoubles;printf("\nInputn:");scanf(”%d”,&n);s=fun(n);printf(”\ns=%f\n”,s);NONO();}标准答案:{inti;doublesum=0.0;if(n>1&&n<=100){for(i=1;i<=n;i++)sum+=1.0/(2*i-1)-1.0/(2*i);}returnsum;}知识点解析:(1)根据题干中给出的数列,推出每一项是(1.0/(2*i-1)-1.0/(2*i))。(2)在循环中求得每一项,然后对其进行累加求和。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:计算请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)x(2)n(3)t知识点解析:本题中函数的功能是计算级数和,级数项的变化规律是:后面一项是在前面一项的基础上乘以x除以n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据整型形参m,计算如下公式的值。例如,若m中的值为:5,则应输出:1.463611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)for(i=2;i<=m;i++)(2)y+=1.O/(i*i);知识点解析:该题中函数功能是计算公式的值。其中,公式中涉及在循环中对各项的计算及累加求和。从已给定源程序的main主函数开始入手,“printf(〝\nTheresultis%1f\n〞,fun(n));”语句中调用fun函数,计算公式的值。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。例如:实型数为1234.567,则函数返回1234.572000;实型数为1234.564,则函数返回1234.562000。注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是进行四舍五入。其中,通常求实数x保留m位小数,首先将x扩大10(m+1)倍,扩大后的x加上5后,进行截取判断,最后进行恢复。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参sut所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includetypedefstruct{charname[10];intage;}STD;STDfun(STDstcl[],int.n){STDmax;inti;/**************found***************/max=【1】;for(i=1;i标准答案:*stdstd[i].age知识点解析:第一空:max变量保存最大值,在循环开始之前,先给max赋值并假定这个值就是最大值,即“max=*std;”给max赋初值。第二空:“if(max.age<___2___)”比较max的age成员变量和std[i]的age成员变量,如果max的age变量小于std[i]的age成员变量,那么将std[i]赋给max,即第二空处应为“if(max.age二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:计算整数n的阶乘。请改正程序中的错误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includedoublefun(intn){doubleresult=1.0;while(n>1&&n<170)/******************found*******************/result*=--n;/******************found*******************/return__________;}main(){intn;printf(”EnLeraninteger:”);scanf(”%d”,&n);printf(”\n\n%d!=%lg\n\n”,i"1,fun(n));}标准答案:result*=n--;returnresult;知识点解析:(1)第一个标识下while循环过程实现n的阶乘,根据阶乘的算法n!=n*(n-1)*…*1,题干中的语句“result*=--n;”先对n进行减1操作,结果就少乘了n,所以将“result*=--n;”改为“result*=n--;”。(2)根据fun函数的定义,fun函数应该返回阶乘结果,所以第二个标识下填空为“returnresult;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。例如:若有5门课程的成绩是:90.5,72,80,61.5,55则函数的值为:71.80。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includefloatfun(float*a,intn){}main(){floatscore[30]={90.5,72,80,61.5,55},aver;voidNONO();aver=fun(score,5);printf("\nAveragescoreis:%5.2f\n",aver);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,j;floataver,score[5];fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<5;j++)fscanf(fp,"%f,",&score[j]);aver=fun(score,5);fprintf(wf,"%5.2f\n",aver);}fclose(fp);fclose(wf);}标准答案:{inti;floatave=0.0;for(i=0;i知识点解析:(1)在函数中首先定义平均分的变量,并将其初始化值置为0。(2)然后在for循环中,求得所有成绩的总分,并在总分的基础上求得平均分。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如,有下列矩阵:[*]程序执行结果为:find:a[2][2]=9请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineM3#defineN4voidfun(int(*a)[N]){inti=0,j,find=0,rmax,c,k;while((i标准答案:(1)j(2)0(3)i++知识点解析:第一空:“rmax=a[i]啪;c=【1】;}"ramx存放行上最大值,根据下面一个循环体内“if(k!=i&&a[k][c]<=rmax)"可知,c存放rmax所在的列的位置,故第一空处应为“i"。第二空:“if(k!=i&&a[k][c]<=rmax)find=【2】;"如果列上的元素a[k][c]比rmax还小,说明rmax不是列上最小值,那么标识变量find应该为假,下次就无须进入while(k二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……例如,若给n输入7,该项的斐波拉契数值为:13。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#includelongfun(intg){/**********found**********/switch(g);/*switch语句*/{case0:return0;/**********found**********/case1;case2:return1;}return(fun(g-1)+fun(g-2));}main(){longfib;intn;printf("Inputn:");scanf("%d",&n);printf("n=%d\n",n);fib=fun(n);printf("fib=%d\n\n",fib);}标准答案:switch(g)case1:return1知识点解析:(1)第一个标识下的switch后用括号括起来的表达式的标准语法后面是没有“;”的,所以“switch(g);”应该改为“switch(g)”。(2)第二个标识下的case加常量表达式的后面用冒号连接选择语句,所以“case1;”改为“case1:”。“case1:”和“case2:”都是返回1,应该写两个“return1”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234",则函数把它转换为整数值-1234。注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includelongfun(char*p){}main()/*主函数*/{chars[6];voidNONO();longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%ld\n",n);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chars[20];longn;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%s",s);n=fun(s);fprintf(wf,"%ld\n",n);}fclose(fp);fclose(wf);}标准答案:longs=0,t;inti=0,j,n=strlen(p),k,s1;//求得字符串长度nif(p[0]==’-’)i++;for(j=i;j<=n一1;j++){t=p[j]一’0’;//把字符变成数值s1=10;for(k=j;k知识点解析:进入fun函数,根据前面的分析:从左到右移动指针p。利用上一步不断把t中的数据左移一位,把p当前所指字符转换成数字再加上低位,从而把数字字符串转换成一个整数。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长#include#defineM5#defineN20/**********found**********/intfun(char(*ss)【1】,int*n){inti,k=0,len=0;for(i=0;i*n){/**********found**********/【3】;k=i;}}return(k);}main(){charss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};intn,k,i;printf("\nTheoriginalstringsare:\n");for(i=0;i标准答案:[N]len*n=len知识点解析:第一空:在主函数内fun函数调用“k=fun(ss,&n);”可知,fun函数的第一个参数为数组首地址,是指针变量,故第一空处的fun函数定义应为“[N]”。第二空:由审题分析可知,i=0时,记录长度的变量*n应该赋初值len,故第二空处应为“len”。第三空:由审题分析可知,如果len比*n大,那么*n记录这个大的值,故第三空处应为“*n=len;”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#defineN20intfun(int*a,intn){inti,m,t,k;for(i=0;i<2;i++){/**********found**********/m=0;for(k=i+1;ka[m])t=a[i];a[i]=a[m];a[m]=t;}}main(){intx,b[N]={11,5,12,0,3,6,9,7,10,8},n=10,i;for(i=0;i标准答案:m=i;if(a[k]>a[m])m=k;知识点解析:(1)第二个标识符下for循环逐个对m个数据进行选择判断,原题中“m=0;”语句将m值设置为0,在循环中m值始终是0,不会改变,根据“for(i=0;i<2;i++)”语句中的循环条件,“m=0;”改为“m=i;”。(2)如果“if(a[k]>a[m])”,a[k]比a[m]大,m记录下下标值k,内层循环结束的时候a[m]值就是本次循环找到的最大值(如果m=0,a[m]是数组中的最大值;如果m=1,a[m]数组中的次最大值),即m记录最大值的下标值,因此第二标识下应该是“if(a[k]>a[m])m=k;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,函数的功能是:根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。例如:若n的值为11时,函数的值为:1.833333注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includedoublefun(intn){}returnstr;}main(){intn;doubles;voidNONO();printf("\nPleaseenterN:");scanf("%d",&n);s=fun(n);printf("theresultis:%f\n",s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,n;doubles;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fp,"%d",&n);s=fun(n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:{intk;floatstr=1.0,sum=1.0;for(k=2;k<=n;k++){sum=sum+k;//求得每一项的分母str=str+1/sum;//级数累加求和}知识点解析:进入fun函数,根据前面的分析:首先,求得每一项分母的值sum,即利用上一项来表示“sum=sum+k;”。然后,对每一项进行累加“str=str+1/sum;”。最后,返回运算结果“str”。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:把一个字符串中的字符(字母)按从小到大排序,并把这个全部由字母组成的字符串保存在原串中,函数返回这个字符串的长度。例如;输入“cixbr2.3”,如果为bcirx,字符串长度为5。注意:部分源程序给出如下.请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。#include<stdio.h>#defineN20intfun(char*str){inti=0,j=0,k=-0,m=0;chart;char*p=str;while(*p){if((*p>=’A’&&*p<=’Z’)||(*p>=’a’&&*p<=’z’))【】p++;}*(str+i)=’\0’;【】;while(*(p+j)){k=j;【】;while(*(p+k)){if(*(p+k)<*(str+m){t=*(str+m);*(str+m)=*(p+k);*(p+k)=t;}k++;}j++;}returni;}main(){charstr[81];ihtn;clrscr();printf("Inputtheoriginalstring");gets(str);printf("***TheOriginalstring***In");puts(str);printf("***Thenwestring***\n");n=fun(str);puts(str);printf("***Thelengthofnewstringis:%d***\n",n);}标准答案:*(str+i++)=*pp=strm=j知识点解析:第一空:将字符串中的字母字符存入原字符串str中,通过变量i的自加逐一向后移动字符串指针。第二空:从后面的程序中可以看出,通过指针p对字符串进行排序,所以应使指针p指向字符串str的首部,即将字符串str的首地址赋给p。第三空:本题采用选择法对字符串进行排序,选择法的思路是,假设从小到大排序,依次用当前取得的元素和它后面的所有元素进行比较,在第一个元素和它后面的元素顺次比较时,可以借助中间变量来对两数进行交换,要保证这第一个元素始终存放数组中的最小数,以后依次挑出次小数,这样最终的数组就是按从小到大的顺序排列。此处要将变量j的值赋给m。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:根据整型形参m的值,计算如下公式的值。t=1-1/(2×2)-1/(3×3)-…-l/(m×m)请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>doublefun(intm){doubley=1.O;inti;/*************found**************/for(i=2;i<m;i++)/************found**************/y-=1/(i*i);return(y);}main(){intn=5;clrscr();printf("\nTheresultis%1f\n",fun(n));}标准答案:(1)错误:for(i=2;i<m;i++)正确:for(i=2;i<=m;i++)(2)错误:y-=1/(i*i);正确:y-=1.0/(i*i);知识点解析:该题是一道简单的计算题,循环条件for(i=2;i<m;i++)中忽略了i=m时的一种情况,因为题目中i是从2到m的一个计算公式,y-=1/(i*i);的错误很明显,是语法错误,由定义doubley=1.0可知,应该是y-=1.0/(i*i);,而非y-=1/(i*i);。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是:将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入17,5,则应输出19,23,29,3l,37。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(intm,intk,intxx[]){}main(){intm,n,zz[1000];clrscr();printf("\nPleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=O;m<n;m++)printf("%d",zz[m]);printf("\n");}标准答案:voidfun(intm,intk,intxx[]){inti,j,n;for(i=m+1,n=0;n<k;i++)/*找大于m的素数,循环k次,即找出紧靠m的k个素数*/{for(j=2;j<i;j++)/*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数*/if(i%j==O)break;if(j>=i)/*如果是素数,放入数组xx中*/xx[n++]=i;}}知识点解析:本题只要掌握了判断素数的算法即不难完成了,其实程序缺少部分也正是这部分。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!=’\0’;i++)n++;/**********found**********/if(n%2==0)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);}标准答案:1s[k]c知识点解析:第一空:“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”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是;将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<ctype.h>#include<conio.h>voidfun(char*s)/*************found**************/{while(*s!=’@’){if(*s>=’A’&*s<=’z’||*s>=’a’&&*s<=’z’){if(*s==’Z’)*S=’A’;elseif(*S==’z’)*s=’a’;else*s+=1;}/*************found**************/(*s)++;}}main(){chars[80];clrscr();printf("\nEnterastringwithlength<80:\n\n");gets(s);printf("\nThestring:\n\n");puts(s);fun(s);printf("\n\nTheCords:\n\n");puts(s);}标准答案:(1)错误:while(*s!=’@’)正确:while(*s)(2)错误:(*s)++;正确:s++;知识点解析:根据题目要求,可对字符串所有字母进行遍历。对每一个字母,若该字母为’z’或’Z’,将该字母改成’a’或’A’,即ASCII码值减25,当然也可以用题目中的if语句来实现转换。若该字母不是’z’或’Z’,则该字母的ASCII码值加1;对字符串所有字符重复以上过程即可得到题目要求的结果,可用循环语句和条件语句来实现。三、程序设计题(本题共1题,每题1.0分,共1分。)3、下列程序定义了NXN的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是求出数组周边元素的平方和并作为函数值返回给主函数中的S。例如:若a数组中的值为a=012791112155221611197910254141则返回主程序后s的值应为310。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5intfun(intw[][N]){}main(){inta[N)[N]={0,1,2,7,9,1,1l,2l,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1};inti,j;intS;clrscr();printf("*****Thearray***+*\n");for(i=0;i<N;i++){for(j=0;j<N;i++){printf(“%4d”,a[i][j]);}printf("\n");}s=fun(a);printf(“*****THERESULT*****\n”);printf("Thesumis:%d\n",s);}标准答案:intfun(intw[])[N]){inti,j,k=0;ints=0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/{s=s+w[i][j]*w[i][j];/*将周边元素求平方和*/}returns;/+返回周边元素的平方和*/}知识点解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、字符串str由数字字符组成(长度不超过5个字符),可看作任意进制的数,请补充函数fun(),该函数的功能是:把str字符串转换成任意进制的数,结果保存在数组xx中,由函数返回转换后数组腆的实际长度。其中x表示str原来的进制,y表示要转换成的进制。例如,输入str=“1111”,x=2,y=10,结果输出:15。如果输入str=“15”,x=10,Y=2,结果输出:1111。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineN8intxx[N];intfun(char*str,intx,inty){intsum;inti=0;char*p=str;for(i=0;i<N;i++)xx[i]=0;sum=*p-’0’;p++;while(*p){sum=【】;p++;}i=0;while(sum!=0){xx[i]=【】;【】;i++;}returni;}main(){charstr[6];inti;intn;intx;inty;printf("Enterastringmadeupof’0’to’9’digitscharacter:");gets(str);if(strlen(str)>5){

温馨提示

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

评论

0/150

提交评论