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

下载本文档

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

文档简介

国家二级C语言机试(操作题)模拟试卷1(共9套)(共27题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:统计形参s所指的字符串中数字字符出现的次数,并存放在形参t所指的变量中,最后在主函数中输出。例如,若形参S所指的字符串为“abcdef35adgh3kjsdf7”,则输出结果为4。请在程序的下划线处填入正确内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>voidfun(char*s,int*t){inti,n;n=0;/*********found*********/for(i=0;【1】!=0;i++)/*********found*********/if(s[i]>=’0’&&s[i]<=【2】)n++;/*********found*********/【3】;}main(){chars[80]="abcdef35adgh3kjsdf7";intt;printf("\nTheoriginalstringis:%s\n",s);fun(s,&t);printf("\nTheresultis:%d\n",t);}标准答案:(1)s[i](2)’9’(3)*t=n知识点解析:填空1:通过for循环语句来判断是否到字符型结尾,变量i用来存放字符型数组下标,则应填入s[i]。填空2:题目要求判断数字字符,所以此处应填入’9’。填空3:将数字字符个数存入变量t中,此处需注意变量t是指针变量。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如,变量a中的值原为8,b中的值原为3,程序运行后a中的值为3,b中的值为8。请改正程序中的错误,使它得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>intfun(int*x,inty){intt;/*********found*********/t=x;x=y;/*********found*********/return(y);}voidmain(){inta=3,b=8;system("CLS");printf("%d%d\n",a,b);b=fun(&a,b);printf("%d%d\n",a,b);}标准答案:(1)t=*x;*x=y;(2)retum(t);或returnt;知识点解析:首先,定义变量t作为中间变量,然后进行数据交换,注意参数x是指针变量,交换时应使用*x,最后确定返回值;根据代码b=fun(8a,b),可以知道返回值将赋给变量b,而b中应存放交换前*x中的值,所以函数应返回变量t。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,编写函数fun,其功能是:求出1~1000之间能被7或11整除,但不能同时被7和11整除的所有整数,并将其放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>voidfun(int*a,int*n){}voidmain(){intaa[1000],n,k;system("CLS");fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0){printf("%5d",aa[k]);printf("\n");)/*一行写9个数*/elseprintf("%5d",aa[k]);}标准答案:voidfun(int*a,int*n){inti,j=0;for(i=1;i<=1000;i++)/*求1到1000之内能被7或11整除但不能同时被7和11整除的所有整数,并放入数组a中*/if((i%7==0||i%11==0)&&i%77!=0)a[j++]=i;*n=j;/*传回满足条件的数的个数*/}知识点解析:该题需要运用循环判断结构来实现,其中循环语句比较容易,只要确定循环变量的范围即可,下面来看判断语句。题目要求找出能被7或11整除,但不能同时被7和11整除的所有整数,能同时被7和11整除的整数一定能被77整除,且不能被77整除的数不一定就是能被7或11整除的数,因而,可得出程序中的if语句。注意(i%7==0||i%11==0)两边必须要有小括号。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<stdlib.h>voidfun(char*s,inta,doublef){/*********found*********/【1】fp;charstr[100],str1[100],str2[100];inta1;doublef1;fp=fopen("file1.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);/*********found*********/【2】;fp=fopen("file1.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知识点解析:填空1:从使用fp=fopen("file1.txt","w")可知fp应该是文件类型指针,因此本空应该填写FILE*。填空2:当对fp作打开操作的时候,并进行不同的操作前,应该对其关闭,因为在第一次打开时是对fp进行写操作,而在第二次打开后进行的是读操作,因此应该先对fp进行关闭,本空填fclose(fp)。填空3:fseanf()是把文本文件输出,因此本空只能填写fp。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<string.h>#include<stdio.h>#include<malloc.h>#defirleN10typedefstruerss{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;t[k].s=b[j].s;b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i<N;i++)fprintf(pf,"No=%sMark=%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("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);while(m>10){printf("\nGivethenumberofthestudentswhohavebetterscore:");scanf("%d",&m);}pOrder=fun(a,m);printf("****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=(STU*)calloc(m,sizeof(STU));(2)strcpy(t[k].num,b[j].num);知识点解析:(1)calloc应用于分配内存空间。调用形式为(类型说明符*)ealloc(n,size),功能:在内存动态存储区中分配n块长度为“size”字节的连续区域,函数的返回值为该区域的首地址,(类型说明符木)用于强制类型转换。calloc函数与malloc函数的区别在于calloc函数一次可以分配n块区域。例如,ps=(structstu*)ealloc(2,sizeof(structstu));,其中的sizeof(structstu)是求stu的结构长度。该语句的意思是:按stu的长度分配两块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。在本题中,根据定义类型STUb[N],*t;就可以看出*t=calloc(m,sizeof(STU))中的错误,变量t少*号,再强制转换STU*类型。(2)t[k].num=b[j].num;的错误旨在考查对结构体概念的掌握和灵活应用程度。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下pmgl中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写函数fun,该函数的功能是:删除一维数组中所有相同的数,使之只剩—个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:2223445666677899101010删除后,数组中的内容应该是:2345678910注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#defitieN80intfun(inta[],intn){}voidmain(){inta[N]=={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10}i,n=20;printf("Theoriginaldata:\n");for(i=0;i<n;i++)prrntf("%3d",a[i]);n=fun(a,n);printf("\n\nThedataafterdeleted:\n"),for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}标准答案:intfun(inta[],intn){inti,j=1;for(i=1;i<n;i++)if(a[j﹣1]!=a[i])/*若该数与前一个数不相同,则要保留*/a[j++]=a[i],returnj;/*返回不相同数的个数*/}知识点解析:该程序的流程是:定义变量i和j,其中j用于控制删除后剩下的数在数组中的下标,i用于搜索原数组中的元素。j始终是新数组中最后一个元素的下一个元素的下标,所以if语句中的条件是a[j﹣1]!=a[i],其中a[j﹣1]就是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要保留到新数组中。注意本题中i和j的初值都要从1开始,该算法只能用于数组已排序的题目中。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<stdlib.h>#defineN8typedefstruct1ist{intdata;structlist*next;}SLIST;voidfun(SLIST*h,intx){SLIST*p,*q,*s;s=(SLIST*)malloc(sizeof(SLIST));/**********found**********/s->data=___1___;q=h;p=h->next;while(p!=NULL&&x>p->data){/**********found**********/q=___2___;p=p->next;}s->next=p;/**********found**********/q->next=___3___;}SLIST*creatliSt(int*a){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;i<N;i++){q=(SLIST*)malloc(sizeof(SLIST));q->data=a[i];p->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*p;p=h->next;if(p==NULL)printf("\nThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);p=p->next;}while(p!=NULL);printf("->End\n");}}main(){SLIST*head;intx;inta[N]={11,12,15,18,19,22,25,29};head=creatliSt(a);printf("\nThelistbeforeinserting:\n");outlist(head);printf("\nEnteranumber:");scanf("%d",&x);fun(head,x);printf("\nThelistafterinserting:\n");outliSt(head);}标准答案:(1)x(2)p(3)s知识点解析:函数fun的功能是把形参x的值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。利用循环搜索链表,找到插入位置,将新结点插入到链表当中。第一空:“s=(SLIST*)malloc(sizeof(SLIST));”显然s是一个新结点,第一空处是给新结点的数据域赋值x,因此,第一空处应该是“s->data=x;”。第二空:循环“while(p!=NULL&&x>p->data)”是用来寻找插入位置,当链表没有结束且x仍然大于p所指向的结点的数据时,就不断的向链表后面搜索。在循环体内,语句“p=p->next;”是找到下一个结点的地址,变量q用来保存当前结点的地址,因此,第二空处应该是“q=p;”。第三空:“s->next=p;”将s插入链表当中,s指向p,此时s结点已经指向需要插入位置的下一个节点,因此,在需要插入s结点的位置的上一个结点需要指向s结点,故第三处应该为“q->next=s;”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>longfun(longnum){/**********found**********/longk;do{k*=num%10,/**********found**********/num\=10;}while(num);return(k);}main()(longn;printf("\nPleaseenteranumber:")scanf("%ld",&n);printf("\n%id\n",fun(n));}标准答案:(1)longk=1,(2)num/=10;知识点解析:(1)本题中函数的功能是计算正整数num各个位上的数字之积。首先要对正整数进行截取,取得该正整数的各个位上的数字,然后对求得的数进行累积。(2)从已给定源程序的main主函数入手,通过键盘输入一个正整数n,语句“printf("\%ld\n",fun(n));”调用fun函数求得n各个位上的数字之积。(1)第一个错误标识下的k是函数的返回值,子函数fun中在执行“k*=num%10;”之前,只进行了定义,却没有赋初值,编译时会警告变量在使用之前没有初始化k。k代表了各个位上的数字之积,其初值应为1。因此,第一个标识下的“longk;”改为“longk=1;”。(2)第二个标识下的符号“\”是非法字符,根据题意,这里应该是进行除法运算,所以“num\=10;”应该改为“num/=10;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。例如:若有5门课程的成绩是:90.5,72,80,61.5,55。则函数的值为:71.80。注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdio.h>floatfun(float*a,intn){}main(){floatscore[30]={90.5,72,80,61.5,55},aver;voidNONO();aver=fun(scroe,5);printf("\naveragescoreis:%5.2f\n",aver);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;nti,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,",&scroe[j]);aver=fun(score,5);fprintf(wf,"%5.2f\n",aVer);}felose(fp);fclose(wf);}标准答案:inti;floatave=0.0;for(i=0;i<n;i++)aVe=ave+a[i];ave=ave/n;returnave;知识点解析:该程序功能是计算n门课程的平均分,求解过程首先统计n门课的总分,然后根据总分求得平均分。(1)在函数中首先定义平均分的变量,并将其初始化值置为0。(2)然后在for循环中,求得所有成绩的总分,并在总分的基础上求得平均分。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是将形参s所指字符串中所有ASCⅡ值小于97的字符存入形参t所指字符数组中,形成一个新字符串,统计出符合条件的字符个数并作为函数值返回。例如,形参s所指的字符串为Abc@lx56*,程序执行后t所指字符数组中的字符串应为A@156*。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件blank1.c中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2intfun{char*s,char*t)3(intn=0;4while(*s)5{if(*s<97){6/*********found*********/7*(t+n)=<u>【1】</u>;n++;}8/*********found*********/9<u>【2】</u>;10}11*(t+n)=0;12/*********found*********/13return<u>【3】</u>;14}15main()16{chars[81],t[81];intn;17printf("\nEnterastring:\n");18gets(s);19n=fun(s,t);20printf("\nThereare%dletterswhichASCIIcodeislessthan97:%s\n",n,t);21}标准答案:(1)*8(2)s++(3)n知识点解析:填空1:当判断s所指向的字符串中的字符符合条件时,将当前字符存放到t指向的字符串中,故空1处应该填*s。填空2:判断完一个字符之后,将字符串的指针移到下一个位置,故空2处应该填s++。填空3:题目要求函数返回符合条件的字符个数n,故空3处应该填n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是给定n个实数,输出平均值,并统计大于等于平均值的实数个数。例如,13=8时,输入193.199、195.673、195.757、196.051、196.092、196.596、196.579、196.763,所得平均值为195.83875,在平均值以上的实数个数应为5。请改正程序中的错误,使其能得出正确的结果。注意:部分源程序在文件modi1.c中,不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4intfun(floatx[],intn)5/*********found*********/6intj,c=0;floatxa=0.0;7for(j=0;j<n,j++)8xa+=x[j]/n;9printf("ave=%f\n",xa);10for(j=0;j<n;j++)11/*********found*********/12if(x[j]=>xa)13c++;14returnc;15}16main()17{floatx[100]={193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763);18system("cls");19printf("%d\n",fun(x,8));20}标准答案:(1){intj,c=0;floatxa=0.0;(2)if(x[j]>=xa)知识点解析:(1)本题中的第1个错误。在c语言中,"||"应成对出现,fun()函数体是复合语句,所以程序中的语句"intj,c=0;floatxa=0.0;"应改为"{intj,c=0;floatxa=0.0;"。(2)本题中的第2个错误。在c语言中,判断大于等于的运算符应为">=",所以程序中的语句"if(x[j]=>xa)"应改为"if(x[jj)=xa)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,编写函数fun(),其功能是根据以下公式求p的值,结果由函数值返回。m与n为两个正整数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件progl.c中。请勿改动主函数main()和其他函数中的任何内容.仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2floatfun(inLm,intn)3{45}6main()/*主函数*/7{voidNONO();8printf("p=%f\n",fun(12,8));9NONO();10}11voidNONO()12{/*本函数用于打开文件、输入数据、调用函数、输出数据及关闭文件*/13FILE*fp,*wf;14inti,m,n;15floats;16fp=fopen("in.dat","r");17wf=fopen("out.dat","w");18for(i=0;i<10;i++){19fscanf(fp,"%d,%d",&m,&n);20s=fun(m,n);21fprintf(wf,"%f\n",s);22}23fclose(fp);24fclose(wf);25}标准答案:1floatfun(intm,intn)2{3floatp1=1,p2=1,p3=1;4inti;5for(i=1;i<=m;i++)6p1*=i;7for(i=1;i<=n;i++)8p2*=i;9for(i=1;i<=(m-n);j++)10p3*=i;11returnp1/(p2*p3);12}知识点解析:本题考查循环的使用。通过3个for循环分别计算阶乘。其中p1=m!,p2=n!,p3=(m-n)!。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<stdlib.h>3voidfun(char*s,inta,doublef)4{5/*********found*********/6<u>【1】</u>fp;7charstr[100],str1[100],str2[100];8intal;doublef1;9fp=fopen("filel.txt","w");10fprintf(fp,"%s%d%f\n",s,a,f);11/*********found*********/12<u>【2】</u>;13fp=fopen("filel.txt","r");14/*********found*********/15fscanf(<u>【3】</u>,"%s%s%s",str,str1,str2);16fclose(fp);17a1=atoi(str1);18f1=atof(str2);19printf("\nTheresult:\n\n%s%d%f\n",str,a1,f1);20}21main()22{chara[10]="Hello!";23intb=12345;24doublec=98.76;25fun(a,b,c);26}标准答案:(1)FILE*(2)fclose(fp)(3)fp知识点解析:填空1:从代码fp=fopen("filel.txt","w");可知fp是文件类型指针,故空1处应该填FILE*。填空2:打开一个文件,对其进行操作后,需要关闭这个文件。因为在第1次打开时是对fp进行写操作,而在第2次打开时进行的是读操作,因此应该先对fp进行关闭,故空2处应该填fclose(fp)。填空3:函数fscanf()用来将文本文件内容导入对应变量,故空3处应该填fp。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.C。在此程序中,函数fun()的功能是对N名学生的学习成绩,按从高到低的顺序排列并找出前m(m≤10)名学生,将这些学生的数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<string.h>4#include<stdio.h>5#include<malloc.h>6#defineN107typedefstructss8{9charnum[10];10ints;11}STU;12STU*fun(STUa[],intm)13{14STUb[N],*t;15inti,j,k;16/*********found*********/17*t=calloc(m,sizeof(STU))18for{i=0;i<N;i++)19b[i]=a[i];20for(k=0;k<m;k++)21{22for(i=j=0;i<N;i++)23if(b[i].s>b[j].s)24j=i;25/*********found*********/26t[k].num=b[j].num;27t[k].s=b[j].s;28b[j].s=0;29}30returnt;31}32outresult(STUa[],FILE*pf)33{34inti;35for(i=0;i<N;i++)36fprintf(pf,"No=%sMark=%d\n",a[i].num,a[i].s);37fprintf(pf,"\n\n");38}39voidmain()40{41STUa[N]={{"A01",81),{"A02",89},{"A03",66),{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}};42STU*pOrder;43inti,m;44system("CLS");45printf("****Theoriginaldata****\n");46outresult(a,stdout);47printf("\nGivethenumberofthestudentswhohavebetterscore:");48scanf("%d",&m);49while(m>10)50{51printf("\nGivethenumberofthestudentswhohavebetterscore:");52scanf("%d",&m);}53pOrder=fun(a,m);54printf("****TheResult****\n");55printf("Thetop:\n");56for(i=0;i<m;i++)57printf("%s%d\n",pOrder[i].num,pOrder[i].s);58free(pOrder);59}标准答案:(1)t=(STU*)calloc(m,sizeof(STU));(2)strepy(t[k].num,b[j].num);知识点解析:(1)函数calloc()用于分配内存空间。调用形式为(类型说明符*)callot(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))中的错误。*表示指针类型可以直接赋地址值。再强制转换为STU*类型。(2)因为num为字符串,不能直接赋值,需要使用字符串复制函数strcpy()。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数fun(),该函数的功能是删除一维数组中所有相同的元素,使之只剩—个。数组中的元素已按由小到大的顺序排列,函数返回删除后数组中元素的个数。例如,若一维数组中的元素是2223445666677899101010删除后,数组中的元素应该是2345678910注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2#defineN803intfun(inta[],intn)4{56}7voidmain()8{9inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10),i,n=20;10printf("Theoriginaldata:\n");11for(i=0;i<n;i++)12printf("%3d",a[i]);13n=fun(a,n);14print("\n\nThedataafterdeleted:\n");15for(i=0;i<n;i++)16printf("%3d",a[i]);17printf("\n\n");18}标准答案:1intfun(inta[],intn)2{3inti,j=1;4for(i=1;i知识点解析:该程序的流程:定义变量i和j,其中j用于控制删除后剩下的元素在数组中的下标,i用于搜索原数组中的元素。j始终是新数组中最后一个元素的下一个元素的下标。if语句中的条件是a[j-1]f=a[i],其中a[j-1]是新数组中的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要保留到新数组中。注意本题中i和j的初值都要从1开始,该算法只能用于数组已排序的题目中。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1;若不是,函数返回值为0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。例如,以下3×3的矩阵就是一个“幻方”:492357816请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defiFieN3intfun(int(*a)[N]){inti,j,m1,m2,row,colum;m1=m2=0;for(i=0;i<N;i++){j=N﹣i﹣1;m1+=a[i][i];m2+=a[i][j];}if(m1!=m2)return0;for(i=0;i<N;i++){/*********found*********/row=colum=【1】;for(j=0;j<N;j++){row+=a[i][j];colum+=a[j][i];}/*********found*********/if((row!=colum)【2】(row!=m1))return0;}/*********found*********/return【3】;}main(){intx[N][N],i,j;printf("Enternumberforarray:\n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&x[i][j]);printf("Array:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%3d”,x[i][j]);printf("\n");}if(fun(x))printf("TheArrayisamagicsquare.\n");elseprintf("TheArrayisn’tamagicsquare.\n");}标准答案:(1)0(2)||(3)1知识点解析:填空1:本题考查为变量赋初值,在这里row+=a[i][j]代表是每行的总和,colum+=a[j][i]代表的是每列的总和,因而row,colum在初始化时应该为零,此空应该填0。填空2:本题考查了if条件语句,此句if判断代表每行的总和与列是否相等,每行的总和是否与对角线的总和相等,两者若有一个不成立,即返回0,因而此空应该填写||。填空3:题目要求若矩阵是“幻方”,则函数返回值为1,因而此空应该填写1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:传入一个整数m,计算如下公式的值。例如,若输入5,则应输出﹣0.283333。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>doublefun(intm){doublet=1.0;inti;for(i=2;i<=m;i++)/*********found*********/t=1.0﹣1/i;/*********found*********/}voidmain(){intm;system("CLS");printf("\nPleaseenter1integetnumbers:\n");scanf("%d",&m);printf("n\nTheresultis%lf\n",fun(m));}标准答案:(1)t﹣=1.0/i;(2)returnt;知识点解析:(1)变量t存放公式的和,通过循环语句进行复合运算,因此此处应改为t﹣=1.0/i;,注意此处应进行变量的类型转换。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数,用来删除字符串中的所有空格。例如,输入asdafaaz67,则输出为asdafaaz67。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>#include<ctype.h>#include<conio.h>#include<stdlib.h>voidfun(char*str){}main(){charstr[81];charMsg[]="Inputastring:";intn;FILE*out;printf(Msg);gets(str);puts(str);fun(str);printf("***str:%s\n",str),/*********found*********/out=fopen("out.dat","w");fun(Nsg);fprintf(out,"%s",Nsg);fclose(out);/*********found*********/}标准答案:voidfun(char*str){inti=0;char*p=str;while(*p){if(*p!=’’)/*删除空格*/{str[i++]=*p;}p++;}str[i]=’\0’;/*加上结束符*|}知识点解析:本题要求删除所有空格,即保留除了空格以外的其他所有字符。由于c语言中没有直接删除字符的操作,所以对不需要删除的字符采用“保留”的操作。用指针p指向字符串中的每一个字符,每指向到一个字符都判断其是否为空格,若不是空格则保存到str[i]。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun()的功能是在形参ss所指字符串数组中,将所有长度超过k的字符串后面的字符删除,只保留前面的k个字符。ss所指字符串数组中有N个字符串,且长度小于M。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<string.h>3#defineN54#defineM105/*********found*********/6voidfun(char(*ss)<u>【1】</u>,intk)7{inti=0;8/*********found*********/9while(i<<u>【2】</u>){10/*********found*********/11ss[i][k]=<u>【3】</u>;i++;}12}13main()14{charx[N][M]={"Create","Modify","Sort","Skip","Delete"};15inti;16printf("\nTheoriginalstring\n\n");17for(i=0;i<N;i++)puts(x[i]);18printf("\n");19fun(x,4);20printf("\nThestringafterdeleted:\n\n");21for(i=0;i<N;i++)22puts(x[i]);23printf("\n");24}标准答案:(1)[M](2)N(3)'\0'知识点解析:填空1:根据main()函数中的函数调用语句,确定函数定义时的形参,故空1处应该填[M]。填空2:while循环语句需要对所有字符串进行操作,因此循环条件是i二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.C。在此程序中,函数fun()的功能是根据以下公式求π值,并将其作为函数值返回。例如,当给指定精度的变量eps输入0.0005时,应输出Pi=3.140578。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数.不得增行或删行,也不得更改程序的结构!试题程序:1#include<conio.h>2#include<stdio.h>3#include<math.h>4doublefun(doubleeps)5{6doubles,t;intn=1;7s=0.0;8/*********found*********/9t=0;10while(t>eps)11{12s+=t;13t=t*n/(2*n+1);14n++;15}16/*********found*********/17return(s);18}19voidmain()20{21doublex;22printf("\nPleaseenteraprecision:");23scanf("%1f",&x);24printf("\nPi=%1fkn",fun(x));25}标准答案:(1)t=1.0;(2)return(s*2);知识点解析:(1)从计算的公式可以看出,公式的首项为1,而while循环是从公式的第2项开始的。因为变量t为double型,所以赋初值为1.0。(2)while循环计算的是π/2的值,题目要求返回π的值,所以函数返回2*s。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,规定输入的字符串中只包含字母和"*"。请编写函数fun(),其功能是使字符串的前导"*"不得多于n个,若多于n个,则删除多余的"*";若少于或等于n个,则不做处理。字符串中间和尾部的"*"不删除。例如,字符串中的内容为"*******A*BC*DEF*G****",若n的值为4,删除后,字符串中的内容应当是"****A*BC*DEF*G****";若n的值为8,则字符串中的内容仍为"*******A*BC*DEF*G****"。n的值在主函数中输入。在编写函数时,不得使用c语言提供的字符串函数。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdio.h>2#include<conio.h)3voidfun(char*a,intn)4{56}7voidmain()8{9chars[81];intn;10printf("Enterastring:\n");11gets(s);12printf("Entern:");13scanf("%d",&n);14fun(s,n);15printf("Thestringafterdeleted:\n");16puts(s);17}标准答案:1voidfun(char*a,intn)2{3inti=0,k=0;4char*p,*t;5p=t=a;/*开始时,p与t同时指向数组的首地址*/6while(*t=='*’)/*用k来统计前导星号的个数*/7{k++;t++;}8if(k>n)/*如果k大于n,则使p的前导保留n个星号,其后的字符依次存入数组a中*/9{while(*p)10{a[i]=*(p+k-n);11i++;12p++;13}14a[i]='\0',/*在字符串最后加上字符串结束标志*/15}16}知识点解析:字符串中前导星号不能多于n个,多余的应删除。首先需要通过while循环统计字符串前导星号的个数,然后通过if条件语句完成前导星号的个数和n的比较,如果前导星号多于n个,则需要把n个星号和其余字符重新保留。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,人员的记录由编号和出生年、月、日组成,N名人员的记录已存入主函数的结构体数组std中,且编号唯一。函数fun()的功能是找出指定编号人员的记录,作为函数值返回,由主函数输出,若指定编号不存在,返回记录中的编号为空字符串。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行。也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<string.h>3#defineN84typedefstruct5{6charnum[10];7intyear,month,day;8}STU;9/*********found*********/10<u>【1】</u>fun(STU*std,char*num)11{12inti;13STUa={"",9999,99,99};14for(i=0;i<N;i++)15/*********found*********/16if(strcmp(<u>【2】</u>,nun)==0)17/*********found*********/18return(<u>【3】</u>);19returna;20}21main()22{23STUstd[N]=({"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},{"777777",1983,6,22},{"888888",1984,8,19}};24STUp;25charn[10]="666666";26p=fun(std,n);27if(p.num[0]==0)28{29printf("\nNotfound!\n");30}31else32{33printf("\nSucceed!/n");34printf("%s%d-%d-%d\n",p.num,p.year,p.month,p.day);35}36}标准答案:(1)STU(2)std[i].num(3)std[i]知识点解析:本题考查:if条件表达式、比较字符串函数strcmp()、指针变量的使用、函数定义及函数返回值。strcmp()函数用来比较两个字符数组的大小,其格式为strcmp(字符数组1,字符数组2)。若字符数组1大于字符数组2,函数值大于0(正数);若字符数组1等于字符数组2,函数值等于0;若字符数组1小于字符数组2,函数值小于0(负数)。填空1:根据函数fun()的返回值类型可知,函数类型标识符应该是结构体类型的,故空1处应该填STU。填空2:根据题目说明,找出指定编号人员,并将其数据返回。通过strcmp()函数比较编号,若相同则函数值为0,故空2处应该填std[i].num。填空3:由题目可知,假如编号对应,则返回其编号对应数据,故空3处应该填std[i]。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是从s所指字符串中,找出t所指字符串的个数,并将其作为函数值返回。如当s所指字符串中的内容为"abcdabfab",t所指字符串的内容为"ab"时,函数返回整数3。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdlib.h>2#include<conio.h>3#include<stdio.h>4#include<string.h>5intfun(char*s,char*t)6{7intn;char*p,*r;8n=0;9while(*s)10{11p=s;12r=t;13while(*r)14/*********found*********/15if(*r==*p){r++;p++}16elsebreak;17/*********found*********/18if(r==’\0')19n++:20s++;21}22returnn;23}24voidmain()25{26chars[100],t[100];intm;27systera("CLS");28printf("\nPleaseenterstrings:");29scanf("%s",s);30printf("\nPleaseentersubstringt:");31scanf("%s",t);32m=fun(s,t);33printf("\nTheresultis:m=%d\n",m);34}标准答案:(1)if(*r==*p){r++;p++;}(2)if(*r=='\0')知识点解析:本题考查if语句,考生需要根据题意确定if语句的判断条件;字符串结束标志,所有的字符串都要以"\0"结尾,此为上机考试常考知识点,考生一定要牢记;复合赋值运算,常用于循环控制和变量的累加、累乘。从字符串s中找出子字符串t的方法:从第1个字符开始,对字符串进行遍历,若s字符串的当前字符等于t字符串的第1个字符,两个字符串的指针自动加1,继续比较下一个字符;若比较至字符串t的末尾,则跳出循环;若s字符串的字符与t字符串的字符不对应相同,则继续对s字符串的下一个字符进行处理。(1)此处为语法错误,程序漏写了分号。(2)因为变量r为指针变量,所以此处为引用运算。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。在此程序中,请编写函数fun(),该函数的功能是将s所指字符串中ASCⅡ值为偶数的字符删除,字符串中剩余字符形成一个新字符串并将其存放在t所指的数组中。例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符B的ASCⅡ值为偶数,字符2的ASCⅡ值为偶数,都应当删除,其他依此类推。最后t所指的字符串中的内容应是"ACEG135"。注意:部分源程序给出如下。请勿改动主函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。试题程序:1#include<stdlib.h>2#include<stdio.h>3#include<string.h>4#include<conio.h>5voidfun(char*s,chart[])6{78}9voidmain()10{11chars[100],t[100];12system("CLS");13printf("\nPleaseenterstrings:");14scanf("%s",s);15fun(s,t);16print;f("\nTheresultis:%s\n",t);17}标准答案:1voidfun(char*s,chart[])2{3inti=0;4fox(;*s!=’\0';s++)/*找出ASCⅡ值为奇数的字符依次存入数组t中Ⅱ/5if(*s%2==1)6t[i++]=*s;7t[i]=’\0';/*在字符串的末尾加上字符串结束标志*/8}知识点解析:本题要求将s所指字符串中ASCⅡ值为偶数的字符删除,因此本题要求采用一个for循环来找出ASCⅡ值为奇数的字符,将其依次存入数组t中,并使用if条件语句来判断s所指字符串中ASCⅡ值是否为奇数。将"\0"加在字符串的末尾来表示字符串的结束。要删除ASCⅡ值为偶数的字符,也就是要留下ASCⅡ值为奇数的字符。由于最终要求出剩余字符(ASCⅡ值为奇数)形成的新字符串,因此本题程序的算法是对原字符串从头到尾扫描,找出ASCⅡ值为奇数的字符,并将其依次存人数组t中。此外,还要注意数组t的下标变化和下标的初值(初值必须为0,即i=0),t[i++]的作用是先使用t[i],再使i自增1。国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun()的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件blank1.c中。不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#defineN53typedefstructstudent{4longsno;5charname[10];6folatscore[3];7}STU;8voidfun(char*filename,STUn)9{FILE*fp;10/*********found*********/11fp=fopen(<u>【1】</u>),"rb+");12/*********found*********/13fseek(<u>【2】</u>,-(long)sizeof(STU),SEEK_END);14/*********found*********/15fwrite(&n,sizeof(STU),1,<u>【3】</u>);16fclose(fp);17}18main()19{STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};20STUn={10006,"ZhaoSi",55,70,68},ss[N];21inti,j;FILE*fp;22fp=fopen("student.dat","wb");23fwrite(t,sizeof(STU),N,fp);24fclose(fp);25fp=fopen("student.dat","rb");

温馨提示

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

评论

0/150

提交评论