文件IN.DAT中存放有i00条对10个候选人进行选举的记录,数存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况.第二位表示第二个人的选中情况,依此类推。每一位内容均为字符0或1。1表示此人被选中,0表示此人未被选中。若一张选票选中人数小

admin2021-09-09  74

问题 文件IN.DAT中存放有i00条对10个候选人进行选举的记录,数存放的格式是每条记录的长度均为10位,第一位表示第一个人的选中情况.第二位表示第二个人的选中情况,依此类推。每一位内容均为字符0或1。1表示此人被选中,0表示此人未被选中。若一张选票选中人数小于等于5个人时则被认为是无效的选票。函数ReadData()负责将late()来统计每个人的选票数并把得票数依次存入outBuf[0]outBuf[9]中,最后写函数WriteData()把结果outBuf
   请勿改动主函数main()、读函数ReadData()和写函数WriteData()的内容。
  试题程序:
  #include
  #include
  #define LlNE 100
  #define COL 10
  #define THR 5
  char inBuf[LINE][COL];
  int outBuf[COL];
    int ReadData(void);
    void WriteData(void)I
    void calculate(void)
    {
    }
    void main()
    {
    int i;
    for(i=0;i<10;i++)outBuf=0;
    if(ReadData())
    {
    printf(“IN.DAT can’t be opened\00T\n”);
    return;
    }
    calculate();
    WriteData():
    }
    int RcadData(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 l;
    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[f1);
    printf(“the amounts of number%d’s votes=%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;iTHR) //如果该选票选的人数小于等于5人,则视为无 效选票 { useful[k]=i; //将有效的选票的标号放到数组useful中 k++; //将有效选票的计数器加1 } } use_i=k; //记录有效选票的个数 for(j=0;j
解析 本题主要考查如何将读入的字符型的数字转换成对应的整型数字。
    由于数字0~9的ASCII码是连续增加的,故可用0~g的ASCII码值减去0的ASCII码值而得到数字0~9。本题的另一个难点是如何在除去无效选票之后再进行统计。在程序中选用的是用一个数组useful[]来记录有效选票的号码,将谊数组中的值作为选票数组inBuf[][]的行下标,从而实现了时无效选票的排除。
转载请注明原文地址:https://jikaoti.com/ti/47Y7FFFM
0

最新回复(0)