十一、選票問(wèn)題
現(xiàn)有一個(gè)10個(gè)人100行的選票數(shù)據(jù)文件IN.DAT,其數(shù)據(jù)存放的格式是每條記錄的長(zhǎng)度
均為10位,第一位表示第一個(gè)的選中情況,第二位表示第二個(gè)人的選中情況,依此類(lèi)推;內(nèi)
容均為字符0和1,1表示此人被選中,0表示此人未被選中,若一張選票人數(shù)大于5個(gè)人時(shí)認(rèn)
為無(wú)效的選票.給定函數(shù)READDAT()的功能是把選票并把選票數(shù)據(jù)讀入到字符串?dāng)?shù)組XX中
.請(qǐng)編制函數(shù)COUNTRS()來(lái)統(tǒng)計(jì)每個(gè)人的選票數(shù)并把票數(shù)依次存入YY[0]到Y(jié)Y[9]中,最后調(diào)
用函數(shù)WRITEDAT()把結(jié)果YY輸出到OUT.DAT中.
# 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())
return;
countrs();
writedat();
}
int readdat(void)
{
FILE *fp;
int i;
if((fp=fopen("in.dat","r"))==NULL)
return 1;
for(i=0;i<100;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);
}
* 注:本題要求將那些選了超過(guò)5個(gè)人的選票視為無(wú)效票,在外層for()循環(huán)是用來(lái)一張
一張選票地?cái)?shù)。在循環(huán)內(nèi)的第一個(gè)for()循環(huán)用來(lái)數(shù)一張選票中共選了幾個(gè)人,第二個(gè)i
f()用來(lái)將選了超過(guò)5人的選票去掉。*/
void countrs(void)
{
int i,j,count;
for(i=0;i<300;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]++;
}
}
現(xiàn)有一個(gè)10個(gè)人100行的選票數(shù)據(jù)文件IN.DAT,其數(shù)據(jù)存放的格式是每條記錄的長(zhǎng)度
均為10位,第一位表示第一個(gè)的選中情況,第二位表示第二個(gè)人的選中情況,依此類(lèi)推;內(nèi)
容均為字符0和1,1表示此人被選中,0表示此人未被選中,若一張選票人數(shù)大于5個(gè)人時(shí)認(rèn)
為無(wú)效的選票.給定函數(shù)READDAT()的功能是把選票并把選票數(shù)據(jù)讀入到字符串?dāng)?shù)組XX中
.請(qǐng)編制函數(shù)COUNTRS()來(lái)統(tǒng)計(jì)每個(gè)人的選票數(shù)并把票數(shù)依次存入YY[0]到Y(jié)Y[9]中,最后調(diào)
用函數(shù)WRITEDAT()把結(jié)果YY輸出到OUT.DAT中.
# 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())
return;
countrs();
writedat();
}
int readdat(void)
{
FILE *fp;
int i;
if((fp=fopen("in.dat","r"))==NULL)
return 1;
for(i=0;i<100;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);
}
* 注:本題要求將那些選了超過(guò)5個(gè)人的選票視為無(wú)效票,在外層for()循環(huán)是用來(lái)一張
一張選票地?cái)?shù)。在循環(huán)內(nèi)的第一個(gè)for()循環(huán)用來(lái)數(shù)一張選票中共選了幾個(gè)人,第二個(gè)i
f()用來(lái)將選了超過(guò)5人的選票去掉。*/
void countrs(void)
{
int i,j,count;
for(i=0;i<300;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]++;
}
}