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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷12(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。例如,当形参n的值为10时,函数返回:9.612558。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includedoublefun(intn){inti;doubles,t;/***************found****************/s=【1】;/***************found****************/for(i=1;i<=【2】;i++){t=2.0*i;/***************found****************/s=s+(2.0*-1)*(2.0*i+1)/【3】;}returns;}main(){intn=一1;while(n<0)(printf("Pleaseinput(n>0):");scanf("%d",&n);)printf("\nTheresultis:%f\n",fun(n));}标准答案:(1)0(2)n(3)(t*t)知识点解析:第一空:“returns:"可知s是返回值,s记录了累加和,“for(i=1;i<=【2】;i++)"循环从级数的第一项1开始累加求和,故s的初始化值应为0,因此第一空应为“0"。第二空:题干要求求级数的前n项之和,包括第n项,因此循环变量的范围是1~n(包括n),故第二空处应为“n"。第三空:“s=s+(2.0*i.1)*(2.0*i+1)/【3】;"此处是累加求和,“(2.0*i-1)*(2.0*i+1)/【3】"是级数项,因此第三空处为t的平方,故第三空处应为“(t+t)",注意圆括弧不能少。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#incluclelongfun(intx,inty,long*p){inti;longt=1;/***************found***************/for(i=1;i标准答案:(1)for(i=1;i<=v;i++)(2)t=t%1000;知识点解析:(1)第一个标识下的“for(i=l;i三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数voidfun(chara[],charb[],intn),其功能是:删除一个字符串中指定下标的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为:Word。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineLEN20voidfun(chara[],charb[],intn){}main()if(*b<*c){k=*b;*b=*c,*c=k;}}main(){charstr1[LEN],sir2[LEN];intn;voidNONO();printf(”Enterthestring:\n”);gets(str1);printf(”Enterthepositionofthestringdeleted:”);scanf(”%d”,&n);fun(str1,str2,n);printf(”Thenewstringis:%s\n”,sir2);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/charstr1[LEN],str2[LEN];inti,n;FILE*rf,*wf;rf=fopen(”in.dat”,”r”);wf=fopen(”out.dat”,”w”);for(i=0;i<10;i++){fscanf(rf,”%s%d”,str1,&n);fun(str1,str2,n);fprintf(wf,”%s\n”,str2);}fclose(rf);fclose(wf);}标准答案:intp,m=0;for(p=0;p知识点解析:进入fun函数,根据前面的分析:通过循环,对字符串a中各字符逐个考查,若该字符串下标p不等于输入的标志位n,那么就顺序放到新串b中,否则就不存放。最后,对所有字符处理完后,要注意的就是在新字符串b的末尾加上串结束符’\0’。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:把ASCⅡ码为偶数的字符从字符串s打中删除,结果仍然保存在字符串srt中,字符串str从键盘输入,其长度作为参数传入函数fun()。例如,输入“abcdef”,输出“ace”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio,h>#defineN80【】{inti,j;【】for(i=0;i<n;i++){if(s[i]%2!=0)s[j++]=s[i];}【】;}main(){inti=0,strlen=0;charstr[N];clrscr();printf("\nInputastring:\n");gets(str);while(str[i]!=’\0’){strlen++;i++;}fun(str,strlen);printf("\n***displaystring***\n");puts(str);}标准答案:voidfun(chars[],intn)j=0s[j]=’\0’知识点解析:第一空:由主函数main()调用fun()函数的格式可以知道,fun()函数没有返回值,第二个参数是字符数组,第二个参数是整型变量。第二空:变量j声明时没有初始化,所以在使用j之前要将它初始化为0。第三空:当把所有ASCⅡ码为偶数的字符都存入字符串s中后,要在最后加上‘\0’,表示字符串的结束。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABCDEFGHIJK。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>voidfun(char*p,char*b){inti,k=0;while(*p)/*************found***************/{i=l;/*************found***************/while(i<3||*P){b[k]=*p;k++;p++;i++;}if(*p)/*************found***************/{b[k]=’’;}}b[k]=’\0’;}main(){chara[80],b[80];printf("Enterastring:");gets(a);printf("Theoriginalstring:");puts(a);fun(a,b);printf("\nThestringafterinsertspace:");puts(b);printf("\n\n");}标准答案:(1)错误:i=1;正确:i=0;(2)错误:while(i<3||*p)正确:while(i<3&&*p)(3)错误:b[k]=’’;正确:b[k++]=’’;知识点解析:该题考查字符串复制程序的构造方法,题中插入空格字符的定义条件是while(i<3||*p),当然要同时满足i<3和*p这两个条件后才能执行{b(k++]=’’;}这个语句,该语句的含义是在输出结果中置入空格字符。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。例如,输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b,int1,inth){}main(){STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",96},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",94},{"GA012",64},{"GA014",91},{"GA011",90},{"GA017",64},{"GA018",64},{"GA016",72}};STRECh[N],tt;FILE*out;inti,j,n,low,heigh,t;printf("Enter2integernumberlow&heigh:");scanf("%d%d",&low,&heigh);if(heigh<low){t=heigh;heigh=low;low=t;}n=fun(s,h,low,heigh);printf("Thestudent’sdatabetween%d--%d:\n",low,heigh);for(i=0;i<n;i++)printf("%s%4d\n",h[i].num,h[i].s);/*输出指定分数范围内的学生记录*/printf("\n");out=fopen("out74.dat","w")fprintf(out,"%d\n",n)-n=fun(s,h,80,98);for(i=0;i<n-1;i++)/*分数在80~98之间的学生记录按他数从低到高排序*/for(j=i+l;j<n;j++)if(h[i].s>h[j].s){tt=h[i];h[ii=h[j];h[j]=tt;}for(i=0;i<n;i++)fprintf(out,"%4d\n",h[i].s);fprintf(out,"\n");fclose(out);}标准答案:intfun(STREC*a,STREC*b,int1,inth){inti,j=0;for(i=0;i<N;i++)if(a[i].s>-l&&a[i].s<=h)/*将分数高于1,低于h的学生记录存在于结构体数组b中*/b[j++]=a[i];returnj;/*返回分数范围内的学生人数*/}知识点解析:处理此类分段统计问题,可采用多分支选择语句或条件选择语句。此处采用条件选择语句解答,具体见参考答案。使用条件选择语句进行分段统计时应当注意分段范围。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。请在程序的下划线处填入正确的内容并把下划线删除。使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN5typedefstructnode{intdata;structnode*next;}NODE;/**********found**********/【1】fun(NODE*h){NODE*p,*q,*r;p=h;if(p==NULL)returnNULL;q=p->next;p->next=NULL;while(q){/**********found**********/r=q->【2】;q->next=p;p=q;/**********found**********/q=【3】;}returnp;}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=NULL;for(i=0;idata=a[i];q->next=NULL;if(h==NULL)h=p=q;else{p->next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*p;p=h;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]={2,4,6,8,10};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);head=fun(head);printf("\nThelistafterinverting:\n");outlist(head);}标准答案:NODE*nextr知识点解析:第一空:主函数内fun函数调用形式是“head=fun(head);”,变量head是NODE指针,故fun函数的返回值是NODE指针,即第一空处应为“NODE*”。第二空:while循环完成链表的倒置,在循环体内,p、q和r指针分别指向三个连续的结点,p指针在最前,然后是q指针,r指针在最后。将q指针指向p结点,p和q两个结点倒置,然后p、q和r再往后移动一个结点,继续对其他结点逆置。因此第二空处r是q的后面一个结点,故第二空处为“next”。第三空:由第二空的分析可知,第三空处是将q结点往后移动一个结点位置,故第三空处为“r”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、标准答案:while((2<=high)&&(n<10))break;知识点解析:(1)C语言中左右括弧必须成对出现,在第一个标识下“while((high>=2)&&(n<10)”中,显然缺少一个右括弧,应改为“while((2<=high)&&(n<10))”。(2)在判断素数的循环过程中,只要被判断的数能被某数整除就不是素数,就会跳出判断循环,在C语言中使用break语句跳出循环,并且C语言中的语句使用分号为结尾。所以“break”应改为“break;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:ABCDEFG。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(char*a){}main(){chars[81];voidNONO();printf(”Enterastring:\n”);gets(s);fun(s);printf(”Thestringafterdeleted:\n”);puts(s);NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*in,*out;inti;chars[81];in=fopen(”in.daL”,”r”);out=fopen(”out.dat”,”w”);for(i=0;i<10;i++){fscanf(in,”%s”,s);fun(s);fprintf(out,”%s\n”,s);}fciose(in);fclose(out);}标准答案:{intj=0;char*p=a;while(*p){if(*p!=’*’)a[j++]=*p;p++;}a[j]=’\0’;}知识点解析:(1)首先利用工作指针指向字符串,当指针不指向串尾时,就对字符串进行循环判断。(2)在循环中利用if判断表达式,判断是字符是否为“*”,如果不是“*”将其拷贝到字符串,否则跳过“*”字符。(3)所有字符处理完后,记得在新串s的末尾加上结束符“’\0’”。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共有M个字符串,且串长#include#defineM5#defineN20voidfun(char(*ss)[N]){inti,j,k=0,n,m,len;for(i=0;in){/**********found**********/n=len;【1】=i;}}for(i=0;i=0;j--)ss[i][m--]=ss[i][j];for(j=0;j标准答案:klenss[i][j]知识点解析:第一空:第一for循环寻找最长的字符串,变量n记录字符串的长度,k记录最长字符串的下标位置。i=0时,将n赋值第一个字符串的长度,假设第一个字符串长度最长,以后其他字符串和n比较,如果比n大,则把新的字符串长度赋给n,k记录新的字符串下标位置,因此第一空处应为“k”。第二空:“ss[i][m--]=ss[i][j];”是将字符串ss[i][j]的字符往后移动,腾出左边位置补“*”。字符串的长度为len,字符串的最后一个字符ss[i][len-1]移动到ss[i][n-1],ss[i][len-2]移动到ss[i][n-2],直到全部字符都往后移动len位,因此第二空处应为“len”。第三空:此处的循环是把空处来的位置补上“*”,因此第三空处应为“ss[i][j]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includetypedefstructaa{intdata;structaa*next;}NODE;intfun(NODE*h){intmax=-1;NODE*p;/***********found**********/p=h;while(p){if(p->data>max)max=p->data;/***********found**********/p->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,"\nTHELIST:\n\nHEAD");while(p){fprintf(pf,"->%d",p->data);p=p->next;}fprintf(pf,"\n");}main(){NODE*head;intm;head=creatlink(12,100);outlink(head,stdout);m=fun(head);printf("\nTHERESULT:\n");outresult(m,stdout);}标准答案:p=h->next;p=p->next;知识点解析:(1)根据题干中求得除了头结点之外的结点数据域中的最大值,头指针h,工作指针p指向头结点的下一个结点,所以第一个标识下的“p=h;”指向头结点应该改为指向下一个结点“p=h->next;”。(2)工作指针p,利用p实现对链表的遍历,p表示指向链表的当前结点,所以指向下一个结点应该是“p=p->next;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),函数的功能是:使数组左下三角元素中的值全部置成0。例如:a数组中的值为则返回主程序后a数组中的值应为注意:部分源程序存在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN5voidfun(inta[][N]){}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,a[5][5];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,"%d",&a[i][j]);fun(a);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(wf,"%4d",a[i][j]);fprintf(wf,"\n");}fclose(rf);fclose(wf);}main(){inta[N][N],i,j;printf("*****Thearray*****\n");for(i=0;i标准答案:{inti,j;for(i=0;i知识点解析:进入fun函数,根据前面的分析:(1)对二维数组常用双重循环结构来处理:外层循环控制二维数组的行处理,内层循环控制二维数组的列处理。(2)左下半三角元素的下标特点是列下标小于或等于行下标,即j<=i。(3)依次访问二维数组,把符合以上条件的元素的值赋0。该题是对矩阵操作的考查。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:从键盘输入一组字符串,以‘*’结束输入,并显示出这个字符串。例如,输入abcdefghi*,结果显示adcdefghi。注意:部分源程序给出如下.请勿改动主函数main和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80main(){ihti=-l,j=0;charstrIN];clrscr();printf("\nInputastring\n");do{i++;scanf(【】);}while(【】);printf("\n**displaythestring**\n");while(j<i){printf(【】);j++;}}标准答案:"%c",&str[i]str[i]!=’*’"%c",str[j]知识点解析:第一空:本题考查对标准输入函数scanf()的掌握,输入的为字符,所以格式控制符为“%c”,并将输入的字符存于数组str中,注意在地址表列中,要在数组元素str[i]前加上取址符“&”。第二空:由于输入的字符串以’*’结束,所以只要输入的字符不是’*’,就继续输入,即do-while循环继续执行。第三空:本题考查对标准输出函数Pdntf()的掌握,因为输;U的为字符,所以格式控制符为“%c”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:计算整数n的阶乘。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>doublefun(intn){doubleresult=l.0;whil(n>l&&n<170)/**************found********************/result*=--n;/**************found********************/return;main(){int.n;clrscr();printf("Enteraninteger:");scanf("%d",&n);printf("\n\n%d!=%lg\n\n",n,fun(n));}标准答案:(1)错误:result*=--n;正确:result*=n--;(2)错误:return;正确:returnresult;知识点解析:该题采用循环语句计算n的阶乘。当n大于1且小于170时,令result与n相乘,同时n自动减1,循环至n=2(n=1时无需相乘):注意:o和1的阶乘都等于1,可用条件语句和循环语句实现上述功能。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fjun(),该函数的功能是:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN12typedefstruct{charnum[10];doubles;}STREC;doublefun(STREC*a,STREC*b,int*n){}main()STRECsIN]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87},{"GA09",60},{"GAll",79},{"GA12",73},{"GA10",90}};STRECh[N],t;FILE*out;inti,j,n;doubleave;ave=fun(s,h,&n);printf("The%dstudentdatawhichishigherthan%7.3f:In",n,ave);for(i=0;i<n;i++)printf("%s%4.1f\n",h[i].num,h[i].s);printf("\n");out=fopen("out90.dat","w");fprintf(out,"%dkn%7.3f\n",n,ave);for(i=0;i<n-1;i++)for(j=i+l;j<n;j++)if(h[i].s<h[j].s){t=hIi];h[i]=h[j];h[j]=t;}/*分数从高到低排列*/for(i=0;i<n;i++)fprintf(out,"%4.1f\n",h[i].s);fclose(out);}标准答案:doublefun(STREC*a,STREC*b,int*n){inti;doubleay=0.0;*n=0;for(i=0;i<N;i++)av=av+a[i].s;ay=ay/N;/*求平均值*/for(i=0;i<N;i++)if(av<=a[i].s){b[*n]=a[i];*n-*n+l;}/*将高于等于平均分的学生存从所指存储单元中,并统计人数*/returnay;/*返回严均分*/}知识点解析:本题中第1个循环的作用求出所有分数的总和,只有进行了av=av/N后才得到平均值(我们在前面的程序中碰到过类似问题)。第2个循环的作用是将高于等于平均分的学生存入b所指存储单元中。同一结构体变量之间可以互相赋值。本程序中直接用*n来表示b的下标,注意开始时要给,*n赋0,且使用时不能少*号。因为单独的n是一个指针变量,而我们要用的是它所指向的那个存储单元中的值。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、N个有序整数数列已放在一维数组中,给定的下列程序中,函数fun()的功能是:利用折半查找法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回“Notbefound!”。折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中,直到low>high,查找结束。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。[试题源程序]#include<stdio.h>#defineN10intfun(inta[],intm){intlow=0,high=N-1,mid;while(low<=high){mid=(1);if(m<a[mid])high=(2);eiseif(m>a[mid])low=mid+1;elsereturn(mid);}(3)(-1);}main(){inti,a[N]=(-3,4,7,9,13,24,67,89,100,180),k,m;printf("a数组中的数据如下:");for(i=0;i<N;i++);printf("%d",a[i]);printf("Enterm:");scanf("%d",&m);k=fun(a,m);if(k>=0)printf("m=%d,index=%d\n",m,k));elseprintf("Notbefound\n");}标准答案:[1](low+high)/2[2]mid-1[3]return知识点解析:填空1:根据题目的意思,这里应该是确定折半查找的中间位置,所以很明显应该填(low+high)/2。注意,这个式子返回的是整型数据,即如果分子为7,则结果为3。填空2:根据题目的意思,中间的元素值大时应该选择前半段进行下次查找,所以应该把mid前一位的下标赋值给high。填空3:由算法可以看出,这里应该是所有转换完毕仍然没有找到满足条件的地方,即应该返回-1,所以使用关键字“remm”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正程序指定部位的错误,使它能得到正确结果。[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。[试题源程序]#include<stdio.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,*q;inti,x;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,"\nTHELIST:\n\nHEAD");while(P){fprintf(pf,"->%d",P->datA);p=p->next;}fprintf(pf,"\n");}main(){NODE*head;intm;head=cteatlink(12,100);outlink(head,stdout);m=fun(head);printf("\nTHERESULT"\n");outresult(m,stdout);}标准答案:(1)错误:p=h;正确:p:h->next;(2)错误:p=h->next;正确:p=p->next;知识点解析:程序中使用while循环语句并结合结构指针p来找到数据域中的最大值。错误1:P指向形参结构指针h的next指针,所以应改为:p=h->next;错误2:p指向自己的下一个结点,所以应改为:p=p->next三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),它的功能是:判断字符串是否是回文?若是,函数返回1,主函数中输出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串12312就不是回文。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。[试题源程序]#include<stdio.h>#defineN80intfun(char*str){}main(){chars[N];printf("Enterastring:")"gets(s);printf("\n\n");puts(s);if(fun(s))printf("YES\n");elseprintf("NO\n");NONO();}NONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti;chars[N];rf=fopen("K:\\k06\\24010001\\in.dat","r");wf=fopen("K:\\k06\\24010001\\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);}标准答案:intfun(char*str){inti,n=0,fg=1;char*p=str;while(*p){n++;P++;}for(i=0;i<n/2;i++)if(str[i]==str[n-1-i]);else{fg=0;break;}returnfg;}知识点解析:本题的设计思路是:(1)定义一个int型变量flag用做返回值,定义一个字符指针代替原串遍历,求字符串的长度;(2)利用循环及if条件语句判断字符串首尾对应字符是否相等;(3)如果为回文数,修改flag的值;(4)返回flag国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均值和移动后的数据。例如,有10个正数:4630324061745154826,平均值为:30.500000移动后的输出为:3061715264632404548请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN10doublefun(double*x){inti,j;doubleav,y[N];av=0;/******************found*******************/for(i=0;i标准答案:(1)x[i]/N(2)j++或j=j+1(3)i++或i=i+l知识点解析:第一空:“for(i=0;i二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定函数MODll.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。例如,若输入:77777,则输出将是:32767。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include#include#includeintfun(char*p){intn;/**********found**********/n=*p-’o’;p++;while(p*!=0){/**********found**********/n=n*8+*P-’o’;p++}returnn;}main(){chars[6];inti;intn;printf("Enterastring(Ocataldigits):");gets(s);if(strlen(s)>5){printf("Error:Stringtoolonger!\n\n");exit(0);}for(i=0;s[i];i++)if(s[i]<’0’||s[i]>’7’){printf("Error:%cnotisocataldigits!\n\n",s[i]);exit(0);}printf("Theoriginalstring:");puts(s);n=fun(s);printf("\n%sisconveredtointegernumber:%d\n\n",s,n);}标准答案:n=*p-’0’;n=n*8+*p-’0’;知识点解析:(1)第一个标识下面:语句“n=*p-’o’;”中的’o’不是数字零,而是字母’o’,根据前面的分析因此改为:“n=*p-’0’;”。(2)第二个标识下面:语句“n=n*8+*P-’o’”,首先进行同(1)相同的修改,变量P没有定义,根据题意要求这里应该是“*p-’0’”,所以此句改为:“n=n*8+*p-’0’;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写一个函数fun,它的功能是:实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstString--SecondString程序输出:FirstStdng--SecondString注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(charp1[],charp2[]){}main(){chars1[80],s2[40];voidNONO();printf("Enters1ands2:\n");Scarlf("%s%s",s1,s2);printf("s1=%s\n",s1);printf("s2=%s\n",s2);printf("Invokefun(s1,s2):\n");fun(s1,s2);printf("Afterinvoking:\n");printf("%s\n",s1);NONO();}voidNONO(){/*本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/inti;FTLE*rf,*wf;chars1[80],s2[40];rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%s",s1);fscanf(rf,"%s",s2);fun(s1,s2);fprintf(wf,"%s\n",s1);}fclose(rf);fclose(wf);}标准答案:char*p=p1;while(*p)p++;while(*p2)*p++=★p2++;*p=0;知识点解析:(1)先求出串1的元素个数。(2)然后把串2的元素放到串l最后的位置,依次把串2中的所有字符全部放到串1之后。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数N在主函数中输入。例如:注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#include<math.h>#defineN20doublefun(【】,intn){inti,j;intk;doubles=0.0;doublef=0.0;doubleaver=0.0;doublesd=0.0;for(i=0;i<n;i++)for(j=0;j<n;j++)s+=a[i][j];aver=【】;for(i=0;i<n;i++)for(j=0;i<n;j++)f+=(a[i][j]-aver)*(a[i][j]-aver);f/(n*n);sd=【】;returnsd;}main(){inta[N][N];intn;inti,j;doubles;clrscr();printf("***+InputthedimensionofarrayN*****\n");scanf("%d",&n);printf("*****Thearray*****\n");for(i=0;i<n;i++){for(j=0;j<n;j++){a[i][j]=rand()%50;while(a[i][j]=0)a[i][j]=rand()%60;printf("%4d",a[i][j]);}printf("\n\n");}s=fun(a,n);printf("*******THERESULT*******\n");printf("%4.3f\n",s);}标准答案:inta[][N]s/(n*n)sqrt(f)知识点解析:第一空;由主函数main()中对函数fun()的调用格式,可以知道,函数fun()的第一个参数是N×N的二维整型数组。第二空:平均值等于所有元素的累加和除以个数。第三空;根据公式,方差sd等于对变量f开平方,这里注意对数学库函数的调用。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun()的功能是计算正整数num的各位上的数字之平方和。例如:输入352,则输出应该是38;若输入328,则输出应该是77。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>longfun(longnum){/*+**+*+*+*found************/longk=1;do{k+=(num%10)*(num%10);num/=10;/*********+found*+**+*+******/}while(num)return(k);}main(){longn;clrscr();printf("\Pleaseenteranumber:");scanf("%ld",&n);printf("\n%ld\n",fun(n));}标准答案:(1)错误:longk=1;正确:longk=0;(2)错误:while(num)正确:while(num);知识点解析:错误1:k用来存放各位数字的平方和,初值应为0。错误2:do-while语句的语法,while()后加分号。三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是使数组左下半三角元素中的值加上n。例如:若n的值为3,a数组中的值为a=254169537则返回主程序后a数组中的值应为5544998610注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数full的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5fun(inta[][N],intn){}main(){inta[N][N],n,i,j;clrscr();printf("*****Thearray*****\n");for(i=0;i<N;i++)/*产生—个随机5*5矩阵*/{for(j=0;j<N;j++){a[i][j]=rand()%10;printf("%4d",a[i][j]);}printf("\n");}don=rand()%10;/*产生一个小于5的随机数n*/while(n>=5);printf("n=%4d\n",n);fun(a,n);printf("*****THERESULT*****\n");for(i=0;i<N;i++){for(j=0;j<N;i++)printf("%4d",a[i][j]);printf("\n");}}标准答案:fun(inta[

温馨提示

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

评论

0/150

提交评论