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