购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

三级网络技术(11)

已知在文件IN11.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat() 的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求:(1)求出该文件中共有多少个正整数totNum;(2)求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数WriteDat()把所求的结果输出到文件OUT11.DAT中。

注意:部分源程序已给出。

请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。

试题程序:

#include <stdio.h>
#include <stdlib.h>
#define MAXNUM 200
      int xx[MAXNUM];
      int totNum = 0; /* 文件IN11.DAT中共有多少个正整数 */
      int totCnt = 0; /* 符合条件的正整数的个数 */
double totPjz = 0.0; /* 平均值 */
      int ReadDat(void);
void WriteDat(void);
void CalValue(void)
{
}
void main()
{
      int i;
      system("CLS");
      for(i = 0; i < MAXNUM; i++)
      xx[i] = 0;
      if(ReadDat())
      {
        printf("数据文件IN11.DAT不能打开!\007\n");
        return;
      }
      CalValue();
      printf("文件IN11.DAT中共有正整数= %d 个\n", totNum);
      printf("符合条件的正整数的个数= %d 个\n", totCnt);
      printf("平均值=%.2lf\n", totPjz);
      WriteDat();
}
      int ReadDat(void)
{
      FILE *fp;
      int i = 0;
      if((fp = fopen ("IN11.DAT", "r")) == NULL)
        return 1;
      while(! feof(fp))
      {
        fscanf(fp, "%d,", &xx[i++]);
      }
      fclose(fp);
      return 0;
}
void WriteDat(void)
{
      FILE *fp;
      fp = fopen("OUT11.DAT", "w");
      fprintf(fp, "%d\n%d\n%.2lf\n", totNum, totCnt, totPjz);
      fclose(fp);
}
【答案】
void CalValue(void)
{
      int i;  /*定义循环控制变量*/
      int data; /*用于保存处理后产生的新数*/
      for(i=0;i<200;i++)  /*逐个取数组xx中的数进行统计*/
      if(xx[i]>0)  /*判断是否正整数*/
      {
        totNum++;  /*统计正整数的个数*/
        data=xx[i]>>1; /*将数右移一位*/
        if(data%2==0) /*如果产生的新数是偶数*/
        {
          totCnt++;  /*统计这些数的个数*/
          totPjz+=xx[i]; /*并将满足条件的原数求和*/
        }
      }
      totPjz/=totCnt; /*求满足条件的这些数(右移前的值)的算术平均值*/
}

【解析】本题的解题思路是:首先利用一个for循环来依次从数组中取得各数,由于题目要求数组中正整数的个数,大于零的整数便是正整数,这时就给变量totNum(正整数的个数)累加1,然后把该正整数右移一位后的结果临时保存在变量data中,再判断产生的新数是否偶数。如果是,就给变量totCnt(符合判断条件的正整数个数)累加1,并把原数的值累加到变量totPjz中,当所有符合判断条件的数都被找出后,再对totPjz求平均值。 2SqApkmQCFdD/jNGTk11RYvjpoRg28rmeQdPlSlMQ07W1sUq8wRG0TqNYFE+IrPV

点击中间区域
呼出菜单
上一章
目录
下一章
×