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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷18(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,改函数的功能是,把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。例如,如果str[3]={"efjh","cfimls","owys"},则s;"hsy"。注意:部分源程序给出如下.请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio,h>main(){inti=0;char*str[3]={"efjh","efknls","owys"};char**p;chars[8];clrscr0;【】;for(i=O;i<3;i++){s[i]=*p[i];while(*p[i]){if(S[i]<*p[i])s[i]=*p[i];【】;}}【】;printf("newstring\n");puts(s);}标准答案:p=strp[i]++s[i]=’\0’知识点解析:第一空:sb是一个大小为3的指针数组,每个指针指向一个字符串,p是指向指针的指针,首先要使指针p指向数组sb的首地址。第二空:通过p[i]++使p[i]指向第i个字符串的下一个字符。第三空:将每行字符串的最大字符都拷贝到字符数组s中后,不要忘了在数组s最后加上字符串结束标记符‘\0’。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main,~数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>voidfun(longs,long*t)/**********************************/{intd;longs1=l;*t=0;while(s>0){d=s%10;/**********************************/if(d%2=0){*t=d*sl+*t;sl*=10}/**********************************/s\=10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)错误:intd;正确longd;(2)错误:if(d%2=0)正确:if(d%2==0)(3)错误:s\=10;正确:s/=10知识点解析:其实,不论取出偶数还是奇数,思路应该是一样的。我们在刚开始学习C语言的时候就学习过强制类型转换以及运算级别的问题,所以,这里的int就没有存在的理由。错误2中的问题是怎么表达一个偶数的问题,归根结底还是“=”和“==”的区别问题。三、程序设计题(本题共1题,每题1.0分,共1分。)3、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。己给出函数的首部,请完成该函数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<string.h>#include<aonio.h>#defineN10typedefstructss{charnum[10];ihts;}STU;fun(STUail,STU*s){}main(){STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80),{"Al0",71}},m;inti;clrscr0;printf("*****Theoriginaldata*****");for(i=0;i<N;i++)printf("No=%sMark=%d\n",ail].num,a[i].s);fun(a,&m);printf("*****THERESULT*****\n");printf("Thelowest:%s,%d\n",m.num,m.s);}标准答案:fun(STUa[],STU*s){inti;*s=a[0];for(i=0;i<N;i++)/*先认为第1个值最小*/if(s->s>aIi].s)/*如果在循环的过程中再发现比第1个值更小的则赋给*s*/*s=a[i];}知识点解析:我们先认为第1个值最小,即*s=a[0]语句,如果在循环的过程中再发现比第1个值更小的随即赋给该*s就可以了。另外,还涉及到结构体中的指向运算符,请学习者注意。若要找出最高成绩则if()中的条件改成s->s<a[i].s即可。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s,inta,doublef){/**********found**********/【1】fp;charch;fp=fopen("file1.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);fclose(fp);fp=fopen("file1.txt","r");printf("\nTheresult:\n\n");ch=fgetc(fp);/**********found**********/while(!feof(【2】)){/**********found**********/putchar(【3】);ch=fgetc(fp);}putchar(’\n’);fclose(fp);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}标准答案:FILE*fpch知识点解析:第一空:由“fp=fopen("file1.txt","w");”可知fp是文件型指针,故第一空处的变量fp定义类型为“FILE*”。第二空:“while(!feof(__2__))”是在没有达到文件未尾的时候执行循环体内容,文件状态检测函数feof的一般调用形式是:feof(fp),其中fp是文件型指针,故第二空处应为“fp”。第三空:题干要求从文件当中逐个读入数据并显示在终端屏幕上,第三空处是将从文件当中读取的字符ch显示在屏幕上,故第三空处应为“ch”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为:”abcdabfab”,t1所指子串中的内容为:”ab”,t2所指子串中的内容为:”99”时,结果在W所指的数组中的内容应为:”99cd99f99”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a;strcpy(w,s);while(*w){p=w;r=t1;/************found************/while(r)if(*r==*p){r++;p++;}elsebreak;if(*r==’\0’){a=w;r=t2;while(*r){/************found************/*a=*r;a++;r++}w+=strlen(t2);}elsew++;}}main(){chars[100],t1[100],t2[100],w[100];printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf("Error:strlen(t1)!=strlen(t2)\n");}标准答案:while(*r)*a=*r;a++;r++;知识点解析:(1)函数通过while语句比较r所指字符串是否和p所指的子串相同,若有相同,会一直循环到*r是’\0’才退出循环。所以第二个标识下的“while(r)”改为“while(*r)”。(2)C语言中,语句应该以“;”结束,在第二个标识处,“r++”语句没有以“;”结束,因此第二个标识处应该是“*a=*r;a++;r++;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入:17,则应输出:46891012141516。注意:部分源程序在文件PROGl.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语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#includevoidfun(char*s,inta,doublef){/******************found*******************/【1】fp;charstr[100],strl[i00],str2[100];inta1;doublef1;fp=fopen("filel.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);/******************found*******************/【2】;fp=fopen("filel.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(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}标准答案:(1)FILE*(2)fclose(fp)(3)fp知识点解析:第一空:“fp=fopen("filel.txt","w");"可知fp是文件型指针,故第一空处fp的定义应为"FILE*"。第二空:第二处的后面一句是“邱=fopen("filel.txt","r");"再次打开filel.txt,因此在第二次打开filel.txt之前必须将文件关闭,故第二处是关闭文件,即“fclose(fp)"。第三空:fscanf的调用形式是:fscanf(fp,格式字符串,输入列表),因此第三空处应为“fp",从文件当中读出字符串、整数、浮点数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/**************found**************/charfun(char*s,char*t){ints1=0,t1=0;char*ss,*tt;ss=s;tt=t;while(*ss){s1++;/****************found****************/(*ss)++;)while(*tt){tl++;/****************found****************/(*tt)++;}if(tl>s1)returnt;elsereturns;}main(){chara[80],b[80];printf("\nEnterastring:");gets(a);printf("\nEnterastringagain:");gets(b);printf("\nThelongeris:\n\n\"%s\"\n",fun(a,b));}标准答案:(1)char*fun(char*s,char*t)(2)ss++;(3)tt++;知识点解析:(1)题目中要求返回字符串的首地址,fun函数中的返回值类型应该是char*类型而不是char型,所以“charfhn(chin*s,chat*t)"应该改为“char*fun(char*s,char*t)"。(2)第二个标识下应该是指向第一个字符串的下一个字符,而“(*ss)++;"是对指针指向字符的值加1,所以“(*ss)++;"改为“ss++;"。(3)同理,第三个标识符下的“(*tt)++;"改为“tt++;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数:fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45,b=12时,调用该函数后,c=415Z;注意:部分源程序存在文件PROGl.C中。数据文件iff.dat中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inta,intb,long*c){}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d,%d",&a,&b);fun(a,b,&c);printf("Theresultis:%d\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=%ld\n",a,b,c);}fclose(rf);fclose(wf);}标准答案:{*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);}知识点解析:(1)分解两位数的正整数n的个位和十位数,可分别用n%10和n/10实现。(2)设x0、x1、x2、x3为一位数,则x0、x1×10、x2×100、x3×1000,可以分别使x0、x1、x2、x3构成个、十、百、千带权数,而x0+x1×10+x2×100+x3×1000构成四位数。本题最多只考虑四位数。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:从字符串str中取出所有数字字符,并分别计数,然后把结果保存在数组b中并输出,把其他字符保存在N[10]中。例如:当str1=“ab123456789cde090”时,结果为:0:21:12:13:14:15:16:17:18:19:2othercharactor:5注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>main(){inti,b[11];char*str="abl23456789cde090";char*p=str;clrscr();printf("***theorigialdata***\n");puts(str);for(i=0;i<11;i++)b[i]=0;while(*p){switch(【】){case’0’:b[0]++;break;case’1’:b[1]++;break;case’2’:b[2]++;break;case’3’:b[3]++;break;case’4’:b[4]++;break;case’5’:b[5]++;break;case’6’:b[6]++;break;case’7’:b[7]++;break;case’8’:b[8]++;break;case’9’:b[9]++;break;【】}【】}printf("******theresult********\n");for(i=0;i<10;i++)printf("\n%d:%d",i,b[i]);printf("\nothercharactor:%d",b[i]);}标准答案:*pdefault:b[10]++;p++;知识点解析:第一空:根据switch语句中case后面的常量表达式,可以看出,switch后面括号中的表达式应该是字符串str中的各字符,而指针p就是指向字符串str。第二空:和各个case后面的常量表达式不匹配的都属于其他字符,保存在b[10]中。第三空:指针p指向字符串s仕,通过p自加1来移动指针,访问字符串中的所有字符。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a[0]中的数对调,次最小数和a[1]中的数对调。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>#defineN20voidfun(int*a,intn){inti,m,t,k;/*************found**************/for(i=O;i<n;i++){m==i;for(k=i;k<n;k++)if(a[k]<a[m])/*************found**************/k=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;clrscr();for(i=0;i<n;i++)printf("%d",b[i]);printf("\n");fun(b,n);for(i=0;i<n;i++)printf("%d",b[i]);printf("\n");}标准答案:(1)错误:for(i=0;i<n;i++)正确:for(i=0;i<2;i++)(2)错误:k=m;正确:m=k;知识点解析:错误1:由于题目要求将最小数和次最小数分别与a[0]和a[1]中的数对调,因此这层循环只需循环两次。错误2:赋值语句的执行方向是从右向左,即把右边的值赋给左边的变量。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数voidfun(intm,intk,intxx[]),该函数的功能是将大于整数m且紧靠m的k个非素数存入所指的数组中。例如,若输入15,5,则应输出16,18,20,21,22。注意:部分源程序给出如下。请勿改动主函数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=0;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==0){xx[n++]=i;/*如果不是素数,放入数组xx中*/break;/*并跳出本层循环,判断下一个数*/}}知识点解析:本题只要掌握了判断非素数和素数的算法即不难完成了,其实程序缺少部分也正是这部分。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入一个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeunsignedlongfun(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标准答案:(1)1(2)s(3)i*10知识点解析:第一空:由“if(t%2=0){x=x+-t*i;i=【3】;}"可知,如果t是偶数,那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*l;下一次得到了t=4,那么此时x的值应该是2+2*10;再下一次得到t=2,那么x=22+2*100,即x的值是在上一次值的基础上加上新得到的值乘以其权值,因此i是代表权值。第一空处是初始化i,第一次进入if语句时,x是个1位数,此时权值i应为1,做第一空处应为“1",第二空:第二空处是填循环的终止条件,在循环体内,s每次缩小10倍,在最后一次进入循环的时候,s是一个一位数,s/10之后s变成0,下次就不应该进入while循环,因此while循环的终止条件是s不为0,故第二空处为“s"或“s!=0"。第三空:由第一空的分析可知权值i是在上一次的基础上增加10倍,故第三空处应为“i*10"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun和funx的功能是:用二分法求方程2x3-4x3+3x-6=0的一个根,并要求绝对误差不超过0.001。例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include#includedoublefunx(doublex){return(2*x*x*x-4*x*x+3*x-6);}doublefun(doublem,doublen){/************found************/intr;r=(m+n)/2;/************found************/while(fabs(n-m)<0.001){if(funx(r)*funx(n)<0)m=r;elsen=r;r=(m+n)/2;}returnr;}main(){doublem,n,root;printf("Entermn:\n");scanf("%lf%lf",&m,&n);root=fun(m,n);printf("root=%6.3f\n",root);}标准答案:doubler;while(fabs(n-m)>0.001)知识点解析:(1)fun函数要求返回方程的一个根,由return语句来实现,而函数fun是定义为double型的,但第一个标识下面的r却被定义为int类型。所以“intr;”改为“doubler;”。(2)检查while循环的控制表达式“(fabs(n-m)<0.001)”,知道开始的循环值为80,必然不会进入循环体,不符合逻辑,所以应改为:“while(fabs(n-m)>0.001)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun(),其功能是:根据以下公式求的值(要求精度0.0005,即某项小于0.0005时停止迭代)。程序运行后,若输入精度0.0005,则程序应输出为3.14…。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数fun()的花括号中填人你编写的若干语句。试题程序:#include#include#includedoublefun(doubleeps){}voidmain(){doublex;printf("Inputeps:");scanf("%1f",&x);printf("\neps=%1f,PI=%lf\n",x,fun(x));}标准答案:doublefun(doubleeps){doubles=1.0,s1=1.0;intn=1;while(s1>=eps)//当某项大于精度要求时,继续求下一项{s1=s1*n/(2*n+1);//求多项式的每一项s=s+s1;//累加求和n++;}return2*s;}知识点解析:此题考查的是用迭代法求多项式的值。通过观察题目中给出的数学公式可知,后面一项是前面一项乘以n/(2*n+1),发现这个规律后,问题迎刃而解。通过定义double类型变量,并且赋初值,用来存放多项式的总和。此题中需要注意的是,表示每一项的s1和表示多项式之和的s,两者的初值都是1.0。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、从键盘输入一组无符号整数并保存在数组arr[N]中,以整数0结束输入,即第N+1个数是0,要求这些数的最大位数不超过4位,其元素的个数通过变量num传人函数proc()。请补充函数proc(),其功能是:从数组arr中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数proe返回。例如,当arr[8]={13,1,205,252,2,333,4444,21)时实际输入时,数与数之间用Enter键分开,bb[4]={252,333,4444)。注意:部分源程序给出如下。请勿改动函数main()和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。试题程序:#include#defineM1000intproc(intarr[],intbb[],intnum){inti,m=0;intg,s;for(i=0;i5)【2】;}return【3】;}voidmain(){intarr[M];intyy[M];intnum=0,m=0,i=0;printf("Inputnumber:\n");do{scanf("%u",&arr[num]);}while(arr[num++]!=0);m=proc(arr,yy,num);printf("\nyy=");for(i=0;i标准答案:【1】arr[i]%10【2】bb[m++]=arr[i]【3】m知识点解析:将一个整数对10取余,则得到该整数的个位数,将一个整数除以10再对10取余,则得到该整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存在变量g中;根据题意,当整数的个位与十位的数字之和大于5时,则将该整数保存到数组bb中;变量m记录了满足条件的无符号整数的个数,题目要求将满足条件的无符号整数的个数由proc()函数返回,所以函数返回m。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数proc()的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起,斐波拉契级数序列为1,1,2,3,5,8,13,21,…例如,若给n输入8,该项的斐波拉契级数值为21。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:#inciudelongproc(intg){//****found****switch(g);{case0:return0;//****found****case1;case2:return1;}return(proc(g-1)+proc(g-2));}voidmain(){longfib;intn;printf("Inputn:");scanf("%d",&n);printf("n=%d\n",n);fib=proc(n);printf("fib=%d\n\n",fib);}标准答案:(1)错误:switch(g);正确:switch(g)(2)错误:case1;case2;return1;正确:case1;return1;case2:return1;知识点解析:由C语言的语法规则可知,switch语句后面是没有分号的,因此,“switch(g);”要把后面的分号去掉;在C语言中,case语句后面是冒号而不是分号,因此,“case1;case2:return1;”应改为“case1:return1;case2:return1;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出3到n之间(含3和n)所有素数的平方根之和。例如,在主函数中从键盘给n输入100后,输出为:sum=148.874270。注意:要求13的值大于2但不大于100。部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#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;doublesum;printf("\n\nInputn:");scanf("%d",&n);sum=fun(n);printf("\n\nsum=%f\n\n",sum);NONO();}标准答案:inti,j=0;doubles=0;for(i=3;i<=n;i++){for(j=2;j知识点解析:(1)素数是指能被1和本身整除的正整数(>1),所以判别i是否为素数,只要用2、3、…、i-1这些数逐个去除i,观察余数是否为0即可,只要有一次相除余数为0,i就不是素数,否则i为素数。(2)在循环中找到每一个素数,然后对其求平方根,然后进行累加求和。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为10时,函数返回:-0.204491。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意;源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includedoublefun(intn){inti,k;doubles,t;s=0;/**********found***********/k=【1】;for(i=1;i<=n;i++){/**********found***********/t=【2】;s=s+k*(2*i-1)*(2*i+1)/(t*t);/*********found************/k=k*【3】;}returns;}main(){intn=-1;while(n<0){print;f("Pleaseinput(n>0):");scarlf("%d",&n);)printf("\nTheresultis:%f\n",fun(n));}标准答案:(1)1(2)2*i(3)(一1)知识点解析:第一空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);"可知t*t表示的是级数项的分母,t=2*i,t=2,4,6…,故t的初始化值应为1,因此第一空处应为“1"。第二空:由第一空的分析可知,第二空处应为“2*i"。第三空:由“s=s+k*(2*i-1)*(2*i+1)/(t*t);"可知,k是级数项的(-1)n-1部分,所以在循环中k是每次都乘以-1,故第三处应为“(-1)"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODIl.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/***********found**********/voidfun(10ngs,longt){longsl=10;s/=10;*t=s%10;/*********found*********/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;printf("\nPleaseenLers:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)voidfun(longs,long*t)(2)while(s>0)知识点解析:(1)第一个标识下的形参t被定义为一个long型变量,而对应的主函数中的实参却是一个地址值。因此,t在函数定义中应该被定义为一个指针变量,即“voidfun(10ngs.longt)"改为“voidfun(longs,long*t)"。(2)第二个标识下的while循环控制表达式“s<0"要求s小于0才进入循环。而s的值总是大于0,因此将“whilet(s<0)"改为“while(s>0)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。例如:a数组中的值为:则返回主程序后s的值应为:3.375。注意:部分源程序存在文件PROGI.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN5doublefun(intw[][N]){}main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;voidNONO();doubles;printf("*****Thearray*****\n");for(i=0;i标准答案:inti,j,n=0;doublesum=0;for(i=0;i知识点解析:进入fun函数,根据前面的分析,采用循环分别对符合周边元素条件的元素进行统计求平均值。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共有N个字符串,且串长小于M。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN5#defineM10/**************found**************/voidfun(char(*ss)【1】,intk)(inti=0;/***********found**************/while(i<【2】){/************found************/ss[i][k]=【3】;i++;}}main(){charX[N][M]={"Create","Modify","Sort","Skip","Delete"};inti;printf("\nTheoriginalstring\n\n");for(i=0;i标准答案:【1】[M]【2】N【3】0或’\0’知识点解析:第一空:第一空补充函数定义,在主函数内fun函数的调用形式是“fun(x,4)",x是二维数组名,故fun函数的第一参数是指向二维数组的指针,因此第一空为“[M]"。第二空:“while(i<2)"是填循环终止条件,根据题意,fun函数是将所有串长超过k的字符串中右边的字符删除,因此循环次数为N,故第二空处为“N"。第三空:“ss[i][k]=【3】;i++;"是将串长超过k的字符串中右边的字符删除,即在ss[i][k]位置为0或"’\0’"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是16807,其低3位数的和值是15。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includeintfun(intn,int*value){intd,s,i;/******************found******************/d=0;s=0;for(i=1;i<=5;i++)d=d*n;*value=d;for(i=1;i<=3;i++){s=s+c1%10;/******************found******************/d=d\10;}returns;}main(){intn,sum,v;do{printf("\nEntern(2=8);sum=fun(n,&v);printf("\n\nTheresult:\nvalue=%dsum=%d\n\n",v,sum);}标准答案:(1)d=1;s=0;(2)d=d/10;知识点解析:(1)第一个标识下的“d=0:"求出的次方一直是0,所以将“d=0:"改为"d=1"。(2)第二个标识下的“d=d\10;"是对d的截取,这里的“\"本意应该是除号,但这个在C语言中是不可识别的,所以第二个标识下“d=d\10;"应该改为“d=d/10;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defiheN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRBCs[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*out;n=fun(s,h);printf{"The%dhighestscore:\n",n);for(i=0;i标准答案:inti,max=a[0].s,n=0;for(i=1;i知识点解析:(1)要把最高分数的学生数据放在数组中,首先求出最高分数,再使用一个for循环把所有的成绩进行比较,找出最高的分数来。(2)找出所有与最高分数相等的学生,并将最高分数的人数累加。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考

温馨提示

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

评论

0/150

提交评论