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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷16(共9套)(共28题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN8typedefstructlist{intdata;structlist*next;}SLIST;SLIST*creatlist(int*);voidoutlist(SLIST*);intfun(SLIST*h){SLIST*p;ints=0;p=h->next;while(p){/**********found**********/s+=p->【1】;/**********found**********/p=p->【2】;}returns;}main(){SLIST*head;inta[N]={12,87,45,32,91,16,20,48};head=creatlist(a);outlist(head);/**********found**********/printf("\nsum=%d\n",fun(【3】));}SLIST*creatlist(inta[]){SLIST*h,*p,*q;inti;h=p=(SLIST*)malloc(sizeof(SLIST));for(i=0;idata=a[i];p->next=q;p=q;}p->next=0;returnh;}voidoutlist(SLIST*h){SLIST*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");}}标准答案:datanexthead知识点解析:第一空:循环“while(p)”遍历整个链表,在循环体中,s是累加变量,每个结点的数据域上的数据都累加在s上,因此第一空处应为“s+=p->data;”。第二空:p是循环变量,p不断指向下一个结点,故第二空处应为“p=p->next;”。第三空:fun函数的声明为:intfun(SLIST*h),参数是SLIST结构体指针,表示头结点地址,因此第三空处的函数调用应为“printf("\nsum=%d\n",fun(head));”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中函数fun的功能是:将tt所指字符串中的小写字母都改为对应的大写字母,其他字符不变。例如,若输入”Ab,cD”,则输出”AB,CD”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includechar*fun(chartt[]){inti;for(i=0;tt[i];i++)/**********found***********/if((’a’<=tt[i])||(tt[i]<=’z’))/**********found***********/tt[i]+=32;return(tt);}main(){chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));}标准答案:if((’a’<=tt[i])&&(tt[i]<=’z’))tt[i]-=32;知识点解析:(1)第一个错误标识下的if判断语句中的逻辑有误,应该是与(&&)的关系,不是或(||)的关系,所以if判断语句改为“if((’a’<=tt[i])&&(tt[i]<=’z’))”。(2)第二个标识下小写字母转换为大写字母的转换算法有误,小写转换为大写应该是减去32,而不是加上32,所以“tt[i]+=32;”改为“tt[i]-=32;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCⅡ值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若S所指字符串中的内容为:"ABCDEFGl2345",其中字符A的ASCⅡ码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的ASCⅡ码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:"135"。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#includevoidfun(char*s,chart[]){}main(){chars[100],t[100];voidNONO();printf("\nPleaseenterstrings:");scarlf("%s",s);fun(s,t);printf("\nTheresultis:%s\n",t);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/chars[100],t[100];FTLE*rf,*wf;inti;rf=fopen("in.dat","r"),wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s);fun(s,t);fprintf(wf,"%s\n",t);}fclose(rf);fclose(wf);}标准答案:inti,j=0;for(i=1,i知识点解析:(1)判断一个字符串中的某一字符下标i是否为奇数,可用“i%2!=0"来判断,也可以从下标1开始,每次移动2个位置;而判断字符的ASCⅡ码值是否为奇数,则可用“s[i]%2!=0"来判定。(2)对串s中各个字符串逐个进行考查,满足条件的字符就顺序放在新串t中,否则就不存放。(3)所有字符处理完后,记得在新串t的末尾加上结束符"’\0’"。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。例如,形参s所指的字符串为:Abe@1x56*。程序执行后t所指字符数组中的字符串应为:A@156*。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)*s(2)s++(3)n知识点解析:本题中函数fun的功能是将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。逐个搜索s字符串,如果字符的ASCII.码值小于97,那么将该字符存入形参t所指字符数组中,并统计个数,搜索完整个字符串便可完成要求的功能。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是16807,其低3位数的和值是15。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)d=1;s=0;(2)d=d/10;知识点解析:本题中函数的功能是计算n的5次方的值(规定n的值大于2、小于8),通过形参指针传回主函数;并计算该值的个位、十位、百位上数字之和作为函数值返回。本题解题过程首先是求5次方,然后对结果进行截取以及求和。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。例如,输入下面的矩阵:其转置矩阵为:123147456258789369程序输出:261061014101418注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是实现B=A+Aˊ,即把矩阵A加上A的转置。其中,所谓矩阵的转置,是把行中的数据与列中的数据进行对调。解题过程中首先求得已给的矩阵的转置,然后在循环过程中对矩阵与该矩阵的转置对应元素求和。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#includetypedefstruct{intnum;charname[9];charsex;struct{intyear,month,day;}birthday;floatscore[3];}STU;/**********found**********/voidshow(STU【1】){inti;printf("\n%d%s%c%d-%d-%d",tt.num,,tt.sex,tt.birthday.year,tt.birthday.month,tt.birthday.day);for(i=0;i<3;i++)/**********found**********/printf("%5.1f",【2】);printf("\n");}main(){STUstd={1,"Zhanghua",’M’,1961,10,8,76.5,78.0,82.0};printf("\nAstudentdata:\n");/**********found**********/show(【3】);}标准答案:tttt.score[i]std知识点解析:第一空:由“printf("\n%d%s%c%d-%d-%d",tt.num,,tt.sex,tt.birthday.year,tt.birthday.month,tt.birthday.day);”可知,tt是STU结构体变量,故函数fun的参数是“STUtt”,即第一空处应为“voidshow(STUtt)”。第二空:此处是循环输出score数组中的元素值,访问score元素的方法是“tt.score[i]”,故第二空处应为“printf("%5.1f",tt.score[i]);”。第三空:调用fun函数,fun函数的参数是STU结构体变量,故第三空处应为“show(std);”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、在主函数中从键盘输入若干个数放入数中,用0结束输入并放在最后一个元素中。给定程序MODll.C中函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。例如:数组中元素中的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.250000。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includedoublefun(intx[]){/************found************/intsum=0.0;intc=0,i=0;while(x[i]!=0){if(x[i]>0){sum+=x[i];c++;}i++;}/************found************/sum\=c;returnsum;}main(){intx[1000];inti=0;printf("\nPleaseentersomedata(endwith0):");do{scanf("%d",&x[i]);}while(x[i++]!=0);printf("%f\n",fun(x));}标准答案:doublesum=0.0;sum/=c;知识点解析:(1)fun函数的返回值是double型,返回值sum的定义类型原题定义为int型,与fun的定义类型不符,所以将“intsum=0.0;”改为“doublesum=0.0;”。(2)第二个标识下的“sum\=c;”语句中的“\”符号是非法符号,这里应该是除号。所以,第二个标识下“sum\=c;”应该改为“sum/=c;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,它的功能是:求出1到1000之间能被7或ll整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(int*a,int*n){}main(){intaa[1000],n,k;voidNONO();fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0)printf("\n");elseprintf("%5d",aa[k]);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intaa[1000],n,k;FILE*fp;fp=fopen("out.dat","w");fun(aa,&n);for(k=0;k<n;k++)if((k+1)%10==0)fprintf(fp,"\n");elsefprintf(fp,"%5d",aa[k]);fclose(fp);}标准答案:{inti;*n=0;for(i=7;i<1000;i++)if(((i%7)==0||(i%11)==0)&&(i%77)!=0)a[(*n)++]=i;}知识点解析:进入fun函数,根据前面的分析:首先,*n置0,设置为累计器,计算符合条件的数的个数。然后,通过循环,判断小于1000的每一个整数是否符合题干中的要求。其中的判断条件能否被7或者被11整除为i%7==0||i%11==0,不能被11和7同时整除为i%77!=0,它们之间的并关系就用&&连接,最后结果即为(i%7==0||i%11==0)&&i%77!=0。最后,将符合条件的整数存入数组a中,同时对*n进行自加,返回结果。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定的程序中,函数fun()的功能是:求出以下分数序列的前n项和。2/1,3/2,5/3,8/5,13/8,21/13,…其值通过函数值返回main()函数。例如,若输入n=5,则应输出8.391667。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。[试题源程序]#include<stdio.h>#include<conio.h>doublefun(intn){inta=2,b=1,c,k;double(1);for(k=1;k<=n;k++){s=s+1.0*a/b;c=a;a+=(2);b=c;}return(d);}main(){intn=5;printf("\nThevalueoffunctionis:%1f\n",(3));}标准答案:[1]s=0.0[2]b[3]fun(n)知识点解析:填空1:根据题目的意思,这里应该是对变量s的声明,注意到后面有对s的累加操作,所以声明之后一定要进行初始化,把s赋值为0。填空2:根据题目的意思,此处是循环求和,由数列很容易看出后一项的分子是前一项分母与分子之和,即a=a+b或者a+=b。填空3:由算法可以看出,此处是进行子函数调用。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请改正程序中的错误,使它能得到正确结果。[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。[试题源程序]#include<stdio.h>#defineN20voidfun(inta[],intn){inti,j,t,p;for(j=0;j<n-1;j++){/***********found***********/p=jfor(i=j;i<n;i++)if(a[i]<a[p])/***********found***********/p=j;t=a[P];a[p]=a[j];a[j]=t;}}msin(){inta[N]=(9,6,8,3,-1),i,m=5;printf("排序前的数据:”);for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");fun(a,m);printf("排序后的数据:");for(i=0;i<m;i++)printf("%d",a[i]);printf("\n");}标准答案:(1)错误:p=j正确:p=;(2)错误:p=j;正确:p=i;知识点解析:题中提到按“从小到大”的顺序排序,这类题目都可以用选择排序法,即从后N个比较过程中,选择一个最小的与第一个元素交换,以此类推,即用第二个元素与后N-1个进行比较,并进行交换。错误1:此处错误比较明显,p=j后面应加分号。错误2:根据选择排序法的思路,此处应将i赋给p。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从p~n-1(p<n-1)的数组元素平移到数组的前面。例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值为6。移动后,一维数组的内容应为7,8,9,10,11,12,13,14,15,1,2,3,4,5,6。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。[试题源程序]#inciude<stdio.h>#defineN80voidfun(int*w,intp,intn){}main(){inta[N]=(i,2,3,4,5,6,7,8,9,10,11,12,13,14,15);inti,P,n=15;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\nEnterp:");scanf("%d",&p);fun(a,P,n);printf("\nThedataaftermoving:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}标准答案:voidfun(int*w,intp,intn){inti,J,t;for(i=p;i<=n-i;i++){t=w[n-1];for(j=n-2;j>=0;j--)w[j+1]=w[j];w[0]=t;}}知识点解析:暂无解析国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、用筛选法可得到2~n(n<10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止。这样会得到一个序列:2,3,5,7,1l,13,17,19,23,……函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值返回。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)a[i](2)a[i](3)0知识点解析:本题中fun函数的功能是用筛选法可得到2~n(n<10000)之间的所有素数,和一般的直接判断一个数是否是素数不同,一般的判断数n是否是素数的方法是比较从2开始的所有小于n的i,看n%i是否均不为0。筛选法是首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下一个数等于n为止,这样就可以将所有的非素数去除,剩下来的非0数就是素数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能输出正确的结果。注意:不要改动smain函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)while(fabs(t)>=num)(2)t=s/n;知识点解析:本题中函数的功能是利用公式计算π的近似值,直到最后一项的绝对值小于指定的数。本题解题过程参照一般公式题型的求解过程。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。例如,当a=45,b=12。调用该函数后,c=1425。注意:部分源程序存在文件PROGl.C中。数据文件in.dat中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);知识点解析:该程序功能是将正整数a、b合并形成一个新整数。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于形参b所指的一维数组中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*a)[N],int*b){inti,j;for(i=0;i标准答案:(1)a[0][i](2)<(3)x,y知识点解析:第一空:第二个循环是寻找每列的最大值,方法是用最大值变量b[i]标记第一个待找数据,逐个把所有待找数据和b[i]进行比较,并用b[i]标记其当前最大值,从而找出最大值。故第一空处为第一个待找数据“a[0][i]。第二空:由上述的分析可知,如果b[i]小于a[j][i],那么用b[i]标记其当前最大值,故第二空处为“<"。第三空:fun函数的声明为:voidfun(int(*a)[N],int*b),函数的两个参数均是指针。故在主函数内fun函数的调用形式为“fun(x,y)",x是二维数组首地址,y是一维数组首地址。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODIl.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:7654321时,t中的数为:642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include/***********found**********/voidfun(10ngs,longt){longsl=10;s/=10;*t=s%10;/*********found*********/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;printf("\nPleaseenLers:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)voidfun(longs,long*t)(2)while(s>0)知识点解析:(1)第一个标识下的形参t被定义为一个long型变量,而对应的主函数中的实参却是一个地址值。因此,t在函数定义中应该被定义为一个指针变量,即“voidfun(10ngs.longt)"改为“voidfun(longs,long*t)"。(2)第二个标识下的while循环控制表达式“s<0"要求s小于0才进入循环。而s的值总是大于0,因此将“whilet(s<0)"改为“while(s>0)"。三、程序设计题(本题共2题,每题1.0分,共2分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defiheN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRBCs[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},{"GA017",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,max=a[0].s,n=0;for(i=1;i知识点解析:(1)要把最高分数的学生数据放在数组中,首先求出最高分数,再使用一个for循环把所有的成绩进行比较,找出最高的分数来。(2)找出所有与最高分数相等的学生,并将最高分数的人数累加。4、请编写函数fun,它的功能是:计算并输出13(包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在主函数中从键盘给n输入20后,输出为:s=0.583333。注意:要求n的值不大于100。部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includedoublefun(intn){}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);fprintf(wf,"%lf\n",s);}fclose(rf);fclose(wf);}main(){intn;doubles;printf("\nInputn:"),scanf("%d",&n);s=fLln(n);printf("\n\ns=%f\n",s);NONO();}标准答案:int1;doublesum=0.0;for(i=1;i<=n;i++)if(i%5==0||i%9==0)/*被5或9整除*/sum+=1.0/i;returnsum;知识点解析:(1)首先,通过循环,判断小于等于n的每一个整数是否符合题干中的要求。其中的判断条件能否被5或者被9整除为i%5==0||i%9==0。(2)然后求得符合(1)要求的数的倒数的累加和。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.,函数的返回值为6。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)n++(2)0(3)s++知识点解析:本题中函数fun的功能是计算出形参s所指字符串中包含的单词个数,作为函数值返回。单词之间是以空格隔开的,因此在字符串里面搜索空格,找到一个空格则单词数量加1,如此搜索完整个字符串便可得到单词数量。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f若形参是字母W,则转换为小写字母b。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)c=c+32;(2)c=c+5;知识点解析:本题中函数的功能是将某些大写字母转换为对应小写字母之后的第五个字母。对于将字母转换的题型,首先是查找符合条件的字符,然后根据规则对字符进行转换。本题需要大家了解大小写字母是怎样通过ASCII码相互转换的。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12。调用该函数后,c=5241。注意:部分源程序存在文件.PROGl.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是将两个正整数合并形成一个整数的题型。本题类型首先要考虑整数的位数分离,然后要进行位数合成。也就是先将数字的各位数拆开,改变排列顺序后,再组合成新的数字。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter’a;:3timesletter’s’:3times请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#includevoidfun(char*s){intk[26]={0},n,i,max=0;charch;while(*s){if(isalpha(*s)){/**********found**********/ch=tolower(【1】);n=ch-’a’;/**********found**********/k[n]+=【2】;}s++;/**********found**********/if(max标准答案:*s1k[n]知识点解析:第一空:“ch=tolower(__1__);n=ch-’a’;”可知统一将字符*s转化成小写字母,然后和字母“’a’”比较,因此第一空处应为“*s”。第二空:“k[n]+=__2__;”是统计字符“*s”出现的次数,“ch-’a’”得到了应存放的数组元素的下标位置n,k[n]元素加1标识该字符在上一次出现的基础上又出现了一次,故第二空处应为“1”。第三空:“if(max二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:从N个字符串中找出最长的那个串,并将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include#include#defineN5#defineM81/**********found**********/fun(char(*sq)[N]){inti;char*sp;sp=sq[0];for(i=0;i标准答案:char*fun(char(*sq)[M])returnsp;知识点解析:(1)第一个错误标识下fun函数的定义根据题目要求,返回最长的字符串,原题的“fun(char(*sq)[N])”的定义没有指定返回值,所以“fun(char(*sq)[N])”应该改为“char*fun(char(*sq)[M])”,指定返回值为字符串。(2)fun函数中定义sp指针首先指向第一个串,用来存放最长的那个串,然后在循环中sp指向的串与sq指向的其他串长度进行比较,如果sp指向的串长度小于sq指向的串,则sq的值替换sp指向的串,这样保证sp指向的还是最大的串,所以返回最长的串应将“returnsq;”改为“returnsp;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun(),它的功能是:找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函

温馨提示

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

评论

0/150

提交评论