《计算机三级网络机试考试试题.docx》由会员分享,可在线阅读,更多相关《计算机三级网络机试考试试题.docx(170页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、三级网络机武考题及普案上半部分第一遣已知数据文件IN1.DAT中存有200个4位数,并已调用读函数readDat。把这些数存入数组 a中,请编制一函数jsVal(),其功能是:如果4位数各位上的数字均是奇数,则统计出满足此条件的个数ent,并把这些4位数按从大到小的顺序存入数组b中。最后调用函数writeDat()把结果 ent及数组b中符合条件的4位数输出到OUT1.DAT文件。注意:部分源程序已给出。程序中已定义数组:a200, b200,已定义变量:ent。请勿改动主函数main。、读函数readDat。和写函数writeDat。的内容。#include#define MAX 200in
2、t aMAX,bMAX,cnt=0;void writeDatO;void jsVal()int i,j;int al,a2,a3,a4;int temp;for(i=0;i200;i+)j/*定义循环控制变鼠*/*定义变量保存4位数的每位数字*/*定义数据交换时的暂存变鼠*/*逐个取每个4位数*/ia4=ai/1000;a3=ai%1000/100;a2=ai%100/10;al=ai%10;/*求4位数的千位数字*/*求4位数的百位数字*/*求4位数的十位数字*/*求4位数的个位数字*/if(a4%2!=0& a3%2!=0& a2%2!=0& al%2!=0)/*如果4位数各位上的数字均
3、是奇数*/bcnt=ai;cnt+;)for(i=0;icnt-l ;i+) for(j=i+l ;jcnt;j+)/*将满足条件的数存入数组b +*/*统计满足条件的数的个数*/*将数组b中的数按从大到小的顺序排列*/if(bibj)(temp=bi;bi=bUl; bj=temp;int i;FILE *fp;fp=fopen(IN 1.DATW);for(i=0;iMAX;i+)fscanf(fp;%d&ail);fclose(fp);)void main()(int i;readDat();jsVal();printf(满足条件的数=%diT,cnt);for(i=0;icnt;i+)
4、printfC%dn,bi);printf(,nM);writeDat();1void writeDat()(FILE *fp;int i;fp=fopen(Moutl .dat,;,wH);fprintf(fp,%dn,cnt);for(i=O;icnt;i+)fprintf(fp;%dnbi);fclose(fp);)第二道已知IN2.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数 jsVal(),其功能是:依次从数组a中取出一个数,如果该4位数连续大于该4位数以后的5个数且该数是奇数,则统计出满足此条件的数的个数ent,并把这些4位数按从小
5、到大的顺序存入数组b中,最后调用写函数 writeDat()把结果ent及数组b中符合条件的4位数输出到OUT2.DAT文件中。注意:部分源程序已给出。程序中已定义数组:a200, b200,已定义变量:ent。请勿改动主:函数main。、读函数readDat。和写函数writeDat()的内容。#include #define MAX 200int aMAX, bMAX, ent =0;void writeDat();void js Val()int ij;int temp;for(i=0;iMAX-5;i+) if(ai%2!=0)for(j=i+l;j=i+5;j+)if(aiaUl)b
6、reak;/*定义循环控制变量*/*定义数据交换是的暂存变量*/*逐个取每个4位数*/*如果当前数是奇数*/*取该数后面的5个数进行比较*/*如果当前数不满足比后面5个数都大的条件,则跳出循环*/else if(j=i+5)bcnt=ai;cnt+;for(i=0;icnt-l;i+)for(j=i+l;jbUJ)(/*如果当前数比后面的5个数都大*/*将满足条件的数存入数组b中*/*并统计满足条件的数的个数*/*利用选择法对b数组中的元素进行从小到大的排序*/temp=hi;bi=bU;bj=temp;)void readDat()(int i;FILE *fp;fp = fopen(,IN
7、2.DAT Hrn);for(i =0; i MAX ; i+) fscanf(fp,&ai); fclose(fp);)void main()(int i;read Dat();jsValO ;printf(满足条件的数=%dn”, ent);for(i =0; i ent; i+) printf(%d , bi);printf(HnH);writeDatO ;FILE *fp;int i;fp = fopenCOUT2.DAT“,“w“);fprintf(fp,%dn,cnt);for(i =0; i ent; i+) fprintf(fp,%dn, bi);fclose(fp);J第三道
8、已知在文件IN3.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm (字符型4位)、产品名称me (字符型10位)、单价dj (整型)、数量si (整型)、金额je (长整型)几部分组成。其中:金额=单价X数量。函数ReadDat()的功能是读取这100个销售记录并存入结构数组sell中。请编制函数SortDat。,其功能要求:按产品名称从小到大进行排列,若产品名称相同,则按金额从小到大进行排列,最终排列结果仍存入结构数组seH中,最后调用函数WrileDal。把结果输出到文件OUT3.DAT中。注意:部分源程序已给出。请勿改动主函数main。、读函数ReadDat。和写函数W
9、riieDal。的内容。#include #include #include #include #deHne MAX 100 typedef structchar dm5;/*产品代码*/char mcll;/*产品名称*/ int dj;/*单价*/ int si ;/*数量/long je ;/*金额*/PRO;PRO sell MAX;void ReadDaK);void WriteDatO ;void SortDatO/*定义循环控制变量产定义数据交换时的暂存变量(这里是PRO类型的结构体变量)*/ /*利用选择法进行排序*/(int ij;PRO temp;for(i=0;i99;i
10、+)for(j=i+l;j0)/*按产品名称从小到大进行排列*/temp=selli;sell i=sellj;selHj=temp;else if(strcmp(selli.nic,sell|j.mc)=O)/*若产品名称相同*/if(selli.jeseilj.je)/*则按金额从小到大进行排列*/( temp=selli; se!li=selHj; sellj=temp; J void main() memset(sell,0, sizeof(sell); ReadDatO ; SortDat(); WriteDatO ; void ReadDatO FILE *fp ; char st
11、r80, chll; inti; fp = fopen(nIN3.DATH, HrH); for (i =0; i 100; i+)( fgets(str,80, fp); memcpy(selli.dm, sti;4); memcpy(sell(i.mc, str +4,10); memcpy(ch, str +14,4); ch4=0; selli.dj = atoi(ch); memcpy(ch, str +18,5); ch5=0; selli.sl = atoi(ch); selli.je =(long)selli.dj * selli.sl;) fclose(fp);) void
12、WriteDatO ( FILE *fp; inti; fp = fopenCOUT3.DAT“,“w); for(i =0; i 100; i+)( fprintf(fp, M%s %s %4d %5d %10ldn selli.dm, selli.mc, selli.djelli.sl9 seUiJe);fclose(fp);第四道函数ReadDat。的功能是实现从文件ENG4.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryptChar。,按给定的替代关系对数组xx中的所有字符进行替代,结果仍存入数组xx对应的位置上,最后调用函数WriteDat。把结果xx输出到文件
13、PS4.DAT中。替代关系:f(p)=p*ll mod256(p是数组xx中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果计算后f(p)的值小于等于32或大了130,则该字符不变,否则将f(p)所对应的字符进行替代。注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符.请勿改动主函数main。、读函数ReadDat。和写函数WriteDat。的内容。#include #include #include #include unsigned char xx5080;int maxline =0;/文章的总行数/ int ReadDat(void);v
14、oid WriteDat(void);void encryptCharO(/*定义循环控制变量*/*存储字符串的长度*/*存储当前取得的字符*/*以行为单位获取字符*/*求得当前行的字符串长度*/*依次取每行的各个字符*/int i j;int str;char ch;for(i=0;imaxline;i+)str=strlen(xxi);for(j=0;jstr;j+)ch=xxilj*ll%256;if(ch130)continue;/*如果计算后的值小于等于32或大于130,则该字符不变*/elsexxiU=ch;/*否则将所对应的字符进行替代*/void main()systemCCL
15、S);if(ReadDat()print”数据文件ENG4.IN不能打开!n007); return ;encryptChar();WriteDatO ;int ReadDat(void)(FILE *fp;int i =0;unsigned char *p ;if(fp = fopen(,ENG4.INH, HrM)=NULL) return 1;while(fgets(xxi,80, fp)!=NULL)(p = strchr(xxi,*n);if(p)*p =0;i+;)maxline = i;fclose(fp);return 0;)void WriteDat(void)(FILE *
16、fp ;inti;fp = fopen(PS4.DATH, HwH);for(i =0; i #inchide char xx50J80;int maxline =0;/*文章的总行数*/ int ReadDat(void);void WriteDat(void);void ConvertCharA(void)int ij;int str;for(i=0;imaxline;i+)/*定义循环控制变量力产存储字符串的长度财/*以行为单位获取字符*/str=strlen(xxi);/*求得当前行的字符串的长度号for(j=0;jstr;j+)=n & xxi(j=z,)如果是小写字母*/xxij=
17、W;尸如果是小写字母Z,则改写成字母a*/xxij+=l;其他的小写字母则改写为该字母的下一个字母*/void main。|system(nCLSn);if(ReadDat()(printf(数据文件IN5,DAT不能打开八n007);return ;)ConvertCharAO ;WriteDat();int ReadDat(void)FILE *fp ;int i =0;char *p ;if(fp = fopen(,IN5,DATH, HrH)= NULL) return 1;while(fgets(xxi,80, fp)!=NULL)(p = strchr(xxi,*n);if(p)*
18、p =0;i+;maxline = i;fclose(fp);return 0;void WriteDat(void)FILE *fp ;inti;system(HCLSM);fp = fopen(HOUT5.DATM, MwM);for(i =0; i maxline ; i+)printf(%sn,xxi);fprintf(fp, M%snM, xxi);fclose(fp);第六道在文件1N6.DAT中有200个正整数,且每个数均在1000至9999之间。函数readDat。的功能是读取这200个数存放到数组aa中。请编制函数jsSort(),该函数的功能是:要求按每个数的后3位的大小进
19、行降序排列,将排序后的前10个数存入数组b中,如果数组b中出现后3位相等的数,则对这些数按原始4位数据进行升序排列。最后调用函数writeDat。把结果bb输出到文件OUT6.DAT中。例如:处理前90125099601270258088处理后50998088702560129012注意:部分源程序己给出。请勿改动主函数main。、读函数rcadDat()和写函数writcDat。的内容。#include#include#includeint aa200, bb10;void readDat();void writeDat();void jsSort()int ij;int temp;for(
20、i=0;i199;i+)/*定义循环控制变量刃/*定义数据交换时的暂存变量*/*用选择法对数组进行排序*/for(j=i+l;j200y+)/*按照每个数的后3位大小进行降序排序*/if(aai%1000aaU)则要按原4位数的值进行升序排序可( temp=aai; aai=aa|j; aaj=teiiip;) for(i=0;i10;i+)/*将排序后的前10个数存入数组b中*/bbi=aai; void main()( readDat(); jsSortO ; writeDatO ;) void readDat()( FILE *in ; inti; in = fopen(IN6.DATH
21、, Hr); for(i =0; i 200; i+) fscanf(in,&aai); fclose(in);) void writeDatO ( FILE *out; inti; out = fopenCOUT6.DAT,; system(nCLSH); for (i =0; i 10; i+)( printf(Hi=%d,%dnH, i +1, bbi); fprintf(out, H%dnM, bbi);) fclose(out);第七道函数ReadDat。的功能是实现从文件【N7.DAT中读取一篇英文文章存入到字符串数组xx中。请编制函数 SortCharD(),该函数的功能是:以行
22、为单位对字符按从大到小的顺序进行排序,排序后的结果仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT7.DAT中。例如,原文:dAe, BfCCCbbAA结果:fedCBA,bbCCAA原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格注意:部分源程序已给出。请勿改动主函数main()、读函数RcadDat()和写函数WritcDat()的内容。#include#include#includechar xx5080;int maxline=0;int ReadDat(void);void WriteDat(void);void Sor
23、tCharDO/*定义循环控制变量*/*存储字符串的长度*/*定义数据交换时的暂存变量*/*以行为单位获取字符*/*求得当前行的字符串长度*/*对字符按从大到小的顺序进行排序*/int ij,k;int str;char temp;for (i=0;imaxline;i+)str=strlen(xxi);for(j=0;jstr-l;j+)for(k=j+1;kstr;k+) if(XXiUXXik)(temp=xxi|j;xxij=xxik; xxik=temp;void main()system(nCLSH);if(ReadDatO)printfT数据文件IN7.DAT不能打开!n007”
24、); return;SortCharDO; WriteDatO;int ReadDat(void)(FILE *fp;int i=0;char *p;if(fp=fopen(,IN7.DAT,r,)=NULL)return 1;while (fgets(xxi,80,fp)!=NULL)p=strchr(xxi,*n*);if (p)*p=0;i+; maxline=i; fclose(fp); return 0;void WriteDatOFILE *fp;inti;system(MCLSH);fp=fopen(,OUT7.DAT,wn);for(i=0;imaxline;i+)(print
25、f(siT,xxiD;fprintf(fp,%sn,xxi);) fclose(fp);第八道对10个候选人进行选举,现有一个100条记录的选票数据文件IN8.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位内容均为字符0或1,1表示此人被选中,0表示此人未被选中,若一张选票选中人数小于等于5个人时则被认为是无效的选票。给定函数ReadDatO的功能是把选票数据读入到字符半数组xx中。请编制函数CountRs。来统计每个人的选票数并把得票数依次存入yyO到yy9中,最后调用函数WriteDat()把结果yy输出到文
26、件 OUT8.DAT 中。注意:部分源程序已给出。请勿改动主函数main。、读函数ReadDat。和写函数WriteDatO的内容。#include #include char xx100ll;int yy10;int ReadDat(void);void WriteDat(void);void CountRs(void)/*定义循环控制变量*/*用来存储每张选票中选中人数,以判断选票是否有效*/*初始化数组yy*/*依次取每张选票进行统计*/*初始化计数器变量*/*统计每张选票的选中人数ent*/*当ent值大于5时为有效选票*/*统计有效选票*/int ij;int ent;for(i=0
27、;i10;i+) yyi=o;for(i=0;i100;i+)cnt=0;for(j=0;j5)(for(j=0;j10;j+) if(xxiU=*r) yyj+;void main()int i;for (i=0; i10; i+)yyi=0;if(ReadDat()printf(选票数据文件IN8.DAT不能打开!007iT);return;CountRsO;WriteDatO;)int ReadDat(void)(FILE *fp;int i;char tt13;if(fp = fopenCIN8.DAT“,)= NULL)return 1;for (i =0; i 100; i+)if
28、(fgets(tt,13, fp)= NULL)return 1;memcpy(xxi, tt,10);fclose(fp);return 0;void WriteDat(void)FILE *fp;int i;fp = fopen(MOUT8.DATH, HwH);for(i =0; i 10; i+)(fprintf(fp9 H%dnH, yyi);printf(第d 个人的选票数=%dn”, i+1, yyi);fclose(fp);)第九道下列程序的功能是:利用以下所示的简单迭代方法求方程:cos (x)x=0的一个实根。xn+l=cos(xn)迭代步骤如F:(1)取xl初值为0.0。
29、(2) x0=xl,把xl的值赋给x0。(3) xl=cos(x0),求出一个新的xl。(4)若x0xl的绝对值小于0.000001,执行步骤(5),否则执行步骤(2)。(5)所求xl就是方程cos(x)-x=0的一个实根,作为函数值返回。请编写函数counlVakie ()实现程序要求,最后调用函数wrileDAT()把结果输出到文件oul9.dat中。注意:部分源程序已给出。请勿改动主函数main。和写函数writeDAT。的内容。#include#include#includevoid writeDAT();float countValue()float x0,x 1=0.0;/*定义两
30、个浮点型变量进行迭代*/whiled)/*无条件循环率/xO=xl;/*将 xl 赋值给 xO*/xl=cos(xO);/*求出新的 xl*/if(fabs(x0-xl)le-6) break;/*若 xOxl 的绝对值小于0.000001,则结束循环*/ return xl;/*返回 xl 的值*/void main()(system(,CLSH);printf(“实根二%fn,countValue();printf(M %fnM,cos(countValue()-countValue();writeDAT();void writeDAT()(FILE *wf;wf=fopen(,out9.
31、dat,Mwn);fprintf(wf,H %fn,countValue();fclose(wf);J第十道请编写函数voidcounlVahie(int*a, int *n),它的功能是:求出1到1000之内能被7或11整除但不能同时被7和11整除的所有整数并存放在数组a中,并通过n返回这些数的个数。注意:部分源程序已给出。请勿改动主函数main。和写函数writeDAT。的内容。#include#includevoid writeDAT();void countValue(int *a,int *n)(int i;/*定义循环控制变量切*n=0;尸初始化计数器变量*/for(i=l;i=l
32、()00;i+)/*在这个范围内寻找符合条件的数if(i%7=0& i%ll!=0)ll(i%7!=0& i%ll=0)/*如果当前的数可以被7整除而不可以被11整除,或者可以被11整除而不可以被7整除*/*a=i;/*保存符合条件的数*/*n=*n+l;/*统计个数*/a+;void main()(int aa1000,n,k;system(HCLSM);count Value(aa,&n);for(k=0;kn;k+)if(k+l)%10=0)printf(”5d”,aak);printf(nM);else printf(H%5dH,aak);writeDATO;)void writeDA
33、T()(int aa1000,n,k;FILE *fp;fp=fopen(ouHO.dat“Jw”);countValue(aa,&n);for(k=0;kn;k+)if(k+l)%10=0)fprintf(fpj%5d”,aak);fprintf(fp,nM);)else fprintf(fp,M %5dH,aak);fclose(fp);)第十一道已知在文件IN11.DAT中存有若干个(个数200)4位数字的正整数,函数ReadDat。的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValueO,其功能要求:(1)求出该文件中共有多少个正整数totNum;(2)求这些数右移1位
34、后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数WriteDat。把所求的结果输出到文件OUT11.DAT中。注意:部分源程序已给出。请勿改动主:函数main。、读函数ReadDat。和写函数WriteDat()的内容。#include #includc #define MAXNUM 200int totNum =0;/*文件IN11.DAT中共有多少个正整数*/int totCnt =0;/*符合条件的正整数的个数*/double totPjz =0.0;/*平均值*/int ReadDat(void);void Writ
35、edat(void);void CalValue(void)inti;/*定义循环控制变量*/int data;/*用于保存处理后产生的新数*/for(i=0;i0)/*判断是否正整数*/totNum+;/*统计正整数的个数*/data=xxil;/*将数右移一位*/if(data%2=0)/*如果产生的新数是偶数*/(totCnt+;/*统计这些数的个数*/totPjz+=xxi;/*并将满足条件的原数求和*/totPjz/=totCnt;/*求满足条件的这些数(右移前的值)的算术平均值*/J void main() inti;system(,CLSH);for(i =0; i MAXNUM
36、 ; i+)xxi=0;if(ReadDat ()(print*数据文件INU.DAT不能打开!007n); return ; CalValueO ;printf(文件 IN11.DAT 中共有正整数=%d 个n”, totNum);printf(符合条件的正整数的个数=%d个n”, totCnt);printf(”平均值=%.21fn,totPjz); WritedatO ;) int ReadDat(void)FILE *fp;int i =0;if(fp = fopen (,IN11.DATH, Mr)= NULL)return 1;while(! feof(fp)fscanf(fp,&
37、xxi+);fclose(fp);return 0;Jvoid Writedat(void)(FILE *fp;fp = fopen(OUTll.DATH, nwH);fprintf(fp, H%dn%dn%.2!fn, totNum, totCnt, totPjz);fclose(fp);第十二道已知数据文件IN12.DAT中存有300个4位数,并已调用读函数readDat。把这些数存入数组a中。请编制函数jsValue。,其功能是:求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数ent,再把所有满足此条件的4位数依次存入数组b中,然后对数组b的4位数按从小到大的顺序进行排
38、序,最后调用写函数writeDat。把数组b中的数输出到OUT 12.DAT文件中。例如:6712,64-2=7+1,则该数满足条件,存入数组b中,且个数cnt=cnt+L8129,84-9*1+2.则该数不满足条件,忽略。注意:部分源程序已给出。程序中已定义数组:a300. b300,已定义变量:ent.请勿改动主函数main。、读函数readDat。和写函数writeDat。的内容。#include int a300, b300, cnt=0;void readl)at();void writeDat();void jsValue()/*定义循环控制变量*/*定义变量保存4位数的每位数字*
39、/*定义数据交换时的暂存变量*/*逐个取每一个4位数*/*求4位数的千位数字*/*求4位数的百位数字*/*求4位数的十位数字*/*求4位数的个位数字*/*如果千位数加个位数等于百位数加十位数*/int ij;int al,a2,a3,a4;int temp;for(i=0;i300;i+)|a4=ai/1000;a3=ai%1000/100;a2=ai%100/10;al=ai%10;if(a4+al=a3+a2)bcnt=ai;/*将满足条件的数存入数组b中*/cnt+;/*统计满足条件的数的个数ent*/for(i=0;icnt-l;i+)/*用选择法对数组b的4位数按从小到大的顺序进行排序*/for(j=i+l;jbj)temp=bi;bi=bU;bj=temp;)void main()(int i;readDat();jsValue();writeDat();printf(Hcnt=%dn, ent);for(i=0; icnt; i+)printf(b%d=%dnH,i, bi);Jvoid readl)at()FILE *fp;int i;fp = fopen(HIN12.DATH, MrH);for(i=0; i300; i+)fscanf(fp, H%d,H,&ai);fclose(fp);)
限制150内