国家三级(网络技术)机试模拟试卷25(共9题)_第1页
国家三级(网络技术)机试模拟试卷25(共9题)_第2页
国家三级(网络技术)机试模拟试卷25(共9题)_第3页
国家三级(网络技术)机试模拟试卷25(共9题)_第4页
国家三级(网络技术)机试模拟试卷25(共9题)_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

国家三级(网络技术)机试模拟试卷25(共9套)(共9题)国家三级(网络技术)机试模拟试卷第1套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位)、产品名称mc(字符型10位)、单价dj(整型)、数量sl(整型)、金额je(长整型)五部分组成。其中;金额一单价*数量计算得出。函数ReadDat()是读取lOO个销售记录并存人结构数组sell中。请编制函数SortDat(),其功能要求;按金额从小到大进行排列,若金额相等,则按产品代码从小到大进行排列,最终结果仍存入结构数组sell中,最后调用函数WriteDat()把结构输出到文件OUTl.DAT中。注意;部分源程序已给出。请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。试题程序;#include#include#include#include#defineMAX100typedefstruct{chardm[5];//产品代码charme[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("IN.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,4);ch[4]=0;sell[i].sl=atoi(ch);sell[i].je=(10ng)sell[i].dj*sell[i].sl;}fclose(fp);}voidWriteDat(){FILE*fp;inti;fp=fopen("OUTl.DAT","w");for(i=0;i<100;i++){printf("%s%s%4d%5d%51d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);fprintf(fP,"%s%s%4d%5d%51d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);}fclose(fp);}标准答案:inti,j;PR0xy;for(i=0;i<99;i++)for(j=i+1;j<100;j++)if(sell[i].je>sell[j].je//如果产品i的金额大于产品j的金额||(sell[i].je==sell[j].je//如果产品i的金额等于产品j的金额&&strcmp(sell[i].dm,sell[j].dm)>0))//如果产品i的产品代码大于产品j的产品代码{memcpy(&xy,&sell[i],sizeof(xy));memcpy(&sell[i],&sell[i],sizeof(xy));memcpy(&xy,&sell[i],sizeof(xy));}//产品i和产品j交换知识点解析:本题主要考查数组的排序操作。算法思路;1.结点与后面的所有j结点比较,若符合条件则交换i、j结点位置。2.然后后移i结点,执行步骤1直到i结点是倒数第二结点为止。国家三级(网络技术)机试模拟试卷第2套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()的功能是实现从文件ENG49.IN中读取——篇英文文章,存入到字符串数组xx中。请编制函数encryptChar(),按给定的替代关系对数组xx中所有字符进行替代,仍存入数组xx的对应的位置上,最后调用函数WriteDat()把结果xx输出到文件PS49.DAT中。替代关系:f(p)=p*11mod256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是大写字母或计算后f(p)的值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。注意:部分源程序已给出。原始数据文件的存放格式是:每行的宽度均小于80个字符。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。试题程序:#include<conio.h>#include<stdio.h>#include<string.h>#include<ctype.h>unsignedcharxx[50][80];intmaxline=0;intReadDat(void);voidWriteDat(void);voidencryChar(){}voidmain(){clrscr();if(ReadDat()){printf("数据文件ENG49.IN不能打开!\n\007");return;}encryChar();WriteDat();}intReadDat(void){FILE*fp;inti=0;unsignedchar*p;if((fp=fopen("ENG49.IN","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=07i++;}maxline=i;fclose(fp);return0;}voidWriteDat(){FILE*fp;inti;fp=fopen("ps49.dat","w");for(i=0;i<maxline;i++)*{printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp)}标准答案:voidencryChar(){inti;char*pf;for(i=0;i<maxline;i++){pf=xx[i];/*指针pf指向该行首地址*/while(*pf!=0){if((*pf>=’A’&&*pf<=’Z’)||*pf*11%256<=32)/*如果原字符是大写字母或计算后的值小于等于32*/{pf++;/*则此字符不变,取下一个字符*/continue;/*退出此次循环*/}*pf=*pf*11%256;/*如果不满足条件,则用新字符替代原字符*/pf++;/*取下一个字符*/}}}知识点解析:本题考查的知识点如下:(1)字符对应的ASCII码。(2)判断结构中多个条件的“或”运算。(3)退出一次循环。在C语言中,字符可参与任何整数运算。实际上,是字符的ASCII码参与了.运算。所以可以直接用字符代入f(p)的关系式中求出替换字符。若原字符是大写字母或f(p)≤32,则该字符不变。只有当字符大于等于A小于等于Z时,才是大写字母,所以这两个条件之间用“与”运算。而字符是大写字母与f(p)≤32之间为或的关系,所以这两个条件之间用“或”运算。若字符不变,则可不必计算替换字符,使用continue退出本次循环,进入下一次循环的条件判断中。因为这里不是直接退出循环结构,所以不能使用break语句。国家三级(网络技术)机试模拟试卷第3套一、程序设计题(本题共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);}fclose(fp);}标准答案:voidSortDat(){inti,j;PROxy;for(i=0;i<99;i++)for(j=i+l;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)字符型数组的比较。本题着重考查结构体变量的访问、赋值,包括结构体本身及结构体中各个成员的访问和赋值。结构数组的操作与一般数组的区别不大,只要注意其中的元素是结构体,以及对结构体操作的方法。根据题意要求,我们首先要比较产品代码。因为产品代码为字符型,所以不能使用简单的比较运算符进行比较。在这里,我们使用了字符串处理函数strcmp(char*strl1,char*strl2,unsignedintcout)对其进行比较。对于比较结果,还要按情况进行新的操作——存入结构数组或者再进行比较。因为已定义了结构数组,就可以使用循环进行比较排序。排序采用前面介绍的“选择排序法”。国家三级(网络技术)机试模拟试卷第4套一、程序设计题(本题共1题,每题1.0分,共1分。)1、标准答案:知识点解析:通过审题可以发现主要有两个不同点:一是要求统计的四位数的条件是“千位+个位=百位+十位”,二是要求该四位数是奇数,这两个不同点都体现在参考答案的第8条语句中,对该语句进行修改即可,其中,可以判断奇数的表达式是“a[i]%2"。国家三级(网络技术)机试模拟试卷第5套一、程序设计题(本题共1题,每题1.0分,共1分。)1、请编制函数ReadDa(()实现从文件IN83.DAT中读取1000个十进制整数到数组xx中。请编制函数Compute()分别计算出xx中奇数的个数odd、奇数的平均值avel、偶数的平均值ave2及所有奇数的方差totfc的值。最后调用函数WrireDat()把结果输出到OUT83.DAT文件中。计算方差的公式如下:设N为奇数的个数,xx[i]为奇数,ave1为奇数的平均值。原始数据的存放格式是:每行存放10个数,并用逗号隔开(每个数均大于0且小于等于2000)。注意:部分源程序已给出。请勿改动主函数main()和输写函数WriteDat()的内容。试题程序:#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleavel=0.0,ave2=0.0,totfc=0.0;voidWriteDat(void);intReadDat(void){FILE*fp;if((fp=fopen("IN83.DAT","r"))==NULL)return1;fclose(fp);return0;}voidCompute(void){}voidmain(){inti;for(i=0;i<MAX;i++)xx[i]=0;if(ReadDat()){printf("数据文件IN83.DAT不能打开!\007\n");return;}Compute();printf("ODD=%d\nAVEl=%f\nAVE2=%f\nTOTFC=%f\n",odd,avel,ave2,totfc);WriteDat();}voidWriteDat(void){FILE*fp;inti;fp=fopen("OUT83.DAT","w");fprintf(fp,"%d\n%lf\n%lf\n%lf\n",odd,avel,ave2,totfc);fclose(fp);}标准答案:intReadDat(void){FILE*fp;inti,j;if((fp=fopen("IN83.DAT","r"))==NULL)return1;for(i=0;i<100;i++){for(j=0;j<10;j++)fscanf(fp,"%d,",&xx[i*l0+j]);fscanf(fp,"\n");if(feof(fp))break;}fclose(fp);return0;}voidCompute(void){inti,yy[MAX];for(i=0;i<1000;i++)if(xx[i]%2!=0){odd++;/*计算出xx中奇数的个数odd*/ave1+=xx[i];/*求奇数的和*/yy[odd-l]=xx[i];/*将奇数存入组中yy中*/}else{even++;/*计算出xx中偶数的个数even*/ave2+=xx[i];/*求偶数的和*/}ave1/=odd;/*求奇数的平均值*/ave2/=even;/*求偶数的平均值*/for(i=0;i<odd;i++)totfc+=(yy[i]-ave1)*(yy[i]-ave1)/odd;/*求所以奇数的方差*/}知识点解析:本题考查的知识点如下:(1)从文件中读取数据。(2)奇偶数的判断和方差的求法。在C语言中,有一结构体类型FILE,其中包含文件的一些属性信息。可定义指针指向该结构体,这个指针称为文件指针。要从文件中读取数据,首先要判断该文件是否能以“读”的方式打开。若能打开,使用函数intfscanf(FILE*fp,char*format,args)从fp所指向的文件中依次读取数据。在本题中,数据的存放很有规律,将数据读出存入数组xx时,只要控制数组下标就可以了。若文件结束,则退出读取循环。最后要关闭文件。若一个数除以2取余得0,则该数是偶数,否则为奇数。由方差公式可知,这是求一些连续的数的表达式的值,所以可以使用循环求得方差。国家三级(网络技术)机试模拟试卷第6套一、程序设计题(本题共1题,每题1.0分,共1分。)1、标准答案:知识点解析:相对来说更简单一些,通过审题可以发现本题有两个不同点:①求所有数的平均值,此时只需要将数组中所有元素的值累加到变量aver中,最后除以1000(因为数组中有1000个元素)即可得到平均值,参考答案的第8条和第10条语句。②求所有数的方差,可先利用for循环将(xx[i].aver)的平方累加到变量totfc,然后再除以1000即可得到所有数的方差,参考答案的第11~13条语句。国家三级(网络技术)机试模拟试卷第7套一、程序设计题(本题共1题,每题1.0分,共1分。)1、已知数据文件1N56.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数isVal(),其功能是:把千位数字和十位数字重新组合成一个新的十位数(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数和百位数组成另一个新的十位数(新十位数的十位数字是原4位数的个位数字,新个位数的个位数字是原4位数的百位数字),如果新组成的两个十位数均为素数且新十位数字均不为零,则将满足此条件的4位数按从大到小的顺序存入数组b中,并要计算满足亡述条件的4位数的个数cnt,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT56.DAT文件中。注意:部分源程序己给出。程序中已定义数组:a[200],b[200],己定义变量:cnt。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。试题程序:#include<stdio.h>#defineMAX200inta[MAX],b[MAX],cnt=0;intisprime(intm){inti;for(i=2;i<=m/2;i++)if(re%i==0)return0;return1;}voidjsVal(){}voidreadDat(){inti;FILErfp;fp=fopen("IN56.DAT","r");for(i=0;i<MAX;i++)fscanf(fp,"%d",&a[i]);fclose(fp);}main(){inti;readDat();jsVal();printf("满足条件的数=%d\n",cnt);for(i=0;i<cnt;i++)printf("%d\n",b[i];printf("kn’’);writeDat();}writeDat(){FILE*fp;inti;fp=fopen("OUT56.DAT","w");fprintf(fp,"%d\n",cnt);for(i=0;i<cnt;i++)fprintf(fp,"%dkn",b[i]);fclose(fp);}标准答案:voidjsVal(){inti,thou,hun,ten,data,j;intab,cd;for(i=0;i<200;i++){thou=a[i]/1000;/*求四位数的千位数字*/hun=a[i]%1000/100;/*求位烽的百位数字*/ten=a[i]%100/10;/*求四位数的十位数字*/data=a[i]%10;/*求四位数的个位数字*/ab=10*thou+ten;/*把千位数字和十位数字重新组合成一个新的十位数*/cd=lO*data+hun;/*把个位数和百位数组成另一个新的十位数*/if(isprime(ab)&&isprime(cd)&&ab!=O&&cd!=0)/*如果新组成的两个十位数均为素数且新十位数字均不为零*/{b[cnt]=a[i];/*把满足条件的数存入数组b中*/cnt++;/*统计满足条件的数的个数*/}}for(i=O;i<cnt-1;i++)/*将满足此条件的4位数按从大到小的顺序存入数组b中*/for(j=i+l;j<cnt;j++)if(b[i]<b[j]){data=b[i];b[i]=b[j];b[j]=data;}知识点解析:本题考查的知识点如下:(1)将4位数各位亡的数拆分为独立的数字。(2)循环结构的使用。(3)判断结构中多个条件的布尔运算。在本题中,首先要将4位数各位上的数字拆分为独立的数字。这要借助运算符“%”(取余)与“/”(整除)。将一个4位数整除1000则叫‘得到其千位上的数字,除以1000取余再整除100则可得百位上的数字,除以100取余再整除10则可得十位上的数字,除以10取余则得个位上的数字。求得各位上的数字后,就可以重新组合进行比较。题中已给出判断素数的函数,只要带入求出数据即可。各条件必须同时满足,所以用“与”运算。题中要求将符合条件的数按从大到小的顺序存入数组b,可以先将符合条件的数存入数组b,再对数组b进行排序。排序使用“选择排序法”。国家三级(网络技术)机试模拟试卷第8套一、程序设计题(本题共1题,每题1.0分,共1分。)1、函数ReadDat()的功能是实现从文件IN2.DAT中读取一篇英文文章存入到字符串数组xx中:请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT2.DAT中。例如:原文:YOUHeMeIamastudent.结果:MeHeYoustudentaamI原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。#include<stdio.h>#include<string.h>#include<conio.h>#include<ctype.h>charxx[50][80];intmaxline=0;/*文章的总行数*/intReadDat(void);voidWriteDat(void);voidStrOL(void){main(){clrscr();if(ReadDat()){printf("数据文件IN2.DAT不能打开!\n\007");return;}StrOL();WriteDat();}intReadDat(void){FILE*fp;inti=0;char*p;if((fp=fopen("IN2.DAT","r"))==NULL)return1;while(fgets(xx[i],80,fp)!=NULL){p=strchr(xx[i],’\n’);if(p)*p=0;i++;}maxline=i;fclose(rD):return0;}voidWriteDat(void){FILE*fp;inti;clrscr();fp=fopen("OUT2.DAT","w");for(i=0;i<maxline;i++){printf("%s\n",xx[i]);fprintf(fp,"%s\n",xx[i]);}fclose(fp);}标准答案:voidstrOL(void){inti,j,k,strl,1;charc;for(i=0;i<maxline;i++)/*把各行中多余的标点符号去掉*/for(j=0;j<strlen(xx[i]);j++){c=xx[i][j];if((c<=’A’&&c<=’Z’)||(c<=’a’&&c<=’z’)||c==’’||(c>=’0’&&c<=’9’));elsexx[i][j]=’’;for(1=0;l<maxline;l++){charch[80]={0};charpp[80]={0);strl=strlen(xx[l]);i=str1-1;k=1;while(1){while(((xx[l][i]>=’a’&&xx[l][i]<=’z’)||(xx[l][i]>=’A’&&xx[l][i]<=’z’)||(xx[l][i]>=’0’&&xx[1][i]<=’9’))&&i>=0)/*处理字母和数字*/{for(j=k;j>=0;j--)/*从当前行的最后一个字符开始取字符,直到遇到空格*/pp[j+1]=pp[j];pp[O]=xx[l][i];k++;i--;}strcat(ch,pp);/*把该单词存放到数组ch中*/strcpy(pp,"");/*清空数组pp*/k=1;if(i==-l)break;/*如果处理完了一行,则退出循环*/while((xx[1][i]<’0’||(xx[l][i]>’9’&&xx[l][i]<’A’)||xx[1][i]>’z’)&&i>=0)/*处理空格*/{for(j=k;j>=0;j--)pp[j+1]=pp[j];pp[0]=xx[l][i];k++;i--;}strcat(ch,pp);/*把空格加到数组ch中*/strcpy(pp,"");/*清空数组*/k=0;if(i==-1)break;/*如果处理完了一行,则退出循环*/}strcpy(xx[l],ch);/*把已处理完的字符串仍按行重新存入字符串数组xx中*/}}知识点解析:本题是有关字符串的处理问题。首先利用二重循环来按照先行后列的顺序取得xx数组中的各个字符元素,这里用到了strlen()函数,用来求字符串长度。对依次取得的字符做一些处理,即把多余的标点符号去掉,使新的字符数组中只含有字母和空格。准备工作做完后,从当前行的最后一个字符开始取,不断的取每一个字符前面的字符,直到取得一个完整的单词后(即遇到空格分隔时),就把该单词存放到数组ch中(用到了strcatt()函数来连接两个字符串,用strlen()函数来对字符串求取串长度),还要把分隔符也放到ch中去。接着去取该行中其他的字符组成的单词,重复上面的操作,对其他行同样处理。这样最终得到的字符串就是各行中单词出

温馨提示

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

评论

0/150

提交评论