2022年全国计算机等级考试三级网络技术南开上机题 2.pdf
题目 71(字符串左右排序题)函数 ReadDat()实现从文件 in.dat中读取 20行数据存放到字符串数组xx 中(每行字符串长度均小于80)。请编制函数jsSort(),其函数的功能是:以行为单位对字符串按给定的条件进行排序,排序后的结果仍按行重新存入字符串数组 xx 中,最后调用函数WriteDat()把结果 xx 输出到文件 out.dat中。条件:从字符串中间一分为二,左边部分按字符的ASCII 值降序排序,右边部分按字符的 ASCII 值升序排序。如果原字符串长度为奇数,则最中间的字符不参加排序,字符仍放在原位置上。例如:位置0 1 2 3 4 5 6 7 8源字符串a b c d h g f e 1 2 3 4 9 8 7 6 5则处理后字符串 d c b a e f g h 4 3 2 1 9 5 6 7 8部分源程序存在文件prog1.c 中。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数WriteDat()的内容。#include#include#include char xx2080;void jsSort()int i,j,k,strl,half;char ch;for(i=0;i20;i+)strl=strlen(xxi);half=strl/2;for(j=0;jhalf-1;j+)for(k=j+1;khalf;k+)if(xxijxxik)ch=xxij;xxij=xxik;xxik=ch;if(strl%2)half+;for(j=half;jstrl-1;j+)for(k=j+1;kxxik)ch=xxij;xxij=xxik;xxik=ch;void main()名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 16 页 -readDat();jsSort();writeDat();readDat()FILE*in;int i=0;char*p;in=fopen(in.dat,r);while(i20&fgets(xxi,80,in)!=NULL)p=strchr(xxi,n);if(p)*p=0;i+;fclose(in);writeDat()FILE*out;int i;clrscr();out=fopen(out.dat,w);for(i=0;i20;i+)printf(%sn,xxi);fprintf(out,%sn,xxi);fclose(out);*题目 72(整数各位打散组合运算题)已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数readDat()把这些数存入数组 a 中,请考生编制一函数jsVal(),其功能是:把个位数字和千位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原四位数的百位数字,新十位数名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 16 页 -的个位数字是原四位数的十位数字),如果新组成的 两个十位数均是偶数并且两个十位数中至少有一个数能被9 整除,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序 存入数组 b 中,并要计算满足上述条件的四位数的个数cnt。最后 main()函数调用写函数 writeDat()把结果 cnt以及数组 b 中符合条件的四位数输出到OUT.DAT 文件中。注意:部分源程序存在文件prog1.c 中。程序中已定义数组:a200,b200,已定义变量:cnt 请勿改动数据文件IN.DAT 中的任何数据、主函数main()、读函数readDat()和写函数 writeDat()的内容。#include#define MAX 200 int aMAX,bMAX,cnt=0;void jsVal()int i,j,thou,hun,ten,data,ab,cd;for(i=0;i200;i+)thou=ai/1000;hun=ai/100%10;ten=ai%100/10;data=ai%10;ab=10*data+thou;cd=10*hun+ten;if(ab%9=0|cd%9=0)&ab%2=0&cd%2=0&hun!=0&data!=0)bcnt=ai;cnt+;for(i=0;icnt-1;i+)for(j=i+1;jcnt;j+)if(bibj)data=bi;bi=bj;bj=data;void readDat()int i;FILE*fp;fp=fopen(in.dat,r);for(i=0;i MAX;i+)fscanf(fp,%d,&ai);fclose(fp);void main()int i;readDat();jsVal();名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 16 页 -printf(满足条件的数=%dn,cnt);for(i=0;i cnt;i+)printf(%d,bi);printf(n);writeDat();writeDat()FILE*fp;int i;fp=fopen(out.dat,w);fprintf(fp,%dn,cnt);for(i=0;i cnt;i+)fprintf(fp,%dn,bi);fclose(fp);*题目 73(字符替换题)函数 ReadDat()实现从文件 IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数 ConverCharD(),其函数的功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母 z。大写字母仍为大写字母,小写字母仍为小写字母,其它字符不变。最后把已处理的字符串仍按行重新存入字符串数组xx 中,最后调用函数writeDat()把结果xx 输出到文件 OUT4.DAT 中。例:原文:Adb.Bcdza abck.LLhj结果:Aca.Bbcyz zabj.LLgi原始数据文件存放的格式是:每行的宽度均小于80 个字符,含标点符号和空格。部分源程序存在文件prog1.c 中。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数writeDat()的内容。#include#include#include char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 16 页 -void WriteDat(void);void ConvertCharD(void)int i,j;for(i=0;imaxline;i+)for(j=0;j=b&xxij=z)xxij-=1;void main()clrscr();if(ReadDat()printf(数据文件 IN.DAT 不能打开!n007);return;ConvertCharD();WriteDat();int ReadDat(void)FILE*fp;int i=0;char*p;if(fp=fopen(IN.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 WriteDat(void)FILE*fp;int i;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 16 页 -clrscr();fp=fopen(OUT4.DAT,w);for(i=0;imaxline;i+)printf(%sn,xxi);fprintf(fp,%sn,xxi);fclose(fp);*题目 74(字符 ASCII 值移位 替换题)函数 ReadDat()实现从文件 IN.DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数 StrCharJL(),其函数的功能是:以行为单位把字符串中的所有字符的 ASCII 值左移 4 位,低位补 0,如果左移后,其字符的ASCII 值小于等于 32 或大于 100,则原字符保持不变,否则就把左移后的字符ASCII 值再加上原字符 ASCII 值,得到新的字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx 中,最后调用函数 writeDat()把结果xx 输出到文件 OUT7.DAT 中。原始数据文件存放的格式是:每行的宽度均小于80 个字符,含标点符号和空格。部分源程序存在文件prog1.c 中。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数writeDat()的内容。#include#include#include char xx5080;int maxline=0;/*文章的总行数*/int ReadDat(void);void WriteDat(void);void StrCharJL(void)int i,j;char c;for(i=0;imaxline;i+)for(j=0;jstrlen(xxi);j+)c=xxij4;if(!(c100)xxij+=c;名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 16 页 -void main()clrscr();if(ReadDat()printf(数据文件 IN.DAT 不能打开!n007);return;StrCharJL();WriteDat();int ReadDat(void)FILE*fp;int i=0;char*p;if(fp=fopen(IN.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 WriteDat(void)FILE*fp;int i;clrscr();fp=fopen(OUT7.DAT,w);for(i=0;imaxline;i+)printf(%sn,xxi);fprintf(fp,%sn,xxi);fclose(fp);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 16 页 -*题目 75(整数各位数运算及排序题)在文件 in.dat中有 200 组数据,每组有 3 个数,每个数均是三位数。函数ReadDat()读取这 200 组数据存放到结构数组aa 中,请编制函数 jsSort(),其函数的功能是:要求在 200 组数据中找出条件为每组中的第一个数大于第二个数加第三个数的和,其中满足条件的组数作为函数jsSort()的返回值,同时把满足条件的数据存入结构数组bb 中,再对 bb 中的数据按照每组数据的第一个数加第三个之和的大小进行升序排列(第一个数加第三个数的和均不相等),排序后的结果仍重新存入结构数组bb 中,最后调用函数 writeDat()把结果 bb输出到文件 out.dat中。部分源程序存在文件prog1.c 中。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数WriteDat()的内容。#include#include#include typedef struct int x1,x2,x3;data;data aa200,bb200;int jsSort()int i,j,cnt=0;data xy;for(i=0;i(aai.x2+aai.x3)bbcnt+=aai;for(i=0;icnt-1;i+)for(j=i+1;jbbj.x1+bbj.x3)xy=bbi;bbi=bbj;bbj=xy;return cnt;void main()int count;readDat();count=jsSort();/*返回满足条件的个数*/名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 16 页 -writeDat(count);readDat()FILE*in;int i;in=fopen(in.dat,r);for(i=0;i200;i+)fscanf(in,%d%d%d,&aai.x1,&aai.x2,&aai.x3);fclose(in);writeDat(int count)FILE*out;int i;clrscr();out=fopen(out.dat,w);for(i=0;icount;i+)printf(%d,%d,%d 第一个数+第三个数=%dn,bbi.x1,bbi.x2,bbi.x3,bbi.x1+bbi.x3);fprintf(out,%d%d%dn,bbi.x1,bbi.x2,bbi.x3);fclose(out);题目 76(整数各位打散组合运算题)已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数readDat()把这些数存入数组 a 中,请考生编制一函数jsVal(),其功能是:把个位数字和千位数字重新组成一个新的十位数(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的千位数字),以及把百位数字和十位数字组成另一个新的十位数(新十位数的十位数字是原四位数的百位数字,新十位数的个位数字是原四位数的十位数字),如果新组成的 两个十位数必须是一个奇数,另一个为偶数并且两个十位数中至少有一个数能被17 整除,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序 存入数组b 中,并要计算满足上述条件的四位数的个数cnt。最后 main()函数调用写函数 writeDat()把结果 cnt 以及数组 b 中符合条件的四位数输出到OUT.DAT 文件中。注意:部分源程序存在文件prog1.c 中。程序中已定义数组:a200,b200,已定义变量:cnt 名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 16 页 -请勿改动数据文件IN.DAT 中的任何数据、主函数main()、读函数readDat()和写函数 writeDat()的内容。#include#define MAX 200 int aMAX,bMAX,cnt=0;void jsVal()int i,j,thou,hun,ten,data,ab,cd;for(i=0;i=10&cd=10)bcnt+=ai;for(i=0;icnt-1;i+)for(j=i+1;jcnt;j+)if(bibj)data=bi;bi=bj;bj=data;void readDat()int i;FILE*fp;fp=fopen(in.dat,r);for(i=0;i MAX;i+)fscanf(fp,%d,&ai);fclose(fp);void main()int i;readDat();jsVal();printf(满足条件的数=%dn,cnt);for(i=0;i cnt;i+)printf(%d,bi);printf(n);writeDat();writeDat()名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 16 页 -FILE*fp;int i;fp=fopen(out.dat,w);fprintf(fp,%dn,cnt);for(i=0;i cnt;i+)fprintf(fp,%dn,bi);fclose(fp);*题目 77(整数各位运算题)已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数readDat()把这些数存入数组 a 中,请考生编制一函数jsVal(),其功能是:把一个四位数的千位数字上的值加上十位数字上的值恰好等于百位数字上的值加上个位数字上的值,并且原四位数是偶数,则统计出满足此条件的个数cnt 并把这些四位数按从小到大的顺序存入数组b 中,最后调用写函数 writeDat()把结果 cnt 以及数组 b 中符合条件的四位数输出到OUT.DAT 文件中。注意:部分源程序存在文件prog1.c 中。程序中已定义数组:a200,b200,已定义变量:cnt 请勿改动数据文件IN.DAT 中的任何数据、主函数main()、读函数readDat()和写函数 writeDat()的内容。#include#define MAX 200 int aMAX,bMAX,cnt=0;void jsVal()int i,j,thou,hun,ten,data;for(i=0;iMAX;i+)thou=ai/1000;hun=ai/100%10;ten=ai%100/10;data=ai%10;if(thou+ten=hun+data)&ai%2=0)bcnt+=ai;for(i=0;icnt-1;i+)for(j=i+1;jbj)thou=bi;bi=bj;bj=thou;void readDat()int i;FILE*fp;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 16 页 -fp=fopen(in.dat,r);for(i=0;i MAX;i+)fscanf(fp,%d,&ai);fclose(fp);void main()int i;readDat();jsVal();printf(满足条件的数=%dn,cnt);for(i=0;i cnt;i+)printf(%d,bi);printf(n);writeDat();writeDat()FILE*fp;int i;fp=fopen(out.dat,w);fprintf(fp,%dn,cnt);for(i=0;i cnt;i+)fprintf(fp,%dn,bi);fclose(fp);*题目 78(整数各位统计排序题)已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数readDat()把这些数存入数组 a 中,请考生编制一函数jsVal(),其功能是:若一个四位数的千位数字上的值大于等于百位数字上的值,百位数字上的值大于等于十位数字上的值,以及十位数字上的值大于等于个位数字上的值,并且原四位数是奇数,则统计出满足此条件的个数cnt 并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数 writeDat()把结果 cnt 以及数组 b 中符合条件的数输出到OUT.DAT 文件中。注意:部分源程序存在文件prog1.c 中。程序中已定义数组:a200,b200,已定义变量:cnt 请勿改动数据文件IN.DAT 中的任何数据、主函数main()、读函数readDat()和写函数 writeDat()的内容。#include 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 16 页 -#define MAX 200 int aMAX,bMAX,cnt=0;void jsVal()int i,j,thou,hun,ten,data;for(i=0;i=hun&hun=ten&ten=data&ai%2)bcnt+=ai;for(i=0;icnt-1;i+)for(j=i+1;jbj)thou=bi;bi=bj;bj=thou;void readDat()int i;FILE*fp;fp=fopen(in.dat,r);for(i=0;i MAX;i+)fscanf(fp,%d,&ai);fclose(fp);void main()int i;readDat();jsVal();printf(满足条件的数=%dn,cnt);for(i=0;i cnt;i+)printf(%d,bi);printf(n);writeDat();writeDat()FILE*fp;int i;fp=fopen(out.dat,w);fprintf(fp,%dn,cnt);for(i=0;i cnt;i+)fprintf(fp,%dn,bi);名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 16 页 -fclose(fp);*题目 79(数字运算题)请编写函数 void countValue(int*a,int*n),它的功能是:求出 1 到 1000之内能被 7 或 11 整除但不能同时被7 或 11 整除的所有整数放在数组a 中,并通过 n 返回这些数的个数。部分源程序存在文件prog1.c 中。请勿改动主函数 main()和输出数据函数writeDAT()的内容。#include#include void countValue(int*a,int*n)int i;*n=0;for(i=1;i=1000;i+)if(i%7=0&i%11|i%7&i%11=0)a(*n)+=i;main()int aa1000,n,k;clrscr();countValue(aa,&n);for(k=0;kn;k+)if(k+1)%10=0)printf(n);else printf(%5d,aak);writeDAT();writeDAT()int aa1000,n,k;FILE*fp;fp=fopen(out19.dat,w);countValue(aa,&n);for(k=0;k0,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。8129,9-8-1-20,则该数不满足条件计算平均值pjz2。部分源程序存在文件prog1.c 中。程序中已定义数组:a300,已定义变量:cnt,pjz1,pjz2 请勿改动主函数 main()、读函数 ReadDat()和写函数 writeDat()的内容。#include int a300,cnt=0;double pjz1=0.0,pjz2=0.0;jsValue()int i,j,thou,hun,ten,data,n=0;for(i=0;i0)cnt+;pjz1+=ai;else n+;pjz2+=ai;if(cnt=0)pjz1=0;else pjz1/=cnt;if(n=0)pjz2=0;else pjz2/=n;main()int i;readDat();jsValue();writeDat();名师资料总结-精品资料欢迎下载-名师精心整理-第 15 页,共 16 页 -printf(cnt=%dn满足条件的平均值pzj1=%7.2fn不满足条件的平均值pzj2=%7.2fn,cnt,pjz1,pjz2);readDat()FILE*fp;int i;fp=fopen(in.dat,r);for(i=0;i300;i+)fscanf(fp,%d,&ai);fclose(fp);writeDat()FILE*fp;int i;fp=fopen(out.dat,w);fprintf(fp,%dn%7.2fn%7.2fn,cnt,pjz1,pjz2);fclose(fp);名师资料总结-精品资料欢迎下载-名师精心整理-第 16 页,共 16 页 -