对10个候选人进行选举,现有一个100条记录的选票数据文件in.dat,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个候选人的选中情况。第二位表示第二个候选人的选中情况,以此类推;每一位内容均为字符“0”或“1”,“1”表示此人被选中,“O”

admin2013-12-10  27

问题 对10个候选人进行选举,现有一个100条记录的选票数据文件in.dat,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个候选人的选中情况。第二位表示第二个候选人的选中情况,以此类推;每一位内容均为字符“0”或“1”,“1”表示此人被选中,“O”表示此人未被选中,全选或全不选(空选票)均为无效的选票,不作统计。给定函数ReadDat()的功能是把选票数据读人到字符串数组XX中。请编写函数CountRs()来统计每个候选人的选票数并把得票数依次存入yyFo-]到yyE9]中,即第一个候选人的得票数存入yy[-Ol巾,以此类推。最后调用函数WriteDat()把结果yy输出到文件out.dat中。
【试题程序】
    #include
    #include
    char xx[100][1 1];
    int YY[10];
   int ReadDat(void);
    void WriteDat(void);
    void CountRs(void)
    {
    /*每一条记录的选票情况已作为字符串存入xxB]为起始地址的存储单元内*/
    /*例如:第10条记录的第一个候选人的 选中情况的条件是if(xx[9][O]==‘1’)*/
    /*该提示仅供解题参考,考生也可用其他 方法解题*/
    }
    void main()
    {
    int i;
    for(i=0;i<10;i++)yy=0;
    if(ReadDat());
    printf(“选票数据文件IN.DAT不能打开!\007\n”);
    return;
    }
    CountRs();
    WriteDat();
    }
    int ReadDat(void)
    {
    FILE*fp;
    int i;
    char tt[13];
    if((fp=fopen(“in.dat”。”r”))==NULL)
    return 1;
    for(i=0;i<100;i++){
    if(fgets(tt,13,fp)==NULL)
    return 1;
    memcpy(xx,tt,10);
    xx[10]=0;
    }
    fclose(fp);
    return 0;
    }
    void WriteDat(void)
    {
    FILE*fp;
    int i;
    fp=fopen(“out.dat”,“w”);
    for(i=0}i<10li++){
    fprintf(fp,“%d\n”,yy);
    printf(”第%d个人的选票数=%d\n”,
i+1,yy);
    }
    fclose(fp);
    }

选项

答案void CountRs(void) (int i.j,cnt} /*定义变量*/ for(i=0;i<100;i++) /*逐张处理选票*/ { cnt=0; for(j=0;j<10;j++) /*统计选中人数*/ if(xx[i][j]==’1’) cnt++; if(ent==10||cnt=一0) /*判断条件*/ continue; for(j=0;j<10;j++) /*统计得票*/ if(xx[i][j]==’1’) YY[J]++: } }

解析
转载请注明原文地址:https://kaotiyun.com/show/4ElZ777K
0

最新回复(0)