版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(操作题)模拟试卷79(共7套)(共21题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:计算如下公式前n项的和,并作为函数值返回。例如,当形参n的值为10时,函数返回值为9.612558。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>doublefun(intn){inti;doubles,t;/*********found*********/s=【1】;/*********found*********/for(i=1;i<=【2】;i++){t=2.0*i;/*********found*********/s=s+(2.0*i一1)*(2.0*i+1)/【3】;}returns;}voidmain(){intn=-1;while(n<0){printf("Pleaseinput(n>0):");scanf("%d",&n);}printf("\nTheresultis:%f\n",fun(n));}标准答案:(1)0(2)n(3)(t*t)知识点解析:本题考查:变量初始化操作,需注意该变量是用做累加器还是累乘器;for循环语句。填空1:程序开始定义了变量s,但没有对其进行初始化,根据公式及后面的程序可知变量s用来存放公式的前n项和,因此该变量应初始化为0。填空2:通过for循环语句将表达式各项进行累加,结果存于变量s中,循环变量i的取值范围为1~n。填空3:根据题目要求确定表达式通项。前面已定义t=2.0*i,因此此空应填(t*t)。程序要求计算表达式的值时,一般都设定一个变量s并赋初值。如果s用来存放表达式的和,则赋初值为0;如果s用来存放表达式的积,则赋初值为1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行。也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<string.h>#include<stdio.h>#include<malloc.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++){for(i=j=0;i<N;i++)if(b[i].S>b[j].s)j=i;/*********found*********/t[k].num=b[j].num;b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0,i<N;i++)fprintf(pf,"No=%sNark=%d\n",a[i].num,a[i].s);fprintf(pf,"\n\n");}voidmain(){STUa[N]=({"A01",81},{"A02",89),{"A03",66},{"A04",87},{"A05",77},{"A06",90),{"A07",79},{"A08",61),{"A09",80),{"A10",71}};STU*porder;inti,m;system("CLS");printf("****THEOriginaldata****\n");outresult(a,stdout);printf("\nGivethenumberofthestudentswhohavebetterscoEe:");scanf("%d",&m);while(m>10){printf("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);}porder=fun(a,m)jprintf("****THERESULT****\n");printf("Thetop:\n");for(i=0;i<m;i++)printf("%s%d\n",pOrder[i].num,pOrder[i].s);free(pOrder);}标准答案:(1)t=ealloc(m,sizeof(STU));(2)t[k]=b[j];知识点解析:(1)calloc应用于分配内存空间。调用形式为(类型说明符木)calloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域,函数的返回值为该区域的首地址,(类型说明符*)用于强制类型转换。calloc函数与malloc函数的区别在于calloc函数一次可以分配n块区域。例如,ps=(structstu*)calloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的结构长度。该语句的意思是:按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。在本题中不用考虑那么复杂,根据定义类型STUb[N],*t;就可以看出*t=calloc(m,sizeof(STU))中的错误,变量t少*号。(2)t[k].num=b[j].num;的错误旨在考查对结构体概念的掌握和灵活应用程度。三、程序设计题(本题共1题,每题1.0分,共1分。)3、规定输入的字符串中只包含字母和*号。请编写函数fun,其功能是:除了字符串前导的*号之外,将串中其他水号全部删除。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是“****ABCDEFG”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<string.h>#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){inti=0;char*p=a;/*单独处理字符串前缀为’*’的情况*/while(*p&&*p==’*’){a[i]=*p;i++;p++;}/*循环判断当前指向的字符是否’*’如果不是保存*/while(*p){if(*p!=’*’)/*保存非*的字符串,并将指针移到下一个位置*/{a[i]=*p;i++;}p++;}a[i]=’\0’;}知识点解析:本题考查:指针型变量定义;while循环语句;if语句条件表达式;字符串结束标识’\0’。函数fun的功能:除了字符串前导的水号之外,将串中其他*号全部删除。解答本题,首先定义一个临时指针p,初始指向原串首地址;其次利用循环语句把字符串前导木号复制到原串;然后继续移动指针,把串中和串尾的非*号字符复制到原串;最后为修改后的字符串赋结束字符‘\0’。要删除字符串中的指定字符,通常采用保留非指定字符的方法。可以将非指定字符保留在原串,即将需要保留的字符从原串的起始位置重新赋值;也可以保留到新串,即新建一个字符串,存放要保留的字符。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:将形参S所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。例如,若s所指字符串为“asdl23fgh543df”,处理后新字符串为“asdfghdfl23543”。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>char*fun(char*s){inti,j,k,n;char*p,*t;n=strlen(s)+1;t=(char*)malloc(n*sizeof(char));p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i<n;i++){if(((s[i]>=’a’)&&(s[i]<=’z’))||((s[i]>=’A’)&&(s[i]<=’Z’))){/*********found*********/t[j]=【1】;j++;}else{P[k]=s[i];k++;}}/*********found*********/for(i=0;i<【2】;i++)t[j+i]=p[i];/*********found*********/t[j+k]=【3】;returnt;}main(){chars[80];printf("Pleaseinput:");Scanf("%s",s);printff"\nTheresultis:%s\n",fun(S));}标准答案:(1)s[i](2)k(3)’\0’或0知识点解析:填空1:将字符串s中所有字母元素赋给数组t。填空2:字符串中所有非字母元素放到字母元素后面,所以i的取值范围是0~k。填空3:最后给字符串加入结束标识’\0’。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:将S所指字符串中最后一次出现的与tl所指字符串相同的子串替换成t2所指字符串,所形成的新串放在W所指的数组中。要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为“abcdab—fabc”,t1所指串中的内容为“ab”,t2所指子串中的内容为“99”时,结果在w所指的数组中的内容应为“abcdabt99c”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){char*p,*r,*a;strcpy(w,s);/*********found*********/while(w){p=w;r=t1;while(*r)/*********found*********/IF(*r==*p){r++;p++;}else{break;}if(*r==’\0’)a=w;w++;}r=t2;while(*r){*a=*r;a++;r++;}}main(){chars[100],t1[100],t2[100],w[i00];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);}else{printf("\nError:strlen(t1)!=strlen(t2)\n");}}标准答案:(1)while(*w)(2)1f(*r==*p)知识点解析:(1)此处要判断的是值的真假,而不是地址,所以改为while(*w)。(2)c语言中关键字区分大小写,只需运行程序,就可以根据错误提示找到。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:将s所指字符串中ASCII码值为奇数的字符删除,剩余字符形成的新串放在t所指数组中。例如,若s所指字符串中的内容为“ABCDEFGl2345”,其中字符A的ASCII码值为奇数,字符1的ASCII码值也为奇数,都应当删除,其他依此类推。最后t所指的数组中的内容应是“BDF24”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<Stdio.h>#include<string.h>voidfun(char*s,chart[]){}main(){chars[100],t[100],Msg[]="Pleaseenterstrings:";printf(Msg);scanf("%s",s);fun(s,t);printf("\nTheresuitis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti,j=0,n;n=strlon(s);/*遍历整个数组*/for(i=0;i<n;i++)/*如果元素的ASCII码值为偶数*/if(s[i]%2==0){/*将元素保存到t中*/t[j]=s[i];j++;}t[j]=’\0’;}知识点解析:要删除ASCII码值为奇数的字符,也就是要保留ASCII码值为偶数的字符,由于最终是要求出剩余字符形成的新串,所以本题的算法是对原字符串从头到尾扫描,找出ASCII码值为偶数的字符并依次存入数组。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排序后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#defineN53typedefstructstudent{4longsno;5charname[10];6floatscore[3];7}STU;8voidfun(char*filename)9{FILE*fp;inti,j;10STUs[N],t;11/*********found*********/12fp=fopen(filename,【1】);13fread(s,sizeof(STU),N,fp);14fclose(fp);15for(i=0;i<N-1;i++)16for(j=i+1;j<N;j++)17/*********found*********/18if(s[i].sno【2】s[j].sno)19{t=s[i];s[i]=s[j];20s[j]=t;}21fp=fopen(filename,’’wb’’);22/*********found*********/23【3】(s,sizeof(STU),N,fp);24fclose(fp);25}26main()27{STUt[N]={{10005,’’ZhangSan’’,95,80,88},{10003,’’LiSi’’,85,70,78},{10002,’’CaoKai’’,75,60,88},{10004,’’FangFang’’,90,82,87},{10001,’’MaChao’’,91,92,77}},ss[N];28inti,j;FILE*fp;29fp=fopen(’’student.dat’’,’’wb’’);30fwrite(t,sizeof(STU),5,fp);31fclose(fp);32printf(’’\n\nTheoriginaldata:\n\n’’);33for(j=0;j<N;j++)34{printf(’’\nNo:%idName:%-8sscores.’’,t[j].sno,t[j].name);35for(i=0;i<3;i++)36printf(’’%6.2f’’,t[j].score[i]);37printf(’’\n’’);38}39fun(’’student.dat’’);40printf(’’n\nThedataaftersorting:\n\n’’);41fp=fopen(’’student.dat’’,’’rb’’);42fread(ss,sizeof(STU),5,fp);43fclose(fp);44for(j=0;j<N;j++)45{printf(’’\nNo:%1dName:%-8sScores.’’,ss[j].sno,ss[j].name);46for(i=0;i<3;i++)47printf(’’%6.2f’’,ss[j].score[i]);48printf(’’\n’’);49}50}标准答案:(1)’’rb’’(2)>(3)fwrite知识点解析:填空l:题目中要求从形参filename所指的文件中读入学生的数据,以此可以看出本空应该填写’’rb’’。填空2:此处的if语句是比较学号的大小,如果学号大就和学号小的换位,以此本空填写>。填空3:题目要求所有的学生数据均以二进制方式输出到文件中,因此本空填写fwrite。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中规定输入的字符串全部为字母,fun函数的功能是:统计a所指字符串中每个字母在字符串中出现的次数(统计时不区分大小写),并将出现次数最高的字母输出(如果有多个相同,输出一个即可)。例如对于字符串:dadbcdbabdb,对应的输出应为:b或d。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:1#include<stdio.h>2#include<stdio.h>3#include<string.h>4voidfun(chara[])5{intb[26],i,n,max;6for(i=0;i<26;i++)7/*********found*********/8a[i]=0;9n=strlen(a);10for(i=0;i=’a’&&a[i]<=’Z’)12/*********found*********/13b[a[i]-’A’]++;14elseif(a[i]>=’A’&&a[i]<=’Z’)15b[a[i]-’A’]++;16max=0;17for(i=1;i<26;i++)18/*********found*********/19if(b[max]>b[i])20max=i;21printf(’’出现次数最多的字符是:%c\n’’,max+’a’);22}23main()24{chara[200];25printf(’’请输入一个待统计的字符串:’’);scanf(’’%s’’,a);26fun(a);27}标准答案:(1)b[i]=0;(2)b[a[i]-’a’]++;(3)if(b[max]知识点解析:要统计字符串中每个字符在这个字符串中出现的次数,可以设数组b中存放每个字符出现的次数b[0]存放字符a的次数,b[1]存放字符h的次数……。统计之前为数组b各元素赋初值为0。然后依次取出字符串的每个字符进行判断,使对应数组b加1。max初始值为0,与数组b中的每个元素进行比较,如果小于,就把下标进行交换。(1)数组a存放的是字符串,数组b为整型数组存放的是每个字符的个数,应将数组b每个元素初始化为0。(2)小写字母的ASCII码减去’a’的ASCII即为相应字母的下标值,相应下标值的数组元素的值增加1。(3)最大值小于被比较数时,把被比较数的下标值赋给max,max中存放的总是当前最大值。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:根据以下公式计算s,并将计算结果作为函数值返回,n通过形参传入。例如,若n的值为11时,函数的值为1.833333。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4#include<string.h>5floatfun(intn)6{78}9voidmain()10{11intn;12floats;13system(’’CLS’’);14printf(’’\nPleaseenterN:’’);15scanf(’’%d’’,&n);16s=fun(n);17printf(’’Theresultis:%f\n’’,s);18}标准答案:1floatfun(intn)2{3inti,s1=0;4floats=0.0;5for(i=1;i<=n;i++)6{7s1=s1+i;/*求每一项的分母*/8s=s+1.0/s1;/*求多项式的值*/9}10returns;11}知识点解析:此类计算表达式值的程序,首先需要根据题意分析表达式的规律,得出通项,然后再完成程序语句。本题中表达式的规律是1+2+…+n的倒数之和,那么可以通过for循环语句来实现第1项到第n项的变化。其实就是累加算法,方法是先根据题目要求定义变量,注意该变量的数据类型,然后对其进行初始化操作,因为该变量的作用是累加器,所以初始值应为0(或0.0,根据变量数据类型来确定),再通过for循环语句来完成累加过程。本题中s1用来表示每一项的分母,每一项的分母都是由前一项分母加项数。注意,由于s1定义成一个整型,所以在s=s+1.0/s1语句中不能把1.0写成1。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:将一副扑克牌编号为1,2,3,…,53,54,以某种特定的方式洗牌,这种方式是将这副牌分成两半,然后将它们交叉,并始终保持编号为1的牌在最上方,如第一次这样洗牌后的结果为:1,28,2,29,…,53,27,54。两次洗牌后的结果为:1,41,28,15,2,42一一,53,40,27,14,54。程序的功能是:输出经过n次这样洗牌后的结果。请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(inta[55],intn)finti,k;/*********found*********/int【1】[55];for(i=0;i<n;i++){for(k=1;k<=27;k++){b[2*k一1]=a[k];/*********found*********/b【2】*k]=a[k+27];}for(k=1;k<=54;k++)/*********found*********/a[k]=【3】;}}main(){intm.a[55],i;for(i=1;i<55;i++)a[i]=i;printf("请输入洗牌次数:");scanf("%d",&m);fun(a,m);for(i=1;i<55;i++)printf("\n");}标准答案:(1)b(2)2(3)b[k]知识点解析:填空1:for循环中使用了一个数组b,用来临时存放交换位置后的扑克牌,C语言中变量需要先声明后使用,所以填空(1)处需要声明一个数组b。答案为b。填空2:第二个for循环是将数组a中前一半元素(即1一27编号的扑克牌)放入数组b的奇数位置,将数组a中的后一半元素(即28—54编号的扑克牌)放入数组b的偶数位置,实现扑克牌的交叉洗牌。所以填空(2)处是数组b的起始值为2的偶数下标2k,答案为2。填空3:由于数组b属于函数中的临时变量,所以将数组a的元素交叉存储到数组b后,还需要将数组b的元素依次赋值给数组a,第三个for循环实现的功能是将数组b赋值给数组a,所以填空(3)处需要填入对应下标为k的数组b的元素,答案为b[k]。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中,函数fun的功能是:判断输入的任何一个正整数n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列,否则输出“不能分解”。例如:当输入100时,输出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>voidfun(intn){intj,b,c,m,f1ag=0;for(b=1;b<=n/2;b++){/*********found*********/n=m;c=b;while(m!=0&&m>=c){/*********found*********/m=m—c;c++}/*********found*********/if(m!=0){printf("%d=",n);for(j=b;j<c一1;j++)printf("%d+",j);printf("%d\n",j);f1ag=1;}}if(f1ag=0)printf("不能分解\n");}main(){intn;printi("请输入一个整数:");scanf("%d",&n);fun(n);}标准答案:(1)m=n;(2)m=m一c;c++;(3)if(m==0)知识点解析:(1)每次循环,程序需要对n执行减去连续的正整数序列来判断n是否刚好为0,即n是否是连续的正整数序列之和,所以需要使用临时变量m寄存n的值,每次循环对m执行减运算操作,不满足继续下一轮。另外,程序声明变量m时,未初始化它的值,所以此处应该修改为:m=n。(2)语法错误。C语言中每个语句必须以分号结束,所以应修改为:m=m一c;c++;。(3)题目判断n是否是连续的正整数序列之和,若是,则输出所有序列,程序中m依次减去连续的正整数,当m为0时,表示m(即n)满足条件,再输出当前序列中的每个正整数,所以此处判断条件反了,应修改为:if(m=0)。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成(字符串长度大于等于2)。例如字符串:uvwxyz满足要求;而字符串:uvxwyz不满足要求。注意:部分源程序存放在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun指定的部位填入所编写的若干语句。试题程序:#1nclucle<stclio.h>#include<string.h>voidNONO();intfun(char*t){}main(){chars[26];printf("请输入一个字母组成的字符串:");gets(s);if(fun(s))print:f("%s是由连续字母组成的字符串*\n",s);elseprintf("%s不是由连续字母组成的字符串!\n",s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chars[26],*p;fp;iopen("c:\\test\\in.dat","12");wf=fopen(“c:\\test\\out.dat","w");for(i=0;i<10;i++){fgets(s,26,fp);p=strchr(s,’\n’);if(p)*p=0;if(fun(s))fprinti(wf,"%s\n",s+2);elsefprintf(wf,"%s\n",strrev(s));}fclose(fp);fclose(wf);}标准答案:intfun(char*t){intfen=str1en(t);if(1en<2){return0;}charbefore_ch=t[0];charcurrent_ch;intf1ag=1;for(inti=1;t[i]!=’\0’;++i){current_ch=t[i];iffbefore_ch!=current_ch一1){f1ag=0;break;}before_ch=current_ch;}returnf1ag;}知识点解析:函数fun的功能是判断指针t指向的字符串是否是由连续递增的字母构成,返回值为整数,0代表不满足条件。根据题目要求,字符串长度必须大于等于2,所以首先需要对t指向的字符串进行长度判断,小于2的字符串返回0。接着需要对字符串中的连续字符,逐个进行比较。C语言中字符变量可以当作整数使用,所以当前字符只有是前一个字符的ASCII码+1,才能说它们是连续递增字母序列,然后比较后一个字符与当前字符的ASCII码,如果字符串中的所有字符都满足条件,则返回1;否则说明该字符串不满足要求,此时设置flag=0,后面的字符也就不需要再比较了,跳出循环返回即可。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<stdio.h>3#defineN204voidfun(int*a)5{inti,x,n=0;6x=rand()%20;7/*********found*********/8while(n<【1】)9{for(i=0;i<n,i++)10/*********found*********/11if(x==a[i])12【2】;13/*********found*********/14if(i==【3】)15{a[n]=x;n++;}16x=rand()%20;17}18}19main()20{intx[N]={0},i;21fun(x);22printf("Theresult:\n");23for(i=0;i<N;i++)24{printf("%4d",x[i]);25if((i+1)%5==0)printf("\n");26}27printf("\n\n");28}标准答案:(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,计算如下公式的值。例如,若输入5,则应输出一0.283333。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4doublefun(intm)5{6doublet=1.0;7inti;8for(i=2;i<=m;i++)9/*********found*********/10t=1.0—1/i;11/*********found*********/12;13}14voidmain()15{intm;16system("CLS");17printf("\nPleaseenter1integetnumbers:\n");18scanf("%d",&m);19printf("\n\nTheresultis%1f\n",20fun(m));21}标准答案:(1)t-=1.0/i;(2)returnt;知识点解析:(1)变量t存放公式的和,通过循环语句进行复合运算,因此此处应改为t-=1.0/i.,注意此处应进行变量的类型转换。(2)循环结束后应将和值返回给主函数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:求ss所指字符串中指定字符的个数,并返回此值。例如,若输入字符串“123412132”,输入字符为“1”,则输出3。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>#def2neM81intfun(char*ss,charc){}voidmain(){chara[M],ch;system("CLS");printf("\nPleaseenterastring:");gets(a);printf("\nPleaseenterachar:");ch=getchar();printf("\nThenumberofthecharis:%d\n",fun(a,ch)),}标准答案:intfun(char*ss,charc){inti=0;for(;*ss!=’\0’;ss++)if(*ss==c)i++;/*求出ss所指字符串中指定字符的个数*/returni;}知识点解析:从字符串中查找指定字符,需要使用循环判断结构,循环语句用来遍历字符串,循环条件为字符串没有结束,即当前字符不是‘\0’,判断语句用来判断当前字符是否为指定字符。最后返回指定字符的个数。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#inelude<stdio.h>#de6neN8typedefstruet{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i<N;i++)/******found******/if(___1___==year)/******found******/k[n++]=___2___;/******found******/return(___3___);}main(){STUstd[N]={{1,1984,2,15},{2,1983,9,21},{3,1984,9,1},{4,1983,7,15},{5,1985,9,28},{6,1982,11,15},{7,1982,6,22},{8,1984,8,19}};STUk[N];inti,n,year;printf("Enterayear:");seanf("%d",&year);n=fun(std,k,year);if(n==0)printf("\nNopersonwasbornin%d\n",year);else{printf("\nThesepersonswerein%d、\n",year);for(i=0;i<n;i++)printf("%d%d-%d-%d\n",k[i].hum,k[i].year,k[i].month,k[i].day);}}标准答案:(1)std[i].year(2)std[i](3)n知识点解析:本题考查:数组变量判断;for循环语句;函数返回值。本题要求从给定的人员数据中找出与指定出生年份相同的记录存入k中,并返回符合条件的人数。填空1:此空判断结构体变量中的年份与year是否相等,所以应填std[i].year。填空2:把符合条件的记录依次存入实参k中,所以应填std[i]。填空3:函数返回满足条件的人数,所以应填n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把三个串"abc""CD""EF"连接起来,结果是"abc-CDEF"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>voidfun(charstr[][10],intm,char*pt){/******found******/Intk,q,i;for(k=0;k<m;k++){q=strlen(str[k]);for(i=0;i<q;i++)/******found******/pt[i]=str[k,i];pt+=q;pt[0]=0;}}main(){intm,h;chars[10][10],p[120];printf("\nPleaseenterm:");scanf("%d",&m);gets(s[0]);printf("\nPleaseenter%dstring:\n",m);for(h=0;h<m;h++)gets(s[h]);fun(s,m,P);printf("\nTheresultis:%s\n",p);}标准答案:(1)intk,q,i;(2)pt[i]=str[k][i];知识点解析:本题考查:C语言的书写和语法性错误,这类错误比较简单,只要编译程序,根据错误提示修改即可。(1)关键字书写错误,定义整型变量的关键字应使用int,而非Int。(2)数组元素表示错误,表示二维数组元素,应使用方括号将行坐标和列坐标分别括起来,即str[k,i]应改为str[k][i]。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:找出2×M整型二维数组中最大元素的值,并将此值返回调用函数。注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineM4intfun(inta[][M]){}main(){intarr[2][M]=}5,8,3,45,76,-4,12,82};voidNONO();printf("max=%d\n",fun(arr));NONO();}voidNONO()/本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/{FILE*wf;intarr[][M]={5,8,3,90,76,-4,12,82};wf=fopen("out.dat","w");fprintf(wf,"max=%d\n",fun(arr));fclose(wf);}标准答案: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=a[i][j];returnmax;}知识点解析:本题考查:求数组的最大值,需要运用循环语句,因为数组是二维数值,所以应使用二层加for循环嵌套。使用for循环语句时需要注意循环变量的取值范围。此类求最大值或最小值的问题,可以采用逐个比较的方式,要求对数组中所有元素遍历一遍,并且从中找出数组最大值或最小值。首先定义变量max存放数组中的第一个元素的值,然后利用for循环逐个找出数组中的元素,并与max比较,如果元素值大于懈,则将该值赋于max,循环结后maX的值即为数组最大值,最后将该值返回。说明:该类题目考查较多,要掌握逐行比较的方法。对于m*n二维数组,如采用逐行查找方法.代码实现为:for(i=0;i<m;i++)for(j=0;j<n;j++)国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共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所指数组中数据的个数。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#1nc上ude<stdio.n>#defineN9/*********found*********/voidfun(int【1】,intn){inti,j,max,rain,px,pn,t;/*********found*********/for(i=0;i<n一1;i+=【2】){max=min=a[i];px=pn=i;/*********found*********/for(j=【3】;j<n;j++){if(max<a[j]){max=a[j];px=j;}if(rain>a[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]=rain;a[pn]=t;)}}main(){intbin]={1,4,2,3,9,6,5,8,7},i;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)pri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 17980.32-2026农药田间药效试验准则第32部分:杀菌剂防治辣椒疫病
- 2026年大学第四学年(汽车运用与维修)汽车发动机维修试题及答案
- 潍坊市临朐县九山镇初级中学2026年初三教学质量监测(二)英语试题含解析
- 新疆乌鲁木齐天山区重点达标名校2026年高中毕业班3月份模拟(梧州二模)考试物理试题试卷含解析
- 山东省青岛开发区实验2026届初三第二学期第二次综合练习英语试题文试卷含解析
- 浙江省湖州市十一中2025-2026学年初三开学复习质量检测试题数学试题含解析
- 南通启秀中学2025-2026学年第二学期初三年级第二次质量调查英语试题学科试卷含解析
- 四川省成都市邛崃市2026年中考模拟测试语文试题(二)含解析
- 四川省德阳市中学江县市级名校2026届初三下学期摸底(期末)考试物理试题含解析
- 2025 高中新闻类阅读理解之社交媒体新闻传播课件
- 2025年学历类高职单招智能制造类-化学参考题库含答案解析(5套试卷)
- 网络舆情培训课件
- 北航大航空航天概论课件第7章 空间技术与空间科学
- HACCP体系知识培训课件
- 2025年中青班笔试题目及答案
- 学校管理特色工作汇报
- 《婚姻家庭继承法(第八版)》课件全套 房绍坤
- 第8课 动物的耳朵 课件 青岛版六三制一年级科学下册
- 初中数学备课教案模板
- 脉管炎护理疑难病例讨论
- 2026届天津市部分区(蓟州区)中考英语考试模拟冲刺卷含答案
评论
0/150
提交评论