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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷36(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN5typedefstruct{intnum;charname[10];chartel[10];}STYPE;voidcheck();/**********found**********/intfun(【1】*std){/**********found**********/【2】*fp;inti;if((fp=fopen("myfile5.dat","wb"))==NULL)return(0);printf("\nOutputdatatofile!\n");for(i=0;i标准答案:STYPEFILEfp知识点解析:第一空:在main()函数中,观察fun()函数调用:k=fun(s),由s的定义可知s是STYPE结构体数组,即传入fun函数的参数是STYPE结构体数组的首地址,因此fun()函数的参数是STYPE结构体指针,故(1)处应该为intfun(STYPE*std)。第二空:在C语言中,fopen函数的调用形式是:FILEfp=fopen(文件名,文件使用方式),在fun()函数体内部,由if((fp=fopen("myfile5.dat","wb"))==NULL)可知,fp是一个指向FILE类型的指针变量,因此(2)处是指针变量fp的定义,即FILE*fp。第三空:fwrite函数的调用形式是:fwrite(buffer,size,count,fp),buffer是一个指针,指向输入数据存放在内存区的起始地址,size是要输入的字节数,count是要输入大小为size个字节的数据块的个数,fp是文件指针。因此(3)处应该添加文件指针,由前面的定义可知,fun函数内的文件指针是fp,即(3)处是fwrite(&std[i],sizeof(STYPE),1,fp)。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如:若k=10,则应输出:3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includelongfun(intk){/************found************/ifk>0return(k*fun(k-1));/************found************/elseif(k=0)return1L;}main(){intk=10;printf("%d!=%ld\n",k,fun(k));}标准答案:if(k>0)elseif(k==0)知识点解析:(1)第一个标识下的if语句的条件表达式,根据C语言的基本语法条件,表达式应该用括号括起来,所以将“ifk>0”改为“if(k>0)”。(2)第二个标识下“elseif(k=0)”判断k是否等于0,在C语言中,“==”表示等于,而“=”表示赋值,故第二个标识处应为“elseif(k==0)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:判断字符串是否为回文?若是,函数返回1,主函数中输出:YES;否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。注意:部分源程序在文件PROGl.C中。请勿改动主函数min和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN80intfun(char*str){}main(){chars[N];voidNONO();printf("Enterastring:");gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti;chars[N];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);if(fun(s))fprintf(wf,"%sYES\n",s);elsefprintf(wf,"%sNO\n",s);}fclose(rf);fclose(wf);}标准答案:{inti,n=0,flag=1;//初始设置标识位flag=1char*p=str;//设置工作指针while(*p)//取字符串大小{n++;p++;}for(i=0;i知识点解析:进入fun函数,根据前面的分析:主要思路是:(1)首先用整型变量i表示所判断的字符串中前面对应元素的下标。i初值为0,n是字符串的长度,通过循环来求得n。(2)然后,把下标为i的字符与下标为“n-1-i”的字符比较,如果相同,i加1,继续进行一对一的字符比较。不断重复此过程,直到i≥n/2为止。在此过程中,如果下标为i的字符与下标为“n-1-i”的字符不相同,则可以断定字符串不是回文,立即退出函数。(3)如果正常结束循环,就说明字符串符合回文条件。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:计算两个自然数n和m(m<10000)之间所有数的和(n和m从键盘输入)。例如:当n=1,m=100时,sum=5050:当n=100,m=1000时,sum=495550。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>main(){intn,m;longsum;【】clrscr();printf("\nInputn,m\n");scanf("%d,%d",&n,&m);while(n<=m){【】n++;}printf("sum=%【】\n",sum);}标准答案:sum=0sum+=n1d知识点解析:第一空:变量sum进行了类型声明,但没有进行初始化,而后面的程序用sum来存放最后的结果,所以要在使用前将sum初始化为0。第三空:通过while循环将自然数n和m之间的数进行累加,结果存于sum中。第三空:由于sum为长整型,所以标准输出函数printf()中的格式控制符为“%1d”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:从字符串s中,删除所有小写字母’c’。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<stdio.h>voidfun(char*s){inti,j;for(i=j=0;s[i]!=’\0’;i++)if(sill!=’c’)/********************************/s[j]=s[i];/**************found*************/s[i]=’\0’;}main(){chars[80];printf("\nEnterastring:");gets(s);printf("Theoriginalstring:")puts(s);fun(s);printf("Thestringafterdeleted:");puts(s);printf("\n\n"):}标准答案:(1)错误:s[j]=s[i];正确:s[j++]=s[i];(2)错误:s[i]=‘\0’;正确:s[j]=‘\0’;知识点解析:由本题循环条件if(s[i]!=‘c’),可知,如果字符串中的字符不是‘c’,则执行循环,所以应该是s[j++])=s[i],这样错三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。S=1+x+x2/2!3/3!+…/xn/n!例如,当n=10,x=0.3时,函数值为1349859。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<math.h>doublefun(doublex,intn){}main(){clrscr();printf("%f",fun(0,3,10));}标准答案:doublefun(doublex,intn){inti;doubles=1.0.s1=1.0;for(i=1;i<=n;i++){s1=s1*i;/*各项中的阶乘*/s=s+pow(x,i)/s1;/*按公式求出*/}returns;}知识点解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数中各位上数字之和为x(x为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。例如,当x值为5时,100~999之间各位上数字之和为5的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500。共有15个。当x值为27时,各位数字之和为27的整数是:999。只有1个。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#includeintfun(intx){intn,s1,s2,s3,t;n=0;t=100;/************found*************/while(t<=【1】){/***********found*************/s1=t%10;s2=(【2】)%10;s3=t/100;/*************found**************/if(s1+s2+s3==【3】){printf("%d",t);n++;}t++;}returnn;}main()(intx=-1;while(x<0)(printf("Pleaseinput(x>0);");scanf("%d",&x);}printf("\nTheresultis:%d\n",fun(x));}标准答案:【1】999【2】t/10【3】x知识点解析:第一空:第一处是补充while循环的终止条件,题干要求fun寻找100~999之间满足条件的数x,因此循环终止条件是999,故第一空处应填“999"。第二空:“s1=t%10;s2=(【2】)%10;s3=t/100;"可知s1求得t的个位数,s3求得t的百位数,因此s2是求t的十位数。(t/10)变量t变成两位数,再次对10取余便得到t的十位数,因此第二空处应为“t/10"。第三空:“if(s1+s2+s3==【3】)"是判断t是否满足题干条件:各位上数字之和为x,因此第三空处应为“x"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.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%dl=%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、请编写一函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括l与n自身)之和。规定n的值不大于1000。例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includeintfun(intn){}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,n,sum;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d",&n);sum=fun(n);fprintf(wf,"%d=%d\n",n,sum);}fclose(rf);fclose(wf);}main(){intn,sum;printf("Inputn:");scanf("%d",&n);sum=fun(n);printf("sum=%d\n",sum);NONO();}标准答案:{ints=0,i;for(i=2;i知识点解析:(1)首先,在for循环过程中,利用if判断语句判断由2到n-1所有数字中,选择为因子的数。(2)如果是因子,那么对其进行累计求和。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,11,13,17,19,23,……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeintfun(intn){inta[10000],i,j,count=0;for(i=2;i<=n;i++)a[i]=i;i=2;while(i标准答案:(1)a[i](2)a[i](3)0知识点解析:第一空:循环“for(j=a[i]*2;j<=n;j+=【1】)"中,循环变量j的初始值从a[i]的2倍开始,下一次进入循环j就是a[i]的3倍,第一空处是补充j的变化情况,而j每次都增加一个a[i],即第一空处应为“a[i]"。第二空:根据题意第二空处是从数表中找下一个非0数,即在循环中比较a[i]是否为,如果为0的话,i++指向后一个数表元素,故第二空处应为“a[i]"。第三空:根据语句“{count++;printf(count%15?"%5d":"\n%5d",a[i]);}"可知在满足条件之后计数变量count自增,并且输出a[i],可知a[i]是一个素数,由审题分析可知,经过筛选之后数表中非0的元素就是素数,故第三空处应为“0",即a[i]不为0的话就是素数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includeintfun(intk){intm=0,mc=0;while((k>=2)&&(mc<10)){/************found************/if((k%n=0)||(k%17=0)){m=m+ktmc++;}k--;}returnm;/************found************/main(){printf("%d\n",fun(500));}标准答案:(1)if((k%13==0)||(k%17==0))(2)}知识点解析:(1)第一个标识下的“if((k%13=0)||(k%17=0))"语句应该是判断k是否能被13或17整除,所以应该用逻辑符号“=="而不是赋值符号“=",即“if((k%13==0)||(k%17==0))"。(2)第二个标识下,“_______"明显没有函数结束括号,所以这里应该填“}"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN10typedefstructss{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){/*7如果最低分min仍大于当前分*/j=i;/*记住位置*/min=a[i].s;/*把当前分赋值给min*/}*s=a[j];知识点解析:(1)首先指定第一个成绩为最低分数。(2)再使用一个for循环把所有的成绩进行比较,找出最低的分数来。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:从键盘输入一个字符串并保存在字符str1中,把字符串str1中下标为偶数的字符保存在字符串str2中并输出。例如,当str1=“cdefghij”,则str2=“cegi”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineLEN80main(){charstr1[LEN],str2[LEN];char*p1=str1,*p2=str2;inti=0,j=0;clrscr();printf("Enterthestring:\n");scanf(【】);printf("***theorigialstring***\n");while(*(p1+j)){printf("【】",*(p1+j));j++;}for(i=0;i<j;i+=2)*p2++=*(str1+i);*p2=’\0’;printf("\nThenewstringis:%s\n",【】);}标准答案:"%s",str1%cstr2知识点解析:第一空:本题考查对标准输入函数scanf()的调用格式,当输入字符串时,格式控制字符串为“%s”,题目要求输入的字符串保存在str1中,所以地址表列应为字符串的首地址,即为str1。第二空:本题考查对标准输出函数printf()的调用格式,当输出为字符型变量时,格式控制字符串为“%c”。第三空:题目要求将str1中下标为偶数的字符保存在字符串str2中并输出,所以ptintf()函数的输出表列是str2。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码降序排序后输出。例如:输入dafhc,则应输出hfdca。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,敢不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>/*************found**************/intfun(chart[]){charc;inti,j;for(i=0;i<strlen(t)-1;i++)for(j=i+1;i<strlen(t);j++)if(t[i]<t[j]){c=t[j];/*************found**************/t[i]=t[i++];t[i]=c;}}main(){chars[81];clrscr();printf("\nPleaseenteracharacterstring:");gets(s);printf("\n\nBeforesorting:\n%S",s);fun(s);printf("\nAftersortingdecendingly:\n%s",s);}标准答案:(1)错误:intfun(chart[])正确:voidfun(chart[])(2)错误:t[j]=t[i++];正确:t[j]=t[i];知识点解析:错误1:该函数只是对一个字符串中的元素进行比较大小的操作,并没有具体的返回值,因此,函数的返回值类型应为void。错误2:本题的思路是利用选择法对数组元素进行比较。所谓选择法,是依次用当前取得的元素和它后面的元素进行比较,在第一个元素和它后面的元素顺次比较时,可以借助中间变量来对两数进行交换,要保证这第一个元素始终存放数组中的最大数,以后依次挑出次大数,这样最终的数组就是有序的。解答本题,只要理解了选择法的思想,找到并改正错误就容易了。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),它的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(含p,p<n-1)的数组元素平移到数组的最后。例如:一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include<stdiO.h>#defineN80voidfun(int*w,intp,intn){}main(){in[a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};inti,p,n=15;printf("Theodginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\nEnterp:");scanf("%d",&p);fun(a,p,n);printf("\nThedataaftermoving:\n");for(i=0;i<n;i++)printf("%3d”,a[i]);}标准答案:voidfun(int*w,intp,intn){inti,J;inta[N];for(i=0;i<=p;i++)a[i]=w[i]for(i=p+1,j=0;i<n;i++,j++)w[j]=w[i];for(i=0;i<=p;i++)w[n-p-1+i]=a[i];}知识点解析:将数组后面的元素向前平移,肯定会将前面的元素覆盖。因此,可以定义一个数组用来暂时存放前面的元素。可以先将w[0]~w[p]依次赋给a[0]~a[p];然后将w[p]~w[n—1)移到数组的前面:再将a[0]~a[p)依次赋给w[n-p-1+i]~w[n—1]。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y所指数组中,在主函数中输出。例如,有10个正数:4630324061745154826,平均值为:30.500000主函数中输出:4632404548请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)0(2)x[i]/N(3)j++知识点解析:本题中函数fun的功能是计算形参x所指数组中N个数的平均值,并将大于平均值的数放在形参y所指数组中。计算平均值时,逐个对数组元素进行累加,得到累加和之后除以数组元素数量便得到平均值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:计算正整数num的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includelongfun(longnum){/************found************/longk;do{k*=num%10;/************found************/num\=10;}while(num);return(k);}main(){longn;printf("\nPleaseenteranumber:");scanf("%ld",&n);printf("\n%ld\n",fun(n));}标准答案:longk=1;num/=10;知识点解析:(1)第一个错误标识下的k是函数的返回值,子函数fun中在执行“k*=num%10;”之前,只进行了定义,却没有赋初值,编译时会警告变量在使用之前没有初始化k。k代表了各个位上的数字之积,其初值应为1。因此,第一个标识下的“longk;”改为“longk=1;”。(2)第二个标识下的符号“\”是非法字符,根据题意,这里应该是进行除法运算,所以“num\=10;”应该改为“num/=10;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表韵头节点。请编写函数fun,它的功能是。找出学生的最高分,由函数值返回。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容。仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN8structslist{doubles;structslist*next;};typedefstructslistSTREC;doublefun(STREC*h){}STREC*creat(double*s){STREC*h,*p,*q;inti=0;h=p=(STREC*)malloc(sizeof(STREC));p->s=0;while(is=s[i];i++;p->next=q;p=q;}p->next=0;returnh;}outlist(STREC*h){STREC*p;p=h->next;printf("head");do{printf("->%2.0f",p->s);p=p->next;}while(p!=0);printf("\n\n");}main(){doubles[N]={85,76,69,85,91,72,64,87},max;voidNONO();STREC*h;h=creat(s);outlist(h);max=fun(h);printf("max=%6.1f\n",max);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti,j;doubles[N],max;STREC*h;in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++){for(j=0;j<N;j++)fscanf(in,"%lf,",&s[j]);h=creat(s);max=fun(h);fprintf(out,"%6.1lf\n",max);}fclose(in);fclose(out);}标准答案:{doublemax=h->s;STREC*p;p=h->next;while(p){if(p->s>max)max=p->s;p=p->next;}returnmax;}知识点解析:进入fun函数,根据前面的分析:(1)设置一个工作指针,指向头节点。设置一个变量存放最大值,初值为头节点数据域的值。(2)移动工作指针到后一个节点,并将数据域的值与max比较,将较大的值存入max。(3)移动工作指针,指向下一个节点,直到指针指向链表尾。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数proc(),该函数的功能是:从“a”到“z”统计一个字符串中所有字母字符各自出现的次数,结果保存在数组buff中。注意:不区分大小写,不能使用字符串库函数。例如,若输入:"A=abc+5*c",则输出结果为:a=2b=1c=2,d以后所有字母字符出现的次数全为0。注意:部分源程序给出如下。请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。试题程序:#include#include#include#defineM100voidproc(char*str,intbuff[]){inti;char*p=str;for(i=0;i<26;i++)【1】;while(*p){if(*p>=’A’&&*p<=’Z’)【2】;if(*p>=’a’&&*p<=’z’)buff[*p-’a’]++;【3】;}}voidmain(){charstr[M];chara=’a’;intbuff[26],k;system("CLS");printf("\nPleaseenteracharstring:");scanf("%s",str);printf("\n**Theoriginalstring**\n");puts(str);proc(str,buff);printf("\n**Thenumberofletter**\n");for(k=0;k<26;k++){if(k%5==0)printf("\n");printf("%c=%d",a+k,buff[k]);}printf("\n");}标准答案:【1】buff[i]=0【2】*p+=32【3】p++知识点解析:数组alf中存放各个字母出现的次数,其各元素初始值为0,因此,【1】处填“alf[i]=0”;按题目中要求,不区分大小写,应将所有字母均转换为小写字母统一计算,因此,【2】处填“*p+=32”;要统计各个字母出现的次数,应检查字符串中的每一个字符,每一次循环结束后,指针p应向后移动一个位置,因此,【3】处填p++。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:7531。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/**********found***********/voidfun(longs,longt){longs1=10;*t=s%10;while(s>0){s=s/100;*t=s%10*s1+*t;/**********found************/s1=s1*100;}}main(){longs,t;printf("\nPleaseenters:");scanf("%id",&s);fun(s,&t);printf("Theresultis:%id\n",t);}标准答案:(1)voidfun(10ngs,long*t)(2)sl=s1*10;知识点解析:(1)根据"t=s%10"判断,t应该是个指针变量,所以“voidfun(longs,longt)"语句中的t只需改为“voidfun(longs,long*t)"。(2)分析函数内的循环过程可知s1的用途是每次将*t扩大,记录每次得到的奇数位的数字的权值,s1的权值每次增加1位,因此第二个标识下应该是“s1=s1*10;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12时,调用该函数后,c=1524。注意:部分源程序存在文件PROGl.C中。数据文件in.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:%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);}标准答案:{*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/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语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、从键盘输入一组小写字母,并保存在字符数组str中。请补充函数fun(),该函数的功能是:把字符数组str中ASCII码为奇数的小写字母转换成对应的大写字母,结果仍保存在原数组中。例如,输入“abcdefg”,输出“AbCdEfG”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80voidfun(chars[]){inti;for(【】;【】;i++){if(【】)s[i]-=32;}}main(){charstr[N];clrscr();printf("\nlnputastring:\n");gets(str);printf("\n***originalstring***\n");puts(str);fun(str);printf("\n***newstring***\n");puts(str);}标准答案:i=0s[i]!=’\0’s[i]%2!=0或s[i]%2==1知识点解析:第一空:变量i用作字符数组s的下标,所以在for循环中,i的初始值应为0。第二空:for循环的执行条件是当前字符不为’\0’,即还没有到字符串的最后一个字符’\0’第三空:如果当前字符的ASCII码对2求余,结果不为0,也就是等于1,则这个字符的ASCII码为奇数,要将这个小写字母转换成对应的大写字母。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。高位仍在高位,低位仍在低位。例如当s中的数为87653142时,t中的数为7531。请改正函数fun()中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conlo.h>voidfun(longs,long*t){intd;longs1=1;/*************found**************/t=0;while(s>0){d=s%10;/*************found**************/if(d%2==0){*t=d*s1+*t;s1*=10;}s/=10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)错误:t=0;正确:*t=0;(2)错误:if(d%2==0)正确:if(d%2!=0)知识点解析:其实,本题的重点在考查两个问题:第1个错误中出现了一个t=0,那么请看一下,t是从哪儿来的,第1次出现t的地方在哪儿?对,就这么简单。那我们再来思考一下用C语言表达一个奇数的话应该怎么表达?用数学的方法呢?偶数是能被2整除的,奇数刚好相反,那么if(d%2==0)是想表示奇数呢还是偶数,看题目就明白了!三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数,用来删除字符串中的所有空格。例如:输入asdafaaz67,则输出为asdafaz67。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<ctype.h>#include<conio.h>intfun(char*str){}main(){charstr[81];intn;clrscr();printf("Inputastring:");gets(str);puts(str);fun(str);printf("***Str:%s\n",str);}标准答案:intfun(char*str){inti,j=0;for(i=0;str[i]!=’\0’;i++)if(str[i]!=’’)/*将字符串中的空格删去*/str[j++]=str[i];/*注意该程序中空格字符的表达方法*/str[j]=’\0’;/*在字符串最后加上结束标记符*/}知识点解析:前面我们接触到的题是删除字符,但本题要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用“留下”字符的算法,以前的题目亦是如此。用str[i]从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格(注意在if()的单引号之间有一个空格),则将其保存str[j]中。注意j的下标变化、初值及最后加串结束符’\0’。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2接在字符串str1的后面。例如:str1=“Howdo”,str2=“youdo?”,结果输出:Howdoyoudo?注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineN40voidfun(char*str1,char*str2){inti=0;char*pl=str1;char*p2=str2;while(【】)i++;for(;【】;i++)*(p1+i)=【】;*(p1+i)=’\0’;}main(){charstr1[N],str2[N);clrscr();printf("*****Inputthestringstr1&Str2*****\n");printf("\nstr1:");gets(str1);printf("\nstr2:");gets(str2);printf("**Thestringstr1&str2**\n");puts(str1);puts(str2);fun(str1,str2);printf("*****Thenewstring*****\n");puts(str1);}标准答案:*(p1+i)*p2*p2+

温馨提示

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

评论

0/150

提交评论