32题 现有一个10个人100行的选票数据文件IN.DAT,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况,第二位表示第二个人的选中情况,依此类推 :内容均为字符0和1,1表示此人被选中,0表示此人未被选中,若一张选票人数小于等于5个人时被认为无效的选票。给定函数ReadDat()的功能是把选票数据读入到字符串数组xx中。请编制函数CountRs()来统计每个人的选票数并把得票数依次存入yy[0]到yy[9]中。把结果yy输出到文件OUT.DAT中。
部分源程序已给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数writeDat()的内容。 #include<stdio.h>

char xx[100][11];
int yy[10]
int ReadDat(void)
void WriteDat(void)

void CountRs(void)
{

}

void main()
{
int i;

for(i=0;i<10;i++)yy[i]=0;
if(ReadDat()){
printf("选票数据文件IN.DAT不能打开!\n\007" );
return;
}
CountRs();
WriteDat();
}

int ReadDat(void)
{
FILE *fp;
int i;

if((fp=fopen(" IN.DAT" ," r" ))==NULL) return 1;
for(i=0;i<10;i++){
if(fgets(xx[i],11,fp)!=NULL)return 1;
xx[i][10]='\0';
}
fclose(fp);
return 0;
}

void WriteDat(void)
{
FILE *fp;
int i;

fp=fopen(" OUT.DAT" ," w" );
for(i=0;i<10;i++){
fprintf(fp," %d\n" ,yy[i]);
printf(" 第%d个人的选票数=%d\n" ,i+1,yy[i]);
}
fclose(fp);
}


/*注:题目要求将那些选了不超过5人的选票视为无效票,即一张选票中如果‘1’不超
过5个则为无效选票。该题先用for()循环对100行选票进行循环,在循环内先进行用for
()循环数出这张选票中选中的人数(count)再用if()判断,如果选中人数小于等于5则c
ontinue即判断下一张选票,否则用内嵌的for()对行内的数据进行判断,注意如果数据
为‘1’时才对对应的人增加1。*/
void countrs(void)
{
int i,j,count;
for(i=0;i<100;i++)
{count=0;
for(j=0;j<10;j++)
if(xx[i][j]=='1')
count++;
if(count<=5)
continue;
for(j=0;j<10;j++)
if(xx[i][j]=='1') yy[j]++;
}
}

返回南开百题目录

www.163164.cn 联系QQ:3149886