文件IN.DAT中存放有100条10个候选人进行选举的记录,每条记录的长度均为10位,第一位表示第一个人选中的情况,第二位表示第二个人的选中情况,依次类推。每一位内容均为字符0或1,1表示此人被选中,0表示此人未被选中,全选或全不选(空选票)均为无效选票。

admin2012-07-20  34

问题 文件IN.DAT中存放有100条10个候选人进行选举的记录,每条记录的长度均为10位,第一位表示第一个人选中的情况,第二位表示第二个人的选中情况,依次类推。每一位内容均为字符0或1,1表示此人被选中,0表示此人未被选中,全选或全不选(空选票)均为无效选票。函数readData()负责将IN.DAT中的内容读入到数组inBuf[]中。请编制函数calculate()来统计每个人的选票数并把得票数依次存人outBuf[0]~outBuf[9]中,最后调用函数writeData()把结构outBuf[]输入到文件OUT.DAT中。
注意;部分源程序已给出。
请勿改动主函数main()、读函数readData()和写函数writeData的内容。
试题程序;
#include
#include   
#define LINE 100
#define COL 10   
char inBuf[LINE][COL];
int outBuf[COL];
int readData(void);
void writeData(void);
void calculate(void)
{
}
void main()
{
  int i;
  for(i=0;i<10;i++)outBuf=0;
  if(readData())
  {
    printf("IN.DAT can’t be opened\007\n");
    return;
    }
    calculate();
    writeData();
}
int readData(void)
{
  FILE*fp;
  int i;
  char tt[COL+1];
  if((fp=fopen("IN.DAT","r"))==NULL)
  return 1;
  for(i=0;i  {
    if(fgets(tt,COL+1,fp)==NULL)
    return 1;
    memcpy(inBuf,tt,COL);
    }
    fclose(fp);
    return 0;
}
void writeData(void)
{
  FILE*fp;
  int i;
  fp=fopen("OUT.DAT","w");
  for(i=0;i<10;i++)
  {
    fprintf(fp,"%d\n",outBuf);
    printf("the amounts of number%d’svotes=%d\n",i+1,outBuf);
    }
    fclose(fp);
}

选项

答案   void calculate(void) { int i,j,k,sum,use_i; int useful[LINE]={-1); k=0; for(i=0;i0&&sum
解析 本题考查的主要是如何将读入的字符型的数字转换成对应的整型数字。由于数字0~9的ASCII码是连续增加的,故可用字符0~9的ASCII码值减去字符0的ASCII码值而得到数字0~9。本题的另一个难点是如何在除去无效选票之后再进行统计,本程序中选用的是用一个数组useful[]来记录有效选票的号码,将该数组中的值作为选票数组inBuf[][]的行下标,从而实现了对无效选票的排除。
转载请注明原文地址:https://kaotiyun.com/show/a24Z777K
0

最新回复(0)