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

admin2013-12-10  45

问题 对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 xx[IOO][11];
    int yy[10];
    int ReadDat(void);
    void WriteDat(void);
    void CountRs(void)
    {
    /*每一条记录的选票情况已作为字符串存入xx[i-1为起始地址的存储单元内*/
    /*例如:第10条记录的第一个候选人的选中情况的条件是if(xx[9][0]==1)*/
    /*该提示仅供解题参考,考生也可用其他方法解题*/
    }
    void main()
    f
    int i;
    for(i=0;i=0;
    if(ReadDat()){
    printf(”选票数据文件IN.DAT不能打开!\007\n”);
    return;
    }
    CountRs();
    WriteDat();
    }
    int ReadDat(void)
    {
    FILE*fp;
    int i;
  char tt[l3];
    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);
    xxEi3E10]=0;
    }
    fclose(fp);
    return 0;
    }
    void WriteDat(void)
    {
    FILE*fp;
    int i;
    fp=fopen(“out.dat”,“w”)l
    for(i=0;i<10;i++){
    fprintf(fp,“%d\n”,yy)I
    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(cnt<=5) /*判断条件*/ continue; for(j:0~j
解析
转载请注明原文地址:https://kaotiyun.com/show/2ElZ777K
0

最新回复(0)