【题目描述】
试题三(共15分)
阅读以下说明和C代码,填补C代码中的空缺(1)~(5),将解答写在答题纸的对应栏内。
【说明】
某市在进行市长选举,该市共分为M个选区(1
现已将选票数据存入文本文件data.txt,该文件内容格式如下:共有M行,每行N+l个整数,第一个整数为选区编号,随后为N个候选者在该选区所得票数。
下面的程序先从文件中读入选票数据存入二维数组data,然后完成下列功能:
a.计算并显示每个竞选者获得的选票数及占总选票数的百分比;
b.如果任一竞选者获得的选票数超过总选票数的50%,则显示该竞选者获胜;
c.如果没有竞选者获得总选票数的50%以上,则显示两位得票最高的竞选者需再进行决选。
在下面的程序代码中,竞选者A的编号为l,竞选者B的编号为2,以此类推。
【C代码】
#include
#include
#defineM 5 /*选区数*/
#define N 4 /*竞选者人数*/
int main(int argc,char argv[])
{
FILE *fin;
int data[M+l][N+1]; /*data[] [0]存放选区编号,data[M][j]存放j号竞选者得票总数*/
int MAXP1,cdl; /*MAXP1、cdl存放得票最多者的票数和竞选者编号*/
int MAXP2,cd2; /*MAXP2、cd2存放得票次多者的票数和竞选者编号*/
int i,j,totalP; /*totalP存放总票数*/
fin= fopen(“data.txt”,“r”);
if(!fin) return-1;
1=0; j=0;
while (!feof(fin)){ /*从文件读入数据*/
fscanf(fin,"%d",&data[i] [j]);
(1) ;
if(j>N) {j=0;i++;)
}
fclose(fin);
totalP=0;MAXPl=0;MAXP2=0;cdl=0;cd2=0;
for(j=l;j
data[M][j]= (2) ; /*设置j号竞选者得票总数初始值*/
for(i=0;i
data[M][j]+=data[i][j];
if(data[M][j]> MAXPl){
(3) : cd2= cdl;
MAXPl=data[M][j]; cdl =j;
}
else
if(data[M][j]> MAXP2) {MAXP2= data[M][j]; cd2 =j;)
(4); /*计算总票数*/
}
for(j=1;j
printf("Candidate-%c: %d ",j+'A'-1,data[M][j]);
printf("%.21f\n" ,(double)data[M] [j]/totalP);
}
printf("\n"),
if( (5) >0.5) /*判断得票数最多者的得票率*/
printf("Winner: Candidate-%c\n",cdl+'A'-l);
else
printf("Result:Candidate-%c PK Candidate-%c\n",cdl+'A'-l,cd2+'A'-l);
system("pause");
return0;
}
【我提交的答案】:(1) j++;(2) data[M][j]=0;(3)(4)totoalIP+=data[M][j];(5)MAXPI/totalIP
【参考答案分析】:(1)j++,或++j,或其等价表示
(2)0
(3) MAXP2= MAXP1
(4) totalP+=data[M][j],或totalP+=totalP+ data[M][j],或其等价表示
(5) (double)MAXPl/totaIP,或(float)MAXPl/totalP,或其等价表示
其中,将(double)或(float)写在totalP之前亦可
【我的疑问】(如下,请求专家帮助解答)
请问第三个答案是什么意思啊?MAXP2=MAXP1:cd1=cd2;单冒号有这种用法吗?