1、三级数据库技术-532 及答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.对 10 个候选人进行选举,现有一个 180 条记录的选票数据文件 in.dat,其数据存放的格式是每条记录的长度均为 10 位,第一位表示第一个候选人的选中情况,第二位表示第二个候选人的选中情况,依次类推;每一位内容均为字符“0“或“1“,“1“表示此人被选中,“0“表示此人未被选中,若一张选票选中人数小于等于 5 个人时被认为无效的选票则不作统计。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编制函数 CountRs()来统计每个
2、候选人的选票数并把得票数依次存入 yy0到 yy9中,即第一个候选人的得票数存入 yy0中,以此类推。最后调用函数 writeDat()把结果 yy 输出到文件 out.dat中。 请勿改动主函数 main()、读函数 ReadDat()和输出函数 WriteDat()的内容。 #include stdio.h #include string.h char xx100 11; int yy10; int ReadDat (void); void WriteDat(void); void CountRs(void) void main() int i; for(i=0; i10; i+) yyi
3、=0; if (ReadDat () printf (“选票数据文件 in.dat 不能打开! 007n“); return; CountRs (); WriteDat (); /*把选票数据读入到字符串数组 xx 中*/ int ReadDat (void) FILE *fp; int i; char tt13; if(fp=fopen (“in.dat“, “r“) ) =NULL) return 1; for(i=0; i100; i+) if(fgets(tt, 13, fp) = NULL) return 1; memcpy(xxi, tt, i0); xxi 10 =0; fclo
4、se (fp); return 0; /*把结果 yy 输出到文件 out.dat 中*/ void WriteDat(void) FILE *fp; int i; fp=fopen(“out.dat“, “w“); for(i=0; i10; i+) fprintf(fp, “%dn“, yyi); printf(“第%d 个人的选票数=%dn“, i+1, yyi); fclose (fp); (分数:100.00)_三级数据库技术-532 答案解析(总分:100.00,做题时间:90 分钟)一、设计与应用题(总题数:1,分数:100.00)1.对 10 个候选人进行选举,现有一个 180
5、 条记录的选票数据文件 in.dat,其数据存放的格式是每条记录的长度均为 10 位,第一位表示第一个候选人的选中情况,第二位表示第二个候选人的选中情况,依次类推;每一位内容均为字符“0“或“1“,“1“表示此人被选中,“0“表示此人未被选中,若一张选票选中人数小于等于 5 个人时被认为无效的选票则不作统计。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编制函数 CountRs()来统计每个候选人的选票数并把得票数依次存入 yy0到 yy9中,即第一个候选人的得票数存入 yy0中,以此类推。最后调用函数 writeDat()把结果 yy 输出到文件 out.dat
6、中。 请勿改动主函数 main()、读函数 ReadDat()和输出函数 WriteDat()的内容。 #include stdio.h #include string.h char xx100 11; 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 (“选票数据文件 in.dat 不能打开! 007n“); return; CountRs (); WriteDat ();
7、 /*把选票数据读入到字符串数组 xx 中*/ int ReadDat (void) FILE *fp; int i; char tt13; if(fp=fopen (“in.dat“, “r“) ) =NULL) return 1; for(i=0; i100; i+) if(fgets(tt, 13, fp) = NULL) return 1; memcpy(xxi, tt, i0); xxi 10 =0; fclose (fp); return 0; /*把结果 yy 输出到文件 out.dat 中*/ void WriteDat(void) FILE *fp; int i; fp=fo
8、pen(“out.dat“, “w“); for(i=0; i10; i+) fprintf(fp, “%dn“, yyi); printf(“第%d 个人的选票数=%dn“, i+1, yyi); fclose (fp); (分数:100.00)_正确答案:()解析:int i, j, cnt; for(i=0; i100; i+) cnt=0; for(j=0; j10; j+) if(xxi j = “i“) cnt+; if (cnt5) /如果一张选票中的选中数大于 5 时,统计每个人的得票数 for(j=0; j10; j+) if(xxij=“1“) yy j +; 解析 10 列 100 行选票,每行小于等于 5 的无效,统计存入数组。 通过审题可以发现本题仅一个不同点,即本题中要求每行选票中选中数大于 5 时记录才有效,参考答案的第 8 行,修改该条件语句的条件设置即可。