就业数据资源平台
当前位置:首页 > 网络技术
计算机等级考试三级网络技术上机练习题及答案11


  请编制程序,要求:将文件IN97.DAT中的200个整数读入数组xx中,求出数组xx中奇数的个数cnt1和偶数的个数cnt2,以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数),结果cnt1,cnt2,pj输出到out97.dat中。
  部分程序、读函数read_dat(int xx[200])及输出格式已给出。
  试题程序:
  #include <stdlib.h>
  #include <stdio.h>
  #define N 200
  void read_dat(int xx[N])
  {
  int i,j;
  FILE *fp;
  fp=fopen("IN97.DAT","r");
  for(i=0;i<20;i++)
  {
  for(j=0;j<10;j++)
  {
  fscanf(fp,"%d,",&xx[i*10+j]);
  printf("%d ",xx[i*10+j]);
  }
  printf("\n");
  }
  fclose(fp);
  }
  void main()
  {
  int cnt1,cnt2,xx[N];
  float pj;
  FILE *fw;
  int i,k=0;
  long j;
  system("CLS");
  fw=fopen("out97.dat","w");
  read_dat(xx);
  printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
  fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
  fclose(fw);
  }


  【答案】
  void main()
  {
  int cnt1,cnt2,xx[N];
  float pj;
  FILE *fw;
  int i,k=0;
  long j;
  clrscr(); 来源:考试大网
  fw=fopen("out91.dat","w");
  read_dat(xx);
  for(i=0,j=0,cnt1=0,cnt2=0;i<N;i++)
  /*初始化计数器变量,依次取数组中的数进行统计*/
  {
  if(xx[i]%2!=0) /*如果是奇数*/
  cnt1++; /*统计数组xx中奇数的个数cnt1*/
  else /*如果是偶数*/
  cnt2++; /*统计偶数的个数cnt2*/
  if(i%2==0) /*如果下标是偶数*/
  {
  j+=xx[i]; /*求数组xx中下标为偶数的元素值的总和*/
  k++; /*统计下标为偶数的元素的个数,以进一步求平均值*/
  }
  }
  pj=(float)(j*100/k)/100; /*求数组xx下标为偶数的元素值的算术平均值pj*/
  printf("\n\ncnt1=%d,cnt2=%d,pj=%6.2f\n",cnt1,cnt2,pj);
  fprintf(fw,"%d\n%d\n%6.2f\n",cnt1,cnt2,pj);
  fclose(fw);
  }
  【解析】根据题意,要编写的代码要具有分别统计奇偶数的个数,以及求偶数的算术平均值的功能。首先可以通过一个for循环依次取得数组中的数;然后利用if判断语句区分奇偶数,分别统计个数,并且对下标为偶数的元素求和。最后再求出下标为偶数的的元素值的算术平均值。本题要求对平均值的计算结果保留两位小数。因为运算符"/"在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将结果转换为浮点型,这样就可以实现保留两位小数的目的。

就业数据资源平台