阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某单位准备进行一次选举,对指定的n名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上

admin2008-05-15  29

问题 阅读以下说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
   某单位准备进行一次选举,对指定的n名(n<80)候选人进行投票。为了简化选举工作,事先印制了写有这n名候选人姓名的选票,投票者只需将选中者名下的圆圈涂黑即可。规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。投票结束后,所有选票经计算机扫描处理,形成了描述选票状态的文本文件。例如,n=8时所形成的文件如下:
   01011000
   10010100
   10011000
   11111111
   00000000
   00111000
   其中,每行表示一张选票的数据,每列代表一位候选者的得票情况。第i行第j列为1,表示第i张选票上投了第j名候选人1票。
   函数statisdc()的功能是读入选票数据,并统计每位候选者的得票数,函数返回有效选票数。
【C函数】
   int statistic(FILE*fp,int candidatet[],int n)
   {    /*从文件中读入选票数据,n为候选人数量(n<80),从有效选票中统计每位候选者的得
          票数并存入candidate[],函数返回有效选票数*/
        char str[80];    /*str保存读入的一张选票数据*/
        int i,tag=0;    /* tag用于判断每张选票是否有效*/
        int q=0;    /*q用于计算有效选票数*/

        for(i=0;i<n;  i++)
          candidate=0;

        while((1)){
             fgets(str,80,fP);    /*读入一张选票数据*/
             for(tag=0,i=0;(2);i++)
             if    (str==’1’)    tag++;

        if((3)){/*若是有效选票,则进行统计*/
             (4);
             for(i=0;  i<n;  i++)
               if.(str==’1’)  (5);
        }
      }
      return q;
   }/*statistic*/

选项

答案(1)!feof(fp) (2)i<n && str[i]!=’\0’,或其等价形式 (3)tag>=1 && tag<=3,或其等价形式 (4)q++,或其等价形式 (5)candidate[i]++,或其等价形式

解析 本题考查C语言中的文件操作和简单数据处理。
   C语言提供了大量的库函数,用于创建和使用数据文件。
   在C语言中,必须在处理数据文件(甚至创建数据文件)之前将其打开。打开一个文件的库函数为
   fopen(文件名,打开方式);
   其中,文件名包含路径,以字符串形式给出,函数返回一个指针。打开方式如下表所示:
  
关闭文件的函数为fclose(文件指针)。
   本题目中将文件指针作为参数传递给函数statistic(),表明文件已经打开,无须在该函数中打开和关闭文件。
   根据文件打开之后的用途,可将进行读/写操作的数据文件分成两类:文本文件和二进制文件。
   文本文件有一个结束标志(最后一个字符是码值为26的ASCII字符),读取函数在文件中发现该字符后向调用程序返回一个EOF。
   文件指针为fp,feof(fp)用来测试fp所指向的文件当前状态是否“文件结束”,若是,则函数返回值为1,否则返回值为0。如果/顷序读入文本文件fp中的数据,每次读取一个字符,则代码如下:
   while(!feof(fp))
   {
        ch=fgetc(fp);
       .
       .
       .
   }
   因此,函数中空(1)处应填入“!feof(fp)”。
   fgets()的作用是从指定文件中读入一个字符串,函数调用方式为“fgets(str,n,fp)”,从fp指向的文件输入n-1个字符,并把它们放到字符数组str中,如果在读入n-1个字符结束之前遇到换行符或EOF,则结束读入。
   根据数据文件的内容安排,函数中通过语句“fgets(str,80,fp);”每次读入一行数据(一张选票的信息),str为第i个候选人在本张选票上的得票情况。
   题目中规定每张选票上被涂黑的圆圈数不得超过3个,也不得少于1个,否则视为无效选票。因此,对于读到的选票数据,首先应判断其是否有效。函数statistic()中的以下代码用于计算一张选票中“1”的个数,从而判断其有效性。
   for(tag=0,i=0;  (2)  ;i++)/* tag用于判断每张选票是否有效*/
      if  (str==’1’)  tag++
   当tag>3或tag<1时,选票无效。
   题中已声明候选人数小于80并且通过参数传入了候选人的个数n,因此i的值应小于n,结合串结束标志“\0”将对数组str的元素的访问控制在有效下标范围内,因此空 (2)处填入“i<n&& str!=’\0’,空(3)处应填入“tag>=1 && tag<=3”。
   根据要求,还应计算有效选票的数量,因此空(4)处应填入“q++”。
   若str等于1,说明候选人i在本张选票上得了一票,所以空(5)处应填入“candidate++’’(在计算票数之前,函数中应将每个候选人的初始得票数设置为0。)
转载请注明原文地址:https://jikaoti.com/ti/BZW7FFFM
0

最新回复(0)