版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(操作题)模拟试卷14(共9套)(共26题)国家二级C语言机试(操作题)模拟试卷第1套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:找出100~x(x≤999)之间各位上的数字之和为15的所有整数,并在屏幕输出;将符合条件的整数的个数作为函数值返回。例如,当n值为500时,各位数字之和为15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492,共有26个。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intfun(intx){intn,s1,s2,s3,t;/*********found*********/n=【1】;t=100;/*********found*********/while(t<=【2】){s1=t%10;s2=(t/10)%10;s3=t/100;if(s1+s2+s3==15){printf("%d",t);n++;}/*********found*********/【3】;}returnn;}main(){intx=-1;while(x>999‖x<0){printf("Pleaseinput(0<x<=999):");scanf("%d",&x);}printf("\nTheresultis:%d\n",fun(x));}标准答案:(1)0(2)x(3)t++知识点解析:填空1:变量n用于存放符合条件的整数的个数,应赋初值为0。填空2:根据题目要求,确定循环变量t的取值范围为t<=x。填空3:循环变量t自增1操作。二、程序设计题(本题共1题,每题1.0分,共1分。)2、编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n。例如:m=12,n=8时,运行结果为495.000000。注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<stdio.h>floatfun(intm,intn){}main()/*主函数*/{voidNONO();printf("P=%f\n",fun(12,8));NONO();}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*fp,*wf;inti,m,n;floats;fp=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(fP,"%d,%d",&m,&n);s=fun(m,n);fprintf(wf,"%f\n",s);}fclose(fp);fclose(wf);}标准答案:longjc(intm){longs=1;inti;for(i=1;i<=m;i++)s=s*i;returns;}floatfun(intm,intn){floatp;p=1.0*jc(m)/jc(n)/jc(m—n);returnp;}知识点解析:本题考查算术运算的算法,先建立一个jc函数来计算m的阶乘,函数中使用一个for循环来计算m的阶乘,并将计算结果作为函数的返回值。在fun函数中调用jc函数,来计算三个阶乘的除法。国家二级C语言机试(操作题)模拟试卷第2套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字母(不区分大小写),并统计出其出现的次数。例如,形参s所指的字符串为:abcAbsmaxless,程序执行后的输出结果为:letter’a’:3timesletter’s’:3times请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#include<ctype.h>voidfun(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<k[n])max=【3】;}printf("\nAftercount:\n");for(i=0;i<26;i++)if(k[i]==max)printf("\nletter\’%c\’:%dtimes\n",i+’a’,k[i]);}main(){chars[81];printf("\nEnterastring:\n\n");gets(s);fun(s);}标准答案:(1)*s(2)1(3)k[n]知识点解析:本题统计字符串中各字母的个数,建立了一个包括26个整型变量的数组,用来存储每个字母的个数。填空1:isalpha函数的作用是判断当前字符是否为字母,tolower函数的作用是将当前字母转换为小写字母,所以应填*s。填空2:把该字母出现的个数累加到指定的数组中,所以应填1。填空3:max用来记录出现次数最高的字母的出现次数,如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填k[n]。二、程序修改题(本题共1题,每题1.0分,共1分。)2、使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:求出如下分数序列的前n项之和,和值通过函数值返回。例如,若n=5,则应输出8.391667。请改正程序中的错误,使其得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>/*********found*********/voidfun(intn){inta=2,b=1,c,k;doubles=0.0;for(k=1;k<=n;k++){/*********found*********/s=s+(Double)a/b;c=a;a=a+b;b=c;}return(s);}voidmain(){intn=5;system("CLS");printf("\nThevalueoffunctionis:%lf\n",fun(n));}标准答案:(1)doublefun(intn)(2)s=s+(double)a/b;知识点解析:(1)由语句“return(s);”和变量s定义为double型可知,该函数定义时其类型标识符为double类型。(2)注意数据类型double的书写格式。三、程序设计题(本题共1题,每题1.0分,共1分。)3、使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入"abc4Efg",则应输出"aBc4EFg"。注意:部分源程序在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>#include<stdlib.h>voidfun(char*ss){}voidmain(){FILE,*wf;chartt[81],s[81]="abc4Efg";system("CLS");printf("\nPleaseenteranstringwithin80characters:\n");gets(tt);printf("\n\nAfterchanging,thestring\n%s",tt);fun(tt);printf("\nbecomes\n%s\n",tt);/*********found*********/wf=fopen("out.dat","w");fun(s);fprintf(wf,"%s",s);fclose(wf);/*********found*********/}标准答案:voidtun(char*ss){inti;for(i=0;ss[i]!=’\0’;i++)/*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/if(i%2==1&&ss[i]>=’a’&&ss[i]<=’z’)ss[i]=ss[i]-32;}知识点解析:该题要求将给定字符串中奇数位置的字母转换为大写,需要先判断奇数位置以及是否是小写字母,如果是再通过其转换方法进行转换。从C语言的学习中知道,只要将小写字母减去32即转成大写字母,将大写字母加上32即转成小写字母。本程序用if语句实现转换功能。国家二级C语言机试(操作题)模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、下列给定程序中,函数fun的功能是:将自然数1~10及其平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。请在程序下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<math.h>#include<stdio.h>intfun(char*fname){FILE*fp;inti,n;floatx;if((fp=fopen(fname,"w"))==NULL)return0;for(i=1;i<=10;i++)/*********found*********/fprintf(【1】,"%d%f\n",i,sqrt((double)i));printf("\nSucceed!!\n");/*********found*********/【2】;printf("\nThedatainfile:\n");/*********found*********/if((fp=fopen(【3】,"r"))==NULL)return0;fscanf(fp,"%d%f",&n,&x);while(!feof(fp)){printf("%d%f\n",1"1,x);fscanf(fp,"%d%f",&n,&x);}fclose(fp);return1;}main(){charfname[]="myfile3.txt";fun(fname);}标准答案:(1)fp(2)fclose(fp)(3)fname知识点解析:填空1:fprintf函数的形式是:fprintf(文件指针,格式字符串,输出表列);,所以填入文件指针fp。填空2:文件一旦使用完毕,应使用关闭函数fclose将文件关闭,以避免发生文件数据丢失等错误。填空3:fopen函数用来打开一个文件,其一般形式为:文件指针名=fopen(文件名,使用文件方式);因此应填入文件名fname。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序中,函数fun的功能是:将n个无序整数从小到大排序。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<conio.h>#include<stdio.h>#include<stdlib.h>fun(intr1,int,*a){inti,j,p,t;for(j=0;j<n一1;j++){p=j;/*********found*********/for(i=j+1;i<n一1;i++)if(a[p]>a[i])/*********found*********/t=i;if(p!=j){t=a[j];a[j]=a[p];a[p]=t;}}}putarr(intn,int*z){inti;for(i=1;i<=n;i++,z++){printf("%4d",*z);if(!(i%10))printf("\n");}printf("\n");}voidmain(){intaa[20]={9,3,0,4,1,2,5,6,8,10,7),n=11;system("CLS");printf("\nBeforesorting%dnumbers:\n",n),putarr(n,aa);fun(n,aa);printf("\nAitersorting%dnumbers:\n",r1);putarr(n,aa);}标准答案:(1)for(i=j+1;i<n;i++)(2)p=i;知识点解析:该程序是对n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第1个元素的位置;再找出次小项,置于第2个元素的位置;之后顺次处理后续元素。(1)数组的长度为n,所以最后一个元素的下标值为n一1,i的取值范围应该包括此下标值。(2)p是中间变量,存放值较小的元素下标。三、程序设计题(本题共1题,每题1.0分,共1分。)3、编写函数fun,其功能是:将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12时,调用该函数后c=2514。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:#include<conio.h>#include<stdio.h>voidfun(inta,intb,long*c){}main(){inta,b;longc;printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%idkn",c);}标准答案:voidfun(inta,intb,long*c){/*b%10获取b的个位,a/10获取a的十位,a%10获取a的个位,b/10获取b的十位*/*c=a/10+(b/10)*10+(a%10)*100+(b%10)*1000;}知识点解析:本题的主要问题是如何取出a和b的个位数和十位数,取出后如何表示成c中相应的位数。由于a和b都是只有两位的整数,所以分别对它们除10可得到它们的十位数,分别用10对它们求余可得到它们的个位数。得到后对应乘以1000、100、10、1,就可得到c的千位数、百位数、十位数和个位数。注意使用c时要进行指针运算。国家二级C语言机试(操作题)模拟试卷第4套一、程序填空题(本题共1题,每题1.0分,共1分。)1、函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1,c2,c3返回主函数。例如:当n=123114350时,结果应该为:c1=3c2=1c3=2。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#includeintc1,c2,C3;voidfun(longn){c1=c2=c3=0;while(n){/**********found**********/switch(____1____){/**********found**********/case1:c1++;____2____;/**********found**********/case2:c2++;____3____;case3:c3++;}n/=10;}}main(){longn=123114350L;fun(n);printf("\nTheresult:\n");printf("n=%ldc1=%dc2=%dc3=%d\n",n,c1,c2,c3);}标准答案:(1)n%10(2)break(3)break知识点解析:第一空:switch内部是统计数字1、2、3的个数,因此switch条件是n的一位数。由“n/=10;”在循环中,n每次减小为以前的1/10,即n逐步往左边移出一个整数位,移出的整数位可由n%10可求得,故第一空处应填“n%10”。第二空:C语言中,case语句后都要加“break”语句,否则会执行多个case语句,因此第二空处应为“break”。第三空:理由同上,第三空处应填“break”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后的第5个字母;若小写字母为v~z,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f:若形参是字母W,则转换为小写字母b。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includecharfun(charc){if(c>=’A’&&c<=’Z’)/*************found*************/C=C+32;if(c>=’a’&&c<=’u’)/*************found*************/c=c一5;elseif(c>=’v’&&c<=’z’)c=c一21;returnc;}main(){charc1,c2;printf("\nEnteraletter(A—Z):");c1=getchar();if(isupper(c1)){c2=fun(c1);printf("\n\nTheletter\’%c\’changeto\’%c\’\n",c1,c2);}elseprintf("\nEnter(A—Z)!\n");}标准答案:(1)c=c+32;(2)c=c+5;知识点解析:(1)第一个标识下“C=C+32:”中变量C没有定义,编译时会提示出错。根据题意,这行语句的作用是将大写字母转换为小写字母,C语句中大写字母转换为对应的小写字母是对原有ASCIl码加32,小写转换为大写是减32,所以应将“C=C+32;”改为“C=C+32;”。(2)第二个标识下是将小写字母转换为其后的第五个字母,字母在a~u之间只加上5就可以了,原题中减5则是将字母转换到该字母之前的第五个字母,所以第二个标识下“c=c-5;”改为“c=c+5;”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写函数fun,函数的功能是:将大于形参m且紧靠m的k个素数存入xx所指的数组中。例如,若输入17,5,则应输出:19,23,29,31,37。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(intm,intk,intxx[]){}Main《){intm,n,zz[1000];voidNONO();printf("\nPleaseentertwointegers:");scanf("%d%d",&m,&n);fun(m,n,zz);for(m=0;.m标准答案:intr=0,temp,p,sign=1;/for(temp=m+1;temp=temp){if(k>=0)//判断已有的素数个数是否已经满足sum个{xx[r++]=temp;//将素数temp存入数组selectk--;//将题目中要求的素数个数减1}elsebreak;}}知识点解析:进入fun函数,根据前面的分析:首先,定义、初始化变量sign,作为素数的标志;定义r,初始化为存储素数数组的起始位。然后,每判断一次temp中的值是否为素数后,使temp的值增1,再次对temp中新的值进行判断其是否为素数,不断循环此过程,直到m的值等于指定的个数,即函数中的k个数。国家二级C语言机试(操作题)模拟试卷第5套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:将形参n中,各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,从主函数输入一个整数:27638496,函数返回值为:26846。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#includeunsignedlongfun(unsignedlongn){unsignedlongx=0,s,i;intt;s=n;/**********found**********/i=【l】;/**********found**********/while(【2】){t=s%10;if(t%2==0){/**********found***********/x=x+t*i;i=【3】;}s=s/10;}returnx;}main(){unsignedlongn=-l;while(n>99999999||n<0){printf("Pleaseinput:(0标准答案:(1)1(2)s(3)i*10知识点解析:函数fun的功能是将形参n中,各位上为偶数的数取出,组成新数。第一空:由“if(t%2=0){x=x+t*i;i=【3】;}”可知,如果t是偶数,那么t添加到返回值里面,比如第一次得到t=2,那么x=0+2*1;下一次得到了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、给定程序MODI1.C中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#defineM5/***********found***********/intfun(intn,intxx[][]){inti,j,sum=0;printf("\nThe%dx%dmatrix:\n",M,M);for(i=0;i<M;i++){for(j=0;j<M;j++)/***********found***********/printf("%f",xx[i][j]);printf("\n");}for(i=0;i<n;i++)sum+=xx[i][i]+xx[i][n-i-1];return(sum);}main(){intaafM][M]={{1,2,3,4,5},{4,3,2,1,0},{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};printf("\nThesumofallelementson2diagnalsis%d.",fun(M,aa));}标准答案:(1)intfun(intn,intxx[][M])(2)printf("%4d",xx[i][j]);知识点解析:函数的功能是求两条对角线上各元素之和。(1)第一个标识下fun函数的定义中对于二维数组的定义在原题中并没有给出空间,所以将“intfun(intn,intxx[][])”改为“intfun(intn,intxx[][M])”。(2)fun函数中n是int型,C语言输出语句中整型应该是%d,所以第二个标识下“printf("%f",xx[i][j]);”应该改为“printf("%4d",xx[i][j]);”。三、程序设计题(本题共1题,每题1.0分,共1分。)3、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的干位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12。调用该函数后,c=4251。注意:部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inta,intb,long*c){}voidNONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%ld\n",a,b,c);}fclose(rf);fclose(wf);}main(){inta,b;longc;voidNONO();printf("Inputa,b:");scanf("%d%d",&a,&b);fun(a,b,&c);printf("Theresultis:%ld\n",c);NONO();}标准答案:*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);知识点解析:(1>分解两位数的正整数n的个位和十位数,可用n%10和n/10实现。(2)设x0、x1、x2、x3为一位数,则x0、x1×10、x2×100、x3×1000,可以分别使x0、x1、x2、x3构成个、十、百、千带权数,而x0+x1×10+x2×100+x3×1000构成四位数。本题最多只考虑四位数。国家二级C语言机试(操作题)模拟试卷第6套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:有NxN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵:123计算结果为10045665078910149请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include#defineN4voidfun(int(*t)____1____){inti,j;{____3____=0;}}main(){intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;printf("\nTheoriginalarray:\n");{for(j=0;j标准答案:(1)[N](2)t[i][j](3)t[j][i]知识点解析:函数fun的功能是将对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0,操作顺序是将对称元素相加存放在左下三角元素中,然后将右上三角元素置0。第一空:在主函数中fun函数的调用形式是“fun(t):”,t是数组名,故fun函数的参数是指针,因此第一空处应为“[N]”。第二空:“____2____=t[i]D]+t[j][i];”是将对称元素相加存放在左下三角元素中,左下三角元素可表示为t[i]D],故第二空处应为“t[i]D]”。第三空:“____3____=0;”是将右上三角元素置0,右上三角元素可表示为t[j][i],故第三空为“t[j][i]”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODI1.C中函数fun的功能是:计算函数(x,y,z)=(x+y)/(x.y)+(z+y)/(z.y)的值。其中x和y的值不等,z和y的值不等。例如,当X的值为9、y的值为11、z的值为15时,函数值为—3.50。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include#include#include#defineFU(m,n)(m/n)floatfun(floata,floatb,floatc){floatvalue;value=FU(a+b,a—b)+FU(c+b,c—b);Return(Value);main(){floatx,y,z,sum;printf("Inputxyz:");scanf("%f%f%f",&x,&y,&z);printf("x=%f,y=%f,z=%f\n",x,y,z);if(x==y||y==z){printf("Dataerror!\n");exit(0);}sum=fun(x,y,z);printf("Theresultis:%5.2f\n",sum);}标准答案:(1)#defineFU(m,n)((m)/(n))(2)return(value);知识点解析:本题中函数的功能是计算题干中给出的公式值。本题的解题过程是利用了定义的宏FU,实现了函数中给出的公式的求值。(1)函数fun两次调用宏FU来计算“value=FU(a+b,a—b)+FU(c+b,c—b);”。检查宏的定义是否正确,可以用实参代入宏进行展开:(a+b/a—b),由此看到,“FU(a+b,a—b)”进行的计算不是“(a+b)/(a—b)”,而是“(a+b/a—b)”,因为“/”的优先级高于“+”或“—”,所以要使用括号限定计算优先顺序。所以将“#defineFU(m,n)(m/n)”改为“#defineFU(m,n)((m)/(n))”。(2)第二个标识下返回语句的关键字有误。所以,第二个标识下“Return(value);”应该改为“return(value);”,C语言中没有“Return”这个关键字。三、程序设计题(本题共1题,每题1.0分,共1分。)3、规定输入的字符串只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。注意:部分源程序在文件PROG1.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;charsl81];in=fopen("in.dat","r");out=fopen("out.dat","w");for(i=0;i<10;i++)(fscanf(in,"%",s);fun(s);fprintf(out,"%s\n",s);}fclose(in);fclose(out);}标准答案:1intj=0;2char*p=a;3while(*p==’*’)p++;4while(*p){5a[j++]=*p;6p++;)7a[j]=’\0’;知识点解析:该程序功能是将字符串中的前导“*”号全部删除,中间和尾部的“*”号不删除。本题的解题过程首先确定由串起始位置开始的第一个非“*”进行判断,将不是“*’的字符拷贝到字符串。(1)首先,使用一个指针p指向串的起始位置,然后对指针p指向的字符进行判断,并且如果是“*”,那么跳过该字符,这样确定了由头开始的第一个非“*”的位置。(2)然后,在循环过程中将第一个非“*”字符起始到串尾的字符拷贝到字符串a。(3)最后,在新生成的字符串尾加’\0’。国家二级C语言机试(操作题)模拟试卷第7套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。例如,有下列矩阵:12134781063597程序执行结果为:find:a[2][2]=9请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:1#1nclude<stdio.h>2#defineM33#defineN44voidfun(int(*a)[N])5{inti=0,j,find=0,rmax,c,k;6while((i<M)&&(!find))7{rmax=a[i][0];c=0;8for(j=1;j<N;j++)9if(rmax<a[i][j]){10/*********found*********/11rmax=a[i][j];c=【1】;}12find=1;k=0;13while(k<M&&find){14/*********found*********/15if(k!=i&&a[k][c]<=rmax)16find=【2】;17k++;18}19if(find)20printf(’’find:a[%d][%d]=%d\n’’,i,c,a[i][c]);21/*********found*********/22【3】23}24if(!find)25printf(’’notfound!\n’’);26}27main()28{intx[M][N],i,j;29printf(’’Enternumberforarray:\n’’);30for(i=0;i<M;i++)31for(j=0;j<N;j++)32scanf(’’%d’’,&x[i][j]);33printf(’’Thearray:\n’’);34for(i=0;i<N;i++)35{for(j=0;j<N;j++)36printf(’’%3d’’,x[i][j]);37printf(’’\n\n’’);38}39fun(x);40}标准答案:(1)j(2)0(3)i++知识点解析:本题是在矩阵中找出在行上最大、在列上最小的那个元素。填空1:找出行上最大的数,并将该数的列数j保存在c中,所以应填j。填空2:使用while循环语句和控制变量find,如果该数不是列中的最小数,那么把find置0,所以应填0。填空3:i是while的控制变量,所以每做一次循环,该数值要加1,所以应填i++。二、程序修改题(本题共1题,每题1.0分,共1分。)2、下列给定程序的功能是:建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:1#include<stdio.h>2#include<conio.h>3#include<stdlib.h>4typedefstructaa5{intctata;6structaa*next;7}NODE;8fun(NODE*h)9{intmax=-1;10NODE*p;11/*********found*********/12p=h;13while(p)14{if(p->data>max)15max=p->data;16/*********found*********/17p=h->next;18}19returnmax;20}21outresult(ints,FILE*pf)22{fprintf(pf,’’\nThemaxinlink:%d\n’’,s);23}24NODE*treatlink(intn,intm)25{NODE*h,*p,*s;26inti;27h=p=(NODE*)malloc(sizeof(NODE));28h->data=9999;29for(i=l;i<=n;i++)30{s=(NODE*)malloc(sizeof(NODE));31s->data=rand()%m;32s->next=p->nexL;33p->next=s;p=p->next;34}35p->next=NULL;36returnh;37}38outlink(NODE*h,FILE*pf)39{NODE*p;40p=h->next;41fprintf(pf,’’\nTheLIST:\n\nHEAD’’);42while(p)43{fprintf(pf,’’->%d’’,p->data);44p=p->next;}45fprintf(pf,’’\n’’);46}47main()48{NODE*head;intm;49system(’’CLS’’);50head=creatlink(12,100);51outlink(head,stdout);52m=fun(head);53printf(’’\nTheRESULT:\n’’);54outresult(m,stdout);55}标准答案:(1)p=h->next;(2)p=p->next;知识点解析:(1)因为链表的头结点没有数据域,所以对指针p进行初始化时,要将p指向头结点的下一个结点。(2)通过指针p的移动遍历链表,因此此处应改为p=p->next;。三、程序设计题(本题共1题,每题1.0分,共1分。)3、下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(ima[][N],imm),该函数的功能是使数组右上半三角元素中的值乘以m。例如,若m的值为2,a数组中的值为:则返回主程序后a数组中的值应为:注意:部分源程序在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。试题程序:1#include<conio.h>2#include<stdio.h>3#include<stdlib.h>4#include<string.h>5#defineN56voidfun(inta[][N],intm)7{89}10main()11{12inta[N][N],m,i,j;13FILE*out;14printf(’’***Thearray***\n");15for(i=0;i<N;i++)16{for(j-0;j<N;j++)17{a[i][j]=rand()%20;18printf(’’%4d’’,a[i][j]);19}20printf(’’\n’’);21}22m=rand()%4;23printf(’’m=%4d\n’’,m);24fun(a,m);25printf(’’THERESULT\n’’);26for(i=0;i<N;i++)27{for(j=0;j<N;j++)28printf(’’%4d’’,a[i][j]);29printf(’’\n’’);30}31/*********found*********/32out=fopen(’’out.dat’’,’’w’’);33for(i=0;i<N;i++)34for(j=0;j<N;j++)35a[i][j]=i*j;36fun(a,8);37for(i=0;i<N;i++)38{for(j=0;j<N;j++)39fprintf(out,’’%4d’’,a[i][j]);40fprintf(out,’’\n’’);41}42fclose(out);43/*********found*********/44}标准答案:1voidfun(inta[][N],intm)2{3inti,j;4for(j=0;j知识点解析:本程序实现将矩阵中右上半三角元素中的值乘以m,使用循环语句遍历数组元素,第1个循环用于控制行坐标,第2个循环用于控制列下标。国家二级C语言机试(操作题)模拟试卷第8套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#include#defimeN8typedefstruct1ist{intdata;structlist*next;}SLIST;voidfun(SLIST*h){SLIST*p,*q;p=h->next;if(P!=NULL){q=p->next;while(q!=NULL){if(p->data==q->data){p->next=q->next;/**********found**********/free(_____1____);/**********found**********0q=p->_____2____;}else{p=q;/**********found**********/q=q->_____3____;}}}}SLIST*creatlist(int*a){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("\nThelistisNULL!\n");else{printf("\nHead");do{printf("->%d",p->data);P=P->next;}while(P!=NULL);printf("->End\n");}}msin(){SLIST*head;inta[N]={1,2,2,3,4,4,4,5};head=creatlist(a);printif"\nThelistbeforedeleting:\n");outlist(head);fun(head);printif"\nThelistafterdeleting:\n");outlist(head);}标准答案:(1)q(2)next(3)next知识点解析:函数fun的功能是删除链表中数据域值相同的结点,只保留一个。第一空:p和q是两个SLIST结构体指针,分别指向两个相邻的结点。“if(p->data==q->data)”成立则应该删除其中一个结点,“p->next=-q->next;”p指向q的下一个结点,那么q结点就可以删除了,因此第一空处应该为“free(q);”。第二空:在第一空处,q指向的结点已经被删除,如果要继续循环搜索数据域值相同的结点,那么q需要重新指向p的下一个结点,因此第二空处应该为“q=p->next;”。第三空:如果“if(p->data==q->data)”不成立,那么p和q都.向结点尾移动一个结点位置,因此第三空处应该是“q=q->next;”。二、程序修改题(本题共1题,每题1.0分,共1分。)2、给定程序MODll.C中函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序进行排序。请修改程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行和删行,也不得更改程序的结构!#include#defimeN20voidfun(inta[],intn){inti,j,t,Pp;for(j=0;j标准答案:(1)p=j(2)p=i;知识点解析:程序利用选择法实现数组中的n个元素从小到大的排序。(1)第一个标识下面“p=j”,根据C语言的语法,不难发现语句结束缺少分号,因此改为“p=j;”。(2)第二个标识下面的“p=j;”上两句是以i作为循环和判断条件,其中语句“for(i=j;i三、程序设计题(本题共1题,每题1.0分,共1分。)3、请编写一个函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序输出:711142122283335424449注意:部分源程序存在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defineM100v02dfun(intm,int*a,int*n){}main(){intaa[M],n,k;voidNONO();fun(50,aa,&n);for(k=0;k标准答案:inti,j=0;*n=0;for(i=1;i<=m;i++)if(i%7==0||i%11==0){a[j]=i;j++,}*n=j;知识点解析:该题是求某范围内能被7或11整除的数。该程序的解题思路可以分解为以下几步:判断是否被7整除→判断或者是否被11整除→按要求返回计算结果。国家二级C语言机试(操作题)模拟试卷第9套一、程序填空题(本题共1题,每题1.0分,共1分。)1、给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部,平均值作为函数值返同,在主函数中输出平均值和移动后的数据。例如,有10个正数:47、30、32、40、6、17、45、15、48、26,其平均值为30.500000。移动后的输出为:30、6、17、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年家电维修保养绿色环保服务调研
- 乡镇跨境电商直播设备调研
- 稀土永磁材料在新能源汽车电机中的应用占比调研
- 2023年制造业车间设备维护管理方案
- 快消品行业市场调研分析报告范例
- 2025年贵州交安考试真题及答案
- 墙体铲除施工技术细节方案
- 实习生岗位职责与绩效考核方案
- 安全隐患排查专项整改实施方案
- 信息技术与学科教学融合报告
- 2025海南航空审计监察负责人岗位招聘1人参考笔试题库及答案解析
- 2025 九年级语文下册诗歌情感表达多样性训练课件
- DB54T 0541-2025 森林火险气象因子评定规范
- 2025年安徽省普通高中学业水平合格性考试化学试卷(含答案)
- 2025年宁波市公共交通集团有限公司下属分子公司招聘备考题库及答案详解参考
- 大型电子显示屏安装施工规范
- 中职中医教师面试题库及答案
- 2026年关于汽车销售工作计划书
- 2025年汕头市金平区教师招聘笔试参考试题及答案解析
- T∕ACEF 235-2025 企业环境社会治理(ESG)评价机构要求
- 拆迁工程安全监测方案
评论
0/150
提交评论