国家计算机三级网络技术机试攻略.docx
- 文档编号:9689913
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:99
- 大小:41.78KB
国家计算机三级网络技术机试攻略.docx
《国家计算机三级网络技术机试攻略.docx》由会员分享,可在线阅读,更多相关《国家计算机三级网络技术机试攻略.docx(99页珍藏版)》请在冰点文库上搜索。
国家计算机三级网络技术机试攻略
国家计算机三级网络技术机试攻略
第一种:
销售记录排序问题
已知在文件IN.DAT中存有100个产品销售记录,每个产品销售记录由产品代码dm(字符型4位),产品名称mc(字符型10位),单价dj(整型),数量sl(整型),金额je(长整型)五部分组成。
其中:
金额=单价*数量计算得出。
函数ReadDat()是读取这100个销售记录并存入结构数组sell中。
请编制函数SortDat(),其功能要求:
按产品名称从小到大进行排列,若产品名称相等,则按金额从小到大进行排列,最终排列结果仍存入结构数组sell中,最后调用函数WriteDat()把结果输出到文件OUT5.DAT中。
部分源程序存在文件prog1.c中。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include
#include
#include
#include
#include
#defineMAX100
typedefstruct{
chardm[5];/*产品代码*/
charmc[11];/*产品名称*/
intdj;/*单价*/
intsl;/*数量*/
longje;/*金额*/
}PRO;
PROsell[MAX];
voidReadDat();
voidWriteDat();
voidSortDat()
{ /*答案部分*/
inti,j;/*定义循环控制变量*/
PROab;/*定义数据交换时的暂存变量(这里是结构体变量)*/
for(i=0;i<99;i++)/*利用起泡法进行排序*/
for(j=i+1;j<100;j++)
if(strcmp(sell[i].mc,sell[j].mc)>0)/*产品名称从小到大排列*/
{
ab=sell[i];
sell[i]=sell[j];
sell[j]=ab;
}
elseif(strcmp(sell[i].mc,sell[j].mc)==0)/*若产品名称相同*/
if(sell[i].je>sell[j].je)/*则按金额从小到大进行排列*/
{
ab=sell[i];
sell[i]=sell[j];
sell[j]=ab;
}
}
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,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("OUT5.DAT","w");
for(i=0;i<100;i++){
printf("%s%s%4d%5d%5d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
fprintf(fp,"%s%s%4d%5d%5d\n",sell[i].dm,sell[i].mc,sell[i].dj,sell[i].sl,sell[i].je);
}
fclose(fp);
}
第二种:
四位数排序或筛选问题
(1)——根据数位数字的关系排序
已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:
求出千位数上的数加个位数上的数等于百位数上的数加十位数上的数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat()把结果输出到out.dat文件。
例如:
6712,6+2=7+1,则该数满足条件存入数组b中,且个数cnt=cnt+1。
8129,8+9<>1+2,则该数不满足条件忽略。
部分源程序存在文件prog1.c中。
程序中已定义数组:
a[300],b[300],已定义变量:
cnt
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include
inta[300],b[300],cnt=0;
voidjsValue()
{ /*答案部分*/
inti,j,qw,bw,sw,gw;
for(i=0;i<300;i++)
{
qw=a[i]/1000; /*求四位数的千位数字*/
bw=a[i]%1000/100; /*求四位数的百位数字*/
sw=a[i]%100/10; /*求四位数的十位数字*/
gw=a[i]%10; /*求四位数的个位数字*/
if(qw+gw==bw+sw) /*如果千位数字加个位数字等于百位数字加十位数字*/
b[cnt++]=a[i]; /*将满足条件的数存入数组b中,统计满足条件的数的个数cnt*/
}
for(i=0;i for(j=i+1;j if(b[i]>b[j]) { qw=b[i]; b[i]=b[j]; b[j]=qw; } } main() { inti; readDat(); jsValue(); writeDat(); printf("cnt=%d\n",cnt); for(i=0;i } readDat() { FILE*fp; inti; fp=fopen("in.dat","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]); fclose(fp); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); fprintf(fp,"%d\n",cnt); for(i=0;i fclose(fp); } 第三种: 四位数排序或筛选问题 (2)——组合成新的十位数字,再筛选排序 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原四位数的千位数字,新十位数的个位数字是原四位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原四位数的个位数字,新十位数的个位数字是原四位数的百位数字),如果新组成的两个十位数ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新数的十位数字均不为零,则将满足此条件的四位数按从大到小的顺序存入数组b中,并要计算满足上述条件的四位数的个数cnt。 最后main()函数调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意: 部分源程序存在文件prog1.c中。 程序中已定义数组: a[200],b[200],已定义变量: cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include #defineMAX200 inta[MAX],b[MAX],cnt=0; voidjsVal() { /*答案部分*/ inti,j,qw,bw,sw,gw,ab,cd; for(i=0;i<200;i++)/*逐个取每一个4位数*/ { qw=a[i]/1000; /*求4位数的千位数字*/ bw=a[i]%1000/100; /*求4位数的百位数字*/ sw=a[i]%100/10; /*求4位数的十位数字*/ gw=a[i]%10; /*求4位数的个位数字*/ ab=qw*10+sw; cd=gw*10+bw; if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&a4! =0&&a1! =0) /*如果ab-cd>=0且ab-cd<=10且两个数均是奇数,同时两个新2位数的十位上的数字均不为零(或ab>10&&cd>10)*/ b[cnt++]=a[i]; /*则把满足条件的数存入数组b中,统计满足条件的数的个数*/ } for(i=0;i for(j=i+1;j if(b[i] { qw=b[i]; b[i]=b[j]; b[j]=qw; } } voidreadDat() { inti; FILE*fp; fp=fopen("in.dat","r"); for(i=0;i fclose(fp); } voidmain() { inti; readDat(); jsVal(); printf("满足条件的数=%d\n",cnt); for(i=0;i printf("\n"); writeDat(); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); fprintf(fp,"%d\n",cnt); for(i=0;i fclose(fp); 第四种: 四位数排序或筛选问题(3)——统计及求平均值 已知数据文件in.dat中存有300个4位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是: 求出千位数上的数减百位数上数减十位数上的数减个位数上的数大于零的个数cnt,再求出所有满足此条件的4位数平均值pjz1,以及所有不满足此条件的4位数平均值pjz2,最后调用函数writeDat()把结果cnt,pjz1,pjz2输出到out.dat文件中。 例如: 9123,9-1-2-3>0,则该数满足条件,计算平均值pjz1,且个数cnt=cnt+1。 9812,9-8-1-2<0,则该数不满足条件,计算平均值pjz2。 部分源程序存在文件prog1.c中。 程序中已定义数组: a[300],已定义变量: cnt,pjz1,pjz2。 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include inta[300],cnt=0; doublepjz1=0.0,pjz2=0.0; voidjsValue() {/*答案部分*/ inti,qw,bw,sw,gw,n=0; for(i=0;i<300;i++) { qw=a[i]/1000; bw=a[i]%1000/100; sw=a[i]%100/10; gw=a[i]%10; if(qw-bw-sw-gw>0) { cnt++; pjz1+=a[i]; } else { n++; pjz2+=a[i]; } } pjz1/=cnt;(注意此程序在for循环后) pjz2/=n; } 最后一步或者用: if(cnt==0)pjz1=0; elsepjz1/=cnt; if(n==0)pjz2=0; elsepjz2/=n; main() { inti; readDat(); jsValue(); writeDat(); printf("cnt=%d\n满足条件的平均值pzj1=%7.2f\n不满足条件的平均值pzj2=%7.2f\n",cnt,pjz1,pjz2); } readDat() { FILE*fp; inti; fp=fopen("in.dat","r"); for(i=0;i<300;i++)fscanf(fp,"%d,",&a[i]); fclose(fp); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); fprintf(fp,"%d\n%7.2f\n%7.2f\n",cnt,pjz1,pjz2); fclose(fp); } 第五种: 四位数排序或筛选问题(4)——四位数之间比较后再统计排序 已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中,请考生编制一函数jsVal(),其功能是: 依次从数组a中取出一个四位数,如果该四位数连续大于该四位数以后的五个数且该数是奇数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数cnt并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat()把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意: 部分源程序存在文件prog1.c中。 程序中已定义数组: a[200],b[200],已定义变量: cnt 请勿改动数据文件IN.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。 #include #defineMAX200 inta[MAX],b[MAX],cnt=0; voidjsVal() { inti,j,ab; for(i=0;i if(a[i]%2&&a[i]>a[i+1]&&a[i]>a[i+2]&&a[i]>a[i+3]&&a[i]>a[i+4]&&a[i]>a[i+5]) b[cnt++]=a[i]; for(i=0;i for(j=i+1;j if(b[i]>b[j]) { ab=b[i]; b[i]=b[j]; b[j]=ab; } } 如果是大于前连续5个数,则: for(i=5;i if(a[i]%2==0&&a[i]>a[i-1]&&a[i]>a[i-2]&&a[i]>a[i-3]&&a[i]>a[i-4]&&a[i]>a[i-5]) voidreadDat() { inti; FILE*fp; fp=fopen("in.dat","r"); for(i=0;i fclose(fp); } voidmain() { inti; readDat(); jsVal(); printf("满足条件的数=%d\n",cnt); for(i=0;i printf("\n"); writeDat(); } writeDat() { FILE*fp; inti; fp=fopen("out.dat","w"); fprintf(fp,"%d\n",cnt); for(i=0;i fclose(fp); } 第六种: 数据排序问题 1、在文件in.dat中有200个正整数,且每个数均在1000至9999之间。 函数ReadDat()读取这200个数存放到数组aa中。 请编制函数jsSort(),其函数的功能是: 要求按每个数的后三位的大小进行降序排列,然后取出满足此条件的前10个数依次存入数组b中,如果后三位的数值相等,则按原先的数值进行升序排列。 最后调用函数WriteDat()把结果bb输出到文件out.dat中。 例: 处理前90125099601270258088 处理后50998088702560129012 注意: 部分源程序已给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include #include #include intaa[200],bb[10]; voidjsSort() { /*答案部分*/ inti,j,ab; for(i=0;i<199;i++) for(j=i+1;j<200;j++) if(aa[i]%1000 { ab=aa[i]; aa[i]=aa[j]; aa[j]=ab; } elseif(aa[i]%1000==aa[j]%1000) if(aa[i]>aa[j]) { ab=aa[i]; aa[i]=aa[j]; aa[j]=ab; } for(i=0;i<10;i++) bb[i]=aa[i]; } voidmain() { readDat(); jsSort(); writeDat(); system("pause"); } readDat() { FILE*in; inti; in=fopen("in.dat","r"); for(i=0;i<200;i++)fscanf(in,"%d,",&aa[i]); fclose(in); } writeDat() { FILE*out; inti; clrscr(); out=fopen("out.dat","w"); for(i=0;i<10;i++){ printf("i=%d,%d\n",i+1,bb[i]); fprintf(out,"%d\n",bb[i]); } fclose(out); } 2、在文件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 typedefstruct{ intx1,x2,x3; }data; dataaa[200],bb[200]; intjsSort() {/*答案部分*/ inti,j,cnt=0; Dataab; for(i=0;i<200;i++) if(aa[i].x2>aa[i].x1+aa[i].x3) bb[cnt++]=aa[i]; for(i=0;i for(j=i+1;j if(bb[i].x2+bb[i].x3 { ab=bb[i]; bb[i]=bb[j]; bb[j]=ab; } returncnt;(一定要加,它是返回满足条件的数据的个数) } voidmain() { intcount; readDat(); count=jsSort();/*返回满足条件的个数*/ writeDat(count); } readDat() { FILE*in; inti; in=fopen("in.dat","r"); for(i=0;i<200;i++) fscanf(in,"%d%d%d",&aa[i].x1,&aa[i].x2,&aa[i].x3); fclose(in); } writeDat(intcount) { FILE*out; inti; out=fopen("out.dat","w"); clrscr(); for(i=0;i printf("%d,%d,%d第二个数+第三个数=%d\n",bb[i].x1,bb[i].x2,bb[i].x3,bb[i].x2+bb[i].x3);fprintf(out,"%d%d%d\n",bb[i].x1,bb[i].x2,bb[i].x3); } fclose(out); } 3、下列程序的功能是: 将一正整数序列
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 国家 计算机 三级 网络技术 攻略