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

下载本文档

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

文档简介

国家二级C语言机试(操作题)模拟试卷47(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的作用是:不断从终端读入整数,由变量a统计大于0的个数,用变量c来统计小于0的个数,当输入0时结束输入,并通过形参pa和pb把统计的数据传回主函数进行输出。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(int*px,int*py){/*********found*********/int【1】;Scarlf("%d",&k);/*********found*********/while【2】{if(k>0)a++;if(k<0)b++;/*********found*********/【3】;}*px=a;*py=b;}main(){intx,y;fun(&x,&y);printf("x=%dy=%d\n",x,y);}标准答案:(1)a=0,b=0,k(2)(k!=0)(3)scanf("%d",&k)知识点解析:填空1:下面的seanf函数用到变量k,需要提前定义,在while循环中使用了临时存放正、负数个数的变量a,b,因此也要提前定义。填空2:根据题意,输入0时结束程序,因此当k!=0时进入循环记录正负数的个数。填空3处:需要不断从终端输入整数,因此在循环体内添加输入操作。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序modi1.c的主函数中,将a、b、c三个结点链成一个单向链表,并给各结点的数据域赋值,函数fun()的作用是:累加链表结点数据域中的数据作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>typedefstructlist{intdata;structlist*next;}LIST;intfun(LIST*h){LIST*p;/*********found*********/intt;p=h;/*********found*********/whple(*p){/*********found*********/t=t+p.data;p=(*p).next;}returnt;}main(){LISTa,b,c,*h;a.data=34;b.data=51;c.data=87;c.next=’\0’;h=&a;a.next=&b;b.next=&c;printf("总和=%d\n",fun(h));}标准答案:(1)intt=0;(2)while(p)或while(p!=NULL)(3)t=t+p一>datal.知识点解析:(1)题目中变量t是用来存放累加和的,因此必须初始化。(2)题目中*p是结构体,不能转化为bool型。(3)p是指针,只能用p一>,不能用p.。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。注意:部分源程序存在PROG1.C中,请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<stdlib.h>#defineM14voidNONO();voidfun(char(*t)[M],int*a,int*c){}voidget(char(*s)[M]){inti,j;for(i=0;i<M;i++){for(j=0;j<M;j++){s[i][j]=65+rand()%12;printf("%c",s[i][j]);)printf("\n");}}main(){chara[M][M];intx,y;get(a);fun(a,&x,&y);printf("A=%dc=%d\n",x,y);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,j,x,y;chara[M][M];fp=fopen("c:\test\sa.dat","r");wf=fopen("c:\test\out.dat","w");for(i=0;i<M;i++){for(j=0;j<M;j++){fscanf(fp,"%c",&a[i][j]);)}fun(a,&x,&y);fprintf(wf,"A=%d\n",x);fprintf(wf,"C=%d\n",y);fclose(fp);fclose(wf);}标准答案:inti=0,j=0;//循环统计的下标*a=0;//初始化a字符统计的个数*c=0,//初始化c字符统计的个数for(i=0;i<M;i++)//行{for(j=0;j<M,j++)//列{if(t[i][j]=’A’)//字符是a,计数(*a)++;if(t[i][j]==’c’)//字符是c,计数(*c)++;}}知识点解析:对二维数组的行列分别循环,行优先,查找数组中元素为A或者C,分别对其进行计数。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回,并将大于平均值的数放在形参y所指数组中,在主函数中输出。例如,有10个正数:46、30、32、40、6、17、45、15、48、26,其平均值为30.500000。主函数中输出:4632404548。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<stdio.h>3#defineN104doublefun(doublex[],double*y)5{inti,j;doubleav;6/*********found*********/7av=【1】;8/*********found*********/9for(i=0;i<N;i++)10av=av+【2】;11for(i=j=0;i<N;i++)12/*********found*********/13if(x[i]>av)y[【3】]=x[i];14y[j]=-1;15returnav;16}17main()18{inti;doublex[N],y[N];19for(i=0;i<N;i++)20{x[i]=rand()%50;21printf(’’%4.of’’,x[i]);}22printf(’’\n’’);23printf(’’\nTheaverageis:%f\n’’,fun(x,y));24for(i=0;y[i]>=0;i++)25printf(’’%5.1f’’,y[i]);26printf(’’\n’’);27}标准答案:(1)0.0(2)x[i]/N(3)j++知识点解析:填空1:通过上面的程序可以看出此空考的是给变量赋初值,av代表的是平均值,因此av的初值应该是0.0。填空2:通过for循环可知,此空代表求平均值,因此应该填写x[i]/N。填空3:先把大于平均值的数放在形参y所指数组中,然后使下标值加1,因此此空应该填j++。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:依次取出字符串中所有的数字字符,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<stdio.h>3#include<conio.h>4voidfun(char*s)5{6inti,j;7for(i=0,j=0;s[i]!=’\0’;i++)8if(s[i]>=’0’&&s[i]<=’9’)9/*********found*********/10s[j]=s[i];11/*********found*********/12s[j]=’’\0’’;13}14voidmain()15{16charitem[80];17system(’’CLS’’);18printf(’’\nEnterastring:’’);19gets(item);20printf(’’\n\nThestringis:%s\n’’,item);21fun(item);22printf(’’\n\nThestringofchangingis:%s\n’’,item);23}标准答案:(1)s[j++]=s[i];(2)s[j]=’\0’;知识点解析:题目要求依次取出字符串中所有的数字字符,因此将元素s[i]存入s[j]后要使j加1,为下次存储做准备。s[j]=’’\0’’;是一个语法错误。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写一个甬数,其功能是:从传人的num个字符中找出最长的一个字符串,并通过形参指针max传回该串地址(用****作为结束输入的标识)。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#include<stdio.h>3#include<string.h>4#include<stdlib.h>5char*fun(char(*a)[81],intnum,char*max)6{78}9voidmain()10{11FILE*wf;12charss[10][81],*ps=NULL;13chars[3][81]={’’abcd’’,’’deg’’,’’diegns’’},*p=NULL;14inti=0,n;15system(’’CLS’’);16printf(’’输入若干个字符串:’’);17gets(ss[i]);18puts(ss[i]);19while(!strcmp(ss[i],’’****’’)==0)/*用4个星号作为结束输入的标志*/20{21i++;22gets(ss[i]);2324puts(ss[i]);25}26n=i:27ps=fun(ss,n,ps);28printf(’’\nmax=%s\n’’,ps);29/*****************/30wf=fopen(’’out.dat’’,’’w’’);31p=fun(s,3,p);32fprintf(wf,’’%s’’,p);33fclose(wf);34/*****************/35}标准答案:1char*fun(char(*a)[81],intnum,char*max)2{3inti=0;4max=a[0];5for(i=0;i知识点解析:解答本题之前,首先应该明白ss是一个指向一维数组的指针变量,max是指向指针的变量,所以引用变量时要注意加上*。本程序使用循环语句遍历字符串数组,使用条件语句判断该字符串是否最长。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参s所指字符串中下标为奇数的字符按ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符数组中,形成一个新串。例如,形参S所指的字符为“baawrskjghzlieda”,执行后P所指字符数组中的字符串应为“aachjlsw”。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#lnclude<stdio.h>voidfun(char*s,char*p){inti,j,n,x,t;n=0;for(i=0;s[i]!=’\0’;i++)n++;for(i=1;i<n-2;i=i+2){/*********found*********/【1】;/*********found*********/for(j=【2】+2;j<n;j=j+2)if(s[t]>s[j])t=j;if(t!=i){x=s[i];s[i]=s[t];sit]=x;}}for(i=1,j=0;i<n;i=i+2,j++)p[j]=s[i];/*********found*********/p[j]=【3】;}main(){chars[80]="baawrskjghzlicda",p[50];printf~("\nTheoriginalstringis:%s\n",s);fun(s,p);prLntf("\nTheresultis:%s\n",p);}标准答案:(1)t=i(2)i或t(3)’\0’或0知识点解析:本题中第1个for循环的作用是得到字符串的长度,第2个for循环的作用是对下标为奇数的字符按ASCII码大小排序,最后将排好序的字符取出。填空1:取出字符串中下标为奇数的字符,所以将下标i赋值给中间变量t。填空2:此处for循环语句的作用是实现对下标为奇数的元素进行排序操作,所以循环变量初值应填入i或t;。填空3:将下标为奇数的字符取出后,存入p所指的数组中,最后不要忘记在数组最后加入字符串结束标识’\0’。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:将s所指字符串的正序和反序进行连接,形成的新串放在t所指的数组中。例如,当s所指字符串为“ABCD”时,t所指字符串中的内容应为“ABCDDCBA”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<string.h>/*********found*********/voidfun(chars,chart){inti,d;d=strlen(s);for(i=0;i<d;i++)t[i]=s[i];for(i=0;i<d;i++)t[d+i]=s[d-1-i];/*********found*********/t[2*d-1]=’\0’;}main(){chars[100],t[100];printf("\nPleaseenterstrings:");scanf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);}标准答案:(1)voidfun(char*s,char*t)(2)t[2*d]=’\0’;或t[d+i]=’\0’;或t[2*d]=0;或t[d+i]=0;知识点解析:(1)从调用函数来看,函数传递的是数组,所以函数的形参应为指针。(2)循环结束后回文字符的个数为2*d个,因为数组下标是从0开始的,所以最后一个字符的下标为2*d-1,在最后一个字符的后面加上结束符’\0’,因此为t[2*d]=’\0’;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,其功能是:把低于平均分的学生数据放人b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}voidmain(){STRECs[N]={{"GA05",85},{"GA03",76),{"GA02",69),{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};STRECh[N];inti,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichislowerthan%7.3f:\n",n,ave);for(i=0;i<n;i++)/*输出成绩低于平均值的学生记录*/printf("%s%4.1f\n",h[i].num,h[i].s);printf("\n");}标准答案:doublefun(STREC*a,STREC*b,int*n){inti,j=0;doubleav=0.0;for(i=0;i<N;i++)av=av+a[i].s;av=av/N;/*求平均值*/for(i=0;i<N;i++)if(a[i].s<av)b[j++]=a[i];/*将低于平均值的学生记录存入结构体数组b中*/*n=j;/*指针传回低于平均值的学生人数*/returnav;/*返回平均值*/}知识点解析:本题使用循环语句和条件判断语句来实现程序操作,第1个循环语句的作用是求出总分,然后求出平均分av。第2个循环的作用是将分数低于平均分的学生记录存入结构体数组b中。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:在任意给定的9个正整数中找出按升序排列时处于中间的数,将原数据序列中比该中间数小的数用该中间数替换,位置不变,在主函数中输出处理后的数据序列,并将中间数作为函数值返回。例如,有9个正整数:1572387582145按升序排列时的中间数为:8处理后主函数中输出的数列为:8882387882145请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN9intfun(intx[]){inti,j,k,t,mid,b[N];for(i=0;i<N;i++)b[i]=x[i];for(i=0;i<=N/2;i++){k=i;for(j=i+1;j<N;j++)if(b[k]>b[J])k=j;if(k!=i){/*********found*********/t=b[i];b[i]=【1】;b[k]=t;}}/*********found*********/mid=b[【2】];for(i=0;i<N;i++)/*********found*********/if(x[i]【3】mid)X[i]=mid;returnmid;}main(){inti,x[N]={1,5,7,23,87,5,8,21,45};for(i=0;i<N;i++)printf("%d",x[i]);printf("\nThemiddatais:%d\n",fun(x));for(i=0;i<N;i++)printf("%d",x[i]);printf("\n");}标准答案:(1)b[k](2)4或N/2(3)<知识点解析:数组中的9个数任意排列,要找到按升序排列时处于中间位置的数,应首先对数组进行升序排列。因为只需找到中间位置的数即可,故不必对整个数组进行排序,只需要排列出数组的前半部分。找到中间数后,遍历原数组,将小于中间数的元素进行替换。填空1:利用选择算法排序,先指定一个元素为最小,用这个数与其后的所有数进行比较,若找小于此数,则进行替换。此处考查替换操作。填空2:元素mid存放中间位置的数,数组长度为9,因此中间元素数为b[4]。填空3:遍历数组,当元素小于中间位置的数(即mid)时,进行替换。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun的功能是:根据整型参数m,计算如下公式的值。例如,若m=2000,则应输出0.000160。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/*********found*********/fun(intm){doubley=0,d;inti;/*********found*********/for(i=100,i<=m,i+=100){d=(double)i*(doub2e)i;y+=1.0/d;}return(y);}voidmain(){intn=2000;system("CLS");printf("\nTheresultis%1f\n",fun(n));}标准答案:(1)doublefun(intm)(2)for(i=100;i<=m;i+=100)知识点解析:(1)题目要求在函数fun中求级数前m项和,可用循环语句,每次计算级数中的一项,然后累加。第一处错误在于定义fun(intm),由函数的返回值y可知此处应该定义为doublefun(intm)。(2)for(i=100,i<=m,i+=100)中是一个简单的语法错误。for循环语句的形式为for(表达式1;表达式2;表达式3),其表达式之间应以";"相隔。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,该函数的功能是:判断字符串是否为回文,若是,则函数返回1,主函数中输出"YES",否则返回0,主函数中输出"NO"。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defineN80intfun(char*sir){}main(){chars[N];FILE*out;char*test[]={"1234321","123421","123321","abcdCBA"};inti;printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");/*********found*********/out=fopen("out.dat","w");for(i=0;i<4;i++)if(fun(test[i]))fprintf(out,"YES\n");elsefprintf(out,"NO\n");fclose(out);/*********found*********/}标准答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p)/*将指针p置位到字符串末尾,并统计字符数*/{n++;p++;}for(i=0;i<n/2;i++)/*循环比较字符*/if(str[i]===str[n-1-i]);/*相同,什么都不作*/else/*不同,直接跳出循环*/{fg=0;break;}returnfg;}知识点解析:判断回文就是将第一个字符与最后一个字符比较,第二个字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都相同,那么这个字符串就是回文,否则不是。程序中循环语句用来遍历字符串,条件语句用来判断当前字符与对应位置的字符是否相同。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]…中,把偶数从数组中删除,奇数个数通过函数值返回。例如,若a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7,删除偶数后,a所指数组中的数据为:9,1,3,5,7,返回值为5。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i<n;i++)/*********found*********/if(a[i]%2==【1】){/*********found*********/a[j]=a[i];【2】;}/*********found*********/return【3】;}main(){intb[N]={9,1,4,2,3,6,5,8,7},i,n;printf("\nTheoriginaldata:\n");for(i=0;i<N;i++)printf("%4d",b[i]);printf("\n");n=fun(b,N);printf("\nThenumberofodd:%d\n",n);printf("\nTheoddnumber:\n");for(i=0;i<n;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)1(2)j++(3)j知识点解析:本题考查:if语句条件表达式;自增、自减运算符;函数返回值。填空1:根据题目要求,需进行奇偶数的判定,可以通过if条件语句来判断数组元素是否为奇数,如果元素不能被2整除,则为奇数,所以填入if(a[i]%2==1)。填空2:将为奇数的元素重新存放到数组的前面,同时下标增1。填空3:函数返回值需要返回数组中奇数的个数,因此返回变量j。奇数和偶数的判定方法,对2求余运算,结果为0是偶数,结果为1是奇数。自增1、自减1运算符:自增1运算符记为“++”,其功能是使变量的值自增1;自减1运算符记为“一一”,其功能是使变量值自减1。自增l、自减1运算符均为单目运算符,具有右结合性,有以下几种形式:++i:i自增1后再参与其他运算。一一i:i自减1后再参与其他运算。i++:i参与运算后,i的值再自增1。i一一:i参与运算后,i的值再自减1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若numl和num2分别为49和2l,则输出的最大公约数为7;若numl和hum2分别为27和81,则输出的最大公约数为27。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intfun(inta,intb){intr,t;if(a<b){/*********found*********/t=a;b=a;a=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;}/*********found*********/return(a);}voidmain(){inthum1,hum2,a;printf("Inputhumlnum2:");scani("%d%d”,&nurn1,&num2);printf("hum1=%dnum2=%d\n\n",num1,hum2);a=fun(num1,hum2);printf("Themaximuncommondivisoris%d\n\n",a);}标准答案:(1){t=a;a=b;b=t;}(2)return(b);或returnb;知识点解析:本题考查:return语句,功能是计算表达式的值,并将其返回给主调函数。求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将m除以n(m>n)得余数r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。程序首先判断参数a和b的大小,如果a<b则进行交换,这里是一个数学逻辑错误,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b。当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b。三、程序设计题(本题共1题,每题1.0分,共1分。)3、规定输入的字符串中只包含字母和*号。编写函数fun,其功能是:删除字符串中所有的*号。编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是“ABCDEFG”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(char*a){}voidmain(){chars[81];print:f("Enterastring:\n");gets(s);fun(s);print:f("Thestringafterdeleted:\n");puts(s);}标准答案:voidfun(char*a){inti,j=0;for(i=0;a[i]!=’\0’;i++)if(a[i]!=’*’)a[j++]=a[i];/*若不是要删除的字符’*’则保留*/a[j]=’\0’;/*最后加上字符串结束符’\0’*/}知识点解析:本题考查:删除字符串中所有*号,需用循环语句遍历字符串,用判断语句判断字符是否为*号,由此可以决定该程序应使用循环判断结构。用循环操作从字符串开始往后逐个进行比较,若不是要删除的字符(用if(a[i]!=’*’)来控制)则保留。变量i和j用来表示原字符串的下标和删除*号后新字符串的下标。注意,下标变量j要从0开始,最后还要加上字符串结束标识‘\0’。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则调换后为:6、7、8、9、5、1、2、3、4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN9voidfun(inta[],intn){inti,t,P;/**********found**********/P=(n%2==0)?n/2:n/2+___1___;for(2=0;i标准答案:(1)1(2)i(3)a[p+i]知识点解析:函数fun的功能是将形参a所指数组中的前半部分元素中的值和后半部分元素中的值对换。第一空:“p=(n%2==0)?n/2:n2+__1__;”和“a[i]=a[p+__2__];”“n%2==0”判断是否是偶数,a[i]和a[p+__2__]交换,如果n是偶数,a[0]和a[n/2]交换,如果n是奇数,那么a[0]和a[n/2+1]交换,依此类推,故n为偶数时a[i]和a[i+n/2]交换,n为奇数时a[i]和a[i+n/2+1]交换。因此如果n是奇数的话,p应该等于n/2+1,故第一空处应为“1”。第二空:由上分析可知,a[i]和a[i+p]交换,故第二空应为“i”。第三空:“t=a[i];a[i]=a[p+i];”,故第三处应该是把a[i]赋值给a[p+i],a嘲保存在t中,故第三空应为“a[p+i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。例如,输入的数为:551234,输出结果应当是:a=55.0,b=34.0,c=12.0。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#includevoidfun(float:*a,float*b,float*c){/**********found**********/float*k;if(*a<*b){k=*a;*a=*b;*b=k;)/**********found**********/if(*a>*c){k=*c;*c=*a;*a=k;}if(*b<*c){k=*b;*b=*c;*c=k;}}main(){float:a,b,c;print:f("Inputabc:");scanf("%f%f%f",&a,&b,&c);printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);fun(&a,&b,&c);printf("a=%4.1f,b=%4.1f,c=%41f\n\n",a,b,c);}标准答案:(1)floatk;(2)if(*a<*c)知识点解析:函数对三个数进行两两比较,实现判断。(1)第一个标识下的变量k是在比较过程中,临时存放数据的变量,因此k不应是指针,所以将“float*k”改为“floatk”。(2)分析函数中第一个if语句,如果主函数中ac,则进行对调,又把大数放在c中,这样的逻辑显然是混乱的。因此第二个标识下“if(*a>*c)”应该改为“if(*a<*c)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[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},{"GA17",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,mex=a.[0].s,n=0;for(i=1;i知识点解析:程序功能是把分数最高的学生数据放在h所指的数组中。(1)要把最高分数的学生数据放在数组中,首先求出最高分数,再使用一个for循环把所有的成绩进行比较,找出最高的分数来。(2)找出所有与最高分数相等的学生,并将最高分数的人数累加。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#includeintfun(inta,intb,intc){intt;/************found************/t=(a>b)?(b>c?b:(a>c?c:_____1_____)):((a>c)?_____2_____:((b>c)?c:_____3_____));returnt;}main(){inta1=3,a2=5,a3=4,r;r=fun(a1,a2,a3);printf("\nThemiddlenumberis:%d\n",r);}标准答案:(1)a(2)a(3)b知识点解析:fun函数的功能是求得三个数中间的数。第一空:语句“(a>b)?(b>c?”表示a>b>c,根据题目要求,则中间值为b,若只是满足第一个“?”前面的条件,而c>b,则选择执行“(a>c?c:_____1_____)”,当a>c时取值c,所以ac)?”是对a、c的比较选择,第三空处的“(b>c)?c”根据b、c的判断,题目已经给出了c,所以这里应该是a。第三空:第三空中对于b、c的判断选择缺少b,所以这里填“b”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includecharfun(charc){if(c>=’A’&&c<=’Z’)/*************found*************/C=C+32;if(c>=’a’&&c<=’u’)/*************found*************/c=c一5;elseif(c>=’v’&&c<=’z’}c=c-21;returnc;}main(){charc1,c2;printf("\nEnteraletter(A—Z):");c1=getchar();if(isupper(c1)){c2=fun(c1);printf(”\n\nTheletter\’%c\’changeto\’%c\’\n",c1,c2);}elseprintf("\nEnter(A—Z)!\n");}标准答案:(1)c=c+32;(2)c=c+5;知识点解析:函数的功能是将某些大写字母转换为对应小写字母之后的第五个字母。(1)第一个标识下“C=C+32;”中变量C没有定义,编译时会提示出错。根据题意,这行语句的作用是将大写字母转换为小写字母,C语句中大写字母转换为对应的小写字母是对原有ASCII码加32,小写转换为大写是减32,所以应将“C=C+32;”改为“c=c+32;”。(2)第二个标识下是将小写字母转换为其后的第五个字母,字母在a~u之间只加上5就可以了,原题中减5则是将字母转换到该字母之前的第五个字母,所以第二个标识下“c=c-5:”改为“c=c+5:”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:计算并输出例如,在主函数中从键盘给n输入20后,输出为:s=534.188884。注意:要求n的值大于1但不大于100。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#inoludedoublefun(intn){}main(){intn;doubles;printf("\n\nInputn:");scanf("%d",&n);s=fun(n);printf("\n\ns=%f\n\n",s);NONO();}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);fprintfcwf,"%lf\n",s);}fclose(rf);fclose(wf);}标准答案:inti;doublefac:1.0;doublesum=1.0;for(i=2;i<=n;i++){fac+=sqrt(i);sum+=fac;}returnsum;知识点解析:该程序功能是对题干中给出的多项式的求解。根据题干中给出的数列,首先推出每一项的表达式,然后再对多项式进行累加求和。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组std中。函数fun的功能是:找出指定出生年份的人员,将其数据放在形参k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN8typedefstruct{intnum;intyear,month,day;}STU;intfun(STU*std,STU*k,intyear){inti,n=0;for(i=0;i标准答案:(1)std[i].year(2)std[i](3)n知识点解析:第一空:比较结构体的出生年份是否等于year,std是结构体指针,指向结构体数组的首地址,因此访问一个结构体的year成员是std[i].year,因此第一空处应为“if(std[i].year==year)”。第二空:这里是将找到的数据放在形参k所指的数组中,k是指针变量,k指向结构体数组的首地址,std[i]是结构体的地址,因此等号左边也应该是地址,故第二空处应为“k[n++]=std[i];”。第三空:fun函数的返回值是满足指定条件的人数n,故第三空处是“returnfn);”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODIl.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=1;for(j=2;j<=sqrt((double)i);j++)if(i%j==0)y=0;if(y==1){/*************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、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#inolude#inolude#defitieN10typedefStruerss{charnum[10];ints;}STU;voidfun(STUa[],STU*s){}main(){STUa[N]={{"A01",81),{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;inti;voidNONO();printf("*****Theoriginaldata*****\n");for(i=0;i标准答案:inti,min=a[0].s,j=0;for(i=1;ia[i].s){/*如果最低分min仍大于当前分*/j=i;/*记住位置*/min=a[i].s;/*把当前分赋值给min*/}*s=a[j];知识点解析:(1)首先指定第一个成绩为最低分数。(2)再使用一个for循环把所有的成绩进行比较,找出最低的分数来。国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,

温馨提示

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

评论

0/150

提交评论