1、全国计算机等级考试三级网络技术机试真题 2010 年 3 月及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.现有一个 10 个人 100 行的选票数据文件 IN.DAT,其数据存放的格式是:每条记录的长度均为 10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推;内容均为字符 0 和 1,1表示此人被选中,0 表示此人未被选中;若一张选票中选中的人数大于等于 8 或者小于等于 2 时,该选票被认为无效。给定函数 ReadDat()的功能是把选票数据读入字符串数组 yy 中。请编制函数 CountRs()来统计每个人
2、得到的选票数,并把得票数依次存入数组 yy0到数组 yy9中。最后,把结果 yy 输出到文件OUT.DAT 中。注意:部分源程序给出如下。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 writeDat()的内容。试题源程序#includestdio.hchar xx10011;int yy10;int ReadDat(void);void WriteDat(void);void CountRs(void)void main()int i;for(i=0;i10;i+) yyi=0;if(ReadDat()printf(“can not open the file
3、IN.DAT!/n/007“);return;CountRs();WriteDat();int ReadDat(void)FILE *fp;int i;if(fp=fopen(“IN.DAT“,“r“)=NULL) return 1;for(i=0; i100; i+)if(fgetS(xxi,12,fp)=NULL) return 1;xxi10=/0;fclose(fp);return 0;void WriteDat(void)FILE *fp;int i;fp=fopen(“OUT.DAT“,“w“);for(i=0i10;i+)fprintf(fp,“%d/n“,yyi);printf
4、(“第%d 个人的选票数=%d/n“,i+1,yyi);fclose(fp);(分数:100.00)_全国计算机等级考试三级网络技术机试真题 2010 年 3 月答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.现有一个 10 个人 100 行的选票数据文件 IN.DAT,其数据存放的格式是:每条记录的长度均为 10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推;内容均为字符 0 和 1,1表示此人被选中,0 表示此人未被选中;若一张选票中选中的人数大于等于 8 或者小于等于 2 时,该选票被认为无效。给定函数 Re
5、adDat()的功能是把选票数据读入字符串数组 yy 中。请编制函数 CountRs()来统计每个人得到的选票数,并把得票数依次存入数组 yy0到数组 yy9中。最后,把结果 yy 输出到文件OUT.DAT 中。注意:部分源程序给出如下。请勿改动主函数 main()、读数据函数 ReadDat()和输出数据函数 writeDat()的内容。试题源程序#includestdio.hchar xx10011;int yy10;int ReadDat(void);void WriteDat(void);void CountRs(void)void main()int i;for(i=0;i10;i+
6、) yyi=0;if(ReadDat()printf(“can not open the file IN.DAT!/n/007“);return;CountRs();WriteDat();int ReadDat(void)FILE *fp;int i;if(fp=fopen(“IN.DAT“,“r“)=NULL) return 1;for(i=0; i100; i+)if(fgetS(xxi,12,fp)=NULL) return 1;xxi10=/0;fclose(fp);return 0;void WriteDat(void)FILE *fp;int i;fp=fopen(“OUT.DAT
7、“,“w“);for(i=0i10;i+)fprintf(fp,“%d/n“,yyi);printf(“第%d 个人的选票数=%d/n“,i+1,yyi);fclose(fp);(分数:100.00)_正确答案:(void CountRs(void)int i,j,cnt;for(i=0; i100; i+) /*遍历数组 xx 的每一行*/cnt=0; /*计数值清零*/for(j=0;j10;j+) /*第一遍扫描统计该行所选人数*/if(xxij=1) /*若该位被选中,则计数值增加 1*/cnt+;if(cnt8 j10; j+) /*遍历所有选票,并增加相应的计数值*/if(xxij=1)yyj+;)解析:解析本题主要考查的是选票问题。首先用 for 循环和变量 i 遍历每一张选票,也就是每一行,对于某行 xxi使用 for 循环和变量 j 遍历该行的每个元素,使用变量 cnt 统计该行所选的人数,也就是值为 1 的元素的个数。如果该行所选人数 cnt 小于 8 并且大于 2,则该选票有效,再次遍历这一行,如果选中,则第 j 个人的选票数 yyj的值就增加 1。遍历完所有行后得到的 yyj的值就是第 j 个人的有效选票数。