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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷14(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共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、由N个有序整数组成的数列已放在一维数组中,给定程序MODll.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(10whigh,查找结束。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数。不得增行或删行,也不得更改程序的结构。#include#defineN10/************found************/voidfun(inta[],intm){intlow=0,high=N-1,mid;while(low<=high){mid=(low+high)/2;if(ma[mid])low=mid+1;elsereturn(mid);}return(-1);}main(){inti,a[N]={-3,4,7,9,13,45,67,89,100,180},k,m;printf("a数组中的数据如下:");for(i=0;i=0)printf("m=%d,index=%d\n",m,k);elseprintf("Notbefound!\n");}标准答案:intfun(inta[],intm)elseif(m>a[mid])知识点解析:(1)根据主函数中“k=fun(a,m);”,知道函数fun应该是返回int型的函数,所以第一个标识下面定义的“voidfun(inta[],intm)”应该改为“intfun(inta[],intm)”。(2)第二个标识下的“elseIf(m>a[mid])”是判断m是否比a[mid]大,在while循环中采用的是if-elseif-else语句,显然“elseIf”当中“If”应当小写,故第二标识下“elseIf(m>a[mid])”应改为“elseif(m>a[mid])”。三、程序设计题(本题共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.dat”,”r”);out=fopen(”out.dat”,”w”);for(i=0;i<10;i++){fscanf(in,”%s”,s);fun(s);fprintf(out,”%s\n”,s);}fclose(in);fcloSe(out);}标准答案:{inti=0;char*p=a;while(*p&&*p==’*’){a[i]=*p;i++;p++;}while(*p){if(*p!=’*’){a[i]=*p;i++;}p++;}a[i]=’\0’;}知识点解析:(1)首先,使用一个指针p指向串的起始位置,然后对指针p指向的字符进行判断,并且如果是“*”,将其拷贝到字符串,这样确定了由头开始的第一个非“*”的位置。(2)然后,在循环过程中对由第一个非“*”字符起始到串尾的字符进行判断,如果不是“*”就将其拷贝到字符串a,否则跳过。(3)最后,在新生成的字符串尾加’\0’。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输入一个整数:27638496,函数返回值为:64862。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)0(2)10*x(3)n/10知识点解析:函数fun的功能是将形参n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,首先求出n的各位数,判断是否是偶数,如果是偶数将其按照原来从高位到低位相反的顺序组成一个新的数。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改变字符串中的内容。例如,若字符串为abcd,则应输出:dcba。请改正程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)voidfun(char*a)(2)printf("%c",*a),知识点解析:本题中函数的功能是将字符串中的内容逆序。题干中给出的fun函数通过递归调用自身,实现字符串的逆序。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:(1)该程序功能是对组合数公式求值。它的解题思路,可以分解为以下几步:求m!→求n!→求(m-n)!→求组合数的值。(2)从已给部分源程序的main主函数开始入手,主函数中的“printf(“P=%f\n”,fun(12,8));”语句中“fun(12,8)”将12、8传递给fun中的m与n,fun函数实现对组合数的求佰。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、str为一个字符序列。请补充函数fun(),该函数的功能是:查找str中值为x的元素,返回该字符序列中值为x的元素个数,并把这些值为x的元素下标依次保存在数组bb中。例如,在“abcdefahij”中查找‘a’,结果为:2个‘a’,下标依次为0、6。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<conio.h>#defineN20intbb[N];intfun(char*str,charch){inti=0,n=0;chart=ch;char*p=str;while(*p){if(【】)【】;p++;i++;}return【】;}main(){charstr[N];charch;inti,j,n;clrscr();printf("***Inputtheoriginalstring***\n");gets(str);printf("***TheOriginal***\n");puts(str);printf("***Inputcharacter***\n");scanf("%c",&ch);n=fun(str,ch);printf("\nThenumbrofcharacteris:%d\n",n);printf{"***Thesuffixofcharacter***\n");for(i=0;i<n;i++)printf("%d",bb[i]);}标准答案:*p==tbb[n++]=In知识点解析:第一空:通过指针p的移动来依次访问字符串的各个字符,如果指针p所指的字符等于待查找的字符,即表示找到了满足条件的字符。第二空:将找到的字符在字符数组中的下标值保存在数组bb中。第三空:变量n记录在字符串中找到待查找字符的个数。由main函数的调用可知函数fun()的返回值为n。二、程序修改题(本题共1题,每题1.0分,共1分。)2、假如整数数列中的数不重复,并存放在数组中。下列给定的程序中,函数fun()的功能是:删除数列中值为X的元素。N中存放的是数列中元素的个数。请改正程序中的错误,使它能够得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#defineN20fun(int*a,intn,intx){intp=0,i;a[n]=x;while(x!=a[p])p=p+1;if(p==n)return-1;else{for(i=p;i<n;i++)/*************found**************/a[i+1]=a[i];returnn-1;}}main(){intw[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i;n=10;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\nInputx(todelete):");scanf("%d",&x);printf("Delete:%d\n",x);n=fun(w,n,x);if(n==-1)printf("***Nobefound!***\n\n");else{printf("Thedataafterdeleted:\n");for(i=0;i<n;i++)printf("%5d",w[i]);printf("\n\n");}}标准答案:错误:a[i+1]=a[i];正确:a[i]=a[i+1];知识点解析:上机改错题有一个优势,就是我们可以执行该程序,根据错误的提示再一步一步实现改错的目的,我们先不看程序是什么意思,甚至不用看它在求什么。按Ctrl+F9快捷键,然后看看屏幕提示。另外,审题时我们必须要注意“不要改动main()函数,不得增行或减行,也不得更改程序结构”,这样;对我们来说,只要读懂题意,对程序执行部分:{intp=0,i;a[n]=x;while(x!=a[p])p=p+1;if(p==n)return-1;else{for(i=p;i<n;i++)a[i+1]=a[i];returnn-1;}逐步分析,再应用平时的常识加以区分,琢磨,相信答案不攻自破,这种考题,按Ctrl+F9快捷键后,屏幕一般都不会提示错误,否则就显得太儿科了一点,所以,我们并不需要着急去找错误,而是把程序读懂。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数voidfun(char*tt,intpp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。例如:当输入字符串abcdefghabcdeabc后,程序的输出结果应该是:33322110000000000000000000注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(char*tt,intpp[]){}main(){charaa[1000];intbb[26],k,n;clrscr();printf("\nPleaseenteracharstring:");scanf("%s",aa);fun(aa,bb);for(k=0;k<26;k++)printf("%d",bb[k]);printf("\n");}标准答案:voidfun(char*tt,intpp[]){inti;fori=0;i<26;i++)pp[i]=0;/*初始化pp数组各元素为0*/for(;*tt!=’\0’;tt++)if(*tt>=’a’&&*tt<=’z’)pp[*tt-’a’]++;/*将tt字符串中’a’到’z’26个字母各自出现的次数,依次放在pp数组中,任一个小写字母减去’a’后所得结果正好是它对应的下标*/}知识点解析:第1个循环的作用是初始化数组pp,未经赋值变量的量为一个不确定数字。由于它要将’a’到’z’26个字母的个数依次放到数组pp中。即’a’的个数存于pp[0]中,’b’的个数存于pp[1]中,’c’的个数存于pp[2]中,…,依次类推。而’a’-’a’的值正好为0,’b’-’a’的值为1,’c’-’a’的值为2,…,依此类推。即任一个小写字母减去’a’后所得结果正好是它对应的下标,所以就有了pp[*tt-’a’]++。但*tt必须是小写字母即if()不应省略。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域,从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序的结构!#include#include#defineN6typedefstructnode{intdata;structnode*next;}NODE;voidfun(NODE*h){NODE*p,*q;intt;/**********found**********/p=【1】;while(p){/**********found**********/q=【2】;while(q){/**********found**********/if(p->data【3】q->data){t=p->data;p->data=q->data;q->data=t;}q=q->next;}p=p->next;}}NODE*creatlist(inta[]){NODE*h,*p,*q;inti;h=(NODE*)malloc(sizeof(NODE));h->next=NULL;for(i=0;idata=a[i];q->next=NULL;if(h->next==NULL)h->next=p=q;else{p->next=q;p=q;}}returnh;}voidoutlist(NODE*h){NODE*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");}}main(){NODE*head;inta[N]={0,10,4,2,8,6};head=creatlist(a);printf("\nTheoriginallist:\n");outlist(head);fun(head);printf("\nThelistaftersorting:\n");outlist(head);}标准答案:h->nextp->next>=知识点解析:第一空:由审题分析可知,q从h的下一个元素开始寻找最小值,故第一空为“h->next”。第二空:由审题分析可知,while循环是在剩下的元素当中找最小值,剩下的结点是由q指向的链表,q从p的后一个结点开始,故第二空处应为“p->next”。第三空:“if(p->data__3__q->data)”是比较p结点和p结点数据的大小,如果p结点的数据比q结点的数据大,那么应该将p结点和q结点的数据进行交换,故第三空处应为“>=”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C、中函数fun的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把3个串:”abe”,”CD”,”EF”连接起来,结果是”abcCDEF”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(charstr[][10],intm,char*pt){/************found************/intk,q;for(k=0;k<m;k++){q=strlen(str[k]);for(i=0;i标准答案:intk,q,i;pt[i]=str[k][i];知识点解析:(1)第一标识下是整型变量k、q和i的定义,根据C语言中整型变量的定义方式,第一标识下应为“intk,q,i;”。(2)第二个标识下的“pt[i]=str[k,i];”语句应该将str中的字符依次拷贝到pt中,根据C语言中对二维数组每一位的取值,应该是str[k][i],所以“pt[i]=str[k,i];”改为“pt[i]=str[k][i];”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#inclucle#include#defineN80intfun(char*s){}main()(charline[N];intnum=0;voidNONO();printf(”Enterastring:\n”);gets(line);num=fun(line);printf(”Thenumberofwordis:%d\n\n”,num);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FTLE*rf,*wf;inti,num;charline[N],*p;rf=fopen(”in.dat”,”r”);wf=fopen(”out.dat”,”w”);for(i=0;i<10;i++){fgets(line,N,rf);p=strchr(line,’\n’);if(p!=NULL)*p=0;FILIm=fun(line);fprintf(wf,”%d\n”,rlLlm);}fclose(rf);fclose(wf);}标准答案:{inti,n=0;//字符统计初始值设置为0for(i=0;i=’a’&&s[i]<=’z’&&s[i+1]==’’||s[i+1]==’\0’)//单词判断条件n++;//单词统计计数器加1}returnn;//返回统计值}知识点解析:(1)首先,求得字符串的长度。(2)只要小于字符串的长度,就对字符进行循环判断。(3)根据题干要求,只要字符是小写字母,并且下一个紧靠的字符是空格或者尾符,那么单词统计计数器就加1。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:从键盘输入一个下标n,把数组aa中比元素aa[n]小的元素放在它的左边,比它大的元素放在它的右边,排列成的新数组仍然保存在原数组中。例如,数组aa={33,67,42,58,25,76,85,16,41,56},输入3。结果输出“33,42,25,16,41,56,58,67,76,85”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仪在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN10voidfun(intaa[],intn){inti,j=0,k=0,t;intbb[N];t=aa[n];for(i=0;i<N;i++){if(aa[i]>t)bb[j++]=aa[i];if(aa[i]<t)aa[k++]=aa[i];}【】;for(i=0;【】;i++,k++)aa[k]=bb[i];}main(){inti,n;intaa[N]={33,67,42,58,25,76,85,16,41,56};clrscr();printf("\n***originallist***\n");for(i=0;i<N;i++)printf("%4d"/aa[i]);printf("\nsuffixn\n");scanf("%d",&n);fun(aa,n);printf("\n***newlist***\n");for(i=0;i<N;i++)printf("%4d",aa[i]);}标准答案:aa[k++]=ti<j知识点解析:第一空:首先将aa[n]赋值给t,通过for循环,将比t大的数暂存在数组bb中,将比t小的数保存在数组aa中,此时应该将t存入数组aa中,正好放在那些小于t的元素后面。第二空:最后将数组bb中的元素存入数组aa中,放在t的后面。变量j记录了大于t的元素的个数,所以变量i的取值范围是从0到j-1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定的程序中,fun()函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写(这里的“单词”是指有空格隔开的字符串)。例如,若输入:Iamastudenttotaketheexamination则应输出:IaMAstudenTtOtakethEexaminatioN请改正程序中的错误,使它能得出正确的结果。注童:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<ctype.h>#include<stdio.h>voidfun(char*p){intk=0;for(;*p;p++)if(k){/*************found**************/if(p==’’){k=0;/*************found**************/*p=toupper(*(p-1));}}elsek=1;}main(){charchrstr[64];intd;clrscr();printf("\nPleaseenteranEnglishsentencewithin63letters:");gets(chrstr);d=strlen(chrstr);chrstr[d==’’;chrstr[d+1]=0;printf("\nBoforechanging:\n%s",chrstr);fun(chrstr);printf("\nAfterchanging:\n%s",chrstr);}标准答案:(1)错误:if(p==’’)正确:if(*p==’’)(2)错误:*p=toupper(*(p-1));正确:*(p-1)=toupper(*(p-1));知识点解析:本题比较简单,重点考查toupper函数的用法,该函数是将ch字符转换成大写字母,该题较多地应用了字符串处理函数。三、程序设计题(本题共1题,每题1.0分,共1分。)3、某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#defineN8typedefstruct{charnum[10];doubles[N];doubleave;}STREC;voidfun(){}main(){STRECs={"GA005",85.5,76,69.5,85,91,72,64.5,87.5);inti;fun(&s);printf("The%s’sstudentdata:\n",s.num)//*输出学号*/for(i=0;i<N;i++)printf("%4.1f\n",s.s[i]);/*输出各科成绩*/printf("\nave=%7.3f\n",s.ave);/*输出平均分*/}标准答案:voidfun(STREC*p){inti;p->ave=0.0;for(i=0;i<N;i++)p->ave=p->ave+p->s[i];/*求各门成绩的总和*/p->ave=p->ave/N;/*求平均分*/}知识点解析:本题考查自己定义形参的相关知识点,程序流程是这样的,在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC*p,此时,引用成员的方式可以是用指向运算符即p->ave和p->s[i],当然,也可用(*p).ave和(*p).s[i]。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于等于2)。例如,形参s所指的字符串为:abcdefgh,执行结果为:ahcbedgf。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s){inti,n,k;charc;n=0;for(i=0;s[i]!=’\0’;i++)n++;/**********found**********/if(n%2==0)k=n-【1】;elsek=n-2;/**********found**********/c=【2】;for(i=k-2;i>=1;i=i-2)s[i+2]=s[i];/**********found**********/s[1]=【3】;}main(){chars[80]="abcdefgh";printf("\nTheoriginalstringis:%s\n",s);fun(s);printf("\nTheresultis:%s\n",s);}标准答案:1s[k]c知识点解析:第一空:“for(i=0;s[i]!=’\0’;i++)n++;”n记录了数组s的长度,“if(n%2==0)”如果长度n是偶数,那么最右边被移出的字符的下标是在n-1,如果n是奇数,那么最右边被移出的字符的下标是n-2,因此第一空处应为“1”。第二空:题目要求最右边被移出字符串的字符绕回放到第一个奇数位置,因此最右边被移出的字符是s[k],在s[k]被替换之前必须先把s[k]保存在其他变量中,故第二空处应为“s[k]”,将s[k]保存在c中。第三空:此处是把最右边被移出字符串的字符绕回放到第一个奇数位置,最右边被移出字符保存在c,第一奇数位置是s[1],故第三处应为“c”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。请改正函数fun中指定部位的错误,使它能得出正确能结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includetypedefstructaa{intdata;structaa*next;}NODE;intfun(NODE*h){intsum=0;NODE*p;/***********found**********/p=h;->next;while(p){if(p->data%2==0)sum+=p->data;/***********found**********/p=p->next;}returnsum;}NODE*creatlink(intn){NODE*h,*p,*s;inti;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);}标准答案: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名学生的成绩已在主函数中放入一个带头节点的链表结构中,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、请补充函数fun(),该函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,若一维数组中的数据是:1,1,1,2,2,2,3,4,4,5,5,6,6,7,7,8,9,9,10,10。删除后,数组中的内容应该是:1,2,3,4,5,6,7,8,9,10。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN80intfun(inta[],intn){inti,t,j=0;t=a[0];for(i=1;i<n;i++)if(【】);else{【】;t=a[i];}a[j++]=t;returnj;}main(){inta[N]={1,1,2,2,2,3,4,4,5,5,6,6,6,7,7,8,9,9,10,10},i,n=20;printf("Theoriginaldata:\n");for(i=0;i<n;i++)printf("%4d",a[i]);n=fun(a,n);printf("\n\nThedataafterdeleted;\n");for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}标准答案:t==a[i]a[j++]=t知识点解析:第一空:本题的特点是,数组中的数已按从小到大的顺序排列,所以如果有相同的数,也是连在一起,而不是分散的。将一个数与它后面的数比较,如果相同,则什么都不做。第二空:如果不相同,则将这个数记录下来,仍然存在数组a中,此时并不会覆盖还没有进行处理的数。注意,数组下标j自加1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun()的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>/*************found**************/voidfun(longs,longt){longs1=10;s/=10;*t=s%10;/*************found**************/while(s<0){s=s/100;*t=s%10*s1+*t;s1=s1*10;}}main(){longs,t;clrscr();printf("\nPleaseenters:");scanf("%ld",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)错误:voidfun(longs,longt)正确:voidfun(longs,long*t)(2)错误:while(s<0)正确:while(s>0)知识点解析:本题考查函数调用方式和while循环语句中条件限制的方法。主函数中fun()的调用方式说明fun()函数的参数应当为指针类型,所以voidfun(longs,longt)正确的写法应该是voidfun(longs,long*t)。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun(),它的功能是将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转为整数的函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<string.h>longfun(char*p){}main(){chars[6];longn;printf("Enterastring:\n");gets(s);n=fun(s);printf("%ld\n",n);}标准答案:longfun(char*p){longn=0;intflag=1;if(*p==’-’)/*负数时置flag为-1*/{p++;flag=-1;}elseif(*p==’+’)/*正数时置flag为1*/p++;while(*p!=’\0’){n=n*10+*p-’0’;/*将字符串转成相应的整数*/p++;}returnn*flag;}知识点解析:if()的作用是判断它是正数还是负数。while()循环的作用是将字符串转成相应的整数。注意*p是一个字符如’9’,’4’,并不是一个数,要将其转成相应的数字必须令其减去’0’(不是’\0’),即*p-’0’就得到*p这个字符的相应数字。如’0’-’0’=0,’8’-’0’=8等。必须在程序的前面加#include<stdlib.h>,函数atol()的作用是将字符串p转成长整型数,它是一个库函数。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)"r"(2)fs(3)ft知识点解析:fun函数要求实现的功能是将指定源文件中的内容复制到指定的目标文件中,即以只读方式打开源文件,以只写方式打开目标文件,然后将源文件内的内容复制到目标文件中。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:应用递归算法求形参a的平方根。求平方根的迭代公式如下:例如,a为2时,平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。标准答案:(1)doublefun(doublea,doublex0)(2)if(fabs(x1-x0)>0.0O001)知识点解析:(1)主函数中“fun(x,1.0)”,x是double型变量,1.0是浮点数,可知fun有两个double型参数,而第一标识下“dounle”不是C语言关键字,所以应将“doublefun(doublea,dounlex0)”改为“doublefun(doublea,doublex0)”。(2)第二个标识下的if语句是判断进行递归运算的条件,第二标识下变量x0没有定义,根据题意,这里是判断x1和x0的差值的绝对值是否比0.00001大,所以第二个标识下“ifi[fabs(x1-xo)>0.0三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。例如:若m的值为2,a数组中的值为:注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是使数组右上半三角元素中的值乘以m。本题中首先要确定右上角半角元素的特点,然后对元素逐个进行乘以m的操作。其中,右上角的元素是行下标小于等于列下标的元素。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中的学号、姓名、和三门课的成绩依次是:10001、”ZhangSan”、95、80、88,则修改后输出b中的数据应为:10002、”LiSi”、

温馨提示

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

评论

0/150

提交评论