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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷25(共9套)(共26题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。[试题源程序]#include<stdio.h>#include<stdlib.h>#defineN8typedefstructlist{intdata;structlist*next;}SLIST;voidfun(SLIST*p){SLIST*t,*s;t=P->next;s=p;while(t->next!=NULL){s=t;/*********found**********/t=t->(1);}/**********found**********/printf(”%d”,(2));s->next=NULL:/**********found**********/free((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;inta[N]=(11,12,15,18,19,22,25,29);head=creatlist(a);printf("\nOutputfromhead:\n");outlist(head);printf("\nOutputfromtail:\n");while(head->next!=NULL){fun(head);printf("\n\n");printf("\nOutputfromheadagain:\n");outlist(head);}}标准答案:[1]next[2]t->data[3]t知识点解析:填空1:要求输出链表尾部的数据,函数利用while循环语句找出链表尾部的指针并存入临时变量s中,即每循环一次就要判断链表是否已结束位置,如果是,则退出循环,进行输出,由于是通过t指针变量进行操作的,因此,都要取t的next指针重新赋给t来实现,所以本处应填next。填空2:输出最后一个结点的数据,所以应填t->data或(*t).data。填空3:输出最后一个结点的数据后,并把此结点删除,程序要求释放内存,故应填t。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。例如,若输入:77777,则输出将是:32767。请改正程序中的错误,使它能得到正确结果。[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。[试题源程序]#include<stdio.h>#include<string.h>#include<stdlib.h>intfun(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);}标准答案:(1)错误:*p正确:*p(2)错误:’o’;正确:’o’;知识点解析:暂无解析三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),它的功能是:实现两个字符串的连接(不使用库函数strcat()),即把p2所指的字符串连接到p1所指的字符串后。例如,分别输入下面两个字符串:FirstString--SecondString则程序输出:FirstString--SecondString[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。[试题源程序]#include<stdio.h>#include<conio.h>voidfun(charp1[],charp2[]){}main(){chars1[80],s2[40];clrscr();printf("Enters1ands2:\n");scanf("%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);}标准答案:voidfun(charp1[],charp2[]){inti=0,n=0;char*p=p1,*q=p2;while(*p){p++;n++;}i=n;while(*q){p1[i]=*q;q++;i++;}p1[i]=’\0’;}知识点解析:暂无解析国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeintfun(inta,intb,intc){intt;/***************found****************/t=(a>b)?(b>c?b:(a>c?C:【1】)):((a>C)?【2】:((b>c)?c:【3】));returnt;}main(){inta1=3,a2=5,a3=4,r;r=fun(a1,a2,a3);printf("\nThemiddlenumberis:%d\n",r);}标准答案:(1)a(2)a(3)b知识点解析:第一空:语句“(a>b)?(b>c?"表示a>b>c,根据题目要求,则中间值为b,若只是满足第一个“?"前面的条件,而c>b,则选择执行“(a>c?c:【1】)",当a>c时取值c,所以ac)?"是对a、c的比较选择,第三空处的“(b>c)?c"根据b、c的判断,题目已经给出了c,所以这里应该是a。第三空:第三空中对于b、c的判断选择缺少b,所以这里填“b"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其他字符不变。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(char*s){/***************found*************/while(*s!=’@’){if(*s>=’A’&&’s<=’Z’||*s>=’a’&&*s<=’Z’){if(*s==’Z’)*s=’A’;elseif(*s==’Z’)*s=’a’;elSe*s+=1;}/***************found*************/(*s)++;}}main(){chars[80];printf("\nEnterastringwithlength<80.:\n\n");gets(S);printf("\nThestring:\n\n’’);puts(s);fun(s);printf("\n\nTheCords:\n\n");puts(s);}标准答案:(1)while(*s)或while(*s!=’\0’)或while(*s!=0)(2)s++j知识点解析:(1)第一个错误标识下的“while(*s!=’@’)"语句原意是s不指向字符串尾就进入下面的循环,所以对于指针判断不为尾符的语句应该是“while(*s)"或者“while(*s!=’\0’)"或者“while(*s!=’\0’)"。(2)第二个标识下“(*s)++;"是对字符内容加1,而原题是对字符位置加1,所以将其改为“s++;"。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量8中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,修改后输出t中的数据应为:10002、”LiSi”、96、81、89。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构l#include#includestructstudent{longsno;charname[10];floatscore[3];};/**********found**********/【1】fun(structstudent*a){inti;a->sno=10002;strcpy(a->name,"LiSi");/**********found**********/for(i=0;i<3;i++)【2】+=1;/**********found**********/return【3】;}main(){structstudents={10001,"ZhangSan",95,80,88},*t;inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%ldName:%s\nScores:",s.sno,);for(i=0;i<3;i++)printf("%6.2f",s.score[i]);printf("\n");t=fun(&s);printf("\nThedataaftermodified:\n");printf("\nNo:%ldName:%s\nScores:",t->sno,t->name);for(i=0;i<3;i++)printf("%6.2f",t->score[i]);printf("\n");}标准答案:structstudent*a->score[i]a知识点解析:第一空:主函数内fun函数的调用形式是“t=fun(&s);”,t是student结构体指针,故fun函数的返回值是student结构体指针,因此第一空为“structstudent*”。第二空:“for(i=0;i<3;i++)__2__+=1;”是修改a的score数组元素的值,故第二空为“a->score[i]”。第三空:此处补充返回值,由第一空的分析可知,返回值是指针,a是指针变量,所以返回值为a,即第三空为“a”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数proc()的功能是:首先把b所指字符串中的字符按逆序存放,然后将str1所指字符串中的字符和str2所指字符串中的字符,按排列的顺序交叉合并到str所指数组中,过长的剩余字符接在str所指数组的尾部。例如,当str1所指字符串中的内容为ABCDEFG,str2所指字符串中的内容为1234时,str所指数组中的内容应该为A483C2DIEFG;而当str1所指字符串中的内容为1234,str2所指字符串中的内容为ABCEDFG时,str所指数组中的内容应该为1G2F3E4DCBA。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。试题程序:#include#include#include#includevoidproc(char*str1,char*str2,char*str){inti,j;charch;i=0;j=strlen(str2)-1;//****found****while(i>j){ch=str2[i];str2[i]=str2[j];str2[j]=ch;i++;j--;}while(*str1||*str2){if(*str1){*str=*str1;str++;str1++;)if(*str2){*str=*str2;str++;str2++;)}//****found*****str=0;}voidmain(){chars1[100],s2[100],t[200];system("CLS");printf("\nEnters1string:");scaIif("%s",s1);printf("\nEnters2string:");scanf("%s",s2);proc(s1,s2,t);printf("\nTheresuhis:%s\n",t);}标准答案:(1)错误:while(i>j)正确:while(i知识点解析:由函数proc()可知,变量i和j分别存放的是字符串str前面和后面第i个字符的位置,当ij)”应改为“while(i三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(rota[][N],intn),函数的功能是:使数组左下三角元素中的值乘以n。例如:若n的值为3,a数组中的值为则返回主程序后a数组中的值应为注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN5voidfun(inta[][N],intn){}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,n,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]);fscanf(rf,"%d",&n);fun(a,n);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],n,i,j;printf("*****Thearray*****\n");for(i=0;i=3);printf("n=%4d\n",n);fun(a,n);printf("*****THERESULT*****\n");for(i=0;i标准答案:{inti,j;for(i=0;i知识点解析:(1)左下半角的元素是行下标大于等于列下标,即“i>=j”,包括对角线。(2)依次访问二维数组,把符合条件的元素的值乘以n。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、从键盘:输入一组无符号整数并保存在数组xx[N]中,以整数0结束输入,要求这些数的最大位数不超过4位,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和十位的数字之和大于5的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。例如:当xx[8]=<123,11,25,222,42,333,14,5451}时,bb[4]={25,42,333,5451}。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN1000intfun(intXX[],intbb[],intnum){inti,n=0;intg,S;for(i=0;i<num;i++){g=【】;S=XX[i]/0%10;if((g+s)>5)【】;}return【】;}main(){intXX[N];intYY[N];intnum=0,n=0,i=0;printf("Inputnumber:\n");do{scanf("%u",&xx[num]);}while(xx[num++]!=0);n=fun(xx,yy,num);printf("\nyy=");for(i=0;i<n;i++)printf("%u",YY[i]);}标准答案:xx[i]%10bb[n++]xx[i]n知识点解析:第一空:将—个整数对10取余,则得到这个整数的个位数,将一个整数除以10再对10取余,则得到这个整数的十位数。由程序可以看出,变量s保存了整数的十位数,所以应该将整数的个位数保存于变量g中。第二空:当整数的个位与十位的数字之和大于5时,则将这个整数存于数组bb中,同时,变量n记录了满足条件的无符号整数的个数。填空3:题目要求满足条件的无符号整数的个数由fun函数返回,所以函数返回n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>voidfun(char*S){inti,j;for(i=0,j=0;s[i]!=’\0’;i++)/*************found************/if((s[i]>=’A’&&s[i]<=’Z’)&&(s[i]>=’a’&&S[i]<=’z’,))s[j++]=s[i];/*************found*************/s[j]=“\0”;}main(){charitem[80];clrscr();printf(“\nEnterastring:”);gets(item);printf(“\n\nThestringis:\%S\n",item);fun(item);printf("\n\nThestringofchangingis:\%S\n",item);}标准答案:(1)错误:if(s[i]>=’A’&&s[i]<=’Z’)&&(s[i]>=’a’&&s[i]<=’z’))正确:if((s[i]>=’A’&&s[i]<=’Z’)||s[i]>=’a’&&s[i]<=’z’))(2)错误:s[j]="\0"正确:s[j]=’\0’知识点解析:错误1:字母包括小写字母和大写字母,这里是“或”的关系,所以用“||”运算符。错误2:字符串的结束标志符为字符,而不是字符串。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun(),它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将返回nanjing。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>char*fun(char*S,char*t){}main(){chara[20],b[10],*p,*q;inti;printf("Inputlthstring:");gets(a);printf("Input2thstring:");gets(b);printf(“%s”,fun(a,b));}标准答案:char*fun(char*S,char*t){inti,j;for(i=0,s[i]!=‘\0’;i++);/*求字符串的长度*/for(j=0;t[j]!=‘\0’;j++);/*比较两个字符串的长度*/returns;/*函数返回较短的字符串,若两个字符串长度相等,则返回第1个字符串*/elsereturnt;}知识点解析:本题中,第1个for循环的作用是求出s的字符个数i,第2个for循环的作用是求出t的字符个数j,因为任何循环都要控制—条语句,所以在每—个for循环条件后面必须要有—个分号。本题也可用如下技巧:#include<string.h>/*一定要注意在最前面加#include<string.h>*/char*fun(char*s,char*t){if(strlen(S)>=strten(t)returns;elsereturnt;}国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入一个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeunsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;s=n;/*****************found***************/i=【1】;/*****************found***************/while(【2】){t=s%10;if(t%2==0){/*****************found***************/x=x+t*i;i=【3】;}s=s/10;}returnx;}main(){unsignedlongn=一1;while(n>99999999||n<0){printf("Pleaseinput(0标准答案:(1)1(2)s(3)i*10知识点解析:第一空:由“if(t%2=0){x=x+-t*i;i=【3】;}"可知,如果t是偶数,那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*l;下一次得到了t=4,那么此时x的值应该是2+2*10;再下一次得到t=2,那么x=22+2*100,即x的值是在上一次值的基础上加上新得到的值乘以其权值,因此i是代表权值。第一空处是初始化i,第一次进入if语句时,x是个1位数,此时权值i应为1,做第一空处应为“1",第二空:第二空处是填循环的终止条件,在循环体内,s每次缩小10倍,在最后一次进入循环的时候,s是一个一位数,s/10之后s变成0,下次就不应该进入while循环,因此while循环的终止条件是s不为0,故第二空处为“s"或“s!=0"。第三空:由第一空的分析可知权值i是在上一次的基础上增加10倍,故第三空处应为“i*10"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是根据整型形参m,计算如下公式的值。y=1-1/(2×2)+1/(3×3)-1/(4×4)+…+(-1)(m+1)/(m×m)例如:m中的值为5,则应输出0.838611。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>doublefun(intm){doubley=1.0;/**********found*************/intj=1;inti;for(i=2;i<=m;i++){j=-1*j;/****************found*******+******/y+=1/(i*i);}return(y);}main(){intn=5;clrscr();printf("\nTheresultis%lf\n",fun(n));}标准答案:(1)错误:intj=1正确:doublej=1.0;(2)错误:y+=1/(i*i);正确:y+=j/(i*i);知识点解析:错误1:为了做后面的除法运算,j要定义为实型数,否则除得的结果将为整数。错误2:题中公式是加减相间的运算,通过来实现。三、程序设计题(本题共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语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。请在程序的下画线处填入正确的内容,并把下画线删除,使程序得出正确的结果。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。[试题源程序]#include<stdio.h>typedefstruct{charname[10];intage;)STD;STDfun(STDstd[],intn){STDmax;inti;/**********found**********/max=(1);for(i=1;i<n;i++)/**********found**********/if(max.age<(2))max=std[i];returnmax;}main(){STDstd[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15};STDmax;max=fun(std,5);printf("\nTheresult:\n");/**********found**********/printf("\nName:%s,Age:%d\n",(3),max.age);}标准答案:[1]*std[2]std[i].age[3]知识点解析:本题是从结构体中找出年龄最大的记录。填空1:给存放最大者max赋初值,所以应填:*std。填空2:当前最大者的年龄和结构中所有的年龄进行比较,所以应填:std[i].age。填空3:输出最大者的姓名和年龄,所以应填:。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun()的功能是:将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并作为函数值返回。其累加和通过函数值返回main()函数。例如,若n=5,则应输出8.391667。请改正程序中的错误,使它能得到正确结果。[注意]不要改动main函数,不得增行或删行,也不得更改程序的结构。[试题源程序]#include<stdio.h>#include<stdiib.h>typedefstructaa{intdata;structaa*next;}NODE;intfun(NODE*h){intsum=0;NODE*P;/**********found**********/p=h;while(P->next){if(p->data%2==0)sum+=p->data;/**********found**********/p=h->next;}returnsum;}NODE*creatlink(intn){NODE*h,*p,*s,*q;inti,x;h=p=(NODE*)malloc(sizeof(NODE));for(i=1;i<=n;i++){s=(NODE*)malloc(sizeof(NODE));s->data=rand()%16;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,"\n\nTHELIST:\n\nHEAD");while(P){fprintf(Pf,"->%d",p->data);p=p->next;}fprintf(pf,"\n");}outresult(ints,FILE*pf){fprintf(Pf,"\nThesumofevennumbers:%d\n",s);}main(){NODE*head;inteven;head=creatlink(12);head->data=9000;outlink(head,stdout);even=fun(head);printf("\nTheresult:\n");outresult(even,stdout);}标准答案:(1)错误:while(p->next)正确:while(p!=NULL)或while(p)(2)错误:p=h->next;正确:p=p->next;知识点解析:错误1:循环时要注意循环中止的条件是p!=NULL(最后一个结点为空,就像字符串的最后一个字符为结尾标志符’\0’一样),while(p->next)使循环提前结束,所以应改为while(p!=NULL)或while(p)。错误2:当累加完后,应该把指针指向下一个结点的指针赋给p,而不是把头指针指向的下一个结点赋给p,否则还会造成死循环,所以p=h->next;应该改为p=p->next;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),它的功能是:将带头结点单向链表按data域由大到小排序(排序时不考虑头结点),主函数用随机函数为各节点data域赋值,头结点data域赋值为0。[注意]部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。[试题源程序]#include<stdio.h>#include<coni0.h>structas{intdata;structaa*next;};voidfun(structaa*p){}main(){inti,n,m=100;structaa*h=NULL,*s=NULL,*p=NULL;clrscr()s=(structaa*)malloc(siZeof(structaa));h=s;h->data=0;h->next=NULL;printf("Pleaseinputn:");scanf("%d",&n);for(i=1;i<=n;i++){p=(structaa*)malloc(sizeof(structaa));p->data=rand()%m;P->next=NULL;printf("%d",P->data);s->next=p;s=s->next;}fun(h);printf("\n");for(h=h->next;h!=NULL;h=h->nnext)printf("%d",h->data);}标准答案:voidfun(structas*p){inttemp;structas*1st;for(p=p->next;p->next!=NULL;p=p->next)for(1st=p->next;1st!=NULL;1st=1st->next)if(1st->data>p->data){temp=1st->data;1st->data=p->data;p->data=temp;}}知识点解析:本题考查单链表的操作。为了交换,需定义中间变量,本题可以采用选择排序法进行排序。基本方法和对数组进行排序相似,只不过是通过指针的移动实现对比较次数的控制和每个结点的访问,注意循环结束的控制条件。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。例如:传给形参a的数据中,学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,修改后的数据应为:10002、”LiSi”、96、81、89。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#includestructstudent{longsno;charname[10];floatscore[3];};/**********found**********/【1】fun(structstudenta){inti;a.sno=10002;/**********found**********/strcpy(【2】,"LiSi");/**********found**********/for(i=0;i<3;i++)【3】+=1;returna;}main(){structstudents={10001,"ZhangSan",95,80,88},t;inti;printf("\n\nTheoriginaldata:\n");printf("\nNo:%ldName:%s\nScores:",s.sno,);for(i=0;i<3;i++)printf("%6.2f",s.score[i]);printf("\n");t=fun(s);printf("\nThedataaftermodified:\n");printf("\nNo:%ldName:%s\nScores:",t.sno,);for(i=0;i<3;i++)printf("%6.2f",t.score[i]);printf("\n");}标准答案:structstudenta.score[i]知识点解析:第一空:主函数内fun函数的调用形式是“t=fun(s);”,其中t是student结构体变量,因此fun函数的返回值为student结构体,故第一空处应为“structstudent”。第二空:“strcpy(__2__,"LiSi");”是修改结构体变量a的name成员值,故第二空为“”。第三空:“for(i=0;i<3;i++)__3__+=1;”是修改a的成员变量score数组元素值,因此第三空为“a.score[i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)g学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#include#include#defineN10typedefstructss{charnum[10];ints;}STU;STU*fun(STUa[],intm)(STUb[N],*t;inti,j,k;/******************found*******************/t=(STU*)calioc(sizeof(STU),m)for(i=0;ib[j].s)j=i;/******************found*******************/t(k)=b(j);b[j].s=0;}returnt;}outresult(STUa[],FILE*pf){inti;for(i=0;i10){printf(”\nGivethenumberofthestudentswhohavebetterscOre:”);scanf(”%d”,&m);}pOrder=fun(a,m);printf’”*****THERESULT*****\n”);printf(”Thetop:\n”);for(i=0;i标准答案:(1)t=(STU*)calloc(sizeof(STU),m);(2)t[k]=b[j];知识点解析:(1)题干中要求结构体STU类型的m个学生放在动态分配的连续存储区中,“t=[STU*)callot(sizeof(STU),m)"语句没有使用分号“;"结束,因此需要在语句结尾处加分号。calloc函数是C语言的动态分配函数。分配存储空间。(2)第二个标识下是将b数组拷贝到t数组,在C语言中,数组元素的访问使用中括号“[]"而不是元括弧“()",因此第二标识下应改成"t[k]=b[j];"三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHl脚C。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#include#defineN80voidfunl(char*w)/*本函数的功能是将字符串中字符循环左移一个位置*/{inti;chart;t=w[0];for(i=0;i<(int)strlen(w)-1;i++)w[i]=w[i+1];w[strlen(w)一1]=t;}voidfun(char*w,intm)/*可调用fun1函数左移字符*/{}main(){chara[N]=”ABCDEFGttIJK”;intm;voidNONO();printf(”Theorigina1string:\n”);puts(a);printf(”\n\nEnternl:”);scanf(”%d¨,&m);fun(a,m);printf("\nThestringaftermoving:\n”);puts(a);printf(”\n\n”);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据.关闭文件。*/FILE*rf,*wf;chara[N];intm,i;rf=fopen(”in.clat”,”r”);wf=fopen(”out.ctat”,”W”);for(i=0;i<10;i++){fscarlf(rf,”%d%s”,&m,a);fun(a,m);fprintf(wf,”%s\n”,a);}fclose(rf),fclose(wf);}标准答案:inti;for(i=0;i知识点解析:函数fun1的功能是将字符串中字符循环左移一个位置,m次调用该函数循环左移m个字符,因此在fun函数中循环调用fun1函数就可以完成m个字符的移动。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充main函数,该函数的功能是:从键盘输入两上字符串并分别保存在字符数组str1和str2中,用字符串str2替换字符串str1前面的所有字符,注意,str2的K度不大于str1,否则需要重新输入。例如,如果输入strl;=“abced”,str2=“fk”,则输出“fkced”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仪在main函数的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<string.h>main(){charstrl[81],str2[81];char*pl=strl,*p2=str2;clrscr();do{printf("Inputstrltn");gets(strl);printf("Inputstr2In");gets(str2);}while(【】);while(【】)*p1++=*p2++;printf("Displaystrl\n");puts(【】)}标准答案:strlen(strl)<strlen(str2)*p2str1知识点解析:第一空:如果字符串str2的长度大于字符串str1的长度,则要重新输入,即继续执行do-while循环。第二空:如果p2所指的字符不为,仍’\0’,即还没有执行到str2的最后一个字符,则将这个字符赋给字符串str1的对应字符。第三空:函数puts()的功能是将一个字符串输出到终端设备,由程序可以知道,此时应该输出字符串str1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是;利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.试题程序:#include<String.h>#include<stdio.h>#defineN80voidinsert(char*aa){ihti,j,n;charch;n=strlen(aa);for(i=1;i<n;i++)/**********************************/{c=aa[i];j=i-1;while((j>=0)&&(ch<aa[j])){aa[j+l]=aa[j];j--;}aa[j+l]=ch;}}main(){chara[N]="QWERTYUIOPASDFGHJKIMNBVCXZ";inti;printf("Theoriginalstring:%s\n",a);insert(a);printf("Thestringaftersorting:%s\n\n",a);}标准答案:错误:c=aa[i]正确:ch=aa[i];知识点解析:对长度为n的数组元素进行排列,可先对数组的前m-1项进行排序,之后再对前m项进行排序,如此循环直到数组全部元素完成排序。对前m项的子数列进行排序的方法是,将该子数列的末尾元素与前m-1项的元素相比较,由于前m-1项已经完成排序,可以找到某一位置,使得将该末尾元素插入该位置之后,前m项仍然保持升序。这样循环后,就可以得到全部元素的排序。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun(),其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ。注意:部分源程序给出如下。请勿改动主函数main口其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,chart[]){}main()chars[l00],t[l00];clrscr();printf("%nPleaseenterstringS:");scanf("%s",s);fun(s,t);prlntf("\nTheresultis:%s\n",t);}标准答案:voidfun(char*s,chart[]){inti,j=0,k=strlen(s);/*k为字符串的长度*/for(i=l;i<k;i=i+2)/*将s所指字符串中下标为奇数的字符存入t所指字符串中*/t[j++]=s[ii;t[j]=’\0’;/*在字符申最后加上结束标志*/}知识点解析:本题使用了一种泳远是奇数的循环方法,即for(i=1;i<k;i=i+2),因为开始时的值为1,当i+2循环时,此值永远是奇数。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,

温馨提示

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

评论

0/150

提交评论