1、三级信息管理技术机试-254 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.对 10 个候选人进行选举,现有一个 100 条记录的选票文件 IN79.DAT,其数据存放格式是每条记录的长度均为 10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位候选人的记录内容均为字符 0 或 1,1 表示此人被选中,0 表示此人未被选中,若一张选票选中人数大于 5个人时被认为是无效的选票。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编制函数 CoutRs()来统计每个人的选票数并把得票数
2、依次存入 yy0到 yy9中,最后调用函数 WriteDat()把结果 yy 输出到文件 OUT79.DAT 中。注意:部分源程序已给出。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。试题程序:#include memory.h#include stdio.hchar xx10011;int yy10;int ReadDat(void);void WriteDat(void);void CoutRs(void)void main()int i;for(i=0;i10;i + +)yyi=0;if(ReadDat()printf(“数据文件 IN7
3、9.DAT 不能打开! /n/007“);return;CoutRs();WriteDat();int ReadDat(void)FILE * fp;int i;char tt13;if(fp=fopen(“IN79.DAT“,“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()FILE * fp;int i;fp=fopen(“OUT79.DAT“,“w“);for(i=0;i1
4、0;i + +)fprintf(fp,“% d/n“,yyi);printf(“第% d 个人的选票数=% d/n“,i+1,yyi);fclose(fp);(分数:100.00)_三级信息管理技术机试-254 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.对 10 个候选人进行选举,现有一个 100 条记录的选票文件 IN79.DAT,其数据存放格式是每条记录的长度均为 10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依次类推。每一位候选人的记录内容均为字符 0 或 1,1 表示此人被选中,0 表示此人未被选中,若一
5、张选票选中人数大于 5个人时被认为是无效的选票。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编制函数 CoutRs()来统计每个人的选票数并把得票数依次存入 yy0到 yy9中,最后调用函数 WriteDat()把结果 yy 输出到文件 OUT79.DAT 中。注意:部分源程序已给出。请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。试题程序:#include memory.h#include stdio.hchar xx10011;int yy10;int ReadDat(void);void WriteDat(vo
6、id);void CoutRs(void)void main()int i;for(i=0;i10;i + +)yyi=0;if(ReadDat()printf(“数据文件 IN79.DAT 不能打开! /n/007“);return;CoutRs();WriteDat();int ReadDat(void)FILE * fp;int i;char tt13;if(fp=fopen(“IN79.DAT“,“r“)=NULL) return 1;for(i=0;i100;i + +)if(fgets(tt,13,fp)=NULL) return 1;memcpy(xxi,tt,10);xxi10
7、=0;fclose(fp);return 0;void WriteDat()FILE * fp;int i;fp=fopen(“OUT79.DAT“,“w“);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; /*定义计数器变量*/int count; /*存储每张选票的选中人数,以判断选票是否有效*/for(i=0;i10;i + +) /*初始化数组 yy*/yyi=0;fo
8、r(i=0;i100;i + +) /*依次取每张选票进行统计*/count=0;for(j=0;j10;j + +) /*统计每张选票的选中人数 count*/if(xxij=1)count + +;if(count=5) /*当 count 值小于等于 5 时为有效选票*/for(j=0;j10;j + +) /*统计有效选票*/if(xxij=1)yyj + +;)解析:解析 本题运用多重循环来依次取每一张选票进行统计。首先,运用一个 for 循环对数组 yy 进行初始化。接着,对每张选票的有效性进行检查,当选票上的选中人数小于等于 5 时才是有效选票,不符合条件的被丢弃。最后对有效选票上的投票情况进行统计,将投票结果保存在数组 yy 中。