版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家三级信息管理技术机试模拟试卷11(共9套)(共9题)国家三级信息管理技术机试模拟试卷第1套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()的功能是实现从文件IN35.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数$ortCharD(),该函数的功能是:以行为单位对字符按从大到小的顺序进行排序,捧序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT35.DAT中。例如,原文:dAe,BfCCCbbAA结果:fedCBA,bbCCAA原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<string.h>#include<conio.h>charxx[50][80];intmaxline=0;intReadDat(void);voidWriteDat(void);voidSortCharD(){}voidmain(){clrscr();if(ReadDat()){printf("数据文件IN35.DAT不能打开!\n\007");return;}SortCharD();WriteDat();}intReadDat(void){FILE*fp;inti=0;char*p;if((fp=fopen("IN35.DAT","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}maxline=i;fclose(fp);return0;}voidWriteDat(){FILE*fp;inti;clrscr();fp=fopen("OUT35.DAT","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n’,xx[i]);}fclose(fp);}标准答案:voidSortCharD(){inti,j,k,str1;charch;for(i=O;i<maxline;i++){str1=strlen(xx[i]);/*求各行的长度*/for(j=0;j<str1-1;j++)/*对字符按从大到小的顺序进行排序*/for(k=j+1;k<str1;k++)if(xx[i][j]<xx[i][k]){ch=xx[i][j];xx[i][j]=xx[i][k];xx[i][k]=ch;}}}知识点解析:本题考查的知识点如下:(1)循环结构的嵌套。(2)字符的大小比较。(3)字符排序。本题以行为单位对文章进行处理,首先要确定每一行中字符的个数。这个操作可使用字符串处理函数strlen(char*str)来完成。对字符从大到小排序依据的是字符的ASCII码,在C语言中,字符量可参与任何整型运算,所以可以直接使用比较运算符进行比较。排序使用前面介绍的“选择排序法”。最后使用循环结构对文章中的每一行都进行以上的操作。国家三级信息管理技术机试模拟试卷第2套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()的功能是实现从文件IN74.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数StrCharJL(),该函数的功能是:以行为单位把字符串中的所有字符的ASCⅡ值左移4位,如果左移后,其字符的ASCⅡ值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCⅡ值再加上原字符的ASCⅡ值,得到的新字符仍存入到原字符串对应的位置。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数Wiltedat()把结果xx输出到文件OUT74.DAT中。注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。请勿改动主函数main()、读函数ReadDat()和写函数Wiltedat()的内容。试题程序:#include<stdio.h>#include<string.h>#include<conio.h>charxx[50][80];intmaxline=0;intReadDat(void);voidWriteDat(void);voidStrCharJL(void){}voidmain(){clrscr();if(ReadDat()){printf("数据文件IN74.DAT不能打开\n\007");return;}StrCharJL();WriteDat();}intReadDat(void){FILE*fp;inti=0;char*p;if((fp=fopen("IN74.DAT","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}maxline=i;fclose(fp);return0;}voidWriteDat(void{FILE*fp;inti;clrscr();fp=fopen("OUT74.DAT","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}标准答案:voidStrCharJL(void){inti,j,strl;for(i=0;i<maxline;i++){strl=strlen(xx[i]);/*求各行的总长度*/for(j=0;j<strl;j++)if(xx[i][j]<<4<=32||xx[i][j]<<4>100);/*如果左移的ASCII值小于等于32或大于100,则原字符保持不变*/elsexx[i][j]+=xx[i][j]<<4;/*否则就把左移后的字符ASCII值加上原字符的ASCII*/}}知识点解析:本题考查的知识点如下:(1)字符的计算。(2)左移运算符“<<”的使用。(3)二维数组的访问。(4)判断结构中多条件的布尔运算。本题中,以行为单位处理字符串,首先要求得每行字符串的长度,才可对每一行的字符依次进行处理。字符可参与任何整数运算,实际上是字符的ASCII码参与了运算。所以,可以直接将字符带入计算。这里要使用到左移运算符“<<”。“<<”是双目运算符,左侧是要移动的数,右侧是移动的位数。左移后字符的ASCII码的值小于等于32或大于100,这两个条件满足一个即可,所以两条件之间用“或”运算。使用循环实现对所有行的处理。国家三级信息管理技术机试模拟试卷第3套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数readDat()是从文件in71.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSon(),其功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中。最后调用函数writeDat()把结果xx输出到文件out71.dat中。条件:从字符串中间一分为二,左边部分按字符的ASCⅡ值降序排序,右边部分按字符的ASCⅡ值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。例如:位置012345678源字符串abcdhgfe123498765处理后的字符串dcbaefgh432195678注意:部分源程序已给出。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。试题程序:#include<stdio.h>#include<string.h>#include<conio,h>charxx[20][80];voidjsSort(){}voidmain(){readDat();jsSort();writeDat();}readDat(){FILE*in;inti=0;char*p;in=fopen("in71.dat","r");while(i<20&&fgets(xx[i],80,in)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}fclose(in);}writeDat(){FILE*out;inti;clrscr();out=fopen("out71.dat","w");for(i=0;i<20;i++){printf("%s\n",xx[i]);fprintf(out,"%s\n",xx[i]);}fclose(out);}标准答案:函数readDat()是从文件in71.dat中读取20行数据存放到字符串数组xx中(每行字符串长度均小于80)。请编制函数jsSon(),其功能是:以行为单位对字符串按下面给定的条件进行排序,排序后的结果仍按行重新存入字符串数组xx中。最后调用函数writeDat()把结果xx输出到文件out71.dat中。条件:从字符串中间一分为二,左边部分按字符的ASCⅡ值降序排序,右边部分按字符的ASCⅡ值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。例如:位置012345678源字符串abcdhgfe123498765处理后的字符串dcbaefgh432195678注意:部分源程序已给出。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。试题程序:#include<stdio.h>#include<string.h>#include<conio,h>charxx[20][80];voidjsSort(){}voidmain(){readDat();jsSort();writeDat();}readDat(){FILE*in;inti=0;char*p;in=fopen("in71.dat","r");while(i<20&&fgets(xx[i],80,in)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}fclose(in);}writeDat(){FILE*out;inti;clrscr();out=fopen("out71.dat","w");for(i=0;i<20;i++){printf("%s\n",xx[i]);fprintf(out,"%s\n",xx[i]);}fclose(out);}知识点解析:本题考查的知识点如下:(1)二维数组的访问和下标的控制。(2)字符的ASCⅡ码的比较。(3)字符的排序。本题将数据按行存入到二维数组xx中,行数为数组的第1个下标,每行字符的个数为数组的第2个下标。因为以行为字符串处理的单位,所以要先求得一行字符串的长度。字符可以参加任何整数运算,实际上是字符的ASCⅡ码参与了运算,所以可以直接使用比较运算符对字符进行比较。对从0到(长度/2-1)的字符进行降序排序(数组的下标从0开始)。若长度为奇数,则再从(长度/2+1)开始(跳过最中间的字符)到最后1个字符进行升序排列。否则,从(长度/2)开始到最后1个字符进行升序排列。字符排序使用“选择排序法”,最后使用循环实现对每行数据的处理。国家三级信息管理技术机试模拟试卷第4套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()的功能是实现从文件ENG9.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryptChat(),按给定的替代关系对数组xx中的所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS9.DAT中。替代关系:f(p)=p*11mod256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符的ASCII值是偶数或计算后f(p)的值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。注意:部分源程序已给出,原始数据文件存放的格式是:每行的宽度均小于80千字符。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<string.h>#include<conio.h>#include<ctype.h>unsignedcharxx[50][80];intmaxline=0;/*文章的总行数*/intReadDat(void);voidWriteDat(void);voidencryptChar(){}main(){clrscr();if(ReadDat()){printf("数据文件ENG9.IN不能打开!\n\007");return;}encryptChar();WriteDat();}intReadDat(void)FILE*fp;inti=0;unsignedchar*p;if((fp=fopen("ENG9.IN","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}maxline=i;fclose(fp);return0;}voidWriteDat(void){FILE*fp;inti;fp=fopen("PSg.DAT","w";for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}标准答案:voidencryptChar({inti;char*pf;for(i=0;i<maxline;i++){pf=xx[i];/*指针pf指向当前行的首地址*/while(*pf!=0){if(*pf%2==0||*pf*11%256<=32);/*如果原字符的ASCII值是偶数或计算后的值小于等于32,则该字符不变*/else*pf=*pf*11%256;/*否则将所对应的字符进行替代*/pf++;/*指针pf指向下一个字符*/}}}知识点解析:本题主要考查用指针变量来控制字符数组,由于要对已有二维字符数组的所有元素逐个处理,因此,需要定义一个字符指针变量来控制原二维数组的各行。当前行如果确定下来,用指针的移动就可以依次扫描该行的所有字符元素,每得到一个字符就对它进行条件判断。根据题意,条件用“if(*pf%%2==0||*pf*11%256<=32)”来实现,如果该字符不满足上述条件,就用一个新的字符来替代,新的字符是当前字符乘以11的结果再去与256求余数,处理完毕后,指针去取下一个字符。如果该字符满足所给条件,将不做任何操作,指针直接下移,去取下一个字符,对下一个字符进行处理。国家三级信息管理技术机试模拟试卷第5套一、程序设计题(本题共1题,每题1.0分,共1分。)1、下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(intm,intk,intxx[])实现程序的要求,最后调用函数readwriteDAT()把结果输出到out31.dat文件中。例如,若输入17,5,则应输出19,23,29,31,37。注意:部分源程序已给出。请勿改动主函数main()和输入输出函数readwriteDAT()的内容。试题程序:#include<conio.h>#include<stdio.h>voidreadwriteDAT();voidnum(intm,intk,intxx[]){}main(){intm,n,xx[1000];clrscr();printf("\nPleaseentertwointegers:");scanf("%d,%d",&m,&n);num(m,n,xx);for(m=0;m<n;m++)printf("%d",xx[m]);printf("\n");readwriteDAT();}voidreadwriteDAT(){intm,n,xx[1000],i;FILE*rf,*wf;rf=fopen("in31.dat","r");wf=fopen("out31.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d%d",&m,&n);num(m,n,xx);for(m=0;m<n;m++)fprintf(wf,"%d",xx[m]fprintf(wf,"\n");}fclose(rf);fclose(wf);}标准答案:voidnum(intm,intk,intxx[]){intdata=m+1;/*从大于整数m的数开始找*/inthalf,I,n=0;while(1){half=data/2;for(I=2;I<=half;I++)/*如果该数依次除以从2到一半的整数,余数都不是0,则该数是素数*/if(data%I==O)break;/*如果余数为0,则退出循环,取下一个数判断*/if(I>half)’{xx[n]=data;n++;/*判断该数为素数后,将该数存入数组xx中,并累计素数的个数*/}if(n>=k)break;/*如果累计素数的个数超过了要求的个数,则退出循环*/data++;/*如果累计素数的个数小于要求的个数,则继续取下一个数*/}}知识点解析:本题考查的知识点如下:(1)循环结构与选择结构的嵌套使用。(2)强行退出循环结构。(3)特殊运算符“%”的使用。素数是除了1和它本身之外不能被其他数整除的数(1除外)。在本题中,首先要结合相关数学知识找出判定一个数是否为素数的方法,从而对数据进行筛选。如果数据a依次除以从2到a/2的整数,余数都不是0,则该数是素数.因为所给的数据是连续的数,而且最终所求的数据的个数一定,所以这里可以使用循环结构对数据依次筛选。同时嵌套选择结构对筛选的数据进行不同的处理。在a依次除以从2到a/2的整数的过程中,只要有一次余数为0,则可退出这一层循环,即退出整除取余的循环,进入下一个数的判断中。国家三级信息管理技术机试模拟试卷第6套一、程序设计题(本题共1题,每题1.0分,共1分。)1、设有n个人坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1到m报数,如此进行下去直到所有的人都出圈为止。先要求按出圈次序,每10个人为一组,给出这n个人的顺序表。请编制函数Josegh()实现此功能并调用函数WriteDat()把编号按照出圈顺序输出到文件OUT59.DAT中。设n=100,s=1,m=10进行编程。注意:部分源程序已给出。请勿改动主函数main()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#defineN100#defineS1#defineM10intp[100],n,s,m;voidWriteDat(void);voidJosegh(void){}voidmain(){m=M;n=N;s=S;Josegh();WriteDat();}voidWriteDat(void){inti;FILE*fp;fp=fopen("OUT59.DAT","w");for(i=N-1;i>=0;i--){printf("%4d",p[i]);fprintf(fp,"%4d",p[i]);if(i%10==0){printf("\n");fprintf(fp,"\n");}}fclose(fp);}标准答案:voidJosegh(void){inti,j,k,sl,w;s1=s;for(i=1;i<=n;i++)/*给n个人从1到n编号*/p[i-1]=i;for(i=n;i>=2;i--){s1=(s1+m-1)%i;/*下一个开始报数的人的编号是(s1+m-1)%i*/if(s1==0>/*若s1为0,则说明要开始报数的是最后一个人*/s1=i;w=p[s1-1];/*将要出圈的人移至数组的最后*/for(j=s1;j<=i-1;j++)p[j-1]=p[j];p[i-1]=w;}}知识点解析:本题考查的知识点如下:(1)将数组建成环。(2)运算符“%”的使用。(3)循环的嵌套使用。此题是著名的“约瑟夫环”问题。首先要将每个人的编号存入数组。因为每次是从s1开始报数,若是直线队则下一个开始报数的人的编号是s1+m-1,但这里要建立一个环,即最后一个人报完数后第一个人接着报数。所以这时下一个开始报数的人的编号是(s1l+m-1)%i,i是此时圈中的总人数。若所得的结果为0,则说明要开始报数的是最后一个人。在此人前面的那个人就是要出圈的人,使用循环将要出圈的人移至数组的最后。开始时,总人数为n,以后依次减1,直到最后一个人出圈。国家三级信息管理技术机试模拟试卷第7套一、程序设计题(本题共1题,每题1.0分,共1分。)1、编写函数jsValue(),它的功能是求Fibonacci数列中大于t的最小的一个数,结果由函数返回,其中Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2)最后调用函数writeDat(),把结果输出到文件OUT10.DAT中。例如:当t=1000时,函数值为1597。注意:部分源程序已给出。请勿改动主函数main()和写函数WriteDat()的内容。试题程序:#include<stdio.h>intjsValue(intt){}main(){intn;n=1000;printf("n=%d,f=%d\n",n,jsValue(n));writeDat();}writeDat(){FILE*in,*out;intn,s;out=fopen("OUT10.DAT","w");s=jsValue(1000);printf("%d",s);fprintf(out,"%d\n",s);fclose(out);}标准答案:intjsValue(intt){intf1=0,f2=1,fn;fn=f1+f2;while(fn<=t){f1=f2;f2=fn;fn=f1+f2;}/*如果当前的Fibonacci数不大于t,则计算下一个Fibonacci数*/returnfn;/*返回Fibonacci数列中大于t的最小的一个数*/}知识点解析:解答本题的关键是要充分理解题意,只有理解了题意本身的数学过程,才能把数学过程转化为程序逻辑。根据已知数列,我们不难发现:Fibonacci数列中,从第三项开始,每一项都可以拆分为前两项之和。本题要求找到该数列中“大于t的最小的一个数”。这里可以借助一个while循环来依次取数列中的数,直到出现某一项的值大于t,那么这一项就是“大于t的最小的一个数”。注意:在循环体内部,我们用变量f1始终来表示第n项的前面第二项,用变量f2来始终表示第n项的前面第一项。这就实现了变量的活用与巧用。国家三级信息管理技术机试模拟试卷第8套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知在文件in37.dat中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位),单价dj(整型)、数量sl(整型)、金额je(长整型)几部分组成。其中,金额=单价×数量可计算得出。函数ReadDat()的功能是读取这100个销售记录并存入数组sell中。请编制函数SortDat(),其功能要求:按产品代码从小到大进行排列,若产品代码相同,则按金额从大到小进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件out37.dat中。注意:部分源程序已给出。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<mem.h>#include<string.h>#include<conio.h>#include<stdlib.h>#defineMAX100typedefstruct{chardm[5];charmc[11];intdj;intsl;longje;}PRO;PROsell[MAX];voidReadDat();voidWriteDat();voidSortDat(){}voidmain(){memset(sell,0,sizeof(sell));ReadDat();SortDat();WriteDat();}voidReadDat(){FILE*fp;charstr[80],ch[11];inti;fp=fopen("IN37.DAT","r");for(i=0;i<100;i++){fgets(str,80,fp);memcpy(sell[i].dm,str,4);memcpy(sell[i].mc,str+4,10);memcpy(ch,str+14,4);ch[4]=0;sell[i].dj=atoi(ch);memcpy(ch,str+18,5);ch[5]=0;sell[i].sl=atoi(ch);sell[i].je=(long)sell[i].dj*sell[i].sl;}fclose(fp);}voidWriteDat(){FILE*fp;inti;fp=fopen("OUT37.DAT","w");for(i=0;i<100;i++){fprintf(fp,"%s%s%4d%5d%101d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}fctose(fp);}标准答案:voidSortDat(){inti,j;PROxy;for(i=0;i<99;i++)for(j=i+1;j<100;j++){if(strcmp(sell[i].dm,sell[j].dm)>0)/*按产品代码从小到大进行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}elseif(strcmp(sell[i].dm,sell[j].dm)==0)/*若产品代码相同*/if(sell[i].je<sell[j].je)/*则按金额从大到小进行排列*/{xy=sell[i];sell[i]=sell[j];sell[j]=xy;}}}知识点解析:本题考查的知识点如下:(1)结构体及结构数组的相关操作。(2)结构数组的捧序,(3)字符型数组的比较。本题着重考查结构体变量的访问、赋值,包括结构体本身及结构体中各个成员的访问和赋值.结构数组的操作与一般敷组的区别不大,只要注意其中的元素是结构体,以及对结构体操作的方法.根据题意要求,我们首先要比较产品代码。因为产品代码为字符型,所以不能使用简单的比较运算符进行比较。在这里,我们使用了字符串处理函数sircmp(char*strll,char*strl2,unsignedintcout)其进行比较。对于比较结果,还要按情况进行新的操作——存入结构数组或者再进行比较。因为已定义了结构数组,就可以使用循环进行比较捧序。排序采用前面介绍的“选择排序法”。国家三级信息管理技术机试模拟试卷第9套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知在文件IN2.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价山(整型)、数量s1(整型)、金额je(长整型)五部分组成。其中:金额=单价×数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat(),其功能要求:按产品名称从大到小进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT2.DAT中。注意:部分源程序已给出。请勿改动主函数m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论