1、全国计算机等级考试三级网络技术机试真题 2007 年 4 月及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数 ReadDat()把这些数存入数组 a 中。请编制函数 jsVal(),其功能是:如果四位数各位上的数均是奇数,则统计出满足此条件的数的个数 cnt,并把这些四位数按从大到小的顺序存入数组 b 中。最后,函数 main()调用写函数 writeDat()把结果 cnt 及数组 b 中符合条件的四位数输出到文件 OUT.DAT 中。注意:部分源程序已经给出。程序中已定
2、义数组 a200、b200,已定义变量 cnt。请勿改动数据文件 IN.DAT 中的任何数据,以及主函数 main()、读函数 readDat()和写函数 writeDat()的内容。试题源程序#includeStdio.h#defime MAX 200int aMAX,bMAX,cnt=0;void WriteDat();void jsVal()void readDat()int i;FILE *fp;fp=fopen(“in.dat“,“r“);for(i=0;iMAX;i+) fscanf(fp,“%d“,fclose(fp);void main()int i;readDat();jsV
3、al();printf(“满足条件的数=%d/n“,cnt);for(i=0;icnt;i+) printf(“%d“,bi);printf(“/n“);writeDat()void writeDat()FILE *fp;int i;fp=fopen(“out.dat“,“w“);fprintf(fp,“%d/n“,cnt);for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi);fclose(fp);(分数:100.00)_全国计算机等级考试三级网络技术机试真题 2007 年 4 月答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100
4、.00)1.已知数据文件 IN.DAT 中存有 200 个四位数,并已调用读函数 ReadDat()把这些数存入数组 a 中。请编制函数 jsVal(),其功能是:如果四位数各位上的数均是奇数,则统计出满足此条件的数的个数 cnt,并把这些四位数按从大到小的顺序存入数组 b 中。最后,函数 main()调用写函数 writeDat()把结果 cnt 及数组 b 中符合条件的四位数输出到文件 OUT.DAT 中。注意:部分源程序已经给出。程序中已定义数组 a200、b200,已定义变量 cnt。请勿改动数据文件 IN.DAT 中的任何数据,以及主函数 main()、读函数 readDat()和写
5、函数 writeDat()的内容。试题源程序#includeStdio.h#defime MAX 200int aMAX,bMAX,cnt=0;void WriteDat();void jsVal()void readDat()int i;FILE *fp;fp=fopen(“in.dat“,“r“);for(i=0;iMAX;i+) fscanf(fp,“%d“,fclose(fp);void main()int i;readDat();jsVal();printf(“满足条件的数=%d/n“,cnt);for(i=0;icnt;i+) printf(“%d“,bi);printf(“/n“
6、);writeDat()void writeDat()FILE *fp;int i;fp=fopen(“out.dat“,“w“);fprintf(fp,“%d/n“,cnt);for(i=0;icnt;i+) fprintf(fp,“%d/n“,bi);fclose(fp);(分数:100.00)_正确答案:(Void jsVal()int i,j,k,flag;int ss4;for(i=0;i200;i+) /*遍历数组 a 的所有元素*/ss0=ai/1000; /*分离出元素 ai的千位*/ss1=ai%1000/100;/*分离出元素 ai的百位*/ss2=ai%100/10; /
7、*分离出元素 ai的十位*/ss3=ai%10; /*分离出元素 ai的个位*/for(j=0;j4j;+)if(ss1%2) /*若元素 ai的各个位都不能被 2 整除*/flaq=1; /*给标志变量赋 1*/else flag=0;break; /*否则,给标志变量赋 0,并跳出本次循环*/if(flag=1) /*若标志变量为 1,说明数据 ai满足条件*/bcnt=ai;cnt+; /*将 ai保存到数组 b 中,统计变量值增加 1*/for(i=O;icnt-1;i+) /*给数组 b 中的元素排序*/for(j=i+1;jcnt;j+)if(bibj)k=bi;bi=bj;bj=k;)解析:解析本题主要考查的是数位分解问题。本题主要考查的知识点包括:C 语言循环结构,if 判断语句和逻辑表达式,以及分解多位整数的算术运算。首先用 for 循环和变量 f 遍历数组的每个元素,对于某一元素 ai用“%”和“/”运算将各个位数分解出来,存放到数组 ss 中;使用 for 循环和变量 j 判断数组 ss 中的各个数是否都是奇数,如果是则将标志flag 置为 1,如果有一个是偶数则置为 0 并跳出循环。如果 flag 为 1,则说明满足都是奇数的条件,将该数 ai存入数组 b 中,统计变量 cnt 的值增加 1。当所有元素遍历完后,对数组 b 中的元素使用冒泡排序法进行排序。