1、计算机三级数据库技术-90 及答案解析(总分:100.00,做题时间:90 分钟)1.对 10 个候选人进行选举,现有一个存有 100 条记录的选票数据文件 IN.DAT,其数据存放的格式是每条记录的长度均为 10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推。每一位内容均为字符 0 或 1,1 表示此人被选中,0 表示此人未被选中,若一张选票中选中人数小于等于5 个人时,则被认为是无效的选票。给定函数 ReadDat()的功能是把选票数据读入到字符串数组 xx 中。请编写函数 CountRs()来统计每个人的选票数,并把得票数依次存入 yy0yy9中,最后调用函数
2、WriteDat(),把结果 yy 输出到文件 OUT.DAT 中。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序 #includestdio.h #includememory.h char xx10011; 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“); retu
3、rn; CountRs(); WriteDat(); 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, 10); fclose(fp); return 0; void WriteDat(void) FILE*fp; int i; fp=fopen(“OUT.DAT“, “w“); for(i=0; i10; i+) fprint
4、f(fp, “%dn“, yyi); printf(“第%d 个人的选票数=%dn“, i+1, yyi); fclose(fp); (分数:100.00)_计算机三级数据库技术-90 答案解析(总分:100.00,做题时间:90 分钟)1.对 10 个候选人进行选举,现有一个存有 100 条记录的选票数据文件 IN.DAT,其数据存放的格式是每条记录的长度均为 10 位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推。每一位内容均为字符 0 或 1,1 表示此人被选中,0 表示此人未被选中,若一张选票中选中人数小于等于5 个人时,则被认为是无效的选票。给定函数 Read
5、Dat()的功能是把选票数据读入到字符串数组 xx 中。请编写函数 CountRs()来统计每个人的选票数,并把得票数依次存入 yy0yy9中,最后调用函数WriteDat(),把结果 yy 输出到文件 OUT.DAT 中。 请勿改动主函数 main()、读函数 ReadDat()和写函数 WriteDat()的内容。 试题程序 #includestdio.h #includememory.h char xx10011; int yy10; int ReadDat(void); void WriteDat(void); void CountRs(void) void main() int i;
6、 for(i=0; i10; i+) yyi=0; if(ReadDat() printf(“选票数据文件 IN.DAT 无法打开!007n“); return; CountRs(); WriteDat(); 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, 10); fclose(fp); return 0; void Wri
7、teDat(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)_正确答案:()解析:void CountRs(void) int i, j; /*定义循环控制变量*/ int cnt; /*用来存储每张选票中选中人数,以判断选票是否有效*/ for(i=0; i10; i+) /*初始化数组 yy*/ yyi=0; for(i=0; i100; i
8、+) /*依次取每张选票进行统计*/ cnt=0; /*初始化计数器变量*/ for(j=0; j10; j+) /*统计每张选票的选中人数 cnt*/ if(xxij=“1“) cnt+; if(cnt5) /*当 cnt 值大于 5 时为有效选票*/ for(j=0; j10; j+) /*统计有效选票*/ if(xxij=“1“) yyj+; 考点 本题考查选票的统计。考查的知识点主要包括:C 语言循环结构,if 条件判断结构和逻辑表达式,二维数组操作。 首先通读题目,得知此题属于选票的统计题型;其次分析题干要求,本题要求实现 CountRs(void)函数的功能,该函数需要统计出 100 条选票数据,并将统计结果保存入数组 yy 中;接着归纳出本题有 2 个关键点:关键点 1 如何统计每张选票的选择情况;关键点 2 根据题目给出的条件“一张选票选中人数小于等于5 个人时则被认为无效”判断选票是否有效。首先,对数组 yy 元素初始化为 0;接着通过一个循环嵌套结构依次判断每张选票数据的十个选举标志,同时每张选票的投票数量,对于不满足条件的选票数据直接跳过,并统计有效选票的投票情况到数组 yy 中。