版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)机试模拟试卷27(共9套)(共27题)国家二级(C语言)机试模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:从三个形参a,b,c中找出中间的那个数,作为函数值返回。例如,当a=3,b=5,c=4时,中数为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!标准答案:(1)a(2)a(3)b知识点解析:本题中fun函数的功能是求得三个数中间的数,从fun函数给出的部分来看,fun函数是采用条件运算符来求中间值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示规律的数据,由main函数输出。例如,若输入2|若输入4则输出:|则输出:12|123424|2468|36912|481216请改正程序函数中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!标准答案:(1)voidfun(inta[][M],intm)(2)a[j][k]=(k+1)*(j+1);知识点解析:本题中函数的功能是根据形参m的值(2≤m≤9),在m行m列的二维数组中存放有规律的数据,规律就是,i和j代表二维数组的行和列,则a啪[k]=(k+1)*(j+1)。三、程序设计题(本题共1题,每题1.0分,共1分。)3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注意:部分源程序在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。标准答案:知识点解析:该程序功能是把分数最低的学生数据放在b所指的数组中。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最小值。然后将最小值与所有值进行比较,求得所有的最小值。国家二级(C语言)机试模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入“AreyoucomefromSichuan?”,则输入“areyoucomefromsichuan?”。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#include<string.h>#include<conio.h>char*fun(chartt[]){inti;for(i=0;tt[i];i++){if((tt[i]>=’A’)&&(【】))【】;}return(【】);}main(){chartt[81];printf("\nPleaseenterastring:");gets(tt);printf("\nTheresultstringis:\n%s",fun(tt));}标准答案:tt[i]<=’Z’tt[i]+=32tt知识点解析:第一空;此处考查判断大写字母的方法,如果字符的ASCII码大于字符A的ASCII码,并且小于字符Z的ASCII码,则此字符为大写字母。第二空;考生必须掌握,大写字母转换为小写字母的方法,小写字母的ASCII码比大写字母的ASCII码大32。第三空:函数fun的返回值为字符型指针,而字符型的数组名就是字符型指针,所以返回tt。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中函数fun()的功能是:求出字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:Notfound!请改正程序中的错误,使它能得出正确的结果。注意;不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>#include<string.h>char*fun(char*s,char*t){char*p,*r,*a;/*************found**************/a=Null;while(*s){p=s;r=t;while(*r)/*************found**************/if(r==p){r++;p++;}elsebreak;if(*r==’\0’)a=s;s++;}returna;}main(){chars[100],t[100],,*p;clrscr();printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt:");scanf("%s",t);p=fun(S,t);if(p)printf("\nTheresultis:%s\n",p);elseprintf("\nNotfound!\n");}标准答案:(1)错误:a=NuLL;正确:a=NULL;(2)错误;if(r==p){r++;p++;}正确:if(*r==*p){r++;p++;}知识点解析:题目要求将最后一次出现的输入字符后面的字符串做一复制处理,并在主函数中输出从此地址开始的字符串。a=NuLL;是明显的常识性错误。题目中已经定义了指针变量chaf*p,*r,*a;,循环条件应该是if(*r==*p){r++;p++;},而非iRf(r==p){r++;p++;}。三、程序设计题(本题共1题,每题1.0分,共1分。)3、下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的s。例如:若a数组中的值为a=0127919745238314568259141则返回土程序后s的值应为3.375。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的仟何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>#defineN5doublefun(intw[][N]){}main(){inta[N][N]={0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1};inti,j;doubles;clrscr();printf("*****Thearray*****\n");for(i=0;i<N;i++){for(j=0;j<N;i++){printf("%4d",a[i][j]);}printf("\n");}s=fun(a);printf("*****THERESULT*****\n");printf("Thesumis:%lf\n",s);}标准答案:doublefun(intw[][N]){inti,j,k=0;doubleav=0.0;for(i=0;i<N;i++)for(j=0;j<N;j++)if(i==0||i==N-1||j==0||j==N-1)/*只要下标中有一个为0或N-1,则它一定是周边元素*/{av=av+w[i][j];/*将周边元素求和*/k++;}returnav/k;/*求周边元素的平均值*/}知识点解析:该题采用逐一判断的方式,周边元素的下标一定有一个是0或N-1,且只要下标中有一个为0或N-1,则它一定是周边元素。计算周边元素个数的方式是当给av加一个值时,则k加1。k也可用2*N+2*N-4求得。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是把数组aa中的奇数元素按原来的先后顺序放在原数组后面。例如,输入“33,67,42,58,25,76,85,16,41,56”,输出结果“42,58,76,16,56,33,67,25,25,41。注意:部分源程序给出如下。请勿改动主函数main和具他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。试题程序:#include<stdio.h>#defineN10voidfun(intaa[]){inti,j=0,k0;intbbIN];for(i0;i<N;i++){if(【】)bb[k++]aa[i];elseaa[j++]=aaIi];for(i=0;i<k;【】)aa[j]bb[i];}main(){inti;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]);fun(aa);printf("\n***newlist***\n");for(i=0;i<N;i++)printf("%4d",aa[i]);}标准答案:aa[i]%2!=0或aa[i]%2==1i++,j++知识点解析:第一空:如果一个数对2求余,结果不为0,也就是等于1,则这个数为奇数,就把这个数先暂时存在数组bb中。否则这个数为偶数,就存在数组aa中。第二空:最后,将数组bb中的奇数都拷贝到数组aa中偶数的后面。每执行一次循环休,数组aa的下标j和数组bb的下标i都要加1。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun()的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串abc,CD,EF串联起来,结果是abcCDEF。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<conio.h>#include<string.h>#include<stdio.h>/*************found**************/intfun(charstr[][10],intm,char*pt){intk,q,i,j=0;for(k=0;k<m;k++){q=strlen(str[k]);j+=q;for(i=0;i<q;i++)/*************found**************/pt[i]=str[k,i];pt+=q;pt[0]=0;}pt-=j;}main(){intm,h;chars[10][10],p[120];clrscr();printf("\nPleaseenterm:");scanf("%d",&m);gets(s[0]);printf("\nPleaseenter%dstring:In",m);for(h=0;h<m;h++)gets(s[h]);fun(s,m,p);printf("\nTheresultis:%s\n",p);}标准答案:(1)错误:intfun(charstr[][10],intm,char*pt)正确:voidfun(charstr[][10,intm,char*pt)(2)错误:pt[i]=str[k,i];正确:pt[i]=str[k][i];知识点解析:本题中的两例错误我们已经在前面的讲解中详细阐述了,一般这样的字符串连接函数在C语言的考试中肯定不让使用strcat函数,但是,直接用if和while的循坪嵌套也很容易解决问题的。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数voidfun(char*ss),其功能是:将字符串ss中所有下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。例如,若输入abc4Efg,则应输出AbC4EfG。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(char*ss){}main(){chartt[51];clrscr();printf("Pleaseenterancharacterstringwithin50characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf("\nbecomes\n\%s",tt);}标准答案:voidfun(char*ss){inti;for(i=0;ss[i]!=’\0’;i++){if(i%2==0&&ss[i]>=’a’&&ss[i]<=’z’)/*将ss所指字符串中所有下标为偶数位置的字母转换成大写*/ss[i]==ss[i]-32;}/*大写字母比相应的小写字母的ASCII码值小32*/}知识点解析:从C语言的学习中我们知道,只要将小写字母减去32则转换成大写字母,将大写字母加上32则转成小写字母,该程序使用if语句实现该功能转换的。国家二级(C语言)机试模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s,inta,doublef){/**********found**********/【1】fp;charch;fp=fopen("file1.txt","w");fprintf(fp,"%s%d%f\n",s,a,f);fclose(fp);fp=fopen("file1.txt","r");printf("\nTheresult:\n\n");ch=fgetc(fp);/**********found**********/while(!feof(【2】)){/**********found**********/putchar(【3】);ch=fgetc(fp);}putchar(’\n’);fclose(fp);}main(){chara[10]="Hello!";intb=12345;doublec=98.76;fun(a,b,c);}标准答案:FILE*fpch知识点解析:第一空:由“fp=fopen("file1.txt","w");”可知fp是文件型指针,故第一空处的变量fp定义类型为“FILE*”。第二空:“while(!feof(__2__))”是在没有达到文件未尾的时候执行循环体内容,文件状态检测函数feof的一般调用形式是:feof(fp),其中fp是文件型指针,故第二空处应为“fp”。第三空:题干要求从文件当中逐个读入数据并显示在终端屏幕上,第三空处是将从文件当中读取的字符ch显示在屏幕上,故第三空处应为“ch”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODII.C中函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如,当字符串中的内容为:”abcdabfabcdx”,t中的内容为:”ab”时,输出结果应是:abcdx。当字符串中的内容为:”abcdabfabcdx”,t中的内容为:”abd”时,则程序输出未找到信息:notbefound!。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includechar*fun(char*s,char*t){char*p,*r,*a;/************found************/a=Null;while(*s){p=s;r=t;while(*r)/************found************/if(r==p){r++;p++;}elsebreak;if(*r==’\0’)a=s;s++;}returna;}main(){chars[100],t[100],*p;printf("\nPleaseenterstringS:");scanf("%s",s);printf("\nPleaseentersubstringt:");scanf("%s",t);p=fun(s,t);if(p)printf("\nTheresultis:%s\n",p);elseprintf("\nNotfound!\n");}标准答案:a=NULL;if(*r==*p)知识点解析:(1)第一个标识下面:语句“a=Null;”中的NuLL未定义。NULL代表空值,但程序中写成了NuLL。所以,改成“a=NULL;”。(2)程序的主体是二重循环,其中外循环使指针s逐个指向字符串的字符,直到遇到串结束符退出循环,内循环检查指针p与r所指字符串是否匹配。因为这里p、r是指针,如果使用判断表达式“if(r==p)”,那么比较的是地址,而题目要求比较它们所指的字符。所以,改为:“if(*r==*p)”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。例如,若输入:17,则应输出:46891012141516。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(intm,int*k,intxx[]){}main(){intm,n,zz[100];voidNONO();printf("\nPleaseenteranintegernumberbetween10and100:");scanf("%d",&n);fun(n,&m,zz);printf("\n\nThereare%dnon-primenumberslessthan%d:",m,n);for(n=0;n<m;n++)printf("\n%4d",zz[n]);NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/intm,n,zz[100];FILE*rf,*wf;rf=fopen("in.dat","r");wf=fopen("out.dat","w");fscanf(rf,"%d",&n);fun(n,&m,zz);fprintf(wf,"%d\n%d\n",m,n);for(n=0;n<m;n++)fprintf(wf,"%d\n",zz[n]);fclose(rf);fclose(wf);}标准答案:{inti,j;intt=0;//初始化数组个数for(i=2;i知识点解析:(1)根据求素数的方法判断数i是否为素数。(2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组xx中,并且把数组的下标加1,为下一个不是素数的数放在数组中做准备。(3)返回个数,把xx数组中已经写入的数的个数返回即可,即把数组xx的最大下标加1返回即可。国家二级(C语言)机试模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includetypedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:",tt.num,);for(i=0;i<3;i++)printf("%5.1f",tt.score[i]);printf("\n");}/**********found**********/voidmodify(【1】*ss,floata){inti;for(i=0;i<3;i++)/**********found**********/ss->【2】*=a;}main(){STUstd={1,"Zhanghua",76.5,78.0,82.0};floata;printf("\nTheoriginalnumberandnameandscores:\n");show(std);printf("\nInputanumber:");scanf("%f",&a);/**********found**********/modify(【3】,a);printf("\nAresultofmodifying:\n");show(std);}标准答案:STUscore[i]&std知识点解析:第一空:由“voidmodify(___1___*ss,floata)”可知函数的第一个参数是个指针,又函数必须完成结构体各科成绩数据成员都乘以一个系数a,因此传入的参数是结构体指针,即第一空处应为“voidmodify(STU*ss,floata)”。第二空:对结构体各科成绩数据成员都乘以一个系数a,因此第二空处应为“ss->score[i]*=a;”。第三空:modify函数的第一个参数是指针,故调用该函数时第一个参数应该是变量std的地址“&std”。二、程序修改题(本题共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、请编写函数fun,函数的功能是;将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,二维数组中的数据为:则一维数组中的内容应是:333333334444444455555555。注意:部分源程序在文件PR001.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(int(*s)[10],int*b,int*n,intmm,intnn){}main(){intw[10][10]={{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j;inta[100]={0},n=0;voidNONO();printf("Thematrix:\n");for(i=0;i<3;i++){for(j=0;j<4;j++)printf("%3d",w[i][j]);printf("\n");}fun(w,a,&n,3,4);printf("TheAarray:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");NONO();}voidNONO(){/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,k;intw[10][10],a[100],n=0,mm,nn;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(k=0;k<5;k++){fscanf(rf,"%d%d",&mm,&nn);for(i=0;i<mm;i++)for(j=0;j<nn;j++)fscanf(rf,"%d",&w[i][j]);fun(w,a,&n,mm,nn);for(i=0;i<n;i++)fprintf(wf,"%3d",a[i]);fprintf(wf,"\n");}fclose(rf);fclose(wf);}标准答案:{inti,j;for(i=0;i知识点解析:(1)利用两重循环,依次取矩阵中的元素。(2)其中注意指针数组与数组指针的区别,其中数组指针s,它指向包含4个元素的一维数组。其数据元素的表示方式为:“*(*(s+i)+j)”。国家二级(C语言)机试模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(unsignedlong*n){unsignedLongx=0,i;intt;i=l;while(*n)/********************found*********************/{t=*n%【1】;/********************found*********************/if(t%2!=【2】){x=x+t(i;i=i*10;}*n=*n/10;}/********************found*********************/*n=【3】;}main(){unsiqnedlongn=一1;while(n>99999999||n<0){printf("Pleaseinput:(0标准答案:(1)10(2)0(3)x知识点解析:第一空:“t=*n%【1】;"是求n的个位数,因此第一空处应填"10"。第二空:由审题分析可知,fun函数是将参数’n所指变量中的奇数取出并重新排序,故第二处是判断t是否是奇数,t%2!=0说明t是奇数,因此第二空处应填“0"。第三空:“x=x+t*i;j=i*10;"可知x记录了重新排序后的数,故返回值是x,因此第三处是将x赋值给n所指的变量,因此第三空应为“x"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includeintfun(unsignedn,int*zero){intcount=0,max=0,t;do{t=n%10;/***************found********************/if(t=0)count++;if(max标准答案:(1)if(t==0)(2)*zero=count;知识点解析:(1)第一个标识下的if语句是判断t是否为0,而原题给出的“if(t=0)"是将0赋值给t,所以将第一个标识下的“if(t=0)"改为“if(t==0)"。(2)第二个标识下的“zero=count;"语句,根据fun函数中zero的定义为指针型。所以,第二个标识下“zero=count;"应该改为“*zero=count;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。例如,输入beijingshanghai(为回车键),函数将返回shanghai。注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includechar*fun(char*s,char*t){}main(){chara[20],b[20];voidNONO();printf("Inputlthstring:");gets(a);printf("Input2thstring:");gets(b);printf("%s\n",fun(a,b));NONO();}voidNONO()(/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti;chara[20],b[20];fp=fopen("in.dat","r");wf=fopen("out.dat","W");for(i=0;i<10;i++){fscanf(fp,"%s%s",a,b);fprintf(wf,"%8\n",fun(a,b));}fclose(fp);fclose(wf);}标准答案:inti;char*p=s,*q=t;intn=0,m=0;while(*p)//计算串s的长度n,其中p为临时指针{n++;p++;}while(*q)//计算串t的长度m,其中q为临时指针{m++;q++;}if(n>=m)//比较m和n的值,设置p指向较大的指针p=s;elsep=t;returnp;知识点解析:进入fun函数,根据前面的分析:(1)首先求得字符串的长度,设变量n和m分别用来求字符串的长度,初值设为0,把字符串中的字符逐个访问,每访问一个字符,n和m分别加1,直到字符串结束。(2)使用两个临时指针变量p、q分别作为访问字符串的变量。(3)根据m和n的值返回串,设置指针p,指向返回串的开始地址。国家二级(C语言)机试模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为:det35adh3kjsdf7。执行结果为:def3*5*adh3*kjsdt7*。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BI.ANK1.C中。不得增行或删行,也不得更改程序的结构!#includevoidfun(char*s){inti,j,n;for(i=0;s[i]!=’\0’;i++)/******************found*******************/if(s[i]>=’0’【1】s[i]<=’9’){n=0;/******************found*******************/while(8[i+1+n]!=【2】)n++;for(j=i+n+1;j>i;j--)/******************found*******************/s[j+1]=【3】;s[j+1]=’*’;i=i+1;}}main(){chars[80]="ba3a54cd23a";printf("\nTheoriginalstringis:%s\n",s);fun(s);printf("\nTheresultis:%s\n",s);}标准答案:(1)&&(2)0或“\0"(3)s[j]知识点解析:第一空:“if(s[i]>=’0’【1】s[i]<=’9’)"是判断s[i]是否是数字字符,数字字符必须满足s[i]>=’0’和s[i]<=’9’,两者之间是与的关系,故第一空处应填“&&"。第二空:显然“while(s[i+1+n]!=[2])n++;"是求s(i+1)之后的字符数量,找到其后的字符数量之后便可以在“for(j=i+n+l;j>i;j--)"循环中移动后面的字符了,故while的条件是没有达到字符串结束位,n++,即第二空处应填“0"或“\0"。第三空:“for(j=i+n+1;j>i;j--)"循环是将数字字符后面的字符往后移动一位,从最后一个字符开始往后移动,故s[j+1]=s[j],即第三空处为“s[j]"。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includeintfun(){inti,j,k,sum=0;printf("\nTheresult:\n\n");/***************found********************/for(i=0;i<=3;i++)(for(j=1;j<=5;j++)(k=8一i—j;/***************found********************/if(K>=0&&K<=6){sum=sum+1;printf("red:%4dwhite:%4dblack:%4d\n",i,j,k);}}}returrlsum;}main(){intsum;sum=fun();printf("sum=%4d\n\n",sum);}标准答案:(1)for(i=1;i<=3;i++)(2)if(k>=0&&k<=6)知识点解析:(1)第一个标识下的“for(i=0;i<=3;i++)"说明是3个红球,题干要求必须有红球s,即i是从1开始变化的,所以将“for(i=0;i<=3;i++)"改为“for(i=1;i<=3;i++)"。(2)第二标识下变量K没有定义,编译时会提示出错。根据题目中要求“在每组中,可以没有黑球,但必须要有红球和白球"因此单单判断黑球是不行的,即k应该大于等于1且小于等于6,即第二个标识下“if(K>=1&&K<=6)"应该改为“if(k>=0&&k<=6)"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如。一维数组中的数据是:2223445666677899101010。删除后,数组中的内容应该是:2345678910。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineN80intfun(inta[],intn){}main(){inta[N]={2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10),i,n=20;voidNONO();printf(”Theoriginaldata:\n”);for(i=0;i标准答案:inti,t,j=0,*p=a;t=p[0];//设置临时变量t初值指向第一数组值for(i=0;i<=n;i++)if(t==p[i])//当临时变量与数组中的某个值相同则跳出,比较下一个元素;else//如果临时变量与数组中值不同,则对临时变量重新赋值{a[j]=t;t=p[i];j++;}if(i>=n)a[j]=t,returnj;知识点解析:(1)首先,设置一个临时变量,初值设置为一维数组的第一个元素。(2)然后,依次将数组的元素与临时变量比较,如果相同,则继续取数组下一个元素与临时变量比较:如果不同。则将临时变量的值赋值到数组的第一个元素,同时将此与临时变量不同的数组元素赋值给临时变量。(3)循环执行,直到所有的数据处理完毕。国家二级(C语言)机试模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:计算直到。若x=2.5,函数值为:1.917915。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的RLANKI.C中。不得增行或删行,也不得更改程序的结构!#include#includedoublefun(doublex){doublef,t;intn;f=1.0+x;/***************found***************/t=【1】;n=1;do{n++;/***************found***************/t*=(一1.0)*x/【2】;f+=t;}/***************found***************/while(【3】>=le-6);returnf;}main(){doublex,y;x=2.5;y=fun(x);printf("\nTheresultis:\n");printf("x=%-12.6fy=%-12.6f\n",x,y);}标准答案:(1)x(2)n(3)fabs(t)知识点解析:第一空:“f=1.0+x;"f的初始化为级数的前两项之和,dowhile循环从第三项x2/2开始计算,第一空处是给t赋初值,t表示级数项,“n++;t*=(-1.0)*x/【2】;"即第一次进入do循环之后n的值为2,故t的初值应该为x,第一空处应为“x"。第二空:由审题分析可知,后一项乘以(-1)*x除以n,故第二空处应为“n"。第三空:循环的终止条件是(xn/n!)的绝对值小于le-6,即只要(xn/n!)大于等于le-6,do循环就执行,故第三处应为“labs(t)",fabs函数的功能是求绝对值。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:用下面的公式求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:π/4=1-1/3+1/5-1/7^例如,程序运行后,输入0.0001,则程序输出3.1414。请改正程序中的错误,使它能输出正确的结果。注意:不要改动smain函数,不得增行或删行,也不得更改程序的结构!#include#includefloatfun(floatnum){ints;floatn,t,pi;t=1;pi=0;n=1;s=1;/*********found*********/while(t>=num){pi=pi+t;n=n+2:s=-s;/********found***********/t=s%n;}pi=pi*4;returnpi;}main(){floatn1,n2;printf("Enterafloatnumber:");Scanf("%f",&n1);n2=fun(n1);printf("%6.4f\n",n2);}标准答案:(1)while(fabs(t)>=num)(2)t=s/n;知识点解析:(1)题干中要求进行循环的条件是绝对值小于某范围,可以调用C语言提供的取绝对值函数fabs对t取绝对值。所以将“while(t>=num)"改为“while(fabs(t)>=num)"。(2)表达式s%n中,n是浮点型,而%运算符只能用于整数运算,且要进行的是除法运算而不是求余运算。所以,第二个标识下“t=s%n;"应该改为“t=s/n;"。三、程序设计题(本题共1题,每题1.0分,共1分。)3、程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。例如;若m的值为2,a数组中的值为:则返回主程序后a数组中的值应为:注意:部分源程序存在文件PROGl.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#iticlude#include#defineN5voidfun(inta[][N],intm){}main(){inta[NI[N],m,i,j;voidNONO();printf("*****Thearray*****\n"),for(i=0;i=3);printf(”m=%4d\n”,m);fun(a,m);printf(”THERESULT\n”);for(i=0;i标准答案:inti,j;for(i=0;i知识点解析:(1)右上半角的元素是行下标小于等于列下标,即“i<=j"包括对角线。(2)依次访问二维数组,把符合条件的元素的值乘以m。国家二级(C语言)机试模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、请补充函数fun(),该函数的功能是:把字符下标为非素数的字符从字符串sb中删除,把字符下标为素数的字符重新保存在字符串e口中。字符串sb从键盘输入,其长度作为参数传入函数fun()。例如,输入“abcdefghijkl”,输出“cdf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年花卉保养服务协议范本
- 2023-2024学年浙江省温州市苍南县金乡卫城中学高三5月第二次联考数学试题文试卷
- 2023-2024学年浙江省金兰教育合作组织高三下学期质量调查(一)数学试题
- 2024年设计服务外包协议范本2
- 2024年深度钻井工程服务协议
- 2024年荒山开发承包协议样本
- 2024年个人消费贷款协议模板指南
- 2024年适用车辆租赁长租协议样式
- 底商租赁协议精简(2024年)
- 2024移动网络运营商服务协议
- 康复医院设置标准汇总
- CA码生成原理及matlab程序实现
- 国家开放大学《电气传动与调速系统》章节测试参考答案
- 须弥(短篇小说)
- 旋风除尘器设计与计算
- 《装配基础知识培训》
- 出口退税的具体计算方法及出口报价技巧
- PCB镀层与SMT焊接
- Unit 1 This is my new friend. Lesson 5 课件
- 2019年青年英才培养计划项目申报表
- 芳香油的提取
评论
0/150
提交评论