请编制程序,要求:将文件IN91.DAT中的200个整数读入数组xx中,求出数组xx中奇数的个数cnt1和偶数的个数cnt2,以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数),结果cnt1,cnt2,pj输出到out91.dat中。 部

admin2013-03-05  36

问题 请编制程序,要求:将文件IN91.DAT中的200个整数读入数组xx中,求出数组xx中奇数的个数cnt1和偶数的个数cnt2,以及数组xx下标为偶数的元素值的算术平均值pj(保留2位小数),结果cnt1,cnt2,pj输出到out91.dat中。
   部分程序、读函数read_dat(int xx[200])及输出格式已给出。
   试题程序:
   #include<conio.h>
   #include<stdio.h>
   #define N 200
   void read_dat (int xx[N])
   {
      int i,j;
      FILE *fp;
      fp=fopen ("IN91.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;
      clrscr ();
      fw=fopen ("out91.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) /*求出数组XX中奇数的个数cnt1*/ cnt1++; else cnt2++; /*求出数组xx中偶数的个数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); } [解析] 本题考查的知识点如下: (1)运算符“%”的使用。 (2)强制类型转换和小数位数的保留; 一个数除以2取余所得的数为1,则它是奇数,否则是偶数,取余使用运算符“%”。在本题中,要求算术平均值保留两位小数。使用的方法是:将和乘以100除以个数强制类型转换后再除以100。为了保证和有效,我们定义一个长整型变量来记录和。因为个数也为整型,运算符“/”在这里的含义是整除,而我们要保留小数,所以要使用强制类型转换将和乘以100的结果转换为浮点类型,这样就可以实现保留两位小数。使用循环对所有数据进行访问。

解析
转载请注明原文地址:https://kaotiyun.com/show/xl4Z777K
0

最新回复(0)