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

admin2013-12-10  26

问题 对10个候选人进行选举。现有一个100条记录的选票数据文件in.dat,其数据存放的格式是每条记录的长度均为10位,第一位表示第一个候选人的选中情况,第二位表示第二个候选人的选中情况,以此类推;每一位内容均为字符“0”或“1”,“1”表示此人被选中,“0”表示此人未被选中。若一张选票选中人数大于5个人时。被认为无效的选票,则不作统计。给定函数ReadDat()的功能是把选票数据读人到字符串数组XX中。请编写函数CountRs()来统计每个候选人的选票数并把得票数依次存人yy[0]到yy[9]中,即第一个候选人的得票数存入yy[0]中。以此类推。最后调用函数WriteDat()把结果yy输出到文件out.dat中。
【试题程序】
    #include
    #include
    char xxElOO]E11];
    int yy[10];
    int ReadDat(void);
    void WriteDat(void);
    void CountRS(void)
    {
    /*每一条记录的选票情况已作为字符串存入xx为起始地址的存储单元内*/
    /*例如:第10条记录的第一个候选人的选中情况的条件是if(xx[9][0]==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<10;i++){
    fprintf(fp,“%d\n”,yy);
    printf(“第%d个人的选票数=%d\n”,i+1,yy);
    }
    felose(fp);
    }

选项

答案 void CountRs(void) { int i。j,cnt; /*定义变量*/ for(i=0;i<100;i++) /*逐张处理选票*/ { cnt=0; for(j=0;j<10Ij++) /*统计选中人数*/ if(xxEilEjl==1) cnt++; if(cnt>5) /*判断条件*/ continue; for(j=0,j<10 ;j++) /*统计得票*/ if(xxDlEjl==’1’) yyrj]++; } }

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

最新回复(0)