1、三级网络技术机试-246 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.现有一个 10个人 100行的选票数据文件 in.dat,其数据存放的格式是每条记录的长度均为 10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推;内容均为字符 0和 1,1 表示此人被选中,0 表示此人未被选中,若一张选票人数大于等于 8或者小于等于 2个人时被认为无效的选票。给定函数 ReadDat()的功能是把选票数据读入字符串数组 xx中。请编制函数 CountRs()来统计每个人的选票数并把得票数依次存入 yy0到 yy9中。把结果
2、 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;ii0;i+)yyi=0;if(ReadDat()printf(“can not open the file IN.DAT!/n/007“);return;CountRs();WriteD
3、at();int ReadDat(void)FILE*fp;int i;if(fp=fopen(“IN DAR“,“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=0;i10;i+)fprintf(fp,“%d/n“,yyi);printf(“第%d 个人的选票数=%d/n“,i+1,yyi);fclose(fp);(分数:
4、100.00)_三级网络技术机试-246 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.现有一个 10个人 100行的选票数据文件 in.dat,其数据存放的格式是每条记录的长度均为 10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推;内容均为字符 0和 1,1 表示此人被选中,0 表示此人未被选中,若一张选票人数大于等于 8或者小于等于 2个人时被认为无效的选票。给定函数 ReadDat()的功能是把选票数据读入字符串数组 xx中。请编制函数 CountRs()来统计每个人的选票数并把得票数依次存入 yy0到 y
5、y9中。把结果 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;ii0;i+)yyi=0;if(ReadDat()printf(“can not open the file IN.DAT!/n/007“);return;CountRs()
6、;WriteDat();int ReadDat(void)FILE*fp;int i;if(fp=fopen(“IN DAR“,“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=0;i10;i+)fprintf(fp,“%d/n“,yyi);printf(“第%d 个人的选票数=%d/n“,i+1,yyi);fclose(f
7、p);(分数:100.00)_正确答案:(void CountRs(void)int i,j,cnt;for(i=0;i100;i+)/*遍历数组 xx的每一行*/cnt=0; /*计数值清 0*/for(j=0;j10;j+)/*第一遍扫描统计该行所选人数*/if(xxij=1)/*若该位被选中,则计数值增 1*/cnt+; if(cnt8&cnt2)/*若该张选票人数在 2到 8个人*/for(j=0;j10;j+)/*遍历所有选票,并增加相应的计数值*/if(xxij=1)yyj+;)解析:解析 本题主要考查的是选票问题。首先用 for循环和变量 i遍历每一张选票,也就是每一行,对于某行 xxi使用 for循环和变量 j遍历该行的每个元素,使用变量 cnt统计该行所选的人数,也就是元素值为 1的个数。如果该行所选人数 cnt小于 8并且大于 2,则该选票有效,再次遍历这一行,如果选中,则第 j个人的选票数 yypj就加 1。遍历完所有行后得到的 yyj就是第 j个人的有效的选票数。