1、三级网络技术机试-216 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.对 10 个候选人进行选举,现有一个 100 条记录的选票数据文件 IN.DAT,其数据存放的格式是每条记录的长度均为 10 位,第一位表示第一个候选人的选中情况,第二位表示第二个候选人的选中情况,依次类推;每一位内容均为字符“0”或“1”,“1”表示此人被选中,“0”表示此人未被选中,全选或全不选(空选票)均为无效的选票则不作统计。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编制函数 CountRs()来统计每个候选人的选票数并把得票
2、数依次存入 yy0到 yy9中,即第一个候选人的得票数存入 yy0中,依次类推。最后调用函数 WriteDat()把结果 YY 输出到文件 OUT.DAT 中。注意:部分源程序存放在 PROG1.C 中。请勿改动主函数 main()、读函数 ReadDat()和输出函数 WriteDat()的内容。试题程序#include #include char XX10011;int yy10;int ReadDat(void);void WriteDat(void);void CountRs(void)/*每一条记录的选票情况已作为字符串存入 xxi为起始地址的存储单元内*/*例如,第 10 条记录的
3、第一个候选人的选中情况的条件是 if(xx90=1)*/*该提示仅供解题参考,考生也可用其他方法解题*/void main()int i;for(i=0;i10;i+) YYi=0;if(ReadDat()(printf(“选票数据文件 IN.DAT 不能打开!/007/n“);return;CountRs();WriteDat();int ReadDat(void)FILE *fp;int i;char tt13;if(fp=fopen(“indat“,“r“)=NULL)return 1;for(i=0;i100;i+)if(fgets(tt,13,fp)=NULL) return 1;m
4、emcpy(xxi,tt,10);XXi10=0;fclose(fp);return 0;void WriteDat(void)FILE *fp;int i;fp=fopen(“out.dat”,“W”);for(i=0;i10;i+)(fprintf(fp,“%d/n”,yyi)=printf(“第%d 个人的选票数=%d/n”,i+1,yyi);fclose(fp);(分数:100.00)_三级网络技术机试-216 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.对 10 个候选人进行选举,现有一个 100 条记录的选票数据文件 IN.D
5、AT,其数据存放的格式是每条记录的长度均为 10 位,第一位表示第一个候选人的选中情况,第二位表示第二个候选人的选中情况,依次类推;每一位内容均为字符“0”或“1”,“1”表示此人被选中,“0”表示此人未被选中,全选或全不选(空选票)均为无效的选票则不作统计。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编制函数 CountRs()来统计每个候选人的选票数并把得票数依次存入 yy0到 yy9中,即第一个候选人的得票数存入 yy0中,依次类推。最后调用函数 WriteDat()把结果 YY 输出到文件 OUT.DAT 中。注意:部分源程序存放在 PROG1.C 中。
6、请勿改动主函数 main()、读函数 ReadDat()和输出函数 WriteDat()的内容。试题程序#include #include char XX10011;int yy10;int ReadDat(void);void WriteDat(void);void CountRs(void)/*每一条记录的选票情况已作为字符串存入 xxi为起始地址的存储单元内*/*例如,第 10 条记录的第一个候选人的选中情况的条件是 if(xx90=1)*/*该提示仅供解题参考,考生也可用其他方法解题*/void main()int i;for(i=0;i10;i+) YYi=0;if(ReadDat(
7、)(printf(“选票数据文件 IN.DAT 不能打开!/007/n“);return;CountRs();WriteDat();int ReadDat(void)FILE *fp;int i;char tt13;if(fp=fopen(“indat“,“r“)=NULL)return 1;for(i=0;i100;i+)if(fgets(tt,13,fp)=NULL) return 1;memcpy(xxi,tt,10);XXi10=0;fclose(fp);return 0;void WriteDat(void)FILE *fp;int i;fp=fopen(“out.dat”,“W”)
8、;for(i=0;i10;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+) /*逐张处理选票*/ cnt=0;for(j=0;j10;j+) /*统计选中人数*/if(xxij=1)cnt+;if(cnt=10|cnt=0) /*判断条件*/cntinue;for(j=0;j10;j+) /*统计得票*/if(xxij=1)yyj+;)解析:解析 本题要求按照一定的判断条件筛选出有效选票后,再统计各候选人的得票数。依据题意,应依次处理每张选票,先统计该选票选中的人数,再根据题目中的判断条件(全选或全不选,即cnt=10|cnt=0)筛选掉无效选票以后,依次将得票数存入数组 yy中。