版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(操作题)模拟试卷3(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中。把奇数从数组中删除,偶数个数通过函数值返回。例如:若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a所指数组中的数据为:4、2、6、8,返回值为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#defineN9intfun(inta[],intn){inti,j;j=0;for(i=0;i<n;i++)/**********found**********/if(___1___==0){/**********found**********/___2___=a[i];j++;}/**********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("\nThenumberofeven:%d\n",n);printf("\nTheeven:\n");for(i=0;i<n;i++)printf("%4d",b[i]);printf("\n");}标准答案:(1)a[i]%2(2)a[j](3)j知识点解析:奇数和偶数的判断可用取余的方法来实现,a[i]%2等于0,那么a嘲是偶数,否则是奇数。函数fun的功能是把形参a所指数组中的偶数按原顺序依次存放到a中,把奇数从数组中删除。第一空:由“___1___=a[i];j++;”是将偶数元素保存起来并且计数变量加1,可知j记录了偶数元素的个数,第一空处是判断a[i]是否是偶数,因此,第一空处应为“a[i]%2”。第二空:a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]…,j初始化为0,a[j]就可以将偶数元素存放在a中,故第二空处应为“a[j]”。第三空:fun函数的返回值是偶数个数,故第三空处应为“j”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include<stdio.h>/**********found**********/intfun(n){intc;/**********found**********/if(n=1)c=10;elsec=fun(n-1)+2;return(c);}mein(){intn;printf("Entern:");scanf("%d",&n);printf("Theresult:%d\n\n",fun(n));}标准答案:(1)intfun(intn)(2)if(n==1)知识点解析:函数功能是按题目中给出的递归公式求函数值。(1)定义函数fun时,形参n并没有指定参数类型,因此,“intfun(n)”改为“intfun(intn)”。(2)根据题目要求,原题中的“if(n=1)”应该是用于判断n是否等于1,但是被错误表示成赋值表达式。因此,“if(n=1)”应该改为“if(n==1)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和“*”号。请编写函数fun,它的功能是:使字符串中尾部的“*”号不得多于n个;若多于n个,则删除多余的“*”号;若少于或等于n个,则什么也不做,字符串中间和前面的“*”号不删除。例如,字符串中的内容为:****A*BC*DEF*G*******,若n的值为4,删除后,字符串中的内容应当是:****A*BC*DEF*G****;若n的值为7,则字符串中的内容仍为:****A*BC*DEF*G*******。n的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>voidfun(char*a,intn){}main(){chars[81];intn;voidNONO();printf("Enterastring:\n");gets(s);printf("Entern:");scanf("%d",&n);fun(s,n);printf("Thestringafterdeleted:\n");putS(s);NONO(),}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,n;chars[81];in=open("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(in,"%s",s);fscanf(in,"%d",&n);fun(s,n);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}标准答案:inti=0,j=0;char*p,*t;p=t=a;while(*t)//让指针t指向串尾t++;t--;//t指向串中的最后一个字符while(*t==’*’)//当t指针当前指向的字符是“*”号时{j++;//对“*”号计数的累加器加1t--;)}//指向前一个字符t++;//跳出“*”号统计后,指针t继续指向字符串的下一个字符if(j>n)//对统计的“*”号数目大于给定的“*”号总数n{while(*p&&p<t+n)//当超出给定的“*”号数目,则开始进行截取{a[i]=*p;//截取n个“*”号i++;p++;}a[i]=’\0’;}//对新生成的串加尾符知识点解析:解题过程首先确定字符串尾,然后由串尾开始对字符进行判断,同时对“*”字符进行统计,如果大于n,就进行截取。(1)首先确定字符串的结尾,然后判断“*”号字符,并对字符串中的字符进行判断,如果字符是符号“*”则对“*”号进行统计。(2)根据统计的“*”号数目结合题目中对“*”号个数的要求,判断是执行对“*”号的截取操作,还是什么都不用做。(3)所有字符处理完后,记得在新串s的末尾加上结束符“’\0’”。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数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.0(2)n(3)(t*t)知识点解析:填空1:程序开始定义了变量s,但没有对其进行初始化,根据公式及后面的程序可知变量s用来存放公式的前n项和,因此该变量应初始化为0.0。填空2:通过for循环语句将表达式各项进行累加,结果存于变量s中,循环变量i的取值范围为1~n。填空3:根据题目要求确定表达式通项。前面已定义t=2.0*i,因此此空应填(t*t)。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:统计substr所指的字符串在str所指的字符串中出现的次数。例如,若字符串为aaas1kaaas,子字符串为as,则应输出2。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intfun(char*str,char*substr){inti,j,k,num=0;/*********found*********/for(i=0,str[i],i++)for(j=i,k=0;substr[k]==str[j];k++,j++)/*********found*********/If(substr[k+1]==’\0’){num++;break;}returnnum;}main(){charstr[80],substr[80];printf("Inputastring:");gets(str);printf("Inputasubstring:");gets(substr);printf("%d\n",fun(str,substr));}标准答案:(1)for(i=0;str[i];i++)(2)if(substr[k+1]==’\0’)知识点解析:先看循环条件for(i=0,str[i],i++),不难发现此处for循环语句的格式有误,其中表达式之间应以“;”相隔;同时很容易发现if条件语句处的关键字书写错误。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:根据以下公式求π的值(要求精度0.0005,即某项小于0.0005时停止迭代)。程序运行后,若输入精度0.0005,则程序应输出为3.140578。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<math.h>doublefun(doubleeps){}voidmain(){doublex;printf("Inputeps:”);Scanf("%lf",&x);printf("\neps:%if,PI=%lf\n",x,fun(x));}标准答案:doublefun(doubleeps){doubles=0.0,s1=1.0;intn=1;while(s1>=eps)/*当某项大于精度要求时,继续求下一项*/s=s+s1;/*求和*/{s1=s1*n/(2*n+1);/*求多项式的每一项*/n++;}return2*s;}知识点解析:首先应该定义double类型变量,并且赋初值,用来存放多项式的某一项和最后的总和。从第二项开始以后的每一项都是其前面一项乘以n/(2*n+1),程序中用s1来表示每一项,s表示求和后的结果。需注意s1和s的初值都为1.0,因为循环变量从第二项开始累加。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是将带头节点的单向链表节点数据域中的数据从小到大排序。即若原链表节点数据域从头至尾的数据为:10、4、2、8、6,排序后链表节点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BIANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;/*********found*********/p=【1】;while(p){/*********found*********/q=【2】;while(q){/*********found*********/if(p一>data【3】q一>data){t=P一>data;p一>data=q一>data;q一>data=t;}q=q一>next;}p=p一>next;}}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h一>next=NULL;for(i=0;i<N;i++){q=(NODE★)malloc(sizeof(NODE));q一>data=a[i];q一>next=NULL;if(h一>next==NULL)h一>next=p=q;else{p一>next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;P=h一>next;if(p==NULL)printf("ThelistisNULL!\n");else(printf("\nHead");do{printf("一>%d",p一>data);p=p一>next;)while(p!=NULL);printf("一>End\n");}}main(){NODE*head;inta[N]={0,10,4,2,8,6};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistaftersorting:\n");outlist(head);}标准答案:(1)h一>next(2)p一>next(3)>知识点解析:填空1:本题考查了指针变量p赋初值,使p指向链表的头节点的下一个节点,因此本空应该填写h一>next。填空2:本空考查了q的作用,q代表p的下一个数,因此次空应该填写p一>next。填空3:if判断句是比较链表中相邻两个数的大小,如果p一>data>q一>data就交换这两个数的值,因而此空填写>。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。此程序的功能是:建立一个带头节点的单向链表,并用随机函数为各节点数据域赋值。函数fun的作用是求出单向链表节点(不包括头节点)数据域中的最大值,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>typedefstructaa{intdata;structaa*next;}NODE;fun(NODE*h){intmax=-1;NODE*P;/*********found*********/p=h;while(p){if(p一>data>max)max=p一>data;/*********found*********/p=h一>next;}returnmax;}outresult(ints,FILE*pf){fprintf(pf,"\nThemaxinlink:%d\n",s);}NODE*creatlink(intn,intm){NODE*h,*p,*s;inti;h=p=(NODE*)malloc(sizeof(NODE));h一>data=9999;for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s一>data=rand()%m;s一>next=p一>next;p一>next=s;p=p一>next;}p一>next=NULL:returnh;}outlink(NODE*h,FILE*pf){NODE*p;p=h一>next;fprintf(pf,"InTheLIST:\n\nHEAD");while(p){fprintf(pf,"—>%d",p—>data);p=p一>next;)fprintf(pf,"\n");}main(){NODE*head;intm;system("CLS");head=creatlink(12,100);outlink(head,stdout);m=fun(head),printf("\nTheRESULT:\n");outresult(m,stdout);}标准答案:(1)p=h一>nex!;(2)p=p一>next;知识点解析:(1)因为链表的头节点没有数据域,所以对指针p进行初始化时,要将p指向头节点的下一个节点。(2)通过指针p的移动遍历链表,因此此处应改为p=p一>next;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,该函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,若二维数组中的数据为则一维数组中的内容应该是:333333334444444455555555。注意:部分源程序在文件PROG1.C中。请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>voidfun(int(*s)[10],int*b,int*n,intmm,intnn){4}voidmain(){FILE*wf;intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j,inta[100]={0),n=0;printf("Thematrix:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",w[i][j]);printf("\n");}fun(w,a,&n,3,4);printf("TheAarray:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");/*****************/wf=fopen("out.dat","w");for(i=0;i<n;i++)fprintf(wf,"%3d",a[i]);fclose(wf);/*****************/}标准答案:voidfun(int(*s)[0],int*b,int*n,intmm,intnn){inti,j,k=0;for(i=0;i<mm;i++)/*将二维数组s中的数据按行的顺序依次放到一维数组b中*/for(j=0;j<nn;j++)b[k++]=s[i][j];*n=k;/*通过指针返回元素个数*/}知识点解析:本题可以用两个循环来处理,由于是按行的顺序取出,所以第1个循环用于控制行下标,第2个循环用于控制列下标;若改成按列的顺序取出,则循环应改成:for(i=0;i<nn;i++)for(j=0;j<mm;j++)b[k++]=s[j][i];要注意s[j][i]的下标,不能用s[i][j]。若按行取出则列标变化较快,若按列取出则行标变化较陕,即循环嵌套时,越在内层的循环,其循环变量变化就越快。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中.函数fun()的功能是计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。例如,有10个正数:46、30、32、40、6、17、45、15、48、26,其平均值为30.500000。主函数中输出m=30。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件blank1.c中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<stdio.h>3#defineN104doublefun(doublex[],double*av)5{inti,j;doubled,s;6s=0;7for(i=0;i<N;i++)s=s+x[i];8/*********found*********/9<u>【1】</u>=s/N;10d=32767;11for(i=0;i<N;i++)12if(x[i]<*av&&*av-x[i]<=d){13/*********found*********/14d=*av-x[i];15j=<u>【2】</u>;16}17/*********found*********/18return[3];19}20main()21{inti;doublex[N],av,m;22for(i;0;i<N;i++);23{x[i]=rand()%50;24printf("%4.0f",x[i]);}25printf("\n");26m=fun(x,&av);27printf("\nTheaverageis:%f\n",av);28printf("m=%5.1f",m);29printf("\n");30}标准答案:(1)*av(2)i(3)x[j]知识点解析:填空1:从源程序中可以看出,*av代表的是平均值,而s/N用来计算平均值,故空1处应该填*av,对*av赋值。填空2:if语句用来查找最接近平均值的数,下标为i的元素最接近平均值,将此下标赋给变量j,故空2处应该填i。填空3:题目要求将小于平均值且最接近平均值的数作为函数值返回。而j表达的是最接近平均值的数在数组中的下标,故空3处应该填x[j]。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun()的功能是根据整型形参n,计算如下公式的值。A1=1,A2=,A3=,…,An=若n=10,则应输出0.617977。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件mcdi1.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4/*********found*********/5intfun(intn)6{floatA=1;inti;7/*********found*********/8for(i=2;i<n;i++)9A=1.0/(1+A);10returnA;11}12voidmain()13{intn;14system("CLS");15printf("\nPleaseentern:");16scanf("%d",&n);17printf("A%d=%lf\n",n,fun(n));18}标准答案:(1)floatfun(intn)(2)for(i=2;i<=n;i++)知识点解析:(1)根据函数的返回值可知,函数应定义为float型。(2)该题中函数fun()的作用是计算公式前n项的和。而公式的组成方式是:第n项的分母是1加第n-1项的值,分子为1。如果循环累加按题目中给出的"for(i=2;j<n;i++)"执行,当n=2时循环不会执行,程序将得不到想要的结果。因此循环变量的取值范围应包括n,循环的条件为j<=n。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是使数组上三角元素中的值乘以m。若m的值为2,a数组中的值为注意:部分源程序在文件prog1.c中。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#include<stdio.h>3#include<stdlib.h>4#include<string.h>5#defineN56voidfun(inta[][N],intm)7{89)10main()11{12inta[N][N],m,i,j;13FILE*out;14printf("***Thearray***\n");15for(i=0;i<N;i++)16{for(j=0;j<N;j++)17{a[i][j]=rand()%20;18printf("%4d",a[i][j]);19}20printf("\n");21}22m=rand()%4;23printf("m=%4d\n",m);24fun(a,m);25printf("TheResult\n");26for(i=0;i<N;i++)27{for(j=0;j<N;j++)28printf("%4d",a[i][j]);29printf("\n");30}31/*********found*********/32out=fopen("out.dat","w");33for(i=0;i<N;i++)34for(j=0;j<N;j++)35a[i][j]=i*j;36fun(a,8);37for(i=0;i<N;i++)38{for(j=0;j<N;j++)39fprintf(out,"%4d",a[i][j]);40fprintf(out,"\n");41}42fclose(out);43/*********found*********/44}标准答案:1voidfun(inta[][N],intm)2{3inti,j;4for(j=0;j<N;j++)5for(i=0;i<=j;i++)6a[i][j]=a[i][j]*m;/*上三角元素中的值乘以m*/7}知识点解析:本程序实现的是:矩阵上三角元素中的值乘以m。上三角元素下标的特点是行下标小于等于列下标,即"i<=j"。使用循环语句遍历数组元素,第1个循环用于控制列坐标,第2个循环用于控制行下标。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。例如,有下列矩阵:123451234512345若k为2,程序执行结果为345123451234512请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineM3#defineN5voidfun(int(*a)[N],intk){inti,j,p,temp;/*********found*********/for(p=1;p<=【1】;p++)for(i=0;i<M;i++){temp=a[i][0];/*********found*********/for(j=0;j<【2】;j++)a[i][j]=a[i][j+1];/*********found*********/a[i][N﹣1]=【3】;}}main(){intx[M][N]=f{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}},i,j;printf("Thearraybeforemoving:\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++).printf("%3d",x[i][j]);printf("\n"),}fun(x,2);printf("Thearrayaftermoving:\n\n");for(i=0;i<M;i++){for(j=0;j<N;j++)printf("%3d",x[i][j]),printf("\n");}}标准答案:(1)k(2)N﹣1(3)temp知识点解析:填空1:外循环p的值为数组移动的次数,试题要求第k列左移,则需要移动的次数为k,所以应填k。填空2:矩阵共N列,所以应填N﹣1。填空3:临时变量temp中存放的值为数组最左边元素的值,需要把temp放到数组的末尾,即放到a[i][N﹣1]中,所以应填temp。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#defineM10inta[M][M]={0};/*********found*********/voidfun(int**a,intm){intj,k;for(j=0;j<m;j++)for(k=0;k<m;k++)/*********found*********/a[j][k]=k*j;}main(){inti,j,n;printf("Entern:");scanf("%d",&n);fun(a,n);for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%4d",a[i][j]);printf("\n");}}标准答案:(1)voidfun(inta[][M],intm)(2)a[j][k]=(k+1)*(j+1);知识点解析:(1)在函数体fun中可知,a是一个二维整型数组变量,设置实参时,用**a表示是错误的,所以应改为voidfun(inta[][M],intm)。(2)根据输出的结果可知,应改为a[j][k]=(k+1)*(j+1);。三、程序设计题(本题共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<stclio.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=%ld\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语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram,函数的返回值为6。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>intfun(char*s){intn=0,flag=0;while(*s!=’\0’){if(*s!=’’&&flag==0){/**********found**********/___1___;flag=1;}/**********found**********/if(*s==’’)flag=___2___;/**********found**********/___3___;}returnn;}main(){charstr[81];intn;printf("\nEnteralinetext:\n");gets(str);n=fun(Str);printf("\nThereare%dwordsinthistext.\n\n",n);}标准答案:(1)n++(2)0(3)s++知识点解析:函数fun的功能是计算出形参s所指字符串中包含的单词个数。第一空:“if(*s!=’’&&fla==0)”说明找到空格了,单词的数量应加1,故第一空处应为“n++”。第二空:“if(*s!=’’&&flag==0)”和“if(*s==’’)flag=___2___;”在flag为0的情况下,n才加1,因此,第二空处是将flag置,即第二空处应为“0”。第三空:“while(*s!=’\0’)”循环的终止条件是s达到结尾,因此,在循环体内s应该不断往字符串尾移动,即第三空为“s++”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:从n(形参)个学生的成绩中统计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名学生的成绩:80.5607290.59851.58864则低于平均分的学生人数为:4(平均分为:75.5625)。请改正程序中的错误,使它能统计出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#inolude<stdio.h>#defineN20intfun(float*s,intn,float*aver){floatave,t=0.0;intcount=0,k,i;for(k=0;k<n;k++)/**********found**********/t=s[k];ave=t/n;for(i=0;i<n;i++)if(s[i]<ave)count++;/**********found**********/*aver=Ave;returncount,}main(){floats[30],aver;intm,i;printf("\nPleaseenterm:");scanf("%d",&m);printf("\npleaseenter%dmark:\n",m);for(i=0;i<m;i++)scanf("%f",s+i);printf("\nThenumberofstudents:%d\n",fun(S,m,&aver));printf("Ave=%f\n",aver);}标准答案:(1)t+=s[k];(2)*aver=ave;知识点解析:程序功能是统计出低于平均分的学生人数。(1)根据题目要求求出平均分,首先要求总分,要把所有学生成绩相加再求平均分,因此第一个标识下面的“t=s[k];”应改为“t+=s[k];”。(2)根据题目可知,比较的结果中低于平均分的分数ave放入指针aver所指的地址单元中,而变量Ave没有定义,因此,第二标识下应将“*aver=Ave;”改为“*aver=ave;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。例如,输入如下整数:876675896101301401980431451777则输出结果为:6,980注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>voidfun(int*s,intt,int*k){}main(){inta[10]={876,675,896,101,301,401,980,431,451,777},k;voidNONO();fun(a,10,&k);printf("%d,%d\n",k,a[k]);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inta[10],i,k,j;FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<10;j++)fscanf(rf,"%d",&a[j]);fun(a,10,&k);fprintf(wf,"%d,%d\n",k,a[k]);}fclose(rf);fclose(wf);}标准答案:inti,pos=0,max=*s;for(i=1;i<t;i++){if(max<*(s+i)){max=*(s+i);pos=1;}}*k=pos;知识点解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k);”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读取并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2voidfun(char*s,inta,doublef)3{4/*********found*********/5<u>【1】</u>fp;6charch;7fp=fopen("file1.txt","w");8fprintf(fp,"%s%d%\n",s,a,f);9fclose(fp);10fp=fopen("file1.txt","r");11printf("\nTheresult:\n\n");12ch=fgetc(fp);13/*********found*********/14while(!feof(<u>【2】</u>)){15/*********found*********/16putchar(<u>【3】</u>);ch=fgetc(fp);}17putchar('\n’);18fclose(fp);19}20main()21{chara[10]="Hello!";22intb=12345;23doublec=98.76;24fun(a,b,c);25}标准答案:(1)FILE*(2)fp(3)ch知识点解析:填空1:由语句fopen("iilel.txt","r")可知,fp应该是文件类型指针,故空1处应该填FILE*。填空2:feof()函数检测文件是否结束,如果文件结束返回非0值,否则返回0。故空2处应该填fp。填空3:putchar()代表输入一个字符,从ch=fgetc(fp)可以看出空3处应该填ch。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数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';知识点解析:题目要求依次取出字符串中所有的数字字符,形成新字符串。(1)将字符串s中数字字符取出存放至原字符串s中,这时下标j需要自增,即改为s[j++]=s[i];。(2)数字字符存放到字符串s后,需要在字符串结尾加字符串结束标志"\0",即改为s[j]='\0’;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数fun(),其功能是将M行N列的二维数组中的字符数据,按列的顺序依次存放到一个字符串中。例如,若二维数组中的数据为则字符串中的内容应是WSHWSHWSHWSH。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2#defineM33#defineN44voLdfun(char(*s)[N],char*b)5{67}8voidmain()9{10chara[100],wM][N]={{'W’,’W’,’W’,’W’},{’S’,’S’,’S’,’S’},{’H’,’H’,’H’,’H’}};11inti,j;12printf("Thematrix:\n");13for(i=0;i<M;i++)14{15for(j=0;j<N;j++)16printf("%3c",w[i][j]);17printf("\n");18}19fun(w,a);20printf("Thestring:\n");21puts(a);22printf("\n\n");23}标准答案:1voidfun(char(*s)[N],char*b)2{3inti,j,k=0;4for(i=0;i<N;i++)/*按列的顺序依次存放到一个字符串中*/5for(j=0;j<M;j++)6b[k++]=s[j][i];7b[k]=’\0';8}知识点解析:看到程序后,很容易便能想到采用循环嵌套的方法,本题中将字符数据按列的顺序依次存放到一个字符串中,所以列标变化慢,行标变化快。注意:第1个循环条件为i<N(列);第2个循环条件为j<M(行),因为在循环的嵌套中越在内层.循环变化就越快。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。程序的功能是调用fun()函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级人数和学生信息从键盘读人,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include(stdio.h>2#include<stdlib.h>3#defineN54typedefstruct5{intnum;6charname[10];7chartel[10];8}STYPE;9voidcheck();10/*********found*********/11intfun(<u>【1】</u>std)12{13/*********found*********/14<u>【2】</u>*fp;inti;15if((fp=fopen("myfile5.dat","wb"))==NULL)16return(0);17printf("\nOutputdatatofile!\n");18for(i=0;i<N;i++)19/*********found*********/20fwrite(&std[i],sizeof(STYPE),1,<u>【3】</u>);21fclose(fp);22return(1);23}24main(){STYPEs[10]=f{1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"},{1,"ddddd","444444"},{1,"eeeee","555555"}};25intk;26k=fun(s);27if(k==1)28{printf("Succeed!");check();}29else30printf("Fail!");31}32voidcheck()33{FILE*fp;inti;34STYPEs[10];35if((fp=fopen("myfile5.dat","rb"))==NULL)36{printf("Fail!\n");exit(0);}37printf("\nReadfileandoutputtoscreen:\n");38printf("\nnumnametel\n");39for(i=0;i<N;i++)40{fread(&s[i],sizeof(STYPE),1,fp);41printf("%6d%s%s\n",s[i].num,s[i].name,s[i].tel);42}43fclose(fp);44}标准答案:(1)STYPE(2)FILE(3)fp[*]本题考查:函数定义、变量定义、写数据块函数fwrite()。知识点解析:填空1:根据主函数中的调用函数可知,函数的形参应为结构体类型,故空1处应该填STYPE。填空2:"fp"是指向文件类型的指针变量,故空2处应该填FILE。填空3:函数fwrite()调用的一般形式为fwrite(buffer,size,count,fp);。buffer:一个指针变量,在fread()函数中,它用来存放输入数据的首地址;在fwrite()函数中。它用来存放输出数据的首地址。size:表示数据块的字节数。count:表示要读写的数据块数。fp:表示文件指针。故空3处应该填fp。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是先将字符串s中的字符按正序存放到字符串t中,然后把s中的字符按逆序连接到字符串t的后面。例如,当s中的字符串为"ABCDE"时,t中的字符串应为"ABCDEEDCBA"。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4#include<string.h>5voidfun(char*s,char*t)6{7inti,s1;8sl=strlen(s);9/*********found*********/10for(i=0;i<=s1;i++)11t[i]=s[i];12for(i=0;i<s1;i++)13t[s1+i]=s[s1-i-1];14/*********found*********/15t[s1]='\0';16}17voidmain()18{19chars[100],t[100];20system("CLS");21printf("\nPleaseenterstrings:");22scanf("%s",s);23fun(s,t);24printf("Theresultis:%s\n",t);25}标准答案:(1)for(i=0;i知识点解析:(1)字符串长度为s1,但数组中元素的下标为0~s1-1,因此不包括s1。(2)正序和逆序字符串都加入了t字符串中,此时t字符串中最后一个元素的下标为2*s1-1。所以在2*s1下标处加字符串结束标志"\0"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,函数fun()的功能是将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是将a中的十位数和个位数依次放在c的千位和十位上,b中的十位数和个位数依次放在c的百位和个位上。例如,当a=45.b=12时,调用该函数后c=4152。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#include<stdio.h>3voidfun(inta,intb,long*c)4{5}6main()7{8inta,b;9longc;10printf("Inputa,b:");11scanf("%d%d",&a,&b);12fun(a,b,&c);13printf("Theresultis:%d\n",c);14}标准答案:1vOidfun(inta,intb,long*c)2{3/*b%10获取b的个位数,a/10获取a的十位数,a%10获取a的个位数,b/10获取b的十位数*/4*c=b%10+(a%10)*10+5(b/10)*100+(a/10)*1000;6}知识点解析:本题主要考查如何取出a和b的个位数和十位数,取出后如何将其表示成c中相应的位数。由于a和b都是只有两位的整数,因此分别对它们除以10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。将得到的数对应乘以1000、100、10、1,就可得到c的千位数、百位数、十位数、个位数。注意使用c时要进行指针运算。国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序前移,其他字符顺序后移,处理后将新字符串的首地址作为函数值返回。例如,若
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年卖车交易平台租赁合同
- 2024年个体与个体工程劳务分包定制合同
- 2024年外债资金调拨合同
- 2024年个人车辆转手合同
- 2024年南美地区投资与合作合同
- 2024年危险品运输中介合同样本
- 2024年份建筑抹灰分包专业协议
- 2024年停车场地租用协议
- 2024年二手工业机器人设备转让合同
- 2024年全面合同管理方案
- 吉林省松原市长岭县长岭镇2023-2024学年四年级上学期期中道德与法治试卷
- 2023年四川农信(农商行)招聘笔试真题
- 《纪念白求恩》说课课件 2024-2025学年统编版语文七年级上册
- 汽车机械基础-说课课件
- 2024年认证行业法律法规及认证基础知识 CCAA年度确认 试题与答案
- 基于人工智能的个性化疼痛预测
- 第一单元 富强与创新(复习课件) (统编版)
- 2024年气象知识竞赛试题及满分答案
- 2024年人教版小学六年级数学(上册)期中考卷附答案
- 高中政治选择性必修3(综合测试卷)(附答案)-2022-2023学年高二下学期政治选择性必修3
- DLT1241-2013 电力工业以太网交换机技术规范
评论
0/150
提交评论