问答题 试题二(共15 分) 阅读以下说明和C 函数,将应填入(n) 处的字句写在答题纸的对应栏内。 [说明] 某单位准备进行一次选举,对指定的n 名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n 名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3 个,也不得少于1 个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,n=8 时所形成的文件如下: 01011000 10010100 10011000 11111111 00000000 00111000 … 其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第i 行第j 列为1,表示第i 张选票上投了第j 名候选人1 票。 函数statistic( )的功能是读入选票数据,并统计每位候选者的得票数,函数返回有效选票数。 [C 函数] int statistic(FILE *fp,int candidate[],int n) { /* 从文件中读入选票数据,n 为候选人数量(n<80),从有效选票中统计每位候选者的得 char str[80]; /* str 保存读入的一张选票数据 */ int i,tag = 0; /* tag 用于判断每张选票是否有效 */ int q = 0; /* q 用于计算有效选票数 */ for(i = 0; i < n; i++) candidate[i] = 0; while ( (1) ) { fgets(str,80,fp); /* 读入一张选票数据 */ for(tag = 0,i = 0; (2) ; i++) if (str[i] == '1') tag++; if ( (3) ){ /* 若是有效选票,则进行统计 */ (4) ; for(i = 0; i < n; i++) if (str[i] == '1') (5) ; } } return q; }/* statistic */ 票数并存入candidate[],函数返回有效选票数*/
【正确答案】(1) !feof(fp) (2) i < n && str[i]!='\0' (3) tag > = 1 && tag <= 3 (4) q++ (5) candidate[i]++
【答案解析】