1、计算机三级数据库技术-130 及答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.对 10个候选人进行选举,现有一个存有 100条记录的选票文件 ENG.IN,其数据存放格式是每条记录的长度均为 10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推。每一位候选人的记录内容均为字符 0或 1,1 表示此人被选中,0 表示此人未被选中,全选或全不选(空选票)均视为无效。给定函数 ReadDat()的功能是把选票记录读入到字符串数组 xx中。请编写函数 CoutRs()来统计每个人的选票数并把得票数依次存入 yy0yy9中,最
2、后调用函数 writeDat(),把结果 yy输出到文件 OUT.DAT中。 注意:请勿改动主函数 main()、读函数 ReadDat()和写函数 writeDat()的内容。 【试题程序】 #include memory.h #include stdio.h char xx100 ii ; int yy10 ; int ReadDat (void) ; void WriteDat (void) ; void CoutRs (void) void main () int i; for (i =0;i 10;i + ) yyi=0; if ReadDat () printf (“数据文件 EN
3、G. IN 无法打开! n007“) ; return; CoutRs () ; WriteDat () ; int ReadDat (void) FILE * fp; int i ; char tt13 ; if ( (fp = fopen (“ENG. IN“, “r“) ) = NULL) return 1 ; for (i =0;i 100;i + ) if (fgets (tt,13, fp) =NULL) return 1 ; memcpy (xxi, tt, 10 ) ; xxi10 =0; fclose (fp) ; return 0 ; void WriteDat () FI
4、LE * fp; int i; fp = fopen (“OUT .DAT“, “w“) ; for (i =0;i 10;i + ) fprintf(fp,“%dn“,yyi); printf (“第%d 个人的选票数=%dn“, i+1,yyi); fclose(fp); (分数:100.00)_计算机三级数据库技术-130 答案解析(总分:100.00,做题时间:90 分钟)一、上机题(总题数:1,分数:100.00)1.对 10个候选人进行选举,现有一个存有 100条记录的选票文件 ENG.IN,其数据存放格式是每条记录的长度均为 10位,第一位表示第一个人的选中情况,第二位表示第二个
5、人的选中情况,依此类推。每一位候选人的记录内容均为字符 0或 1,1 表示此人被选中,0 表示此人未被选中,全选或全不选(空选票)均视为无效。给定函数 ReadDat()的功能是把选票记录读入到字符串数组 xx中。请编写函数 CoutRs()来统计每个人的选票数并把得票数依次存入 yy0yy9中,最后调用函数 writeDat(),把结果 yy输出到文件 OUT.DAT中。 注意:请勿改动主函数 main()、读函数 ReadDat()和写函数 writeDat()的内容。 【试题程序】 #include memory.h #include stdio.h char xx100 ii ; in
6、t yy10 ; int ReadDat (void) ; void WriteDat (void) ; void CoutRs (void) void main () int i; for (i =0;i 10;i + ) yyi=0; if ReadDat () printf (“数据文件 ENG. IN 无法打开! n007“) ; return; CoutRs () ; WriteDat () ; int ReadDat (void) FILE * fp; int i ; char tt13 ; if ( (fp = fopen (“ENG. IN“, “r“) ) = NULL) r
7、eturn 1 ; for (i =0;i 100;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 (“OUT .DAT“, “w“) ; for (i =0;i 10;i + ) fprintf(fp,“%dn“,yyi); printf (“第%d 个人的选票数=%dn“, i+1,yyi); fclose(fp); (分数:100.00)
8、_正确答案:()解析:void CountRs(void) int i,j; /*定义计数器变量*/ int count; /*存储每张选票的选中人数,以判断选票是否有效*/ for(i=0;i10;i+) /*初始化数组 yy*/ yyi=0; for(i=0;i100;i+) /*依次取每张选票进行统计*/ count=0; for(j=0;j10;j+) /*统计每张选票的选中人数 count*/ if(xxij=“1“) count+; if(count!=0 j10;j+) if(xxij=“1“) yyj+; 考点 本题是选票的统计问题。考查的知识点主要包括:C 语言循环结构,if
9、 条件判断结构和逻辑表达式,字符比较操作。 解析 首先通读题目,得知此题属于选票的统计题型;其次分析题干要求,本题要求实现 CountRs(void)函数的功能,该函数需要统计出 100条选票数据,并将统计结果保存入数组 yy中;接着归纳出本题有 2个关键点:关键点 1如何统计每张选票的选择情况;关键点 2根据题目给出的条件“全选或全不选的选票被认为无效“判断选票是否有效。 首先,对数组 yy元素初始化为 0,接着通过一个循环嵌套结构依次判断每张选票数据的十个选举标志,以及每张选票的投票数量,对于不满足条件的选票数据直接跳过,并统计有效选票的投票情况到数组 yy中。 数组 yy未初始化,判断选票是否有效的逻辑表达式错误。